From a6674aaa3b5e52ec7cfe062105c6f8a9db926ceb Mon Sep 17 00:00:00 2001
From: Brian Canini <canini.16@osu.edu>
Date: Wed, 10 Feb 2021 11:51:04 -0500
Subject: [PATCH] Updating drupal/webform (5.22.0 => 5.24.0)

---
 composer.json                                 |   2 +-
 composer.lock                                 |  16 +-
 vendor/composer/installed.json                |  16 +-
 web/modules/webform/composer.libraries.json   |   4 +-
 .../install/webform.webform.contact.yml       |   3 +-
 .../schema/webform.entity.webform.schema.yml  |   3 +
 .../schema/webform.plugin.variants.schema.yml |   2 +-
 .../webform/css/webform.element.flexbox.css   |  20 +-
 web/modules/webform/css/webform.form.css      |   9 +
 web/modules/webform/css/webform.help.css      |   5 -
 .../webform/css/webform.theme.claro.css       |  14 +-
 .../images/addons/drip_webform_handler.png    | 132 +++++++++
 web/modules/webform/images/addons/lwm.svg     |   1 +
 .../addons/mailchimp_webform_handler.svg      |   1 +
 .../webform/images/addons/marketo_ma.png      |  29 ++
 .../images/addons/sharpspring_webforms.png    |  72 +++++
 .../addons/vipps_recurring_payments.png       | 237 +++++++++++++++
 .../images/addons/webform_paragraphs.png      |  32 ++
 .../webform/includes/webform.install.inc      |   6 +-
 .../includes/webform.install.requirements.inc |  10 +-
 .../includes/webform.install.update.inc       |   6 +
 .../includes/webform.theme.template.inc       |  38 ++-
 .../webform/includes/webform.translation.inc  |   2 +-
 web/modules/webform/js/webform.admin.js       |   4 +-
 web/modules/webform/js/webform.ajax.js        |  78 +----
 web/modules/webform/js/webform.behaviors.js   |  41 +++
 web/modules/webform/js/webform.dialog.js      |   2 +-
 .../webform/js/webform.element.ajax.js        |   2 +-
 .../webform/js/webform.element.checkboxes.js  |   4 +-
 .../webform/js/webform.element.codemirror.js  |   2 +-
 .../webform/js/webform.element.composite.js   |   2 +-
 .../webform/js/webform.element.computed.js    |   2 +-
 .../webform/js/webform.element.details.js     |   2 +-
 .../js/webform.element.details.save.js        |   8 +-
 .../js/webform.element.details.toggle.js      |   8 +-
 .../js/webform.element.location.places.js     |   2 +-
 .../webform/js/webform.element.multiple.js    |   2 +-
 .../webform/js/webform.element.other.js       |   4 +-
 .../webform/js/webform.element.signature.js   |   4 +-
 .../webform/js/webform.element.states.js      |   6 +-
 .../webform/js/webform.element.tableselect.js |   2 +-
 .../webform/js/webform.element.telephone.js   |  24 +-
 .../js/webform.element.terms_of_service.js    |   2 +-
 .../webform/js/webform.element.time.js        |   5 +
 web/modules/webform/js/webform.filter.js      |   4 +-
 .../webform/js/webform.form.auto_focus.js     |   2 +-
 .../webform/js/webform.form.submit_back.js    |   2 +-
 .../webform/js/webform.form.submit_once.js    |   4 +-
 .../webform/js/webform.form.unsaved.js        |   7 +-
 .../webform/js/webform.jquery.ui.dialog.js    |   2 +-
 web/modules/webform/js/webform.scroll.js      |  92 ++++++
 web/modules/webform/js/webform.states.js      |   5 +-
 .../webform/js/webform.wizard.pages.js        |   8 +-
 .../webform_access/js/webform_access.admin.js |   2 +-
 .../Block/WebformAccessGroupEntityBlock.php   |  21 +-
 .../webform_access/webform_access.info.yml    |   6 +-
 .../src/Element/WebformAttachmentUrl.php      |   7 +-
 .../WebformElement/WebformAttachmentBase.php  |   3 +-
 ...webform.webform.test_attachment_access.yml |   1 +
 .../webform.webform.test_attachment_email.yml |   5 +-
 ...bform.webform.test_attachment_sanitize.yml |   1 +
 ...webform.webform.test_attachment_states.yml |   3 +-
 .../webform.webform.test_attachment_token.yml |   1 +
 .../webform.webform.test_attachment_twig.yml  |   1 +
 .../webform.webform.test_attachment_url.yml   |   1 +
 .../webform_attachment_test.info.yml          |   6 +-
 .../webform_attachment.info.yml               |   6 +-
 .../webform_bootstrap_test_module.info.yml    |   6 +-
 .../webform_bootstrap_test_theme.info.yml     |   6 +-
 .../webform_bootstrap.info.yml                |   6 +-
 .../modules/webform_cards/js/webform_cards.js | 110 ++++---
 .../src/Form/WebformCardsConvertForm.php      |   3 +-
 .../webform.webform.test_cards_access.yml     |   1 +
 .../webform.webform.test_cards_ajax.yml       |   1 +
 ...ebform.webform.test_cards_auto_forward.yml |   1 +
 ...m.webform.test_cards_auto_forward_hide.yml |   1 +
 .../webform.webform.test_cards_draft.yml      |   1 +
 .../webform.webform.test_cards_javascript.yml |  18 +-
 .../webform.webform.test_cards_long_100.yml   |   1 +
 .../webform.webform.test_cards_progress.yml   |   1 +
 ...orm.webform.test_cards_progress_custom.yml |   1 +
 ...form.webform.test_cards_progress_links.yml |   1 +
 .../webform.webform.test_cards_states.yml     |   1 +
 .../webform.webform.test_cards_titles.yml     |   1 +
 .../webform.webform.test_cards_toggle.yml     |   1 +
 ...m.webform.test_cards_validation_errors.yml |   1 +
 .../webform_cards_test.info.yml               |   6 +-
 .../webform_cards/webform_cards.info.yml      |  11 +-
 .../webform_cards/webform_cards.libraries.yml |   1 +
 .../webform_cards/webform_cards.module        |  52 +++-
 .../css/webform_clientside_validation.ife.css |   5 +-
 ...orm.webform.test_clientside_validation.yml |   1 +
 ...ebform_clientside_validation_test.info.yml |   6 +-
 .../webform_clientside_validation.info.yml    |   6 +-
 .../webform.webform.demo_application.yml      |   1 +
 ...rm.webform.demo_application_evaluation.yml |   1 +
 ...bform_demo_application_evaluation.info.yml |   6 +-
 ...ebform.webform.demo_event_registration.yml |   3 +-
 .../webform_demo_event_registration.info.yml  |   6 +-
 .../webform_demo_event_registration.install   |  16 +
 .../webform.webform.webform_group_contact.yml |   3 +-
 .../webform_demo_group.info.yml               |   6 +-
 .../webform.webform.demo_region_contact.yml   |   3 +-
 .../webform_demo_region_contact.info.yml      |   6 +-
 .../webform_devel/webform_devel.info.yml      |   6 +-
 .../webform_editorial.info.yml                |   6 +-
 .../webform.webform.test_entity_print.yml     |   1 +
 ...bform.webform.test_entity_print_custom.yml |   1 +
 .../webform_entity_print_test.info.yml        |   6 +-
 .../webform_entity_print.info.yml             |   6 +-
 .../webform_entity_print.module               |   3 +
 ...m.webform.test_entity_print_attachment.yml |   3 +-
 ...form_entity_print_attachment_test.info.yml |   6 +-
 .../webform_entity_print_attachment.info.yml  |   6 +-
 ...form.webform.webform_example_composite.yml |   1 +
 .../webform_example_composite.info.yml        |   6 +-
 ...rm.webform.webform_example_custom_form.yml |   1 +
 .../webform_example_custom_form.info.yml      |   6 +-
 ...ebform.webform.webform_example_element.yml |   1 +
 .../webform_example_element.info.yml          |   6 +-
 ...ebform_example_element_properties.info.yml |   6 +-
 ...ebform.webform.webform_example_handler.yml |   3 +-
 .../webform_example_handler.info.yml          |   6 +-
 .../webform.webform.example_remote_post.yml   |  13 +-
 .../webform_example_remote_post.info.yml      |   6 +-
 ...ebform.webform_example_variant_ab_test.yml |   7 +-
 ...bform.webform_example_variant_segments.yml |   1 +
 .../webform_example_variant.info.yml          |   6 +-
 ...form.webform.example_computed_elements.yml |   1 +
 ...webform.example_computed_elements_ajax.yml |   7 +-
 ...webform.webform.example_element_states.yml |   1 +
 ...webform.webform.example_flexbox_layout.yml |   1 +
 .../webform.webform.example_input_masks.yml   |   1 +
 .../webform.webform.example_style_guide.yml   |   3 +-
 .../webform.webform.example_wizard.yml        |   1 +
 .../webform.webform.example_cards.yml         |   1 +
 .../webform_examples.info.yml                 |   6 +-
 ...webform.example_accessibility_advanced.yml |   1 +
 ...rm.webform.example_accessibility_basic.yml |   1 +
 ...bform.example_accessibility_containers.yml |   1 +
 ...m.webform.example_accessibility_labels.yml |   1 +
 ...m.webform.example_accessibility_wizard.yml |   1 +
 .../webform_examples_accessibility.info.yml   |   6 +-
 ...bform.webform.test_element_group_roles.yml |   3 +-
 ...form.webform.test_group_element_access.yml |   3 +-
 .../webform_group_test.info.yml               |   6 +-
 .../webform_group/webform_group.info.yml      |  11 +-
 .../js/webform_icheck.element.js              |   4 +-
 .../webform.webform.test_element_icheck.yml   |   1 +
 ...orm.webform.test_element_icheck_styles.yml |   1 +
 .../webform_icheck_test.info.yml              |   6 +-
 .../webform_icheck/webform_icheck.info.yml    |   6 +-
 .../webform_icheck/webform_icheck.module      |   2 +-
 .../js/webform_image_select.element.js        |   6 +-
 .../WebformElement/WebformImageSelect.php     |  18 +-
 ...form.webform.test_element_image_select.yml |   1 +
 .../webform.webform.test_element_images.yml   |   3 +-
 ...lect.webform_image_select_images.bears.yml |  26 +-
 .../webform_image_select_test.info.yml        |   6 +-
 .../WebformImageSelectElementTest.php         |   9 +-
 .../WebformImageSelectImagesTest.php          |  10 +-
 .../webform_image_select.info.yml             |   6 +-
 .../webform.webform.test_element_buttons.yml  |   3 +-
 .../webform_jqueryui_buttons_test.info.yml    |   6 +-
 .../webform_jqueryui_buttons.info.yml         |   6 +-
 ...m.webform.test_element_loc_geocomplete.yml |   3 +-
 ...webform_location_geocomplete_test.info.yml |   6 +-
 .../webform_location_geocomplete.info.yml     |   6 +-
 .../webform_location_geocomplete.module       |   2 +-
 ...m.webform.webform_node_test_multiple_a.yml |   1 +
 ...m.webform.webform_node_test_multiple_b.yml |   1 +
 .../webform_node_test_multiple.info.yml       |   6 +-
 ....webform.webform_node_test_translation.yml |   1 +
 .../webform_node_test_translation.info.yml    |   6 +-
 .../tests/src/Functional/WebformNodeTest.php  |   4 +-
 .../webform_node/webform_node.info.yml        |   6 +-
 ...webform.webform.example_options_custom.yml |   1 +
 .../js/webform_options_custom.element.js      |  12 +-
 .../src/Element/WebformOptionsCustom.php      |   8 +-
 ...ebform.test_element_options_custom_ent.yml |   3 +-
 ...ebform_options_custom_entity_test.info.yml |   6 +-
 ...bform.test_element_options_custom_html.yml |   3 +-
 ...bform.test_element_options_custom_imap.yml |   3 +-
 ...ebform.test_element_options_custom_svg.yml |   3 +-
 ...bform.test_element_options_custom_twig.yml |   3 +-
 .../webform_options_custom_test.info.yml      |   6 +-
 .../webform_options_custom.info.yml           |   8 +-
 .../OptionsLimitWebformHandler.php            |  18 +-
 ...orm.webform.test_handler_boolean_limit.yml |   3 +-
 ...orm.webform.test_handler_options_limit.yml |   5 +
 ...webform.test_handler_options_limit_ent.yml |   3 +-
 ...ebform.test_handler_options_limit_user.yml |   3 +-
 .../webform_options_limit_test.info.yml       |   6 +-
 .../Functional/WebformOptionsLimitTest.php    |   8 +
 .../webform_options_limit.info.yml            |   6 +-
 .../ScheduleEmailWebformHandler.php           |   4 +
 .../src/WebformScheduledEmailManager.php      |   2 +
 ...m.webform.test_handler_scheduled_email.yml |   3 +-
 .../webform_scheduled_email_test.info.yml     |   6 +-
 ...bform.test_handler_scheduled_translate.yml |   3 +-
 ..._scheduled_email_test_translation.info.yml |   6 +-
 .../webform_scheduled_email.info.yml          |   6 +-
 .../webform_share/js/webform_share.admin.js   |   6 +-
 .../src/Controller/WebformShareController.php |  13 +-
 .../webform_share/webform_share.info.yml      |  11 +-
 .../webform_shortcuts/js/webform_shortcuts.js |  14 +-
 .../webform_shortcuts.info.yml                |   6 +-
 ....webform.test_submission_export_import.yml |   1 +
 .../webform_submission_export_import_test.js  |   4 +-
 ...orm_submission_export_import_test.info.yml |   6 +-
 .../webform_submission_export_import.info.yml |   8 +-
 .../webform_submission_log.info.yml           |   6 +-
 .../webform.webform.template_contact.yml      |   3 +-
 ...m.webform.template_employee_evaluation.yml |   1 +
 .../webform.webform.template_feedback.yml     |   3 +-
 .../webform.webform.template_issue.yml        |   1 +
 ...bform.webform.template_job_application.yml |   3 +-
 ...rm.webform.template_job_seeker_profile.yml |   5 +-
 ...m.webform.template_medical_appointment.yml |   3 +-
 .../webform.webform.template_registration.yml |   3 +-
 ...rm.webform.template_session_evaluation.yml |   3 +-
 .../webform.webform.template_subscribe.yml    |   3 +-
 .../webform.webform.template_user_profile.yml |   3 +-
 .../webform_templates.info.yml                |   6 +-
 .../webform.webform.test_element_toggles.yml  |   3 +-
 .../webform_toggles_test.info.yml             |   6 +-
 .../webform_toggles/webform_toggles.info.yml  |   6 +-
 .../modules/webform_ui/js/webform_ui.js       |   8 +-
 .../src/WebformUiEntityElementsForm.php       |   3 +-
 .../src/Functional/WebformUiElementTest.php   |   4 +-
 .../modules/webform_ui/webform_ui.info.yml    |   6 +-
 .../text/example_accessibility_advanced.txt   |  12 +-
 .../text/example_accessibility_basic.txt      |  14 +-
 .../text/example_accessibility_containers.txt |  14 +-
 .../text/example_accessibility_labels.txt     |  14 +-
 .../text/example_accessibility_wizard.txt     |   7 +-
 .../src/Access/WebformAccountAccess.php       |   7 +-
 .../src/Commands/WebformCliService.php        |  14 +-
 .../WebformSanitizeSubmissionsCommands.php    |   4 +-
 .../WebformPluginElementController.php        |   2 +-
 .../WebformPluginExporterController.php       |  42 ++-
 .../WebformPluginHandlerController.php        |  64 +++-
 .../WebformPluginVariantController.php        |  57 +++-
 web/modules/webform/src/Element/Webform.php   |  13 +
 .../src/Element/WebformCompositeBase.php      |   5 +-
 .../src/Element/WebformComputedBase.php       |  12 +-
 .../src/Element/WebformComputedTwig.php       |  10 +
 .../src/Element/WebformElementComposite.php   |   4 +-
 .../src/Element/WebformEntityTrait.php        |   3 +-
 .../webform/src/Element/WebformHeight.php     |  27 +-
 .../webform/src/Element/WebformHtmlEditor.php |   7 +
 .../webform/src/Element/WebformLikert.php     |  18 +-
 .../webform/src/Element/WebformMapping.php    |  11 +-
 .../webform/src/Element/WebformMultiple.php   |   6 +
 .../webform/src/Element/WebformOptions.php    |   4 +-
 .../webform/src/Element/WebformOtherBase.php  |   4 +-
 .../src/Element/WebformTermCheckboxes.php     |   6 +
 .../src/Element/WebformTermReferenceTrait.php |  10 +
 .../webform/src/Element/WebformTermSelect.php |   1 +
 web/modules/webform/src/Entity/Webform.php    | 170 ++++++++---
 .../webform/src/Entity/WebformSubmission.php  |   6 +
 .../WebformEntitySettingsFormForm.php         |   2 +-
 .../WebformEntitySettingsGeneralForm.php      |  24 +-
 .../WebformEntitySettingsSubmissionsForm.php  |  69 +++--
 .../webform/src/Form/WebformAjaxFormTrait.php |  15 +-
 .../src/Form/WebformSubmissionDeleteForm.php  |  16 +-
 .../Form/WebformSubmissionsDeleteFormBase.php |   2 +-
 .../webform/src/Plugin/Block/WebformBlock.php |  28 +-
 .../WebformSubmissionDevelGenerate.php        |   2 +-
 .../WebformSubmissionDevelGenerateTrait.php   |  22 +-
 .../WebformEntityReferenceFormatterBase.php   |  23 +-
 .../WebformEntityReferenceLinkFormatter.php   |   2 +-
 .../WebformEntityReferenceSelectWidget.php    |   2 +-
 .../WebformEntityReferenceWidgetTrait.php     |  12 +-
 .../src/Plugin/WebformElement/Checkboxes.php  |   2 +-
 .../src/Plugin/WebformElement/DateBase.php    |   2 +-
 .../src/Plugin/WebformElement/NumericBase.php |   6 +
 .../src/Plugin/WebformElement/OptionsBase.php |  11 +-
 .../src/Plugin/WebformElement/Table.php       |   6 +-
 .../src/Plugin/WebformElement/Telephone.php   |   3 +
 .../src/Plugin/WebformElement/TextBase.php    |   8 +-
 .../Plugin/WebformElement/TextBaseTrait.php   |   2 +-
 .../src/Plugin/WebformElement/TextFormat.php  |   6 +-
 .../Plugin/WebformElement/VerticalTabs.php    | 154 ++++++++++
 .../src/Plugin/WebformElement/View.php        |   6 +-
 .../WebformElement/WebformCompositeBase.php   |   6 +-
 .../WebformElement/WebformComputedBase.php    |   3 +-
 .../Plugin/WebformElement/WebformElement.php  |   1 +
 .../Plugin/WebformElement/WebformLikert.php   |   9 +-
 .../WebformElement/WebformManagedFileBase.php | 117 +++++---
 .../Plugin/WebformElement/WebformMapping.php  |   6 +-
 .../Plugin/WebformElement/WebformTableRow.php |   4 +-
 .../WebformElement/WebformTermCheckboxes.php  |   1 +
 .../WebformTermReferenceTrait.php             |   5 +
 .../WebformElement/WebformTermSelect.php      |   1 +
 .../src/Plugin/WebformElement/WebformTime.php |   2 +-
 .../Plugin/WebformElement/WebformVariant.php  |   2 +-
 .../webform/src/Plugin/WebformElementBase.php |  30 +-
 .../DelimitedWebformExporter.php              |  11 +-
 .../WebformHandler/EmailWebformHandler.php    |  44 ++-
 .../RemotePostWebformHandler.php              |  25 +-
 .../webform/src/Plugin/WebformHandlerBase.php |  10 +
 .../src/Plugin/WebformHandlerInterface.php    |  20 ++
 .../WebformVariant/OverrideWebformVariant.php |   6 +-
 .../webform/src/Twig/WebformTwigExtension.php |   3 +-
 .../src/Utility/WebformDialogHelper.php       |   2 +-
 .../src/Utility/WebformElementHelper.php      |  40 ++-
 .../src/Utility/WebformOptionsHelper.php      |  30 +-
 .../webform/src/WebformAddonsManager.php      | 130 ++++++++-
 .../webform/src/WebformEmailProvider.php      |   2 +-
 .../webform/src/WebformEntityAddForm.php      |  71 ++++-
 .../src/WebformEntityConditionsManager.php    |  12 +-
 .../src/WebformEntityReferenceManager.php     | 110 ++++++-
 .../webform/src/WebformHelpManager.php        |   2 +-
 .../webform/src/WebformLibrariesManager.php   |  30 +-
 .../WebformSubmissionAccessControlHandler.php |   7 +-
 .../WebformSubmissionConditionsValidator.php  |  15 +-
 .../webform/src/WebformSubmissionForm.php     |  22 +-
 .../webform/src/WebformSubmissionGenerate.php |   4 +-
 .../webform/src/WebformSubmissionStorage.php  |  37 ++-
 .../webform-submission-information.html.twig  |   3 +
 .../install/webform.webform.test_ajax.yml     |   1 +
 ....webform.test_ajax_confirmation_inline.yml |   1 +
 ...webform.test_ajax_confirmation_message.yml |   1 +
 ...m.webform.test_ajax_confirmation_modal.yml |   1 +
 ...rm.webform.test_ajax_confirmation_page.yml |   1 +
 ...orm.webform.test_ajax_confirmation_url.yml |   1 +
 ...webform.test_ajax_confirmation_url_msg.yml |   1 +
 .../webform.webform.test_composite.yml        |   3 +-
 .../webform.webform.test_composite_custom.yml |   3 +-
 ...orm.webform.test_composite_custom_file.yml |   3 +-
 .../webform.webform.test_composite_format.yml |   3 +-
 ...webform.test_composite_format_multiple.yml |   3 +-
 ...bform.webform.test_confirmation_inline.yml |   1 +
 ...form.webform.test_confirmation_message.yml |   1 +
 ...ebform.webform.test_confirmation_modal.yml |   1 +
 ...webform.webform.test_confirmation_none.yml |   1 +
 ...webform.webform.test_confirmation_page.yml |   1 +
 ....webform.test_confirmation_page_custom.yml |   1 +
 .../webform.webform.test_confirmation_url.yml |   1 +
 ....webform.test_confirmation_url_message.yml |   1 +
 .../install/webform.webform.test_element.yml  |   1 +
 .../webform.webform.test_element_access.yml   |   1 +
 .../webform.webform.test_element_actions.yml  |   1 +
 ...m.webform.test_element_actions_buttons.yml |   1 +
 .../webform.webform.test_element_address.yml  |   3 +-
 ...form.webform.test_element_allowed_tags.yml |   1 +
 ...ebform.webform.test_element_attributes.yml |   5 +-
 ...form.webform.test_element_autocomplete.yml |   1 +
 .../webform.webform.test_element_captcha.yml  |   3 +-
 .../webform.webform.test_element_checkbox.yml |   3 +-
 ...rm.webform.test_element_checkbox_value.yml |   3 +-
 ...ebform.webform.test_element_checkboxes.yml |   3 +-
 ...bform.test_element_checkboxes_all_none.yml |   5 +-
 ...ebform.webform.test_element_codemirror.yml |   7 +-
 ...webform.webform.test_element_composite.yml |   3 +-
 ...webform.test_element_composite_wrapper.yml |   3 +-
 ...orm.webform.test_element_computed_ajax.yml |   9 +-
 ...rm.webform.test_element_computed_debug.yml |   1 +
 ...rm.webform.test_element_computed_token.yml |  11 +-
 ...orm.webform.test_element_computed_twig.yml |   1 +
 ...webform.webform.test_element_container.yml |   1 +
 .../webform.webform.test_element_counter.yml  |   5 +-
 .../webform.webform.test_element_date.yml     |   3 +-
 .../webform.webform.test_element_datelist.yml |   3 +-
 .../webform.webform.test_element_datetime.yml |   5 +-
 ...bform.test_element_description_tooltip.yml |  21 +-
 .../webform.webform.test_element_details.yml  |   1 +
 .../webform.webform.test_element_disabled.yml |   1 +
 ...orm.webform.test_element_email_confirm.yml |   3 +-
 ...rm.webform.test_element_email_multiple.yml |   3 +-
 ...bform.test_element_entity_autocomplete.yml |   3 +-
 ....webform.test_element_entity_reference.yml |   3 +-
 ....webform.test_element_excluded_columns.yml |   3 +-
 ...webform.test_element_excluded_elements.yml |   3 +-
 .../webform.webform.test_element_fieldset.yml |   1 +
 .../webform.webform.test_element_flexbox.yml  |  55 ++--
 ...form.webform.test_element_flexbox_flex.yml |   1 +
 .../webform.webform.test_element_format.yml   |  55 ++--
 ...orm.webform.test_element_format_custom.yml |   1 +
 ...m.webform.test_element_format_multiple.yml | 127 ++++----
 ...form.webform.test_element_format_token.yml |  19 +-
 .../webform.webform.test_element_height.yml   |   3 +-
 .../webform.webform.test_element_help.yml     |   1 +
 ...form.webform.test_element_help_display.yml |  75 ++---
 ...m.webform.test_element_horizontal_rule.yml |   3 +-
 ...bform.webform.test_element_html_editor.yml |   3 +-
 ...bform.webform.test_element_html_escape.yml |  39 +--
 ...bform.webform.test_element_html_markup.yml |  39 +--
 ...ebform.test_element_ignored_properties.yml |   1 +
 ...ebform.webform.test_element_image_file.yml |   3 +-
 ...webform.test_element_image_file_attach.yml |   3 +-
 ....webform.test_element_image_resolution.yml |   3 +-
 ...ebform.webform.test_element_input_mask.yml |   3 +-
 .../webform.webform.test_element_invalid.yml  |   1 +
 .../webform.webform.test_element_likert.yml   |   2 +
 ...ebform.webform.test_element_loc_places.yml |   3 +-
 ...form.webform.test_element_managed_file.yml |   1 +
 ....webform.test_element_managed_file_dis.yml |   1 +
 ...webform.test_element_managed_file_help.yml |   3 +-
 ...ebform.test_element_managed_file_limit.yml |   1 +
 ...webform.test_element_managed_file_name.yml |   3 +-
 ...webform.test_element_managed_file_prev.yml |   1 +
 .../webform.webform.test_element_mapping.yml  |   3 +-
 .../webform.webform.test_element_markup.yml   |   1 +
 ...ebform.webform.test_element_media_file.yml |   1 +
 .../webform.webform.test_element_message.yml  |   1 +
 .../webform.webform.test_element_more.yml     |   1 +
 .../webform.webform.test_element_multiple.yml |   3 +-
 ...orm.webform.test_element_multiple_date.yml |   3 +-
 ...webform.test_element_multiple_property.yml |   3 +-
 ...orm.webform.test_element_multiple_text.yml |   3 +-
 .../webform.webform.test_element_options.yml  |   3 +-
 .../webform.webform.test_element_other.yml    |   9 +
 ...bform.webform.test_element_prepopulate.yml |   1 +
 .../webform.webform.test_element_private.yml  |   1 +
 .../webform.webform.test_element_radios.yml   |   3 +-
 .../webform.webform.test_element_range.yml    |   3 +-
 .../webform.webform.test_element_rating.yml   |   3 +-
 .../webform.webform.test_element_readonly.yml |   3 +-
 .../webform.webform.test_element_same.yml     |   3 +-
 .../webform.webform.test_element_scale.yml    |   3 +-
 .../webform.webform.test_element_section.yml  |   1 +
 .../webform.webform.test_element_select.yml   |   5 +-
 ...webform.webform.test_element_signature.yml |   3 +-
 .../webform.webform.test_element_states.yml   |   3 +-
 ....webform.test_element_submission_views.yml |   3 +-
 ...ebform.test_element_submission_views_r.yml |   3 +-
 ...m.webform.test_element_submitted_value.yml |   3 +-
 .../webform.webform.test_element_table.yml    |   3 +-
 ...webform.test_element_table_select_sort.yml |   3 +-
 ...webform.webform.test_element_telephone.yml |   3 +-
 ...rm.webform.test_element_term_reference.yml |  27 +-
 ....webform.test_element_terms_of_service.yml |   1 +
 ...bform.webform.test_element_text_format.yml |   1 +
 .../webform.webform.test_element_time.yml     |   3 +-
 ...orm.webform.test_element_title_display.yml |  55 ++--
 ...bform.webform.test_element_users_roles.yml |   3 +-
 ...ebform.test_element_validate_minlength.yml |   1 +
 ...webform.test_element_validate_multiple.yml |   3 +-
 ....webform.test_element_validate_pattern.yml |   3 +-
 ...webform.test_element_validate_required.yml |   1 +
 ...m.webform.test_element_validate_unique.yml |   1 +
 ...orm.webform.test_element_vertical_tabs.yml | 274 ++++++++++++++++++
 .../webform.webform.test_element_view.yml     |   3 +-
 .../webform.webform.test_example_elements.yml |  39 +--
 ...ebform.test_example_elements_composite.yml |   1 +
 ...webform.test_exporter_entity_reference.yml |   1 +
 .../webform.webform.test_exporter_options.yml |   1 +
 ...ebform.webform.test_form_access_denied.yml |   1 +
 .../install/webform.webform.test_form_api.yml |   1 +
 .../webform.webform.test_form_archived.yml    |   1 +
 .../webform.webform.test_form_assets.yml      |   1 +
 .../webform.webform.test_form_autofill.yml    |   1 +
 .../webform.webform.test_form_autofocus.yml   |   1 +
 .../webform.webform.test_form_closed.yml      |   1 +
 ...webform.webform.test_form_confidential.yml |   1 +
 ...bform.webform.test_form_details_toggle.yml |   1 +
 ...webform.test_form_disable_autocomplete.yml |   1 +
 ...webform.webform.test_form_disable_back.yml |   1 +
 ...ebform.test_form_disable_inline_errors.yml |   1 +
 ...form.webform.test_form_draft_anonymous.yml |   1 +
 ....webform.test_form_draft_authenticated.yml |   1 +
 ...bform.webform.test_form_draft_multiple.yml |   1 +
 ...ebform.webform.test_form_inline_errors.yml |   1 +
 .../webform.webform.test_form_limit.yml       |   1 +
 ...m.webform.test_form_limit_total_unique.yml |   1 +
 ...rm.webform.test_form_limit_user_unique.yml |   1 +
 .../webform.webform.test_form_limit_wait.yml  |   1 +
 .../webform.webform.test_form_long_100.yml    |   1 +
 .../webform.webform.test_form_long_200.yml    |   1 +
 .../webform.webform.test_form_long_300.yml    |   1 +
 .../webform.webform.test_form_novalidate.yml  |   1 +
 .../webform.webform.test_form_opening.yml     |   1 +
 .../webform.webform.test_form_prepopulate.yml |   1 +
 .../webform.webform.test_form_preview.yml     |   1 +
 .../webform.webform.test_form_properties.yml  |   1 +
 .../webform.webform.test_form_remote_addr.yml |   1 +
 .../webform.webform.test_form_required.yml    |   1 +
 .../webform.webform.test_form_reset.yml       |   1 +
 ...orm.webform.test_form_results_disabled.yml |   1 +
 .../webform.webform.test_form_submit_back.yml |   1 +
 .../webform.webform.test_form_submit_once.yml |   1 +
 .../webform.webform.test_form_submit_text.yml |   1 +
 .../webform.webform.test_form_template.yml    |   1 +
 .../webform.webform.test_form_unsaved.yml     |   1 +
 ...bform.webform.test_form_unsaved_wizard.yml |   1 +
 .../webform.webform.test_form_validate.yml    |   1 +
 ...ebform.webform.test_form_wizard_access.yml |   1 +
 ...form.webform.test_form_wizard_advanced.yml |   1 +
 ...webform.webform.test_form_wizard_basic.yml |   1 +
 ...m.webform.test_form_wizard_conditional.yml |   1 +
 ...ebform.webform.test_form_wizard_custom.yml |   1 +
 ...webform.webform.test_form_wizard_links.yml |   1 +
 ...form.webform.test_form_wizard_long_100.yml |   1 +
 ...form.webform.test_form_wizard_long_200.yml |   1 +
 ...form.webform.test_form_wizard_long_300.yml |   1 +
 ...form.webform.test_form_wizard_validate.yml |   3 +-
 ...webform.test_form_wizard_validate_comp.yml |   3 +-
 .../webform.webform.test_handler_action.yml   |   5 +-
 .../webform.webform.test_handler_email.yml    |   3 +-
 ...rm.webform.test_handler_email_advanced.yml |   5 +-
 ...orm.webform.test_handler_email_mapping.yml |   3 +-
 ...bform.webform.test_handler_email_roles.yml |   3 +-
 ...form.webform.test_handler_email_states.yml |   3 +-
 ...ebform.webform.test_handler_email_twig.yml |   5 +-
 .../webform.webform.test_handler_settings.yml |   3 +-
 ...ebform.webform.test_libraries_optional.yml |   1 +
 .../webform.webform.test_rendering.yml        |   3 +-
 ...bform.webform.test_states_autocomplete.yml |   1 +
 ...rm.webform.test_states_client_disabled.yml |  21 +-
 ...m.webform.test_states_client_invisible.yml |  21 +-
 ...rm.webform.test_states_client_required.yml |   3 +-
 ...orm.webform.test_states_client_visible.yml |  21 +-
 .../webform.webform.test_states_crosspage.yml |   1 +
 .../webform.webform.test_states_disabled.yml  |   3 +-
 ...bform.webform.test_states_server_clear.yml |   3 +-
 ...ebform.webform.test_states_server_comp.yml |   1 +
 ....webform.test_states_server_containers.yml |   1 +
 ...form.webform.test_states_server_custom.yml |   1 +
 ...ebform.webform.test_states_server_file.yml | 209 +++++++++++++
 ...form.webform.test_states_server_hidden.yml |   3 +-
 ...form.webform.test_states_server_likert.yml |   1 +
 ...rm.webform.test_states_server_multiple.yml |   1 +
 ...form.webform.test_states_server_nested.yml |   1 +
 ...orm.webform.test_states_server_preview.yml |   1 +
 ...rm.webform.test_states_server_required.yml |   1 +
 ...ebform.webform.test_states_server_save.yml |   3 +-
 ...form.webform.test_states_server_wizard.yml |   3 +-
 .../webform.webform.test_states_to_text.yml   |   7 +-
 .../webform.webform.test_states_triggers.yml  |   1 +
 .../webform.webform.test_submission_label.yml |   1 +
 .../webform.webform.test_submission_log.yml   |   1 +
 .../webform.webform.test_submission_views.yml |   1 +
 .../install/webform.webform.test_token.yml    |   9 +-
 ...webform.webform.test_token_operations.yml} |  17 +-
 ...rm.webform.test_token_submission_value.yml |   1 +
 .../install/webform.webform.test_variant.yml  |   3 +-
 .../webform.webform.test_variant_multiple.yml |  13 +-
 .../webform.webform.test_variant_override.yml |   7 +-
 ...webform.webform.test_variant_randomize.yml |   7 +-
 .../webform_test/webform_test.info.yml        |   6 +-
 .../webform_test_ajax.info.yml                |   6 +-
 .../webform_test_alter_hooks.info.yml         |   6 +-
 .../webform_test_block_context.info.yml       |   6 +-
 .../webform_test_block_custom.info.yml        |   6 +-
 ...bform_test_block_submission_limit.info.yml |   6 +-
 .../webform_test_config_performance.info.yml  |   6 +-
 ....webform.test_element_comp_file_plugin.yml |   3 +-
 ....webform.test_element_composite_plugin.yml |   3 +-
 .../webform.webform.test_element_plugin.yml   |   1 +
 .../webform_test_element.info.yml             |   6 +-
 .../webform_test_element_input_masks.info.yml |   6 +-
 ....view.webform_test_entity_reference_vs.yml |   0
 ...bform.test_element_entity_reference_vs.yml |  35 +--
 ...bform_test_entity_reference_views.info.yml |   6 +-
 .../webform_test_exporter.info.yml            |   6 +-
 ...ebform.webform.test_handler_conditions.yml |   3 +-
 .../webform.webform.test_handler_test.yml     |   3 +-
 .../WebformHandler/TestPurgeHandler.php       |  40 +++
 .../webform_test_handler.info.yml             |   6 +-
 .../webform_test_handler.module               |  20 ++
 ...webform_test_handler_invoke_alter.info.yml |   6 +-
 ...ebform.webform.test_handler_remote_get.yml |  21 +-
 ...bform.webform.test_handler_remote_post.yml |  21 +-
 ....webform.test_handler_remote_post_cast.yml |   7 +-
 ....webform.test_handler_remote_post_file.yml |   5 +-
 ...ebform.webform.test_handler_remote_put.yml |  21 +-
 .../webform_test_handler_remote_post.info.yml |   6 +-
 .../webform_test_markup.info.yml              |   6 +-
 .../webform_test_message_custom.info.yml      |   6 +-
 .../install/webform.webform.test_options.yml  |   1 +
 .../webform_test_options.info.yml             |   6 +-
 .../webform_test_paragraphs.info.yml          |   6 +-
 .../webform_test_rest.info.yml                |   6 +-
 .../webform_test_states.info.yml              |   6 +-
 .../webform.webform.test_submissions.yml      |   1 +
 .../webform_test_submissions.info.yml         |   6 +-
 ...webform_test_third_party_settings.info.yml |   6 +-
 .../es/webform.webform.test_translation.yml   |   8 +-
 .../webform.webform.test_translation.yml      |  24 +-
 .../webform_test_translation.info.yml         |   6 +-
 ...webform_test_translation_lingotek.info.yml |   6 +-
 .../webform_test_validate.info.yml            |   6 +-
 .../webform_test_variant.info.yml             |   6 +-
 .../webform_test_views.info.yml               |   6 +-
 .../webform_test_wizard_custom.info.yml       |   6 +-
 .../WebformCompositeCustomFileTest.php        |  27 +-
 .../WebformElementFormatCustomTest.php        |   8 +-
 .../Element/WebformElementFormatTest.php      |   5 +
 .../Element/WebformElementLikertTest.php      |  11 +-
 .../Element/WebformElementManagedFileTest.php |   8 +-
 .../Element/WebformElementOtherTest.php       |  31 ++
 .../WebformElementPluginDefinitionsTest.php   |  24 +-
 .../WebformElementPluginPropertiesTest.php    |  41 ++-
 .../WebformElementTermReferenceTest.php       |  36 ++-
 .../Element/WebformElementTextFormatTest.php  |   2 +-
 .../WebformElementVerticalTabsTest.php        |  34 +++
 .../Settings/WebformSettingsAutofillTest.php  |   3 +-
 .../WebformSettingsLimitUniqueTest.php        |   6 +
 .../States/WebformStatesManagerTest.php       |   2 +-
 .../States/WebformStatesServerTest.php        |  21 +-
 .../Variant/WebformVariantElementTest.php     |   4 +-
 .../WebformEntityTranslationTest.php          |  79 ++++-
 .../WebformSubmissionTokenOperationsTest.php  | 135 +++++++++
 .../WebformSubmissionTokenUpdateTest.php      | 108 -------
 ...WebformElementCheckboxesJavaScriptTest.php |   9 +
 .../WebformWizardBasicJavaScriptTest.php      |  26 +-
 .../Kernel/WebformSubmissionPurgeApiTest.php  |  75 +++++
 .../Unit/Plugin/Block/WebformBlockTest.php    |   7 +-
 .../webform_test_bartik.info.yml              |   6 +-
 web/modules/webform/webform.api.php           |  20 ++
 web/modules/webform/webform.info.yml          |   6 +-
 web/modules/webform/webform.libraries.yml     |  26 +-
 web/modules/webform/webform.module            |  54 +++-
 web/modules/webform/webform.services.yml      |   2 +-
 web/modules/webform/webform.tokens.inc        |  35 ++-
 617 files changed, 4867 insertions(+), 1719 deletions(-)
 create mode 100644 web/modules/webform/images/addons/drip_webform_handler.png
 create mode 100644 web/modules/webform/images/addons/lwm.svg
 create mode 100644 web/modules/webform/images/addons/mailchimp_webform_handler.svg
 create mode 100644 web/modules/webform/images/addons/marketo_ma.png
 create mode 100644 web/modules/webform/images/addons/sharpspring_webforms.png
 create mode 100644 web/modules/webform/images/addons/vipps_recurring_payments.png
 create mode 100644 web/modules/webform/images/addons/webform_paragraphs.png
 create mode 100644 web/modules/webform/js/webform.behaviors.js
 create mode 100644 web/modules/webform/js/webform.scroll.js
 create mode 100644 web/modules/webform/src/Plugin/WebformElement/VerticalTabs.php
 create mode 100644 web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_vertical_tabs.yml
 create mode 100644 web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_file.yml
 rename web/modules/webform/tests/modules/webform_test/config/install/{webform.webform.test_token_view_update.yml => webform.webform.test_token_operations.yml} (92%)
 rename web/modules/webform/tests/modules/{webform_test_entity_reference => webform_test_entity_reference_views}/config/install/views.view.webform_test_entity_reference_vs.yml (100%)
 rename web/modules/webform/tests/modules/{webform_test_entity_reference => webform_test_entity_reference_views}/config/install/webform.webform.test_element_entity_reference_vs.yml (97%)
 rename web/modules/webform/tests/modules/{webform_test_entity_reference => webform_test_entity_reference_views}/webform_test_entity_reference_views.info.yml (73%)
 create mode 100644 web/modules/webform/tests/modules/webform_test_handler/src/Plugin/WebformHandler/TestPurgeHandler.php
 create mode 100644 web/modules/webform/tests/src/Functional/Element/WebformElementVerticalTabsTest.php
 create mode 100644 web/modules/webform/tests/src/Functional/WebformSubmissionTokenOperationsTest.php
 delete mode 100644 web/modules/webform/tests/src/Functional/WebformSubmissionTokenUpdateTest.php
 create mode 100644 web/modules/webform/tests/src/Kernel/WebformSubmissionPurgeApiTest.php

diff --git a/composer.json b/composer.json
index 0810c2ba0e..2951f098cc 100644
--- a/composer.json
+++ b/composer.json
@@ -187,7 +187,7 @@
         "drupal/views_fieldsets": "3.3",
         "drupal/views_infinite_scroll": "1.7",
         "drupal/views_slideshow": "4.4",
-        "drupal/webform": "5.22",
+        "drupal/webform": "5.24",
         "drupal/webform_views": "5.0-alpha2",
         "drush-ops/behat-drush-endpoint": "0.0.5",
         "drush/drush": "9.7.2",
diff --git a/composer.lock b/composer.lock
index 856262ef93..cbbf052e93 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "160f61336a2e30181b8e05fcfa8f2f6a",
+    "content-hash": "2a64549d50fa07eb94057cf9e7a56c55",
     "packages": [
         {
             "name": "alchemy/zippy",
@@ -8719,17 +8719,17 @@
         },
         {
             "name": "drupal/webform",
-            "version": "5.22.0",
+            "version": "5.24.0",
             "source": {
                 "type": "git",
                 "url": "https://git.drupalcode.org/project/webform.git",
-                "reference": "8.x-5.22"
+                "reference": "8.x-5.24"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://ftp.drupal.org/files/projects/webform-8.x-5.22.zip",
-                "reference": "8.x-5.22",
-                "shasum": "807308bb8c57c3c66c7a839effc558ab2a76c1f5"
+                "url": "https://ftp.drupal.org/files/projects/webform-8.x-5.24.zip",
+                "reference": "8.x-5.24",
+                "shasum": "d7e2d856e840bf7b7ff0b06f80be1f492fe65b7b"
             },
             "require": {
                 "drupal/core": "^8.8"
@@ -8770,8 +8770,8 @@
             "type": "drupal-module",
             "extra": {
                 "drupal": {
-                    "version": "8.x-5.22",
-                    "datestamp": "1601919522",
+                    "version": "8.x-5.24",
+                    "datestamp": "1612453175",
                     "security-coverage": {
                         "status": "covered",
                         "message": "Covered by Drupal's security advisory policy"
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index 368e9081e2..68516d3ec4 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -8992,18 +8992,18 @@
     },
     {
         "name": "drupal/webform",
-        "version": "5.22.0",
-        "version_normalized": "5.22.0.0",
+        "version": "5.24.0",
+        "version_normalized": "5.24.0.0",
         "source": {
             "type": "git",
             "url": "https://git.drupalcode.org/project/webform.git",
-            "reference": "8.x-5.22"
+            "reference": "8.x-5.24"
         },
         "dist": {
             "type": "zip",
-            "url": "https://ftp.drupal.org/files/projects/webform-8.x-5.22.zip",
-            "reference": "8.x-5.22",
-            "shasum": "807308bb8c57c3c66c7a839effc558ab2a76c1f5"
+            "url": "https://ftp.drupal.org/files/projects/webform-8.x-5.24.zip",
+            "reference": "8.x-5.24",
+            "shasum": "d7e2d856e840bf7b7ff0b06f80be1f492fe65b7b"
         },
         "require": {
             "drupal/core": "^8.8"
@@ -9044,8 +9044,8 @@
         "type": "drupal-module",
         "extra": {
             "drupal": {
-                "version": "8.x-5.22",
-                "datestamp": "1601919522",
+                "version": "8.x-5.24",
+                "datestamp": "1612453175",
                 "security-coverage": {
                     "status": "covered",
                     "message": "Covered by Drupal's security advisory policy"
diff --git a/web/modules/webform/composer.libraries.json b/web/modules/webform/composer.libraries.json
index e7fb406dc4..10c2e3c741 100644
--- a/web/modules/webform/composer.libraries.json
+++ b/web/modules/webform/composer.libraries.json
@@ -184,13 +184,13 @@
             "type": "package",
             "package": {
                 "name": "codemirror/codemirror",
-                "version": "5.57.0",
+                "version": "5.53.2",
                 "type": "drupal-library",
                 "extra": {
                     "installer-name": "codemirror"
                 },
                 "dist": {
-                    "url": "https://github.com/components/codemirror/archive/5.57.0.zip",
+                    "url": "https://github.com/components/codemirror/archive/5.53.2.zip",
                     "type": "zip"
                 },
                 "require": {
diff --git a/web/modules/webform/config/install/webform.webform.contact.yml b/web/modules/webform/config/install/webform.webform.contact.yml
index 7f1fb2dc20..884cdf8c79 100644
--- a/web/modules/webform/config/install/webform.webform.contact.yml
+++ b/web/modules/webform/config/install/webform.webform.contact.yml
@@ -40,7 +40,7 @@ elements: |
     '#type': webform_actions
     '#title': 'Submit button(s)'
     '#submit__label': 'Send message'
-
+  
 css: ''
 javascript: ''
 settings:
@@ -170,6 +170,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/config/schema/webform.entity.webform.schema.yml b/web/modules/webform/config/schema/webform.entity.webform.schema.yml
index 20d3cc2bf3..58c40309ff 100644
--- a/web/modules/webform/config/schema/webform.entity.webform.schema.yml
+++ b/web/modules/webform/config/schema/webform.entity.webform.schema.yml
@@ -485,6 +485,9 @@
         token_update:
           type: boolean
           label: 'Allow updating a submission using token'
+        token_delete:
+          type: boolean
+          label: 'Allow deleting a submission using token'
         serial_disabled:
           type: boolean
           label: 'Next submission number disabled'
diff --git a/web/modules/webform/config/schema/webform.plugin.variants.schema.yml b/web/modules/webform/config/schema/webform.plugin.variants.schema.yml
index 0901e20ff0..ebfb21f088 100644
--- a/web/modules/webform/config/schema/webform.plugin.variants.schema.yml
+++ b/web/modules/webform/config/schema/webform.plugin.variants.schema.yml
@@ -10,4 +10,4 @@ webform.variant.override:
   mapping:
     debug:
       label: Debug
-      type: string
+      type: boolean
diff --git a/web/modules/webform/css/webform.element.flexbox.css b/web/modules/webform/css/webform.element.flexbox.css
index 74dee04dfe..aee62020ff 100644
--- a/web/modules/webform/css/webform.element.flexbox.css
+++ b/web/modules/webform/css/webform.element.flexbox.css
@@ -53,39 +53,41 @@
     margin: 0;
   }
 
-  .webform-flex--container > .form-item > input,
+  .webform-flex--container > .form-item > input:not([type="checkbox"]),
   .webform-flex--container > .form-item > select {
     width: 100%;
   }
 
-  .container-inline .webform-flex--container > .form-item > input,
-  .container-inline .webform-flex--container > .form-item > select {
+  .container-inline .webform-flex--container > .form-item > input:not([type="checkbox"]),
+  .container-inline .webform-flex--container > .form-item > select,
+  .webform-flex--container > .form-item.webform-element--title-inline  > input:not([type="checkbox"]),
+  .webform-flex--container > .form-item.webform-element--title-inline  > select {
     width: inherit;
   }
 
-  .webform-flex--container > .webform-has-field-prefix > input,
-  .webform-flex--container > .webform-has-field-suffix > input,
+  .webform-flex--container > .webform-has-field-prefix > input:not([type="checkbox"]),
+  .webform-flex--container > .webform-has-field-suffix > input:not([type="checkbox"]),
   .webform-flex--container > .webform-has-field-prefix > select,
   .webform-flex--container > .webform-has-field-suffix > select {
     width: 85%;
   }
 
-  .webform-flex--container > .webform-has-field-prefix.webform-flex.webform-has-field-suffix > input,
+  .webform-flex--container > .webform-has-field-prefix.webform-flex.webform-has-field-suffix > input:not([type="checkbox"]),
   .webform-flex--container > .webform-has-field-prefix.webform-flex.webform-has-field-suffix > select {
     width: 70%;
   }
 
-  .webform-flex--container > .webform-element-help-container--element > input,
+  .webform-flex--container > .webform-element-help-container--element > input:not([type="checkbox"]),
   .webform-flex--container > .webform-element-help-container--element > select {
     width: 85%;
   }
 
-  .webform-flex--container > .webform-has-field-prefix.webform-element-help-container--element > input,
+  .webform-flex--container > .webform-has-field-prefix.webform-element-help-container--element > input:not([type="checkbox"]),
   .webform-flex--container > .webform-has-field-suffix.webform-element-help-container--element > select {
     width: 70%;
   }
 
-  .webform-flex--container > .webform-has-field-prefix.webform-has-field-suffix.webform-element-help-container--element > input,
+  .webform-flex--container > .webform-has-field-prefix.webform-has-field-suffix.webform-element-help-container--element > input:not([type="checkbox"]),
   .webform-flex--container > .webform-has-field-prefix.webform-has-field-suffix.webform-element-help-container--element > select {
     width: 50%;
   }
diff --git a/web/modules/webform/css/webform.form.css b/web/modules/webform/css/webform.form.css
index fe4c1621f7..6594a928f3 100644
--- a/web/modules/webform/css/webform.form.css
+++ b/web/modules/webform/css/webform.form.css
@@ -101,6 +101,15 @@ html.js .js-webform-visually-hidden[style*="display: none"] {
   display: inline;
 }
 
+/**
+ * Clientside validation errors.
+
+ * @see webform_clientside_validation.ife.css
+ */
+.webform-submission-form strong.error.form-item--error-message {
+  display: block;
+}
+
 /**
  * Readonly inputs. (@see .form-disabled)
  * @see https://www.wufoo.com/html5/attributes/21-readonly.html
diff --git a/web/modules/webform/css/webform.help.css b/web/modules/webform/css/webform.help.css
index 73cd8cd015..0fff44c2cf 100644
--- a/web/modules/webform/css/webform.help.css
+++ b/web/modules/webform/css/webform.help.css
@@ -16,11 +16,6 @@
 /**
  * Help page.
  */
-.webform-help h4 {
-  text-transform: uppercase;
-  font-size: 1em;
-}
-
 .webform-help .button.button--primary {
   width: 100%;
   max-width: 600px;
diff --git a/web/modules/webform/css/webform.theme.claro.css b/web/modules/webform/css/webform.theme.claro.css
index 9605fad438..7ed39c6bcd 100644
--- a/web/modules/webform/css/webform.theme.claro.css
+++ b/web/modules/webform/css/webform.theme.claro.css
@@ -24,13 +24,6 @@
 /* Fields */
 /*****************************************************************************   */
 
-/**
- * Capitalize fieldset to match details.
- */
-.fieldset__label {
-  text-transform: capitalize;
-}
-
 /*****************************************************************************   */
 /* Messages */
 /*****************************************************************************   */
@@ -235,6 +228,13 @@ div.webform-form-filter input.webform-form-filter-text {
   color: #003cc5;
 }
 
+/**
+ * Remove right margin so three inline elements are supported.
+ */
+.form--inline.webform-ui-element-form-inline--input .form-item {
+  margin-right: 0;
+}
+
 /**
  * Make tooltip a little bigger.
  */
diff --git a/web/modules/webform/images/addons/drip_webform_handler.png b/web/modules/webform/images/addons/drip_webform_handler.png
new file mode 100644
index 0000000000..c8e094db0e
--- /dev/null
+++ b/web/modules/webform/images/addons/drip_webform_handler.png
@@ -0,0 +1,132 @@
+�PNG
+
+���
IHDR������������m����	pHYs�������+�� �IDATx�ܽ�eGu'�9O_�z[��Z����x���/d��/b<���� �B�L!	!!�!DX� �&C��$��G2��ð�:��8��,�a^[���z��w��j����?�N�SU�u�Ds����{�ש����%��[ �K�Y�[�Yu�ɗ����W�2���z�T�iK�+�+����S��o]�n_��p��Z�ùV�\���ڥ���Z� ��j�G���B�!3���t���x�m����V~���;�祙sܯ�=��쉼g|z�spoM�U6�ᅹ<~.�9W4S��\�``�]ܹ����W����CD�Š�^
+����k�c���Sƫ��DZ~[ڮ����ۄ�8$Я������T�l1y��O�u��]�v1���X�(���nj�_�w��K�,�Lj	Lbz��w�'��ݭ��O
�+c�
+?Jy*۬B�l깾�,/@���ݎV���>���@��Ym���\V^�ۊoM��~躵��&X?���R]��Z�驰�t�Z;��c���)2�A.$��a)94]�|G\J0�hj��]�N��uzY�W�槪��W���CL�a�+4�G������/'�7�U�6��u�d�h��[�]#-��6�uݭu�Z�����"	ٺ��u�Uvnn�Q���'�{�8��{y�����z8jhQVV[-�"�yF�Ug�s��y�V�s�����tOX�1���y�b�Q(7��'�63#���3���v<�˪˫{a#yƪW�Z�?�r��X��z���{`�:�>��?`0>��h�\�����U���5��tI6��WMvi����̩�U�Z��-a�_=�um=�ȉvQ���>���d��� ��(�:�a族�������n�r2]BMh��=��y��ú/����8xm��U\-F��G
+������jp$��J�@ ��ND��#��JƏl�UAx}-�=4>�ܷ��NV����r�&�������Ĕ�@�����>�*�%�(�����ʫVZ��j
+�30�d�z-ܼ��Ɠ��etd�X�Z��U#@Kq���sn�r�Vu�:n���]�mY	���kL���,�9V�G�V�Xm^9�bke��<�^2j֨��1?3C:j�k3�!����Ӓ�&�B����eJ|�
+�Zp-=7����\����G�C�R�"	˹e>
+���js�Т���\�m�[i���ȈP^��b4�(B���W2
+,Y�$�K
[J�F�D[��\4~���n� pdbJG�|�
"��	Ik�<���X/]3c��Җ&t��/Ҫ��
+����k˲�t�r<=��Bѩ/B���/-xjRVo!xr����rW���4��%o�ݒ�l��W��ř����:@�qTna�b�H
+�*bz�(3Z�ў�.s(�k9Of��o�6JsXz�T�GC&Z�Y�����}�������~�y�~aC	!3�PQW2��|� X��A�P�J�E���/��YƋ���¬y`5&/	��y���:�e�b�pA_�@4���y8z5Aoч�
s���7/]�km�U9{�@�sK]Y�~�_2��H�(\ǰ2!���C�����sk�Fȷ����h�ӳU@-��\+��.�U��ֽ~���_,ۯz�p�O���=#�h�H�0�����4���W�nK��D-��y��Њ�*c�/�Z�����f��6kx�X��I���l�w3(���4i�ij�HQ1�hMߗ��E�Yt���L�8{�-����{U13�:�p�@ɼH�!#>2���W�q�����g�ͥ����FO�͡�(�%h5jm�uu�-��=Ӗ�� ,M�][�d�~�?p����`9�p��|��3_ᴯH+,Ϻ.�,�5�K��y
+�6��ثK����l�z�Z�i�:O;MF2�Hg��/7��-�Skv�8Z�Iک͑�U͏:�UF�۳�5��[��b����L�iL�s2_Lq㏔z���t�d��G����������O��[�,|���p�ڨ�A�8���i��0�Ҳ�����y�k
Y;���r}C��^�0Q|<�|;�wD���js��S��J�.�$�t=f-��g�7l���gY��"�,'+���Z�kiPux��{�oV���
;�t�B���؆�ݾ��{�O:ݢ;o.�q�����_��<:�iV�^^�l"�	t>�\L���!��pX3
i��&>��7�LӔ���7 �Ӭo�����p��Q��&[q��z�&=|�%�)����+
�3�0���~)����G���xR���.C8IlDCӟ���R�ϒp��zR�{4����+/�y`�=��[�^>+�_�/1P�[3 4��{�laK��nn�*L�&gJ�b�9}������W��^�7OIY�,k�4s�����0yg1	�QN̛��o�oF�s�l�͒�%<j�|gK�-��p��--��Y��V��}�ݬ6���Y0.�V�
��
&�“�o�aJb�����W�%�����\w���39.5��#�gDh�))�����z<����gPy�V�Z~���� P���Ē��l�7z
+2�{���0ʕ��bX�JP�
}_2�[p��z"n2H�0b�
+-��<5OTp,�Ʊen-~r�R*_J/���-���	]�zV�5������\ae54��\�W����3��3�P�<�VZ�Q؈� �b>��W0��6�MXH��_ȚeaYG�wV�u�5,h�6�vu�+�ջk!^���h�Gݏ���Z�~I8�'!��5�,��[�Y[����E�X�<�&˷*q�s�Y�[��߁�:�1�u�X~X���y�<Xy��h)SjW:-�T�W�:o%�ZpѴ�J+^�fy�Ӱ,3�#��lQ(g��ج6�1�6_��e'�A�٭X@��$	)�F����6��y���j)��%��������]��Z�5~%��ĻS�z=��KP�m�KRZ@rJI���L�Vx9<���P���ǃs��$j�5X
+Л���(����&��(�\��r|] <3�������К7-�G��p�3o����;��[d���E�Y��*Y��G�ٶPN�/�l�U�����x�!=�d���4.�xt������株����y�",,��T�o>d:��V��;�ؼ���%�߂WK�-�^����30Ϣ�̐�� �6�qT�KO���Ay�`�Ci�o�yɫ�Gm�!���v���k��k _���)�c�Ʌ��-j㧥�PVף�j��!5@�y��h�S|V����^��&�,�ԫgۯ��|�nc!7�XG�H�N
+y<O����%'�I����֯������
�5�"$�X����.�f�o�G{�_-��N�K�1s�((	Z+o&H��w����ϤgҼX�خ�]S&�^�U֣���g
ݺ�2�;���ki�����,㙈�����ص(�s���ZƵf�X��گR;���gV=��]2ޓv�Nzޜ��4]��<��~�k��7�7����|�(�}�pb=H_�.Dx���X����n_/�xZ-N=n��_�#�Yǭ��*/����q�1.��%�nY��7[�-�%�*�+D�$=yJm4~T�Rxp1,�zz.%�H�f���7MK�1�=k���[K�~=\���zy/�L�)��:���i�(G�����6K���@N�-u�*�ژ�{��Z=�ֶ�u�6��Ւn��j�DPs�����f�
`�@�AI��\ǘ<����!@(3��m*������7�
`���xy����)+O!��T�e�XxxTk����	�Y�1`�i��᫙?���d�P���x�p����\yeju���K�����J�<A����>��_��
'��3N����I���5��< ψ�pn�+
����2%~����ڶU��ܗ�rK]�ү	���m)4����F�@��݌��3�`��
��&C��NI��E
+��֦�SBcY *��L�	]a�[#�"���ڰ���o�=ג���<�T������z^�BkV������u�OBa��i��:�����[�����Ro�"Z�2&J��4�[w��v0~���F��Z����>?����_��kyݢ�Z�������g�jX���ҟ��iY�ڽ�P���V5��)�γv5�?
r����!���?K�$vF��k�n���������5&ԔL��Sl5E�|�]cF�s�u���v$��WW����yj��޷���w�ߐa�����'k�u����xn����ђG��r��|�p��j����tw���?�- �Ɠ:ED�@8�g��~
3?s�^�%���c-i-O���[�cm0�Q����g�J<�y�-��H#{��V-�bEd��U�O����Jim~���~�H��~�#�X�|����LV���%���~տ�[w��U@���(�D�*Y��:u>/t���%ͻ�h�=x孶���e�����y��2� C_�n�[�ke����=��E{ޓ�R�Ն3Mk�qd��%=��9.����[w������W�>j�<�\//�����·f<Z�iI��h��ֵe�x��4ݾ�
K>z�^��Mz�b92ЙTC:���	������o��d7Ӹ�+�;����Y>	��Ǘ�����݉~��*�e�a-\�3���1��Z���o^�<�<��`AI�1j1<���Qb�Z��1xK�a�B'��=������F0�j2ґ��[L�Pj��f��	h�ע��Z���{���V?Z��dI�m���u��G������L��VS
+V���`�CMYY�[x��[�Y��4���$T��C���"Z9����q�⯀��L�x�����t-�@[��f�N~���&�����66$���~Y},5��"��ƿ.�]��������y���|�ҫ1���YZ�%�aovF�E��P���y�]�kk��x�ӭzJ�%��Fs�~�v=!����|n	�|5>�)d�tk�j�x�XJM���{��_��VO�d�{`�+O-]�&�2��`��/
+8f~>��`O�"Z��J�F��������۶[wg��.1})��%����7lp������np�F�7�lI�qk�P�_�z��6o5�xX���9�O��p��a`�{�	�IH[�U��o�&�p�+9K�������+�/��C�:_�P,��w�=�Z�Vz	Z����%9)�K�x�P�7�W�xzuh�uY��ZyݫW�0W)�:���Dw�dU�<�~�?�@��q�:�4�t��B�荨�~��o]��Ozmv�nx��� �nI)c�2��tr�����ߺYm.S}���Hk�B>�(#Y�'�u۲LIɵz����cӈ2Ҽz����4Ѣ>
@N���T��z�!P�C���)V�R+�w��^�|ɠ��/�kI/�����L�s�-�qOI���K��^��rkM��CY�eue��fs���p�\K��f$�m>ҟ���僺
�gw�[cxi�d�Í��K�Ԕ��ø�G�Uo}J�.�L��υ��̜:k�k�s�
+����2\��QI�
�G(k����%:,��S
s
��~�-��%/C��m��Dk}�0���`�r=�ce�T%�гZ,Ki�pѻ\
L����b�0�i��܆u�����n�G|��/��ݐ�lfr�N);�fw
3�k<���b��yCy������3}����q���<:;[��k	-mٸ�ݷ�4yZI\��^F��	ՈgK�ju費��
Ԣ��wM?WeJ�x};[�����e^���ɗs9/O���Izl���=K��U�`�M�^*�����<�D��d���wU42m�\/�0�=���t�W�ĥ2�[8�@�_ID����j3'\h	�9�H��.�X�Jyu�%AU��JQΖQ�F1h���%��nFZKvU�o�d�g۷��]��s��ɝ�B>W��e\���ٔ?[��Qy�M<�j����������=`�H���L�8���__�T8��b�^�p3�G��p�2���_q����\9�-�_����Z���t����ʶ�ւ�L�	���˧��dd^�88 А<�Y�B���F�n���u���b�/��k�)�yE�s�.=��L���tD�oH��.��v���Э��ю�C�ޭ�u��_���m�7&���,�2�����@VK�Y��j��	k����V����ki��{
W��5(֟�,��T$�gߊ�����y���S
?����s��kP���1��d��w��a��	m��0�o�I&^��–0َkU�%��%+V�e��n���B��5�����7���o�
�����%*�)u��ۯ���Ķx/�ڊe{󠍌Z=,��S���l�G�)����0p���х��8���֊�� �>I�G<
+�!�N8)�lQ�%��$�i�ɏ�Z4.Ö�gg!����G�_%����*ۚn���/��ZV�^+Bp6�!�����V]�̉i�o�7���p3�8]���p���^H�M��-�ǘ�	"z�#�~� �	��~@?�r���P2ν�Z�[�����Y�2��31x�@_���ss=Ãq=��x��;���!T�����H����	�v�i��$��֩���o�?']�EDY��2<��~1�$���1���&�X�z�\���#�f��U�����0�v��ëu�㯦�mP�\��ܤQ4Ѝ7^�і��W}@�7�&�`�2^U�qe��5x?4N�G�>�f�96Gƌ�J�?MDO��q��O�E�B(#)�'�W��d�����F><�i��Ƴ�tM���>IS ��cL|,��1��z�_������<ڭ�SVG��Ϭ1���,/����%XkD��Ҽ6u~�޲�kV�.W���Z~n~�9f�2�����_��X�p
��	��p1�r�5��	R�B��ӯ0��
+8�`|��_�n=*�Ncѯ���9�0~TƤ����pO�?����s�ְ���>]�Q��egc*f=׊I�+w&�	F�,�ċ�o1�//�qd�C�n\��O�2F���O%���Ja>��� �ܭ;�x
`�[��/�iw�$9�ָ�<�w��w���a|5�*�8��%"��F�_�!��_�r��|�
+�10�KD���&Ѓ����X�l�o3��(u�ֳp�b�{V��V�R<�T�2ky�[�j�B�s�*�����e�Ԕ��d��n����R?�|�%a� h�I��ݬ��i�	M^��4o�C�q�ӫ<���~�G �k�Z������W�=��%|��DD��T��"��OC멧�i�'!��tQ�����+#ґ�GfK�	O�f��d�`��K��H�o��-*��ky9m�ږs����a�{`y�zޒ�Aq���7��$���/f�K�������}���|�)�$���xB�OL��(����g�w6�ͧ��n��}^�<}ʕ�#DYӘ���G#幢s��.�^�[��[�x�h�{��̚\��<�+��`1��^�̯p��f�����?
��;W�pNB(�[J<�p=�K�:��pW����7E����-&���]���o%Xo7V����“q@:&-aI���?�?�W��O2z�2T7͵�s��e8�X���|Ze�D#d�HGqD���
�X���������W�qabp9�J^s���M6�Aѓ��b?�3L2`���	�|&���U�G����ǚ������ʼ�Z	�<\벺����$~�O)Ī����FK��VO��Ii�=/v����R�~��"��*�kBI�"�>��S_g�B�R%S�(��QWv���p=��%�;�U�^�w�g��1�s�Љ��+ߑ�8�P���2%?�9��S}CQ~�5���U*�ln�P���_OH^xG:�7뤠d��L��w
+��{�����у��_{nV��{u��a=1ֆ:}���ج6�����hj>?t �T���O�&$���\ch��VbX0-@x��o�W��X��N�,�=��-���[Ӥֽ$H-���Z�Km�t#>��B^B�|^�w����������-����a���������1l�1]C��Q�H�'�W�W�(��><+���k�0�a�p�I�� ��1�|�fsu��� �IDAT�h�2��M&�Œ�L�������?%*{%�e�1e�;&k��$sD��8^�B�v%Q���W�QP0��1�6��'�}����x$�E��ۚ+����`����_���Z}�@�a�H�����M�Ԋn,�e��L-G�<SX~TZ�K��t���_lV�_�W��эPm�L-��5�RoM�71~#�<�R�W�V^>+��{-F��]+��؆<E�n\c�,���'�V�"���U�%c��r���Py�w̤����(da��_����~�[�y��]g�Wf�������-�c^2#mK��Ĝ(k[*�E�mZi�M�Z��}��ʱf�٠i�
+E��K
sj�q��)�G��
?�C:�%�W�!f~����"S�b^��@��4n#B�#�o��5f7�6���1��@���js�81�U�²�=���ג�J�<#	Z)y�T��V%�-�B�ڋ��xϭ6t9w/���ay�թ�;96�~��W�o2��Ƌ�iO6c
+�18Z}6�4���g:���ý\��U
+j% t8���3��?��߄-�:�����cܼd��5��1Q���Lz���ܴeP\�/�מ�>�%���x��*>�YW&�Er�hT%�֗�ƶ�����(ɵD�$!���J���1���&��_FQ���R�	�7��@���E��I|�sͳR�g��)_��P^���%�r��� �o�q�f�9������f~O�ƠK�O���5K���Z�H����RVZAXJ�j7�yh�_���_�`��p��������p	A�4azaR!��j�ARghGXyI�:��S!��!Ì� ��e��\��`�Y��F)��^�AA����4ͣ�ƭ~ǰ(&�B�i��Ww�@�a����`"�E^v��ehH�����5���,�h���Z�d�y�АP���dG'��%�E��ط~�_0��W�qV�� �7ҹ����4\l�@�[I'"�Zw��s�G�{ �
+�����.N[���W�y��9aKM�Vy��Pcm}J��
+V�[+E/�����8j��[�N��Y�5T+��o��?�����Wk�ݴxU��2��Ѣ7�.��ےB<�+�2����V5����<_�,���}H�7�$$%v�����Y4f"��6�ƃ�����t<eI~��1��Zk�a��7��:Ę%�1��V�4�I_�%[�
��kF�y��_Ⱦ��R�M��t#�*L<��/�����&�Y<�bLD�3��8�:�:���X�g��t/oy���� |��_�Ym�F�8.<�'�䖐��iX�RC�ͬ�ъsny��|���[�H�7\{�z,k
+�Զ.S����a�� �'��o�/����9҃�L�m��4�0F�Rֿ�/�Gԗ�c��Y�1���O2�&�Y$�� iy�z�z��JBR��}�~�����5�L6V�^��B�b��_�(C�W�i�6�a����\'��y��<c�e��h���̨���ݨ�ҭ�\�i�$���'���:��Y�&}'m&�k��&�#�&K�ƑEOFY�oI�$
(�r�<�'�-�~/O���’ՙ�oy�'���k�MK���%��j�f%k�<Q�E�ϵB�
+����SK9�(���_�G���~��$Sʰ[e�ɝz�p�By�Şl�ɼa�갇f��!�`َ��	t3�ZPr2�C�z[�a�&ֻ-��WR�E�E���'���4��R�q����n�u�8v�n�d��E�N�F#Li�S�^����
�;II�>��ax!c���up��iQ�C�%�c�Q���o���q���E=b�Pέ�	�>����C�&�H�)�_�w�J�O�p9� M�� �=ܬ6�N���"�
+���x�k�\Ԗr%��o�K��tϋ��Z�N�n��Y0������p;������.�E���Z�����{^�Iꔖ�j?[ԗ�*K@�U����]�~�_��W&��8��ʭ�^���Ԍ6$V�!����{�5��v�Jf�al+QXA�y�ɺ�|����?s)��c?(U�2l�s��o�a��_zn)�<���B����6���1l&��$�� ��)3�K���P��7i�&�,���B>�I3�-n{�^K����W	�y�^�q/+�ķ��\LDOg�-�l��?��'�dk�=K�$�lV���������������B��G�)��y��/b��}�f�����!�X���Pe�|K]^���f�9J��1��٩�:&��|Y6(:�� �ݱ~��Q��+ߑ��%�r
�#i(������A�������2H�S}�n���E�� �\(��]a��v���;�D�Y/��yN�
+�ꝯ:��6���*�Z�6�?1�;�����oI�c%7J�������:����2�P�«�ߴ�!��h+*u9Nɚ���7x�e9�<ؠ�}���M�X�M �_�oTRA/��0���_�W0��z���i���΀�x����ݺ�g'̷��?��W��^谜,���W�G0s�i�EY���U9�73�yDt>��&;C��7������uw�f뽥̭�,������js�@g���`�
��KBA���0� ��>*�SDt4|���#�K�3xV�1�|&>�1�f�"̣_<�}
+L��x7�?�c�ѿP��D�^~�����X��(R��
+1F��^�s'�g�K5%疼�~�9=�{����ZB��|�Q�%���ۓ
+ܠ�9�6%��h0�+~���	�d)l�
+-_e,H�=������01���x��
�����1�ƅDt	����(��@�i�~'�h/Y:�-����&Nm�7oZ_�����y�>�S����_f�;	<(=�{ c�Mz�f�y���Q�<,6��E�n'�5��$�
+&?�L�QݸYm^�\/O���u�l��U��̯e���K��l�1^��6���i8=^�+n	�֬�V�����[��A2~$>a]%I�0��E�62������� <�÷�N��gԧR��;ɀ=b:��w \ƕ��IDW8jyPکe�1���de��MB_f�P.a,�-�y��0N"�8���<�3 <fyӖG�	~i>H���/e�Xz!M
+_=f�Gi�'�<3���4F!��v'R+�P��T�%�<4��S��s&���d�����-ݍ!�t��N)YU��@�t��.�l0�1�2�����-�S�CL}��G�c��������_��6*:f�k�]C��{��z1�%!�YJ,���#����C
+��~�����\�X�Š�70���C�/o�7?�<�|�ꋺ�c���,�� ���� ���g�2��W�F�)mر�`Jco�fJ�Y^��-��JJ�h�-X
+O���2�g"�{@�4�/8���x�"���q,�`��������������"�F�lY�J�95�H�aU�f�5[�k9�2nL�x�kG��~����A����
+����dkmR�k���fc�tR>ַ������
+Yұ^#"%?�!l�d��g*y˚��w�g�KӖ.�G�7o|�@�d��	��L�ɇ��}r������=����?��/��P���We@��LN��������3w�3t�CXk�g	�i�%��r*O����e�[m���0��
+�j3�[�w�gj]΅�;}:ZQ$֡bp��-�_L�/�(���DX�w��\Ɨi�(cdDVL,p��M�}��=� ��@d���j�Ѻ<@��x#���F�V���!r,���m�%�v���Ŏ}�����"��}��	%�G�{�r���x���\���O�Ky�y��<_@��0~���Ӆtq�W�Ә�p$�%�$amAoQ�I�����}�b�	tB��S9o��@����%&��@J]�02�f�+?���υ����p�@�y���@X8;���:Î��2�tK�P7�:�!@���0�e�k�xը��u.}�����-Y_
+��]x#���)�_u�Rρ|^�B��U�>���5�l.��o�Ϻ���@����Dw�{K�����vd��Pt�oEf���v�^���ݗ�<�@���0���"<�44�ؗ)M�4��qP��$�M^KK����TNzA�8?����H�aU����p�[�:K�K���?�%�8	�ړ|���[�!���,���d�&B���4]�Ȁ��P.�;F����D��޼\/O4�]m������;,��m���w�M���[���Ei��~�	�����iQ���c����BD���g��H�[B�SNޠ`�ga���{�A��IIxA-P��9�3��iX/���Ym~	�/�BAӽ L너�.�%��F��BR�4�M6�b����~0.�qr n@��!�0(��_y-��JLD��[w���ݣ�&�&�l�ɹ�m��Э���3�9�!���jRO-y�d���%[3h�ߺ7!��̉n{44���Q���%��`o�&���%�M���/�\E�xx�3��m����<�N����0g�oZ����ٖ�����e��YFq��J}�xL]K	K?\���#1�#��p:����&���o�����]�n���V_��I�����h�L��c����r���b�k���\��M�(^\��/-d�KT�*4K�k	��Za���{������t�ȷ��Q���~�/v�nm����Z��`�տ�]����u�9���aN�>�����L�3���@���O�+�D���<
+犇���/O�Z�\���E�j�XmnكԃJ@�bË��!`֛���\	~��oR�?QΘ�'	�N�p�^޳\/Kr���[��!�7O~d�x�� #^�a�.��zބ�
��*�-�x�fsY	y�?���W%�$\Fi�'n��;v��c�%��`�Yc���\�~�e�76x{�R��&�ܞ�����qae�p�|OkT��B�ס��F��D�U3�
��ɢ�OZNch7�1�&��6��n�}Έ��BO%�����ZW��\��r�|��op33?:t���[����@�R�X�>I�x[��T�տl��K>Wu��7�ړk�5�ZR����/�G�&�Nϛ��Y8ԞO�1��|#ef�f�m�9��oJ:��_�����2�/���#�;
�<����#�/Ow��~�@ߏ}_��g�"��d�0>GA�E�%����&F�r$A��(1�:�%��=���U��
+�c�L���c��ЮX�������a1ё�#�p�D
+�N�����uM�[ގ5W�\B��)�o$Х�P��
+���N��f���q�^���q��R=fDA�9Go���Fր���`R�<\ �5��ɓ�'03\-H�B��X����ZHТ9�����O��@���x$0}�E��FP;
�C󳽸�w��CR�I�K䏲KГ������z�g°Ԋ�4�[�����2���=r��qw�QOz�r�E��I�����|��k��AZ���1(F`YI���fk�,-nf�������-�����1V���Ȣɰ2����e�=b�	�-�K��U	��2MGk{8�w7<�7Dt�r�|��C-Ԥ-ɚ��S�	����ݝ~)�LhR�hakE%���F"�z�|
+��I5<���b+Јc\Bb)kaUZ�!h)憾jeK�ll㹢���S.��
kc�Zl�o6^<�ܛ�xuZ႒�P���(�O0�K���=j��Px#N]s�2�����0���**���T����o�C��ܯz��$"ci���f�I�1�%k_��
���dw��4�Bm�O,ϓWf��	d���o�F��u��!��ʾ���Y�{tû[ZF�yK�/)3n�����0X��&�;2(Q���#�[�u׫vk�(��ԧ�Uz���z�=f~!��V��`�5�����1��B����R�D�F��'œE�&"�>���(W�/�#���p�t��5�zO�'�F�l��of�8ބ��$~bdbX�3������������)��c��͚эn�=�5 |_�[�8�q�s%��2���5��)u����D�ݐ��(~a'L�3k����<�3�!4I���I�p������Um��t2�je�8L��V���
}�Bq%O�
+���K���#O-�PҞ�2<�����7v�����5)��qy|y?����'Z)���̀�F����+�Y�)�c:�2��&�x�e�u�[��2�*�EО�T���)�i�=V�y�ғ�mHe�(I8fL���0�kd���FU	��:3`�r�	�y����H�n�z��A~�
+�[UR+�N�U_r�W�}���b�w=�A�9�*4�>Q�ó�1(�;M���,�fr-�q�,Š`Cܟ�e��R�[i�OQ.F��`L&�U�K)��˜p�r�|���\Cm���|�E�M���V��;�p	��	��4�����CU8D[�RcHY�%JZ�kF�޳Zz����^��d�N��<
+@9
�[!J���Ư	��6�VoI�2�7�cE���>��Ɲ��F��e.K��:�1�ؗ�����C�KFL�l�T&I�8�ڿ��K�k�&��[�w0�p����D�J�1�w��zkO��Zi�HYx���¸
��.��Y����BL�ז�)'��q&�c<���P�_o,�k+��|������HD��[��((����[w�Ï���l
+wv�n���#�/��
+!�k5V2T	�R��#ne������z�h�6��k�JyZ�h:O"H���'�<�m��t�js��~�N���G��gR�Mw�^��a��\��k�|7�}��L_�N�X;N�M͟܅*�0�_
|���+����(�3��a-�����Ֆ@��xB��ی0v�V���B
�Rףp?V����!�8�
n�c��Zc��3y�["z;!*�V�c����ˢ��JK�z��H��!�������~����	�,��\/Ox�s*^iP0���i�8�.��
+�վ%!f�J�T�M��,K|�L�{k�w����I�#�ak�,�K&r��<�Bï�E�ixD����M�":v��vǻ��iK���Z�X�t��m�}��N�pKp��<��v2V��&}���6���:�X���p��3�6V�#14i[��h��?�����I;��?$��D�X�ભ����(��E��~�����r�w0��SNN��`G\����ҺO5��& +�v����Fy�K�Z����Я������=�噵%��@_��S�2�5o�6���q|��������aʈ�T���>%�m���1�9�~��) �d�(&�_{��SI�˴��&��-�k
+HL{bFe���0\�R���9.[�2!�F�x�9��a~?��B���X4��{F�5ֿ?�,��[w�Ĩ�����0ց߄Ǿ"�3BV����v���~��>�dr�#�Pw>	���nݝFN̺m����HD�'
+
9s�������_wb���)�o"�Ѱ2bhC�	�$�>��7���J��[Mh�yD��!�|f�V[��W�(����r���i7҅���Y���d�Z¸T_�Y5m��2�x�oy�<�	�>�4�xZA���	=6ی�Єk�/Q©SL�!&k�[�ãOyX�b�!
+GŤV�"�܂A�sM�'��9��8�zEx2���XQB�	��	�)yK��G�ZA{t����_7�r����� Y�ϔ��;m�+��ś�fOwă�����������N��S��$�K|��VKx��0��m���@�p"Z@B،L~����?խ�;��k2�A���z�3�[A���tJ��
�b�0(ӷ.�Ko����,"���JD3ڳt,ދ�����@
�p��?X�[�&^
���uZ�.���׆�9�gDt��à ���p1�K�ʈ�x��)	��L�eV\�zUA*?�G�6=��x��AKz�����u��6}�ם�i���P��o2$�E���%Ɨ�����{�8�і�G�-��<oI��5n`��`e���� �IDATD��z]2�\K�����ꠌV�6�ͷA��@�c���	��|7���Ǘ�bknK�y�_�o�?��~�E��:����; <l(6�v��b�b�W�U'3?���
���>>2��."�_�&���VҞ�oգq5��xr�O�02��
+�ȽwQ`�Va�+����Y�ޘh���gZPo1n�W�g��
 \��&�Qn˧����g�N��g/=�f��d�S�K�-��F��������e���h͒S1O��a�����x���?~�isM�N�v�)l���`�����7�<:)�Z»f���5:�����u�{}�_pP�'9v�yS�1�b�Op���w�@D=��0�[�~���'����O0o"�:��-c�Qy}C=O�cJ����:�īd9%e|���-��l�M	ްV�?	�v���۶�{���;��]�s���8�+�^�j]%Y㒡Y_����W��q��(��W���ZyN{��4�$������}g��^n�
+*�E���ˌ�o:4���
+=�iye���߬��d��7ޜz��ʧR^�@w�{�����<i�E��X2� ����w,�A#�5���!�u�E�ya�Z���:���"f��e9���𔿖�Wj�j_3�1.�
�^�p饧"��=��p��3`�u���yJu�ڕ�[+y>z���@�$[��F2���~�0��!'�����)��\���y�g�'�vF(��sȯ�ky1ǫ��j5!{�e���#� �����O�(.
+hs��X/����8�t������U�7 WP����bѪ�׺��V�eϰ�>��#H�7�~|EF��>���~���,��,�m
�7x���'��Z;�W3|M�[��{��b�����]e���*��B7�8�62�G�%�S+S�o1M)����D,�L׹�����n`d���PoT��X��eѹE��2w�����ΕGߠ��қ�V��ݚS�w�(*�>��}6T黍z�`캴�UUr��Z���|��� |C��$�J�,�����=o'��uy=wY��<���G�:ymL�>#v�^`��<���MdU�:�U�5(�vZ�T��=�b�p�VL��#hKJ���<�W=����j�A�e����~���G��v�Y�%z��Ky�񵔿��V'���@w0(z#$�%�!�x�<(�4L:5��K�y���"P2�J���+��Y`i�R+)>�m4֤���Ԋ�@x�pr�0�8�����'�u[��@��{��Ԓ�sxS���o^��~w�!����&�X�xk�{1�0�ђ��&ٺ�@+
+��-���<+A�/���[�^~�`t�OA��h�nc;Z�Wh�]��$��aޝ㝞;o�<�<��'�JLe�m���L���4�%,�4ٖzXo	 �4Kơ�wq���ec���K%<[��AגO�[c]�V��O7����KfH0̟8VMxZ�gc���(�[.Ef����W�Z������}��L�a������/���gd<f�����9}�����kII��5`�`yJ�b"��J�T�|�/7o�,�,|�g%bH�>��.�/+K�1��#�&x����(��RR��X�2V-���-����6���`��@賝���7�O���J�K��������\��lx>g�V�'�=���l�{|���Ç���r–a]0������\dc.�M�G��(:a���G����5E���<+��C,}ˏ�_�=la���`L��sG�_Kh/ԽVz��o�o�J�ȫ_�[���Y�[
+���0�s���d&���?�m��,������<�+��U9�-�����,)3��!Ѓ��$�+�k����/��l�u���>�����%mRj�0_{U�Q�o���
+Zp�q&d��6
�1-��V> ۃ�X�uP�o���p��SL�}��ͻ��\�m�-��FK����=��U����d�[x���=/��9_2��%���5˱�O�Uí��J�YJ�U1j�\#�5�'c��"�ݢ0>�|�n�}������R^%�u���g��u�3?�7(�����L�(,v�}�v�o�1��x)8م�vZ�p=V�_O���u}%c3�3١(�$q��]��s2�����P������]�y����o��ah��K��}s���z�d@D�����HYeF%ľ������%�[�>���iA9���u�@SY��Ҷ;�Z�֔�n/������m^�m"�/�-�4Bp�g�w�3n5Z��Rۥ�^~=�M�����w�ċ�拼C�Z���W�N2	�Qm��A�����u:�]ypW�(�UK[)�OV�v��!B��P�1���.�FY��p
+긪R{3���U���ڳ��|�����2k�<�Ĺ�:(�keA�W+kY�V�-�V-��<�5T�L�I��z�K���=|c]>*���Q6#Đ���|����9�s�\�5GYF`^��6�u�;���F���4��*�F��m�j�'�O8Q�����G��jP�v��VC5@�W���=��2��&|��Q�s�{2��P����X��\؅�ζͦv�h�Q�o��F������p��8�����Y�5��W
�R�AC��0x�~ gؒ{��'J�@Gc��Y�P�h��Vy����N,����<���:���R�F+��8�KDXX�8l���2�Z�kl�@��H�N�ɣ06P�1"[��h�����r�db���9�^�8���0q��J���OD�Vڳ~��ܚ��N+_k�1>ƣ	��q��o��)�:��h�9.��|Z\�9ޣ��i<Eo����Q*/a���l7X�>,zN�-�֟��i:iJ�r*M,��$p,EV�t�'@"d	�.Z�8�][�o�m��#���♗iKQxs[�"x}�ʴ�n����#�r�Ș�d�v�[�z�q�Q�o��O��?�%��p��K�["V��KZd�v�^n��r��$��^����W��5��s0��ӳ��Y)�b�G�i��2�5()K݆��#�E�����Ȓ���;c,?֭�]�C��Fr�+�q}(nK�q֤�,�3�O�ၝ�z
+,%>����{���E+�'l��<�_��%kb�!����X��K
	�|��S��p�37g5���ן�"B�q��Rs_��������h;�d��~I7��i�h��[	�����?G���q�0ȱ����x��0>����芸EY���A`n�w�$���^[ڒؽ�o��j��Â���YHf�4�d��P�|�G���<O�#���r�F��0"~��Q���J�-�1�Ym�o��Ǜ�9a3IK�[��?	���*ԛl��΢����z����w&�jmª��E�îP+��N-O�<S*J�H�9F>-��@_���A��YJxHѓڸ��O-O��Ν��t^k|�_�)�)�&�-^+���� e�-QR�5����I�t)����Q�ֽ�Z��S��`Uȝl�R#$��&�G8ϭ���E'�J�VA��LŠ-����wȳk��ܷx�%6yn� �{�d�CZ��1W����ޞ0�2��\��K�e	��d��|���<�G���7��1��#�bu�Y���
+^V�v,�xi�n����%����4`��d0{uyr��v$u%���T�7�9<^����}2�8�ވ�{��5����ɩյ����%/Ί1G�:�,�0�B$�B�¨{a�K|�����wn	!-����: ��{��֢�,#bn�5ݚ7�o�T�I�2q�{��_�1+��jM�w�`��H����/K�c͸l�J��U������F���_/iЍ����x��V��9��n�+�L��{�V2JP�k���g�q��p�ƕ�&ޛ�o~�Z湃Q��.0�I�!���d���M�5op�+-�mſ,w��KQo&�x*r��22�1���hT�c{���i
+���2w*��<P��lK�BzIIcƯ���f����%H�\*�nJL��|y8�����;ϋ��6
+�h�JCs�q������/��9�����^_&m��0�A��Ət�J��5��|˝|���d^�񉥟#hk��&5���Ϛ��3Z���_H�t��[�'�?
���/M
+g{�QGD�b�ޕe
��fA�,�P^������|�@��c��CZpaBĶ��Ө��IZ�6����ɕn���!�K1��޸�j)XKIy8��y-���{M��Z<H)ܓ�1�����O�$cLG.�^A�}
O��}�w����B`�җ�%�s��J/�-���p���]���:�ߩ�\���P�K�66r<�-��gT�tY�����G/�9/
��u���y
+���,�-K�,��Pj�D�C<�F�<������AO)֬]�4�-���Vt���p$١��r�� ��b�'f��zBD��SJ��`R��ⷂc���s�Y�����U��|^��TF�#�\t@�48U(�I%b�3zS�<#����
/ApF��t@E}�T�7WX���@�(�����E��ן�J�O�Xm�u��-�+��`���yϋBH>�z���.��s�<�ֶe�,���7y����1/�-���^G]���=O1fu��ѩRة��ze�/ݫSN���d�@8�$p�H�F�Y��=��P�Wa�&�3dz�&ԦP�N�d&E���=j�m�z��e��)�c�s��ih��9�[��R	�{%G<Ev���I��{���p��H���d���$��дW㖹��-��u�����t|�3}z�HK�q��䆒.��d!~�_�Y���XhJ|楷𫆒ܔ�Kt����������2�7�K��?�`�C:S��N~��@��;๳�Z+/M?kI�xy��V]/�4=A[0.��50i���19�ñX�-��qN��?4	� �8���0�p��F�VH�=�%oN���Xu���<�&���p}Q�^wb>�
2�s�V���q-�=���Y��t-��Gx��R}hțխ�LX�<�o0F}e�&kt8R���/!
+�C�@�!۲��toͭ��u���[V=%z���1x�E�����i}���ǘY���Ĩ��*rqo���_�%"(�e���2%��x&��~��?)��V��Z`�IL�bia�-�w
g'RB�o�P"#��n�g��߬6��0%E��{嬴з�uY�T3�2o����PP�
fV9)�L�]m�,��c2%x���=!n�P��/�dx���^�e	<O�ҥ=F�ڗ�QֶGw���Q�����.B<�<ޔמ�+��v=�͞��>ݾ'_��8��(_�8��{������A�s�Q�s�!�\��#�5�)�VE�ZƲ8t9K�z���p�.�a��z�j�0�����p�g��x�2�<%��@������hz�_�������L�I��[۱�Tf�����b�=S\Z��p�%�o����q�v�)O$�����Vn�^ɸ�8yy-#�ֲBU%c�zn�����q���Bx��?=z�xh��y�Z��=���Ih���y��]z���))9��2�%\��q���� {mm0t��N���E����+�x�.�Ϭ�Bi��g�� ��I��!�"0.M�d�)V�m
�{��â5�,�Bg��A�K��$����;��`0�k%[b 9��y+�+Կ�cAKT�R�W��82^���f�2}q��¶`F*(���6e�{�%�qјW�{s���yٖ��z�z�������yu�Ң�ĺ����=S��ݱ���L�>'�5���zF^|ޯ���1���u�WY�1L��|`�|"|�,qib�Dc��<g���ծ-�a)��R_[PS�Czx�_��)Ğ��hyv�����z��h��o��m&~����d�\6^��%N��X��PγE�%(ͩ��J��z�}{–m�/�3����G�Ϝ�غxh��azG�ƺ�Tj��o�?��7�i�w�!ʠh����kp��Y���4W���%!�g�������-_�|�����c6_N]��5�L~��m�emm�/ s�ve�2i 춛N���u�g��ȣ��k�����Ҕl	��տe�C�^��-�s�Ɉ�v��A�k\$Xx��Ǘ[��l?�������*�?�:�=9�ʱ���gV?[���E[�^z�6��h���D-b��)�b��|5f.	���K�,t��-ſ��ѼW3,-&�^1���U���Ѥ��*
�d��2�E������'�a��\z��~��ݸ�L���S>��&�I�-��}͘��%Y^��Mw���c2>Oh��71�?$�#��0�#�g�C!����E�^E��Uú��g���ڦ���}ND��
+H7�,νS�6�	L��!.۷�ϐ��^hK��
+B8�@L�������k�SM������7'h�ڨQ2����)�EL��ɫa��O���%n��1N�N�,�56�X�B�qԸ���n�V'��V��cH8�6�ح8� gC{I���IH~Sg�&p#������Go.-#S���Q��<Yނ�@�8h;��˩<`}u�{|z������;2�8Z*2�:H������-�:j	5ov�J�M�kY�}�E��U��
���:�xd���(|�I[X�=I(�����p2���م���RZ���	tm���T5N�p�i���	�Xֳ��?o,-�$<�@�˜�k:�:Y�RaJg�bI���+�~����5@������|���6<���,�`��	����»Ԭ�,�8H��}�]��@W����U�0���g�B��'��YI�ex;��r�7�'ˡ�z���Dv�4Gٙ�J�)2�Kb:���]�����?���/6C�)��
+�G��%�k�J�'�t�W������ޤc旅����-M����n��
&�B/yD�������ƌ�1���c�t���/IV�¯45�Y��J嬼;I���0n�<tZ�i*��G�=B�Sj|�!��QR�`�@����
+��C���Y`t���ޙ>gR��
+`:](�/���-�hG֥�I`�/�M�rf��(`���]�XK�n��js3_'�I
� �+��M�ݝ��n+;�M0��A�/
$L$*'�<�7�w�xB�%\�
Fͽ��%�C�V�����<`d!,)wJ�|j<��F��()���N�7�% ��{S��/��>즴��B���\0�5���2����k�L�Ehl��c1�ir�`��-�W�[��T��������t/��:������ʸ7C�?"����L��0?��b^�\�\^�E!zen�t���ٔ�h��*���	��ˆ`��p�n1yyR\�F&���yz�
+A�I�(���i���R
+�|k��&�-�/b�HMY�:�{�Gt��o���8�;b���m�3�2�Z_ա�����+�\WiW������B�^$���H��'�"�3Vͣ���s�ᓘ��y]^T��,��S	AZ���y�Ղ_����6�?���aB��_�����G��rRԝ�ɇÚ���{��o�o�9c_*[�F����u��%�k�s34���
>�38k���xw
+�OH�Ks�Y"9�mH��1H�&�je8��5�����z�4O)x�:�V(j
+��R,'�Sݺ;���" ,�M�?@���$�$qV��r����7���
+o
EJ���eK�u�R�r�Rf~y�$��\ʼ�<�1�a�K����%C.iC�[�
+8�")�<i���x|RU��-]6�'�����������WZ��ƥ�n�oW _&�������Y���?:�%�J�W�ҼY�L�'Ы��x��܋Fq��*fc�lw|X�Z��`�u�2&��\P��?y�f�<��7�ٚGBk>]�&��d�7���z	0)!���ד��������Z��My=��E�c��<�T1���ߌ�d��5�n0�o���+s�zƀ�f�����7��`�'�6AV��OE+=�Ǭ��
-���Y{&�뎸/�,�����e���v���9���ڍ")��C���7��s�#	�ŗŅ�&�M��;�p�����Y���\��ϝ��<m���@��/����է?��17
�O���$�GA�3�~ ��V|*�}�@�W��ʀ����Of�� �IDAT<!�U���b����V�ʯ�H�7��1b�({�j���X���?�|�=k�ˣ��u�;0�'��k0ʓ�p��K�sz����U����5���YkK?��A������x��`jo���x����ycV��Ԗz�'�J^[�?���K��j$Tp��)��S"��$�-(A{���'5��<X2)}����f�B�d�P,�_�}��&�KYt��=���G�7����w	�$߸�����������
+��K�_��[w[���E<���^1���m������z����n�U�|��o�6.�㢬
����`�?FL�\/[�0�Z��W����&�5�\�<�o����D�2�F��L��<���1ii�3f>�VP<�`�q\J��>2H�Í<#�,)/���%޽K�P)\�<��1,)�R�JӅ�k�ݚ�#�eI�%��$�\z����y�dW6?���K9⒎v(fH���uz��n�Y4WSz�~�h‚��~��K���E�"��kP����n�E�3d	���>C�R�������K����n����]�륗�J��eml7��=~�i?�d`0�<���>2_�q�����i�������{9��̮�[�U�2������^��-巔�`�o%e�iշ��j�GD�p�V�m�{[V��Y7/���˽S2!:!�y7��B��R��E�h�E���j՘�%��GU
+�@�@[�*h�bK)�)�q0H��dz��ɄL&��d��������q�>w�������A�7��s�^{���^���sN�ȧ��Q��LU�R4��������i)2�0s��X/_*�96�͖�q^�첤��-&���S���2kR{bwf�k��՜�{�7y�(�1�;~���)�B�}[Z��H&M@>��� ����&��=��zFp��������z�����`O�A���ǤT!2�/�-0��q�4v�5�2XvP�ȕ���H��a��0��`?�K�qy/|��5��x
+����~�ӡ���{��)w��t=�g�B��Aػ0�K�~
�S{Q�(�
&ë_5�OT���������R��Oˌe���z3L��?io������q��
�HS�xB�Cy�I��g�1�̫L�xL���7���j3Z+��r�L.�{U���4�(e���-ªZb�tpPuD����S��2���g�d�9I=���;���1+3ۉ_bk��:�d�ݯxO8�w�DU���C� G3�j�'�uEc��]��W|3.K��R)�F�F�̸�Ⴙ}���)R��Z�$e�'Pa�]&ZN��ʌ�k¹ޭ�1��9�p
+�q�-�/���4�Ѹ�	�}�������ΎPE�,*���^慊6K�����+[�r���걗{��h��/� ��Ne�T`PN
���1�S�ъܳU��e���K�4�d������͗���"��kܭ��}3�ik��m�Dg��u4�dcn����
�dz�Վ'�0D^�?�~������f����������ff�SD�|��a�[`�53{���p�^���Ct�x�<���w��2L-��9�rg�4���a���=��w'��TE����G
��0{c�S:D�2*HY88���R�5.oђ���?���c���vjK�����Qc����Rp�	~��k���E (��fD�Y�-yż�:����/J�U0��L3�����>�����LK�(��,��T?R��v��wc929U�f#YZ'�0��ַ�~Dy�H��w�;�����p�<�o�ev�7���%c�
+�d�v��`0���h�:;�G�-�"��e�[_a���lv���x;����5G�1��3�S���~��t�ݟ�}�7��*V:;O����p���1��l�g���/�w�'jȮry��t����6O;��6)x�����r�ڸ����~��{���C��gQ����p�r�%����Ï�����::N)�����1?-��E�<O�(r�S���}[J�����iƛ�F�+QO�1Kbk�s�����f�Vڏ�¸Muʵ��7�|������Ck��u�7��6��p���ӣd�wP_g�6��t��	3��"�7+�w�$ֆK��)��{���rЯ�!y=��V��V�q�w�x;k���/�Ζ��A�Z)�ಙ
+P��%O�a��x]���	j)�
��N��F�}�W6��$�f�=^-�=�a�k�����2�[�3��i��z���U�lq2d�wz��.K�WbZJU3H��A�Ѫv3{�,��q����O��,�"G8����t��E�g���:��$~9{�`������'��}}�W�%Rk!�u��&�
��0�{��[�{Ռ���o����=m�����!)���U3�)��փ�����"��&�?	�����W��_��t"�����qi�I
+d��/"=
�׻���^oI��Ȳ}����z�~n<$�lU�&
+[1��?EIu=�3��a;��1hYaNO�I���Y?��³��s{���Ϙ��������G�7�#��fKK6�
E_�kk�6s�'Gu3��Xv^4�����9��iw�%�Zv��)�m4�:?}M�!�\Ēd����\�d8���M��V4���y�2y�\�cx���n��o���0{�
@�w*�ci��w��CI_VL�,�w������Jd#�1���tZ(,q9�[�������
�A��;���=��������'|��_F������1���n���'
+��;��[�@�0�������<-��Oɒkࢻ�+���a;�r|�����[93v�L;;��f
+��o��å�v�6���6���N0��.�8����؀�8�0��_d@鑕, �����0���EG�͊g�{x�����)�Uz�Ue�;_���R�p�>S]m
+�.��^���ÿ�å�����W������a���/����W��\�߅\g��0���῱9�D�*Z�W��}��
�ql�f����5:�e�>�|�<�r�rt���\������Åa;�
+�?��]v���)B���(�V%������P4C��sSF?�	���|s����`��C	<ˮ�y������)��������7�����SfZ[�O�o��������`o�������B��x�ME�q�(��T0��Q�i�����6�ى��&=�����|�m��y+��[ծ
+lz�1��v%<�-�z��&����W�7����>�4�[B[̟9a�����o�q�����g�YS���1��q������?j����~�����,K6F��١��y��lv�k	��p�C<x��o8�o�?��w�ٽ4�45%��*�������j������
�Y8���֊�=g��O}�����[`�Y��k�U�w�-8��q9u�h?�S0�7����J�-�ʙ������q��6W��Û����mL7��Y����zB|�
����Uf�J���?���f|{K6.3Z�Z������������C0�(������~^����)�=�r}Rƥ}c9���ϢCv0&�3�yР�0�,�Wy
+�#�/V�I�*񙹄��=Pތ��;sWtv��і���*��o����;���v��/��=�=~`+�2�e��~5>'{'�6���q;��*��1�1���{�`�_�֏������{3��f��2\���?2��GՌ.�ϖPƺ��}���⸄� �i�������R���v/��*�?�K�Xj�G�u�U�X���\�!s{��l���e�(u�����Fs}���/�����l����iV�T�����(�����
+�{��͟�a;|�_��ӛ�͕Fߔ���nY���-0�1*��Rw�i2r�r��g�ؑ�S��6���B�rQ�;,
�S�7���%_���l�sYa���lV�x���d885n��ijr��iu&�ԙǂ���&6��C��m�Gu_�8D\#9���qw�q3۹��������O;|��6׉�,ȩ��py����y����o��E�AxLb�X�hp���o\����5�c����ֻa;�����IT��q�e6(���|�e�����w����4سc�R�2+nq�m{���7���in3a�P�ģ�1?�G�gӾ���J�s`nh2�Y�B�J@`ef��_�3{8B��s'!������:��~����C����6ؓ�������M�P=;���q|��E����_�%0���q/bjZ2AW�`��;��Y��Dʉ�,�)���oXl�]y.���BT�f2%on�[���-Ǵ�q)�٪D+`����;��Գ�d�
�gy�+��+@�Vח��N����\]�(���q�Oߦۚ���5�?jn������p�6�Sp|$�����p\2�[��𿍣����]*�U��������;�~t�f����sų��r�Ka�����L�����3�ː�/1
Tt �l�q�?K�}8�G<6\v�38�bfW#C�8.=�nf���@�������T����q����ct�'��q�[A0��ZQn��@��8'���v�-����p!�o��gPy�fK�BR��.��R�o/���ß5�s��g��M����pl:kIY��a�g����ߎ�7��S�g�������jL���ڦ>�"~��1s0��s~k��UW�r{j9S���s����Z6f���r�,���3�DGT������I�U�Ɂ�������q���
�ݕ�?���at����B�������q
+^�v���G��@��^3{�x$ 
�x���P{����>3{�D���ut"��2�)9*'h�K~�&ҋ�]q��+#=���R�jC683r��o�O�<������]ϠZ�8�,Ԫߪ�2SZ�����������O��f@���4sc��{#p_�&��s�`'#\~|%Z,Qۼ�ʆ|��G2naU�1�o�c#d�|��m�u[�����O�����qh9�o�C�ʲ�T�ڏk�2���O���‪e�`K*�]�lg}��;N�2y���0����3�Q
+��M�8����c�`>㋫ic�~�L������a���Z7��Mu�j�~�����dz
υ���fr�����V����~��Bo�A��\�i�8E'�5��.×:�4F��I�
+���8�󈃢�����
�G�Z���)sY>,�ˌ���E�-�ӊ���9�<gno5���p=���"�H	�5/ME1?Y{���-�
R�R�r6w\*����cp���j��N���'���C�x�U�y��yT:��S�nqv'���Y��;o�ɟZqP�-y���*�%�� ��ŵ�g�8]W&�$��؎M�c�qv�6��v��o��>V���X�Ex�w�୴I���NxqZ٪t���Ce��~���y��~�}㫸b���jc�$�����n�����ϫ�ǎ�A�
+�י�L0�3�Ku�̬�WB���#��s�,�v�?���n���C�GJq�G���`�l�r<�V��p-* ��4�r:JH��g%�'8�i��|�i��XU���=���@�f�D�TT���X��O�弎c/WI���x<�ƙe��<v!��ڔ�:Mc���{p��h�~�>%��	����W����|�FC~����v|�^qnQ���Um1-��U�&���	з�>�q��y�mMxHv���-W��>�o�mQRk��p�4�`�[?��W����@�̏�e������8�UF���S���ŹV����OIV�͖N#����f�[����!=#�ڟ�`#�n�>N����2�I�����\x�Q��������b���j�7*�@S5vd�&����@	��#���7g�sK����F�1��3�V�&f��Lf���a�MK>Kj-a�<�d���Zuz:��[�����{5�
����Ԋ�r��r�=WjY0�A�ƶ�7 �[��,���o�}�>5�ʡ͂�����6Rˋ�K��o4g��;�'���i�-���,��{�]�mv��Gb�b��U�z�lC��b'#,���pZ��$LYS��
���&��B��}�~p�[?�����[`Z���R�;uc~o���n}�����*d!�WqD��p��)`�q/j��<jD��T2q�~��?����w���e��ݱo�7�Ϣԓ���z�!��:U���'����	==��\K�?�8�-�0��k�ͨ���-��)�,IWA�
+�d1�Q�ਗ�o��Zl>��\�I֭(��g�4[�|�<�IBU.t0n:gQ��gs��|l�AIK�DcY�C�W��U��n}����W�xc�^6v�?��_�O�?����M��y�����#�Z��k��UVc��0�o����K�#cZ�fpK�(U��ܜm���~��?v��RF'%�⁠�������:���('�tT�bfu��(Ҍ�Nc�v0�4�Wl�6�1c"��։�"{���
+<^:c����Nh����uB����)ޛj`YЧ��3�p���Q�7٢h�p�U��s.QN3��4[�"_9�@�z�>����M���1p�Cqq�e�������.�a}Sg%�q�՗J�,�T8�>=��o5ط�w�Gţ�<s��-9;�������n��n�Y7���mfWJ���#���m��ɵf��O��X��፰e������N�_��{�z�~ 0=�@)i+�P�-���"j�s���z�>.
������J<tQ~��cLcX�q�8D���w5ޔ�#�M��q/uF�x�����M�R�\��l0l��?��o��pǏu��U�T�>!E�&򁪓ᜍu�˩ׯ%�3������p�T��K��(�6�m����J7(�j#6W`L�	���n�s��a�uw���1�3�g�d9�U�+�P��uJ��F}+ub�"�Q��X�}u�]7�Ox���"��哺���3��Td�-{Uu��<k��v�w��g��eK5 �I�Dg7V��O�Q�[7�K;^„',���u�����s��:���3��r@�|��Uh7;Т��n6������m���������W5f��S*�IXF3�8����|̏�� $.Ӡ�]��y��?jf�0��xw(�XE�D/�G�Lw�޷*?Tr
҃��p=�/�}��֖-`ܠ:��Ԙ��gu�پ@���TNNN�ݢ�0Տ3>Dh����Ȭ��ns����_,����uj׃̐��.O�|+'W�&^��8;���N��;�M�z��b�I%Jv��yEE���ѭw����~���a�bŴ�����QX��3�K9NL�RX����#�BKu���E3{���zs��l��)�Z34NK�\�o�c�ܲ������Q��w�k��$�k@`�]T�Jɢ>�zV;�?9�h �x ).��|�Wr�G{����k׻��t���*��,?���GD�к��*F���U\򉼬�b�ħr]�C���C01_�G����6p{j6�Ѭ�b����|Z��t���m�3H���D;͞*_Q9W�?]�wkl�6���
+O@ej+�c�[Է�Npb�'�|0�Q)}����T:?��#8�Q�[7���lv���
+r�l*����(�Qf/ٛ� ŒQ���/�?������
��e@��/)F�QH��nY
+G�����V����>�LJ׻��	?�5�=sJ�e�b>�丹�Vʌ�����#����/�����훋c����I����������3.���/9��hl�Q�(�ۛ�͓�ϒoj��������(�d���XQ�gε��W�)'�Y]�13**�e)�f��ux|�.T��4 ���N�!V���ƬN���	�rq�㕧�۲)S�z�~v���2�Q'_��q�;���QV���JY��6�ۣ���z���|�`2n�����<!ɟ��Wu��s�n99��6g����{���p��̾8��d��	^�A0�$,G��y-�E��W�|G#��q)R���`� ��J6�R����+��EC����ʟ����`���;A��c��IDAT`��:hyl�R10[���r���'�P���Nm?��������+ħ��
+��T��ɹ�rn٬{��M�ቺRls����V}W���,�l�nj�������i�����e�+��et��j|8 ���tؓ�B[	>��}p���_g�0���f�A�b`?�[�vݑo��>O�z�Rgrp>ǧ��Cp<�>[L�Y�@�)٨�����	`k���Y��F��a;|��������b�HO�R�T����0e��������/�#�����g-Z���9�[�\h�e������2é�H�A�������n7ث�=f�2��9��E������7�e���KB��!�߿�m�a�E������xǗ=�f�4�;�X�)�=���q��G�x�C�W!O�@�w�O1
:�����(8nO����"l̟�����@Xҍ�f��넕pZF>6Q`ٌqz�w��6cgi�By�/�/��kf���A������
+�8���O(;ur�GJ��A����0��Б�طr�,.S2��5�@�1��7�V�v��/�N����������=e�M/�������嚧������O9�Q�W6�M��ygU�S�f�ā�`�j�q�ԋ���v���{��{`�s���c� O�1@���fE1=	������)3�-:�s�79�b<S�U���@$� ��kao�'[)����"�(9,����4шi6yX����1�Õ�V_z���]����u/�=Ѳ|�������ٴ7����a�<�
�/`�/PLm�m�d�g��wnv���>���T>k�<s{1��_
+Ëvk�f�B�K�`_���3{�3t���kiZlqWZ�.�g���8f����v���6����;���B��n��b�1M�O��_��q�P�W8>?�υ��3G�EqKgh�U��E�_nK�3
=�?ñ��W������f�w�8����������%�S���l�K����?kf_�x6��s�i	��[�s&=��*	=-��@F;��Hی�׷�#W���w���_��ef���z�j�qr��l�;�gkvp�~Eg,���C�7�q3w�z�_��/��GRos���|�z��u��`O�����9s��
��g�\
�e��%���3\U��
+K���a��1e��El�;����o�^X��������ѱ=���g�l����a�b;*o�c�9����ߣ��ث<Y���`e�����Q��o���8~���f�����O���=��ǥ���(���:�k+��C����~Ǽ,Xj��g���4�1���R�{8Z��9��>�d2<n�~+�Tu9��q��T�3"�����n�s���4+�3�3|��cy�jA�z������l�Ѷ�G_�l6�V�ݔ��@15�׋�{�9M@;����k�J���EX���J��	+܊�=��3z[2���f�Ë������g�s%���2åx�x�2 �2-MLW�%�[ƫ�3Q�����Ѫۓ7��7晑Wv+�/N-1�
+�7;�%�\�w5_���yl�a2]��m����lo��ߖe��'�1ev�������>`�&(�ebV��V���ב�!nS��m�>*�E��@�
��	�2jl�o�K���c��,��1`:��6c�d4+e���SL���ax̸N�1)���Y��\���������T�f}�)�E�
+&�cg�r
+�~c�WM�%�ٳ��iߍ�\�#�2��x+���Ķ=���UY����g��Dnz�wV���,e�D�XG	-P�-EcO!��B��Z4�`2GV�3�AW�C�X��q֮��	-U���T|��S~3�b���>��S���2���_O�{��,��z�k=��pl̸
U�
+���N1_O>2�c�)�����k������1�%�֒햾e���.�ƭe#��Oۓg�c��	(�Q��:��V���S׀fR�@p>�%cX�_�%��iiE*J�TRJ�9ܖ���o2�V��8�P}�c��e��䞯[r�Zc�Y�-kS�J-��er�$�h�	����c�h�(:2�te��L#vf��IH>�Z�\"���=ղ]JW��~���Vp�����.�Y�
��vʐ�D������@��#�+e�~�B�����Hg�(q�2�٢���d��e���d�dc�œ�~Nl8��0+k)[ϰ2-\�e�K��-Y��Z2�u!`ZJ�V�����t�U����#oZc2]�ǙxN��|�j���Ǟ���ҡ��G�,/s6X��tl2ߐ�Μ�AU�	�*&)����g8{)S�J	^�أY�ۢ��?���^��(�Y���?��u�˂
nT����WNv�9\�dz?�瀕��~��9����l�z�{��h<O�P�S���(�qex9)Y��>=>yz�pz����Pԏ;��e&[�V(�g3-}Q���lW66�v�G֞«�T�Uu����0����(0�lp2�pd�˄!s�=�E|]��3fYj
:�Ҷyܳrn#���F�ȷ�H(�`�l���l��d5��x��nկF���$���d�gu�'LCG�|�u�d���&E/��C��u��8C�
�ޤ���j��ܶ��V`���u#�A�z��,O܏,���˖U4���8^g��1P9��U'�f:�V�-y�����A�6��K�W��[b({νU'S�Ż��τ��T�Jf�[p-ܾ���zre�a�}������4�~Dz9�x��3�%N�S��]Y~�@2\��& ������D����������9&�撀`��)<=}T�=(/[ΌK������z|�2��Ŭ�����Rc<m�x@��?ӽ�����B��K8���2ER�����^K���WxZ�A�i)��h�߷�rV-9���\{�E9YEW�W�Y_����kOѽ�'�3�]���/Q��ݦe��х�Ƕ�X�l��_GXn���8)�X�O�ɬ�[��-U� #k9��@���T�, �7�����%EKfX��VxZ<]��Y�nL�QV����:s��=�ׂil�V�
�j��(.���)�aħp����\�*\�H��e}��e8�of�^㛶���s�J"Lxi����J�[�Q��>�Sm��,�_e�ؠ,5��e%(��y���[�O�3Z[�*�e�K�HO��C+��^���]��`2�~�N\�li}�g)/T}�^%0V�d�]��'_��V���P)��9����Q3<Y�
+o&�/&+˜t����HI�9�i/.8���]v�O^&޲KKmV��Y[
+^���+ڗ��ò�O��±�c2C��*JU��R�L��clZ� �2?Zȍ��!ɜ��(�go��h�*Y�����x��*e]b�6��^t˴)��n������,k#��L�[����t����X�۩%���e��O:�I⬌?7ó=�����*YS2ݒ�lrӓCUg�cZ:.Lc������[B���(ؔ��B�r���%ƞ����IF�%Ϊ7�\�y�	���j+3Ȋ�H/+���~vª��Mn�am�v�Y�?�V�o���e�*��p4f�ϭ���\�/��E{66L�^p�ў9��L���2S��o�=9�����w��r�Km�%�-[�tܔ����ff|�ls�Ƭ�(�̡�|��1�~���1;��k�C��������<�PR��%�m):#�-'�9V�Z
+�WT�Khl�)�˿,�7��)Uk\�'�����g���@�`V_9����}St��+~��,����}������4�//E4K3̖-����vZ2ߺ��-�o��S�O��^e:��UK"���$�
+�2�L7������&Ӗ)E�<�q�2G�)Q���*�et�vf�Tݥm0O2�i9�^�ӒAƗ�6��j��y��<}c�����͒�Y�#3v���䲥[�s��.�*o�Ǵ*�
+G+P��;~&':��,\�2��������+�����*��D�U^�׭�I���q���Qigp�B恕!S���,{c�L��"|Vq��g�zFS	<��d���S���L)�R����j?�3��)�{����QA����u6SD%���mK[}�9	5J�f�fγu�����<՞��%-yUz��*V}k���LI|"g��U���(�o��zvU�m�L%���S�hSe�s�Wٚ�͜��1%D��8�%u3|lϹ.�F�4��M�����v�g�֖���i���1gCޓ���3C�m��eα���[��[�L�J�+����Z4d�G����ׇX�ig�{��tdF7�{���̰-���j?�ߩ^|�2��5\@�Yfm%��	��~��0'%s��d|zAK־¹Dߔ.g0����w��-I�`0�LX���.QP%�\��
+�hT���d���!�K��%N�����G�����)LV?�׊[8[N#�5µ����p3lo�2��L�[}h�o�`.5ll+Z�s�WC���%��L�]��E˓33��T{�Z�ѻ�;ԃS>���4�hٜ�1_�BF֋���!�"��#�|�R�*ESl����\9�V���oUR�eaPmd0��-c�`��w޶���g7�e��Wm����W��+�z�V�S:��ݘZ2��frͰ�-Pmf圷$�����p�����J�@��'��O���k�Kї��%6Kѧ�i�dև����
Fd*���
+�R#�gV���ן_f��	em�א+C�Ѥ`��^ttx��3�L�jK�TtEg�c��c9���u�2��V�]���B��2�z�!뷢qI�
+&��%F�n����%��j��<N�gp�{)��R/����R���#�OO29f�~��S8Zz��o����L(�x�<k�C��/pq�>�Lu��˜�j�Sft���V����c�sH�0Ζ���gZ�]N�	
+v�\w�����~��+^+�8X���t"����2n�q�>�62����V�V�|���g;�������ε����e:A�a�6�GƏ�ߓ�S��s<�^��A*^0���0\,�� +c|j�OmSf\�u���Ck	z���g�@u��kE \�1Q���=%T�-��I��|R�*<�\)�RG�����\�0*���r�M)A�j�
"Ӛ9G��
+�ء2M�PN6v摢G�T����\�[%01�>G�
+���L�[J�0e�m����c�@x|�by2$���P�����c8�����x3���.U�D��\)?2#���2���?cL�s�����v�1���Vģx�$r*y-�	6+�yh�-ñ�d�Nv�J� �#�V��9�x�F�a2^��Ėndx���6Z�F�ٶ��42<j�[�H�/��,ѿ���&�X�^ye���+���H�-G�`�1�~E'*�/��`,<V^Ѯh����	(�֊�8�M	g�q[*_E(Y��s-g㩄%��7�\� g<Q�r��2�\�.��iVu��<.��*���'W=YUc�k�3��yYy��q��^��_��l�QR�)�d�T��풯d?�MշVp��W��<8�+>��\�I{s��(��o��<�J�2�����������OKT����`������+s��L�Z�ӭ�=��^��R����._g��y����y-����_�3%T���]�2�����n7�m9�^�2�+���eFf���9n��S���pR��ў�Yڞ�̀�lC�����7_�,�����fm>{�r6^�id:��y��Kl��IJN#~%C�<v��1U��IY�3��[e�AP�T��N����:��n�V��y���1n7�X�u�(B�DXv��k��Qj�A爏
x���p;}����������Ur��-c�
+d2}�ZEK�C���ϰ�1䥽l�*�Nϲ��$��p�������ϔ�E�,PV�JY�<�k5�K�
+U�3��$���e )o	{�<Y�VlF[+ja��Wδ�dJ�9�p?2#�hc�-`=C�pY��F�d�f4�d0�E|�Y_[��2�=޴pg����_5�硧'��W�l�ߙ}��#õ$((y��m��r�=8��L8�7����7���a�؞�kKl��W��� �˔��=�.���s{-�t�7+�V�%<1e����L�ڔ�p�U}f\�2�jK��rfT=(X�[�� �U��1©�����F��7P����{&_-����%����R2�ɧ
+, �9O�O�i��l|Z�P�m�x��L�~��d�5n���O�8N3-�����������`S��������&�b���,e:�ps�t_:�I%E��,/���2��z)m�W�-F�~������j��ޘ���ź-������=�-����#_���.��e��1VF�EK�et�ҽ�u9O䞁=o�Z�rY�S����<�L�A�ٗ�ǃ)<�Í��E�
���j�V�.׬�%�o��:���c���x�_����IEND�B`�
\ No newline at end of file
diff --git a/web/modules/webform/images/addons/lwm.svg b/web/modules/webform/images/addons/lwm.svg
new file mode 100644
index 0000000000..ef3f80d277
--- /dev/null
+++ b/web/modules/webform/images/addons/lwm.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64"><path d="M60.432 46.635c0-.102-.025-.203-.025-.305 0-.076-.025-.127-.025-.178a2.61 2.61 0 0 0-.102-.432 2.45 2.45 0 0 0-.457-.787c-.203-.228-.432-.406-.66-.532-.254-.128-.508-.203-.71-.254-.076 0-.127-.025-.178-.025.28-1.218-.076-2.156-.305-2.587l.05-.05.786-.863.05-.05c.178-.254.28-.508.355-.736.05-.203.102-.38.102-.558v-.483c-.025-.38-.076-.862-.33-1.395-.127-.254-.304-.533-.532-.787a3.13 3.13 0 0 0-.837-.66c-.025-.025-.05-.025-.076-.05a12.36 12.36 0 0 0-2.132-2.359l-.965-.76-.634-.457c-.305-.228-.532-.356-.634-.406l-.533-.355c-.076-.076-.127-.102-.153-.127 0 0 0-.025-.025-.076-.025-.076-.025-.178-.025-.355l.025-1.142.228-3.4.025-1.345c-.025-.685-.127-1.294-.254-1.852-.025-.127-.076-.254-.102-.38-.025-.102-.05-.153-.076-.203a1.8 1.8 0 0 0-.102-.254c-.025-.05-.025-.102-.076-.153-.05-.127-.102-.254-.178-.38l-.025-.025-.026-.076-.025-.05c-.127-.228-.28-.432-.432-.61-.076-.355-.203-.862-.43-1.446-.203-.508-.457-1.065-.837-1.624-.127-.203-.28-.38-.432-.558l.05-.05c.076-.076 1.852-1.953 3.272-4.388 2.613-4.54 1.75-7.306.558-8.828l-.025-.05-.026-.05c-1.14-1.27-2.714-2.03-4.617-2.283-3.984-.508-8.5 1.472-9.69 2.03l-2.182-2.385c-.203-.203-.406-.406-.634-.558l-.734-.425C35.2.287 34.632.135 34.023.058 32.83-.094 31.46.058 30 .44c-2.207.558-4.668 1.675-7.256 3.22s-5.276 3.552-7.89 5.936C11.65 12.488 9 15.558 7.083 18.5c-.965 1.446-1.75 2.866-2.334 4.236-.583 1.345-.965 2.64-1.117 3.806-.102.863-.102 1.675.076 2.4.076.33.178.635.33.94.178.38.406.735.685 1.04l2.258 2.36.254.254-.025.025-.076.152c-.05.076-.076.153-.127.203l-.076.153c-.025.076-.076.152-.102.228l-.076.153c-.025.076-.076.153-.102.228-.025.05-.05.102-.05.153l-.076.228c-.026.05-.026.102-.05.153-.025.076-.05.152-.076.254 0 .025-.025.05-.025.076s-.025.05-.025.076c-.026.076-.05.177-.076.254 0 .05-.025.102-.025.152 0 .025-.025.076-.025.102 0 .05-.025.102-.025.152s-.025.102-.025.153c-.026.102-.026.203-.05.33 0 .025 0 .05-.025.102v.026c0 .076-.025.152-.025.203 0 .102-.025.228-.025.33v1.27c0 .05 0 .102.025.153 0 .05 0 .127.025.203v.076c0 .05.025.127.025.178s.025.102.025.177c0 .025 0 .05.026.076 0 .025.025.076.025.102v.05c0 .05.025.102.05.203 0 .025 0 .025.025.05.025.05.025.102.025.127l.025.05c0 .025 0 .025.026.05l.025.05v.076c0 .025 0 .025.025.05l.025.05c0 .05.025.076.025.127.025.05.025.102.05.203v-.025.025c0 .025 0 .025.026.05.025.076.05.127.05.152.025.05.05.102.076.203l.025.025c.025.05.025.102.05.127l.025.05c0 .025.025.05.025.076s.025.076.05.102l.025.05c.025.025.025.076.05.102s.025.05.025.076c.025.05.05.102.076.178l.025.025c.025.025.025.05.05.076s.025.076.05.102a.42.42 0 0 1 .076.153l.025.025c.025.026.025.05.05.076.025.05.05.076.05.102.025.026.05.076.076.127v.025c.025.026.025.05.05.076a.37.37 0 0 0 .076.102c.025.025.05.076.102.153.025.025.05.05.05.076.025.05.05.076.076.1s.05.076.076.127c.025.025.05.076.076.102.025.05.05.076.102.102l.102.102c.05.05.076.102.127.152l.05.05.076.076.204.203.076.076.025.026c.05.05.127.1.177.177l.025.025c.025.025.05.025.076.076.076.076.152.127.228.203l.05.025.025.025.05.025c.076.05.127.102.203.153l.025.025c.025.025.05.025.05.025l.05.05c.05.05.102.076.153.127l.05.026.076.076c.05.025.127.076.177.102.026.025.05.05.102.05l.05.025.025.025h.025c.102.05.178.102.254.152l.05.025.304.153h.025l.046.014.152.076c.025 0 .05.025.076.025.026.025.05.025.102.05h.025c.05.025.102.05.153.05h.025c.05.025.102.05.178.076h.025l.05.025c.025 0 .05.025.076.025h.025a2.98 2.98 0 0 0 .254.076h.026c.127.05.254.076.38.102h.025c.102.026.228.05.33.076h.102c.102.026.203.05.305.05h.102c.076 0 .127.025.203.025 0 .026.025.05.025.076.177.482.355.965.558 1.42 2.994 8.295 11.29 14.74 20.75 15.93 9.463 1.167 19.584-5.124 23.694-13.623.177-.33.33-.634.482-.964.406-.432.735-.863.94-1.32.33-.28.406-.838.38-1.32M7.894 43.337" fill="#664f44"/><path d="M52.34 5.132a5 5 0 0 0-1.573-1.167c-.102-.05-.203-.076-.33-.1-.05-.026-.102-.076-.152-.102-.508-.203-1.04-.33-1.598-.406-2.74-.356-5.886.66-7.662 1.37-.102.05-.203.076-.305.127l-.457.203-.787.355c-.05.025-.076.025-.127.05l-.482-.558-.228-.254-.203-.228-.076-.1-1.85-2.132-.153-.178-.203-.228h-.025l-.533.127-.61.127c-.33-.153-.736-.254-1.193-.33-.913-.127-2.08 0-3.4.33s-2.816.913-4.39 1.7c-3.17 1.572-6.672 3.983-10.07 7.077-1.192 1.065-2.283 2.182-3.298 3.272-.99 1.065-1.878 2.157-2.69 3.197-1.65 2.156-2.892 4.236-3.704 6.113-.532 1.243-.862 2.385-.99 3.374-.102.7-.076 1.344.05 1.852.05.177.102.305.153.457.127.305.28.558.482.787l2.055 2.156.228.228.025-.025a.79.79 0 0 1 .203-.203l.102-.102c.05-.076.127-.126.177-.203.05-.05.076-.076.127-.102s.076-.076.127-.102l.05-.05c.05-.026.076-.076.127-.102.05-.05.126-.102.177-.152.025-.026.076-.05.102-.076h.026c.076-.05.127-.102.203-.153.05-.025.076-.05.127-.102.076-.05.127-.102.203-.153.05-.025.076-.05.127-.076.076-.05.152-.102.228-.127.05-.025.076-.05.127-.076.076-.05.153-.076.228-.127.05-.025.076-.05.127-.076l.05-.025c.076-.025.127-.076.203-.102.026-.025.076-.025.102-.05.05-.025.102-.05.178-.076l.152-.076.05-.025.38-.153c.05-.025.076-.025.127-.05s.076-.025.127-.05l.05-.025c.026 0 .05-.025.076-.025.052-.024.103-.024.18-.05h.05c.076-.025.127-.025.203-.05.05-.025.127-.025.178-.05.076-.025.152-.025.228-.05.026 0 .05-.025.102-.025.025 0 .076 0 .102-.025.076-.026.153-.026.228-.026s.127-.025.203-.025c.05 0 .102-.025.153-.025h.203c.254 0 .558 0 .863.025h.05a8.16 8.16 0 0 1 1.015.153c.076.025.178.025.254.05.025-.025.025-.076.05-.102.203-.33.38-.685.583-1.015 1.142-1.902 2.36-3.577 3.602-5.048.432-.508.863-.965 1.294-1.42 1.8-1.877 3.602-3.323 5.226-4.44.356-.254.735-.482 1.066-.7.482-.305.94-.558 1.37-.812a13.01 13.01 0 0 1 1.015-.532c.532-.28 1.015-.508 1.446-.685l.38-.152c.177-.076.355-.152.507-.203-.127-.025-.28-.025-.406-.025h-.508c-.127 0-.28 0-.406.025l-.812.076c-.102.025-.177.025-.28.05.685-.355 1.37-.61 2.004-.812a13.22 13.22 0 0 1 1.269-.305c.558-.102 1.09-.177 1.573-.203.33-.025.635-.025.913-.025s.558.025.787.025a8.23 8.23 0 0 1 1.344.177c-.127-.177-.28-.304-.43-.43-.305-.23-.634-.38-.94-.508-.127-.05-.228-.076-.33-.127-.076-.025-.152-.05-.203-.05.153-.025.28-.05.406-.05.152-.025.28-.025.432-.05 1.192-.102 2.257 0 3.044.127.94.177 1.523.406 1.523.406-.127-.254-.33-.482-.558-.685-.153-.127-.33-.254-.482-.355a9.36 9.36 0 0 1 .913.254c.76.228 1.395.508 1.902.736l.458.228c.05.025.076.05.102.05.457.254.7.432.7.432a1.92 1.92 0 0 0-.432-.761c-.05-.05-.102-.127-.152-.177h.025c.026 0 .05.025.102.025.025 0 .076.025.127.05a9.4 9.4 0 0 1 .862.38c.025 0 .025.025.05.025l.152.076c.127.076.254.127.38.228l.38.228c.076.05.127.076.203.127.127.102.28.203.406.33.153.127.28.254.406.38l.076.076c.102.102.203.203.28.305.178.203.33.432.482.66.177.28.305.61.432.94 0 .025 0 .05.025.05.076-.076.228-.228.406-.432 1.465-1.723 5.88-7.304 3.216-10.703" fill="#132134"/><path d="M58.9 46.812s.05-.38-.153-.735c0-.025-.025-.05-.025-.05l-.102-.102c-.05-.05-.102-.102-.177-.153a.54.54 0 0 0-.127-.076 1.71 1.71 0 0 0-.432-.127c-.127-.025-.254-.025-.406-.025h-.203v.05c0 .025.025.05.025.102 0 .025 0 .05.026.05.025.076.05.203.076.305 0 0 0 .025-.025.076v.025c-.076.178-.28.583-.736 1.09-.076.102-.152.177-.254.28-1.27 1.32-4.01 3.17-9.792 4.212-1.954.28-3.78.305-5.302.102-2.283-.28-3.983-1.015-4.795-2.004-.076-.076-.127-.177-.203-.254-.05-.076-.076-.127-.127-.203-.025-.025-.025-.05-.05-.076a4 4 0 0 1-.482-1.903c0-.786.254-1.522.66-2.08.33-.457.76-.812 1.294-.964.254-.076.533-.127.812-.102a.88.88 0 0 1 .228.025c.177.026.457.05.787.102.025 0 .076 0 .102.025 1.09.127 2.816.305 4.896.177 3.806-.228 8.803-1.42 13.343-5.53v-.026c.025-.355-.025-.964-.457-1.446-.076-.076-.153-.153-.254-.228-.05-.05-.127-.076-.177-.127-.076-.025-.127-.076-.178-.102l-.228-.153v-.025a.52.52 0 0 0-.102-.153c-1.168-1.776-2.79-2.816-3.45-3.298-.305-.228-.508-.33-.508-.33-1.395-.863-1.598-1.142-1.472-3.45l.228-3.424c0-.203.025-.38.025-.558v-.735c0-.127-.025-.254-.025-.355 0-.05 0-.102-.025-.152-.025-.127-.025-.254-.05-.38 0-.05-.026-.127-.026-.177 0-.076-.025-.127-.05-.203-.025-.05-.025-.127-.05-.177-.025-.076-.05-.153-.05-.228 0-.025-.025-.05-.025-.076s-.025-.05-.025-.076v-.025l-.025-.076c-.025-.05-.05-.102-.05-.152V22.9l-.025-.05-.025-.05c-.05-.102-.076-.203-.127-.28l-.026-.076c-.05-.076-.102-.178-.153-.254l-.05-.05c-.05-.05-.076-.102-.127-.152l-.05-.076c-.05-.076-.102-.127-.153-.177v-.203a8.28 8.28 0 0 1-.076-.355c0-.025-.025-.076-.025-.102v-.025c0-.05-.026-.076-.026-.127-.025-.102-.05-.203-.102-.305 0-.025-.025-.076-.025-.102l-.076-.228c-.025-.05-.025-.102-.05-.127-.025-.076-.05-.153-.102-.228l-.076-.153c-.025-.076-.076-.153-.102-.228l-.076-.153c-.05-.076-.076-.152-.127-.228l-.076-.153a2.13 2.13 0 0 1-.152-.254c-.025-.05-.05-.076-.076-.127-.025-.026-.05-.076-.076-.102-.076-.076-.127-.153-.203-.228l-.05-.025c-.102-.102-.178-.203-.28-.28l-.025-.025c-.05-.026-.1-.076-.126-.102h-.026c-.05-.026-.076-.05-.127-.076l-.025-.025c-.05-.025-.127-.076-.228-.127-.025-.025-.076-.025-.127-.05-.228-.076-.507-.177-.862-.28-.025 0-.05 0-.076-.025-.28-.076-.61-.153-.965-.203-.127-.026-.228-.026-.355-.05-.05 0-.102 0-.178-.025h-.076c-.28-.026-.532-.05-.812-.05h-.025c-.355 0-.7.025-1.04.102.076-.127.305-.28.508-.406.28-.152.532-.254.532-.254a2.72 2.72 0 0 0-.457.051c-.05 0-.102.025-.153.025-.025 0-.076 0-.1.026h-.025c-.026 0-.05 0-.076.025-.787.178-1.547.457-1.98.635l-.153.076h-.025c-.05 0-.076 0-.127.025.305-.583.76-.887 1.117-1.04.05-.025.127-.05.178-.076.025 0 .025 0 .05-.025.05-.025.102-.025.127-.05.076-.025.127-.025.127-.025h-.406a6.04 6.04 0 0 0-2.309.761c-.457.254-.863.533-1.218.812-.102.025-.177.05-.28.05-.965.203-2.054.457-3.196.812-.432.127-.863.28-1.294.432l-1.015.38-.736.304c-1.75.787-3.5 1.827-4.946 3.222l-.152.153-.38.38-.153.152c-.05.076-.127.153-.177.203a10.3 10.3 0 0 0-.787.989 8.92 8.92 0 0 0-.508.812l-.025.025c-.33.583-.634 1.192-.862 1.877-.127.33-.228.685-.33 1.04-.025.102-.05.178-.076.28l-.025.05a9.7 9.7 0 0 0-.223 1.195c0 .076-.025.153-.025.254-.025.203-.05.406-.05.634-.025.203-.025.38-.025.583v.787a6.22 6.22 0 0 0 .025.685v.025c0 .23.026.457.05.71 0 .102.025.203.025.305v.076c0 .05 0 .102.025.177.025.254.076.533.102.812 0 .076.026.153.026.228.05.228.076.482.127.71 0 0-.05-.305-.025-.76 0-.102.025-.228.025-.33.026-.254.076-.558.178-.837l.076-.228c0-.025.025-.05.05-.102.05-.127.127-.28.203-.406.025.102.025.203.05.28v1.344c.025.863.102 1.903.28 2.79 0 0 .025-1.598.305-1.8 0 0 .482 2.994.913 4.11.05.152.127.254.178.33v-.305l-.05-1.648v-.178c.33.685.7 1.37 1.142 2.106.127.203.228.406.355.61-.812.7-1.573 1.75-2.132 2.968-.076.203-.177.406-.254.61-.05.127-.076.228-.127.355 0 .025-.026.076-.026.102-.025.076-.05.178-.076.254 0 .05-.025.076-.025.127-.025.076-.05.177-.076.254 0 .05-.025.076-.025.127l-.076.38c-.025.127-.05.254-.05.38 0 .05 0 .076-.025.127 0 .102-.025.178-.025.28 0 .05 0 .102-.025.153 0 .102-.025.177-.025.28v.888a1.57 1.57 0 0 0 .025.33v.076c0 .127.025.254.05.406 0 .05 0 .076.025.127 0 .102.025.178.05.28 0 .05.025.102.025.152.025.076.025.178.05.254 0 .05.025.102.025.153.025.076.05.152.05.254.025.05.025.102.05.178s.05.178.076.254c.026.05.026.102.05.153.025.076.05.177.076.254.025.05.025.102.05.153.025.102.076.203.102.28.025.05.025.076.05.127l.38.837c.025.05.05.076.076.127l.153.305c.025.05.05.102.102.152.05.076.102.178.152.254.026.05.076.102.102.153.05.076.102.177.177.254.05.05.076.102.127.178l.177.254c.05.05.076.102.127.177.076.076.127.178.203.254.05.05.076.102.127.153.076.102.153.177.254.28l.127.127c.127.127.254.28.38.406 0 0-.076-.102-.178-.305-.025-.025-.05-.076-.05-.127l-.076-.153c-.025-.05-.05-.102-.076-.178a4.26 4.26 0 0 1-.355-1.827l.228.305c.076.178.203.406.33.66a1.14 1.14 0 0 1 .127.254c.203.356.406.76.66 1.142.305.482.61.94.94 1.37 0 0-.38-.812-.508-1.345-.025-.152-.05-.28-.025-.355.025.025.05.076.102.102.025.026.05.076.102.102a4.88 4.88 0 0 0 .228.304l.05.05c.05.05.076.127.127.178.05.076.102.153.177.228.533.685 1.27 1.598 1.776 2.08.178.153.33.28.432.33l-.736-1.32c1.675 1.37 8.626 3.12 15.45 1.167a17.87 17.87 0 0 0 2.461-.887c.482-.203.964-.457 1.446-.71l.076-.05a20.28 20.28 0 0 0 .99-.583c.254-.152.507-.33.735-.482a18.87 18.87 0 0 0 1.218-.913c.026-.025.05-.05.076-.05.38-.33.76-.685 1.09-1.04a15.43 15.43 0 0 0 1.217-1.446l.025-.026c.102-.127.178-.228.254-.355l.025-.025c.025-.05.05-.076.076-.127l.355-.508c.025-.05.05-.076.076-.127a1.72 1.72 0 0 1 .178-.279c.05-.076.076-.127.127-.203a1.02 1.02 0 0 0 .127-.228c.076-.127.153-.28.228-.406l.076-.153.153-.305.073-.155.025-.05c.05-.127.127-.254.178-.38v-.025c.228-.203.38-.406.532-.583.025-.025.05-.05.05-.076.152-.482.254-.86.254-1.217m-40.818-4.92c0-.025 0-.05-.025-.102-.076-.43-.153-.887-.177-1.344v-.102c-.076.025-.153.127-.254.254-.025.05-.076.102-.102.177-.228.432-.432 1.04-.432 1.04a4.97 4.97 0 0 0 .05-.609v-.076l.076-.635v-.076c.025-.254.076-.482.127-.7 0-.025 0-.05.025-.102v-.025c0-.025 0-.05.025-.076 0-.05.025-.076.025-.127.025-.177.076-.355.102-.532l.076-.43v-.05c0-.025 0-.05.025-.05v-.05c0-.025.025-.076.025-.102s0-.05.026-.076c0-.05.025-.102.025-.127s.025-.076.025-.102c0-.05.025-.102.025-.126s0-.05.025-.076c0-.025 0-.05.025-.05 0-.05.025-.076.025-.102v-.076l-.05.05c-.05.025-.076.076-.127.102l-.05.05c-.05.05-.102.102-.127.153l-.025.025-.152.228-.025.025c0 .025-.025.025-.025.05l-.076.153v.05c-.025.076-.076.153-.102.228a7.94 7.94 0 0 0-.203.583c-.025.05-.025.127-.05.153-.025.102-.05.203-.05.228v.025-.025c0-.076 0-.127.025-.203 0-.127.025-.28.025-.406 0-.102.026-.228.05-.33 0-.026 0-.076.025-.102 0-.05.025-.102.025-.153s.025-.102.025-.152v-.076c0-.05.025-.127.025-.177v-.177c0-.026 0-.05.025-.076.025-.076.05-.177.05-.254v-.025c.025-.05.025-.127.05-.178v-.025c.025-.127.076-.254.102-.38v-.05c0-.025 0-.05.025-.076.05-.203.127-.406.177-.583v-.026c.05-.152.127-.33.177-.482v-.025c.025-.076.05-.127.076-.203.05-.102.076-.203.127-.305 0-.025.025-.076.076-.177.025-.025.025-.076.05-.102.025-.05.05-.102.076-.177l.025-.05.432-.787c.025-.025.025-.076.05-.102v-.025l.026-.05c.05-.076.102-.178.152-.254.076-.127.127-.254.203-.355.127-.228.228-.432.305-.533.025-.076.05-.102.076-.127-.025 0-.153-.102-.355-.228-.254-.153-.61-.355-1.04-.558-.153-.076-.28-.127-.432-.203-.178-.076-.38-.152-.583-.228-.05-.025-.102-.025-.153-.05l-.507-.153-.356-.076c-.102-.026-.203-.026-.304-.05-.05 0-.102 0-.153-.026-.05 0-.1 0-.152-.025-.127 0-.28-.025-.406-.025h-.203c-.305 0-.583.025-.862.076h-.047a7.45 7.45 0 0 0-1.472.38c-.152.05-.305.127-.482.203-.05.025-.076.05-.127.05l-.153.076c-.457.228-.888.533-1.294.863h-.024c-.355.28-.66.61-.94.94l-.228.305c-.102.127-.177.254-.254.38a6.81 6.81 0 0 0-.431.735c-.05.102-.102.178-.127.28 0 .025-.025.025-.025.05-.254.61-.457 1.243-.533 1.928-.025.126-.025.254-.05.406v.05c0 .102-.025.203-.025.33v.457c0 .102 0 .203.025.305v.127c0 .076.025.152.025.228v.025c0 .05 0 .076.025.127 0 .076.026.153.026.203s.025.102.025.152c.025.076.025.127.05.203 0 .05.025.102.05.152v.025l.025.05v.05l.025.05c.026.05.026.102.05.152s.025.127.05.178.05.102.05.177l.026.05c.025.05.025.076.05.127s.05.102.076.177l.076.153c.025.025.025.05.05.076s.025.05.05.076l.076.152c.025.05.05.127.102.178a.54.54 0 0 0 .076.127c.025.05.076.127.102.177s.05.076.076.127.076.127.127.177c.025.05.05.076.076.102.05.05.076.127.127.177.025.025.05.076.076.102.05.05.102.127.152.178a.33.33 0 0 1 .076.102c.05.05.102.127.152.178l.076.076c.05.05.102.127.177.178l.076.076.178.178c.025.025.05.05.076.05.05.05.127.102.203.177.026.025.05.025.076.05.076.05.127.102.203.153.026.025.05.025.05.05l.228.152.05.026.228.152.05.026c.076.05.178.1.254.152l.05.025c.076.05.177.102.254.127l.05.025c.102.05.178.076.28.127l.025.025c.102.05.203.076.28.127h.026c.1.025.203.076.304.102h.025c.05.025.102.025.152.05s.102.025.178.05h.025l.33.076c.102.025.228.05.33.05.355.05.7.076 1.065.102h.254c.127 0 .228 0 .355-.025.153-.025.33-.025.508-.05l.43-.076c.228-.05.457-.102.66-.178.66-.177 1.218-.432 1.573-.7 0 0-.228-1.016-.406-2.03-.052-.053-.078-.155-.103-.256" fill="#90694c"/><path d="M34.38 4.194l-.076-1.015.508-1.117.203-.05c-.33-.152-.736-.254-1.192-.33-.913-.127-2.08 0-3.4.33s-2.816.913-4.39 1.7c-3.17 1.573-6.672 3.983-10.072 7.078-1.192 1.065-2.283 2.182-3.298 3.272-1 1.065-1.877 2.157-2.69 3.197-1.65 2.156-2.892 4.236-3.704 6.113-.532 1.243-.863 2.385-1 3.374-.102.7-.076 1.345.05 1.852.05.177.102.305.152.457a2.72 2.72 0 0 0 .482.787l2.055 2.157.228.228.025-.025c.05-.076.127-.153.203-.203l.025-.026.076-.076c.05-.076.127-.127.177-.203.05-.05.076-.076.127-.102s.076-.076.127-.102l.05-.05c.05-.025.076-.076.127-.102.05-.05.127-.102.178-.153.025-.025.076-.05.102-.076h.025c.076-.05.127-.102.203-.152.05-.025.076-.05.127-.102.076-.05.127-.102.203-.152.05-.025.076-.05.127-.076.076-.05.152-.102.228-.127.05-.026.076-.05.127-.076.076-.05.153-.076.228-.127.05-.025.076-.05.127-.076l.05-.025c.482-1.344 1.218-2.842 2.182-4.364 1.167-1.877 2.664-3.856 4.44-5.835 1.116-1.243 2.334-2.487 3.653-3.68a53.88 53.88 0 0 1 5.175-4.161 45.08 45.08 0 0 1 3.424-2.182c.102-.05.203-.127.33-.178a15.63 15.63 0 0 1 .887-.482 24.67 24.67 0 0 1 1.877-.888l-.305-.355-.05-.05-.38-.432L30.04 5.05l.025-1.827-.025-.025 1.497-.457 2.843 1.45" fill="#2f83c1"/><path d="M58.9 46.812s.05-.38-.153-.735c0-.025-.025-.05-.025-.05l-.102-.102c-.05-.05-.102-.102-.177-.153a.54.54 0 0 0-.127-.076 1.71 1.71 0 0 0-.432-.127c-.127-.025-.254-.025-.406-.025h-.203v.05c0 .025.025.05.025.102 0 .025 0 .05.026.05.025.076.05.203.076.305 0 0 0 .025-.025.076v.025c-.076.178-.28.583-.736 1.09-.076.102-.152.177-.254.28-1.27 1.32-4.01 3.17-9.792 4.212-1.954.28-3.78.305-5.302.102-2.283-.28-3.983-1.015-4.795-2.004-.076-.076-.127-.177-.203-.254-.05-.076-.076-.127-.127-.203-.025-.025-.025-.05-.05-.076a4 4 0 0 1-.482-1.903c0-.786.254-1.522.66-2.08.33-.457.76-.812 1.294-.964.254-.076.533-.127.812-.102a.88.88 0 0 1 .228.025c.177.026.457.05.787.102.025 0 .076 0 .102.025 1.09.127 2.816.305 4.896.177 3.806-.228 8.803-1.42 13.343-5.53v-.026c.025-.355-.025-.964-.457-1.446-.076-.076-.153-.153-.254-.228-.05-.05-.127-.076-.177-.127-.076-.025-.127-.076-.178-.102l-.228-.153v-.025a.52.52 0 0 0-.102-.153c-1.168-1.776-2.79-2.816-3.45-3.298-.305-.228-.508-.33-.508-.33-1.395-.863-1.598-1.142-1.472-3.45l.228-3.424c0-.203.025-.38.025-.558v-.735c0-.127-.025-.254-.025-.355 0-.05 0-.102-.025-.152-.025-.127-.025-.254-.05-.38 0-.05-.026-.127-.026-.177 0-.076-.025-.127-.05-.203-.025-.05-.025-.127-.05-.177-.025-.076-.05-.153-.05-.228 0-.025-.025-.05-.025-.076s-.025-.05-.025-.076v-.025l-.025-.076c-.025-.05-.05-.102-.05-.152V22.9l-.025-.05-.025-.05c-.05-.102-.076-.203-.127-.28l-.026-.076c-.05-.076-.102-.178-.153-.254l-.05-.05c-.05-.05-.076-.102-.127-.152l-.05-.076c-.05-.076-.102-.127-.153-.177l-.203-.203a1.02 1.02 0 0 0-.228-.127c-.025-.025-.05-.025-.076-.025l-.152-.076c-.025 0-.05-.026-.076-.026-.05-.025-.102-.025-.127-.05-.025 0-.05-.025-.102-.025s-.076-.025-.127-.025h-.558c-.025 0-.05 0-.076.025-.025 0-.05 0-.076.025-.05 0-.1.025-.177.05h-.05c-.153.05-.28.102-.432.153l-.05.025c-.05.025-.102.05-.178.076l-.076.025-.152.076-.076.05-.153.076-.076.05c-.05.025-.102.076-.153.102l-.05.025c-.05.05-.127.076-.178.127l-.025.025c-.076.05-.127.102-.203.127-.127.076-.254.177-.38.254-.102.076-.203.152-.33.228l-.05.025c-.102.076-.228.153-.33.203l-.05.025c-.102.076-.228.127-.33.203l-.05.025c-.102.076-.23.127-.356.178l-.05.025c-.127.05-.228.102-.355.152l-.05.025c-.127.05-.254.076-.38.127h-.02l-.406.076c-.23.025-.483.05-.71.05-.38 0-.76-.025-1.167-.076l-.38-.076c-.05 0-.102-.025-.127-.025L39.68 23.4c-.153-.025-.28-.076-.43-.102l-.71-.153c-.05 0-.102-.025-.127-.025s-.076-.025-.102-.025c-.05 0-.102-.026-.153-.026s-.102-.025-.153-.025h-.05c-.05 0-.102-.025-.127-.025-.102-.025-.203-.05-.33-.05-.025 0-.076 0-.102-.025-.076 0-.153-.025-.228-.025-.05 0-.076 0-.127-.025-.076 0-.127-.025-.203-.025H35.67c-.127 0-.228.025-.355.025h-.102c-.076 0-.153.025-.228.025h-.025c-.05 0-.076.025-.127.025-.076.025-.152.025-.228.05-.05 0-.102.025-.127.025-.076.025-.152.05-.228.05-.05 0-.076.026-.127.05-.076.025-.178.05-.254.076-.05.025-.076.025-.102.05a5.01 5.01 0 0 0-.355.152c-.965.558-1.8 1.32-2.435 2.182a9.43 9.43 0 0 0-.609.913c-.203.33-.356.685-.507 1.04-.05.102-.076.203-.127.305-.05.177-.127.355-.178.533 0 .025 0 .05-.025.05l-.153.634c-.05.228-.076.43-.102.66-.026.127-.026.228-.026.355-.025.33-.025.635 0 .965v.076c0 .076 0 .153.026.254a6.22 6.22 0 0 0 .102.685.74.74 0 0 1 .051.254c.025.076.025.153.05.228.152.583.38 1.117.66 1.572 1.04 1.802 2.765 2.892 4.034 3.476.482.203.99.406 1.522.583l-.05.05c-.102.025-.203.05-.33.076-.177.05-.406.127-.634.203-.254.076-.558.203-.863.33-.812.33-1.725.812-2.537 1.472-.102.076-.203.177-.305.254-.178.153-.33.304-.482.482l-.127.127c-.05.076-.127.127-.178.203l-.076.076c-.076.102-.153.203-.203.305-.076.102-.127.203-.203.305-.482.837-.76 1.852-.685 3.07v-.05c0-.025 0-.05.025-.076v-.025c0-.025.025-.05.025-.102v-.025c0-.026.025-.076.025-.127s.025-.076.05-.127v-.03c.025-.05.025-.102.05-.152v-.025c.026-.05.026-.102.05-.153V44.2c.026-.05.05-.102.076-.178l.025-.025c.025-.05.05-.127.102-.177.05-.102.102-.178.153-.28.025-.025.05-.076.076-.102l.025-.025.153-.228c.05-.05.1-.127.152-.177l.05-.05c.05-.05.076-.102.127-.127l.05-.05c.05-.05.127-.1.177-.177 0 0-1.09 2.487-.61 4.44v-.38c0-.05 0-.102.025-.153 0-.05 0-.102.026-.153v-.025c0-.05.025-.127.025-.178v-.05c.025-.076.025-.127.05-.203v-.025c.025-.076.05-.153.05-.203 0-.026.025-.05.025-.076l.026-.05c.025-.05.05-.127.076-.178.025-.076.076-.152.127-.228 0-.026.025-.05.025-.05l.152-.228s-.05.61-.05 1.345c0 .127 0 .228.025.355 0 .076 0 .152.025.228a10.02 10.02 0 0 1 .406-2.207c-.203.685-.355 1.42-.406 2.207-.025.507-.025 1.015.026 1.547.076.887.305 1.85.684 2.84 0 0-.355-1.142.153-2.283l.153.305c.05.33.102.812.203 1.344.102.888.508 3.552 2.334 5.403 0 0-.685-.887-.583-2.03.076.152.152.28.203.406.305.583.913 1.65 1.598 2.4 0 0-.532-1.04-.406-1.27 0 0 1.776 2.207 2.334 2.4l-.735-1.217-.025-.026c2.562 1.878 6.113 2.562 10.477 1.345.76-.203 1.522-.482 2.334-.812.482-.203.964-.457 1.446-.71l.076-.05c.33-.177.66-.38 1-.583.254-.153.507-.33.735-.483a18.87 18.87 0 0 0 1.218-.913c.025-.025.05-.05.076-.05.38-.33.76-.685 1.09-1.04a15.43 15.43 0 0 0 1.217-1.446l.026-.025a3.2 3.2 0 0 0 .254-.355l.025-.025c.026-.05.05-.076.076-.127l.356-.508c.025-.05.05-.076.076-.126.05-.102.102-.178.178-.28.05-.076.076-.127.127-.203s.102-.152.127-.228c.076-.127.153-.28.228-.406l.076-.152.23-.457.025-.05c.05-.127.127-.254.178-.38v-.025c.228-.203.38-.406.532-.583.025-.026.05-.05.05-.076a1.87 1.87 0 0 0 .327-1.06m-41.02-6.47c-.076.025-.153.127-.254.254-.025.05-.076.102-.102.177-.228.432-.432 1.04-.432 1.04a4.97 4.97 0 0 0 .05-.609v-.076l.076-.635v-.076c.025-.254.076-.482.127-.7 0-.025 0-.05.025-.102v-.025c0-.025 0-.05.025-.076 0-.05.025-.076.025-.127.025-.177.076-.355.102-.532l.076-.43v-.05c0-.025 0-.05.025-.05v-.05c0-.025.025-.076.025-.102s0-.05.026-.076c0-.05.025-.102.025-.127s.025-.076.025-.102c0-.05.025-.102.025-.126s0-.05.025-.076c0-.025 0-.05.025-.05 0-.05.025-.076.025-.102v-.076l-.05.05c-.05.025-.076.076-.127.102l-.05.05c-.05.05-.102.102-.127.153l-.025.025-.152.228-.025.025c0 .025-.025.025-.025.05l-.076.153v.05c-.025.076-.076.153-.102.228a7.94 7.94 0 0 0-.203.583c-.025.05-.025.127-.05.153-.025.102-.05.203-.05.228v.025-.025c0-.076 0-.127.025-.203 0-.127.025-.28.025-.406 0-.102.026-.228.05-.33 0-.026 0-.076.025-.102 0-.05.025-.102.025-.153s.025-.102.025-.152v-.076c0-.05.025-.127.025-.177v-.177c0-.026 0-.05.025-.076.025-.076.05-.177.05-.254v-.025c.025-.05.025-.127.05-.178v-.025c.025-.127.076-.254.102-.38v-.05c0-.025 0-.05.025-.076.05-.203.127-.406.177-.583v-.026c.05-.152.127-.33.177-.482v-.025c.025-.076.05-.127.076-.203.05-.102.076-.203.127-.305 0-.025.025-.076.076-.177.025-.025.025-.076.05-.102.025-.05.05-.102.076-.177l.025-.05c-.025-.025-.076-.025-.102-.05h-.025l-.05-.025c-.228-.102-.482-.203-.735-.28h-.05c-.178-.05-.33-.076-.508-.102-.102 0-.203-.026-.305-.026h-.25c-.127 0-.254.026-.38.026-.05 0-.076 0-.127.025-.05 0-.127.026-.178.026-.025 0-.05 0-.076.025-.05 0-.076.025-.127.025-.076.025-.178.05-.254.076-.025 0-.076.026-.102.026-.102.05-.228.076-.33.127-.05.025-.076.05-.127.05l-.203.102c-.05.025-.102.05-.153.102-.05.025-.102.05-.152.102-.05.026-.102.076-.153.102-.025.025-.076.05-.102.076-.076.076-.178.152-.254.228l-.127.127c-.076.076-.127.153-.203.228l-.025.025c-.026.05-.076.076-.102.127l-.076.076c-.127.178-.254.38-.356.583-.025.025-.025.05-.05.076-.05.102-.076.203-.127.305-.025.05-.025.076-.05.127-.026.102-.076.203-.102.33v.102c-.025.076-.025.152-.05.228 0 .05 0 .076-.025.127 0 .05 0 .076-.025.127v.102c0 .127-.025.254 0 .38 0 .102 0 .203.025.304v.05c0 .05.025.102.025.153.025.203.076.38.127.583a7.31 7.31 0 0 0 .153.406c.1.254.228.482.38.7.305.457.7.863 1.192 1.167a3.4 3.4 0 0 0 .862.406 3.49 3.49 0 0 0 .913.203c.076 0 .153.025.203.025h.33c.102 0 .203-.025.305-.025.05 0 .127 0 .178-.025l.432-.076h.025c.05-.025.102-.025.177-.05a3.01 3.01 0 0 0 .508-.203l.025-.025c.05-.025.102-.05.127-.05-.076-.43-.152-.887-.177-1.344.128-.056.128-.08.128-.106" fill="#fce9cd"/><path d="M35.013 4.498l.076.05z" fill="#4d9ed7"/><path d="M57.363 45.772c0-.025 0-.05-.025-.05-.026-.05-.026-.076-.026-.102-.127-.406-.28-.7-.43-.94-.178-.28-.33-.432-.33-.432l.076-.305a1.96 1.96 0 0 0 .05-.38c.102-.913-.127-1.624-.33-2.03a1.29 1.29 0 0 0-.076-.177l-.432.304c-2.74 1.852-5.8 3.045-9.132 3.552-2.283.355-4.693.38-7.205.076l.05.025s-1.522.203-1.928 1.65l.025.025-.127.965c.05 1.32.634 2.13 1.32 2.56.7.28 1.573.482 2.537.61 1.65.203 3.577.153 5.505-.152 2.588-.356 6.24-1.725 8.854-3.5.583-.406 1.142-.837 1.598-1.27l.05-.05c0-.177-.025-.28-.025-.38" fill="#fff"/><path d="M52.416 33.24c-1.395-.863-1.598-1.142-1.472-3.45l.228-3.425.025-.558v-.735c0-.127-.025-.254-.025-.355 0-.05 0-.102-.025-.153-.025-.127-.025-.254-.05-.38 0-.05-.026-.127-.026-.177 0-.076-.025-.127-.05-.203-.025-.05-.025-.127-.05-.178a3.51 3.51 0 0 0-.71-.787l-.05-.05-.05-.024h-.025c-.05-.026-.076-.05-.127-.076s-.102-.05-.127-.076c-.406-.254-.887-.406-1.37-.482-.28-.05-.558-.05-.837-.05-.127 0-.28.026-.406.026a9.05 9.05 0 0 0-1.091.228l-.38.254-.33.228-.05.025a2.26 2.26 0 0 1-.33.203l-.05.025c-.102.076-.23.127-.33.203l-.05.025c-.102.076-.228.127-.355.178l-.05.025-.355.153-.05.025c-.127.05-.254.076-.38.127h-.025l-.406.076-.7.05c-.38 0-.76-.025-1.167-.076l-.38-.076c-.05 0-.102-.025-.127-.025l-1.014-.228c-.153-.025-.28-.076-.432-.102l-.7-.153c-.05 0-.102-.025-.127-.025a4.17 4.17 0 0 0-.583.05h-.05a8.51 8.51 0 0 0-1.725.406c-.025 0-.05.025-.102.025-.102.026-.178.076-.28.102l-.355.153c-.837.355-1.624.863-2.385 1.497-.305.254-.583.532-.862.812-.406.432-.76.887-1.1 1.37-.025.026-.025.05-.05.076a6.5 6.5 0 0 0-.458.786l-.152.28v.025c-.153.33-.28.635-.38.965 0 .025 0 .05-.025.05-.026.05-.026.102-.05.153-.05.152-.102.304-.127.457-.05.152-.076.305-.102.482 0 .025-.025.076-.025.102-.025.102-.025.203-.05.28l-.1 1.065v.254a5.83 5.83 0 0 0 .66 1.573c1.04 1.802 2.765 2.892 4.033 3.476l1.522.583.025.025.025-.025c.076-.05.127-.102.203-.153.025-.025.05-.025.076-.05l.228-.152c.025-.026.05-.026.076-.05l.228-.152c.025-.025.05-.025.076-.05l.254-.152c.025-.025.05-.025.076-.05l.254-.153c.025-.025.05-.025.076-.05l.254-.153c.025-.026.076-.026.102-.05l.254-.152c.025-.026.076-.05.102-.05.076-.05.178-.102.28-.152.05-.025.076-.05.127-.05.102-.05.177-.102.28-.127.05-.025.076-.05.127-.05l.28-.127.152-.076.28-.127c.05-.025.102-.05.178-.076.1-.025.177-.076.28-.102.05-.025.127-.05.177-.076.102-.025.178-.076.28-.102l.203-.076c.102-.025.178-.076.28-.102l.228-.076c.076-.025.177-.05.254-.102l.508-.152.28-.076.254-.076c.102-.025.203-.05.33-.102.05-.025.102-.025.152-.05.406-1.04 1.65-3.628 3.755-3.907l.635-.05h.152c-.025-.153-.05-.305-.05-.482-.076-1.117.28-2.055.76-2.08.38-.025.685.533.736.7.152.33.254.76.28 1.243a4.41 4.41 0 0 1-.102 1.192c.05.05.076.102.127.127.482.6.558 1.42.532 2.03.178-.025.38-.025.583-.05.05 0 .102 0 .152-.025h.102l.735-.05 1.7-.102-.53-.278m5.302 15.627a15.67 15.67 0 0 1-2.84 2.004l-1.42.685c-1.04.457-2.03.76-2.917 1-1.954.483-3.298.483-3.298.483 1.065.583 2.4.583 3.323.507.635-.05 1.066-.178 1.066-.178-.025.38-.076.735-.127 1.1a5.47 5.47 0 0 1-.305 1.015v.025c-.153.38-.355.7-.558 1.015-.025.025-.05.076-.076.102l.076-.05 1-.583.735-.482 1.218-.913c.025-.025.05-.05.076-.05l1.1-1.04a15.43 15.43 0 0 0 1.218-1.446l.025-.026c.102-.127.178-.228.254-.355l.025-.025c.025-.05.05-.076.076-.127l.355-.508c.025-.05.05-.076.076-.127a1.72 1.72 0 0 1 .178-.279l.127-.203c.05-.076.102-.153.127-.228l.228-.406.33-.66c.05-.127.127-.254.177-.38-.102.028-.152.078-.228.154M34.58 38.644c-.254.076-.558.203-.862.33-.812.33-1.725.812-2.537 1.472-.102.076-.203.177-.305.254a4.35 4.35 0 0 0-.482.482l-.128.128c-.05.076-.127.127-.178.203l-.076.076c-.076.102-.152.203-.203.305-.076.102-.127.203-.203.305-.482.837-.76 1.852-.685 3.07v-.05c0-.025 0-.05.026-.076v-.026c0-.025.025-.05.025-.102v-.027c0-.025.025-.076.025-.127s.026-.076.05-.127v-.025c.025-.05.025-.102.05-.153v-.025c.025-.05.025-.102.05-.152v-.025c.025-.05.05-.102.076-.177l.025-.026c.026-.05.05-.127.102-.178l.152-.28c.026-.025.05-.076.076-.102l.025-.026.152-.228c.05-.05.102-.127.153-.178l.05-.05c.05-.05.076-.102.127-.127l.05-.05c.05-.05.127-.102.178-.177 0 0-1.1 2.486-.6 4.44v-.38c0-.05 0-.102.025-.152 0-.05 0-.102.025-.153v-.025c0-.05.025-.127.025-.177v-.05c.025-.076.025-.127.05-.203v-.024a.75.75 0 0 0 .05-.203c0-.025.025-.05.025-.076l.025-.05c.025-.05.05-.127.076-.178.026-.076.076-.152.127-.228 0-.026.025-.05.025-.05L30.32 45l-.05 1.344c0 .127 0 .228.025.355 0 .076 0 .153.025.228.05-.786.203-1.522.406-2.207l.178-.557c0-.026.025-.05.025-.076l.203-.507c.025-.026.025-.05.05-.102l.228-.482c.025-.025.025-.05.025-.076l.532-.913c.026-.026.026-.05.05-.076l.228-.33c.025-.025.025-.05.05-.076s.025-.05.05-.076l.28-.38c.026-.025.026-.05.05-.05l.305-.356.38-.43c.102-.102.177-.203.28-.28l.102-.102.6-.583c.558-.508 1.015-.837 1.167-.94l-.33.076c-.154.08-.357.155-.6.23m14.615-5.494s0-.05-.025-.153c-.102-.356-.457-1.218-1.852-1.1-1.472.153-1.98 1.345-2.106 1.75-.025.076-.025.127-.025.127l.05.025c.177-.153.532-.153.862.076.153.102.254.203.355.33.127.203.153.406.076.558l-.076.076s.05.025.153.05c.406.127 1.548.355 2.156-.43.026-.05.05-.076.076-.127-.127-.05-.178-.228-.178-.457 0-.102.025-.203.05-.33.076-.303.303-.48.48-.405m-7.332 10.858l-2.435.457c.025 0 .076 0 .102.026 1.1.127 2.816.304 4.896.177 3.806-.228 8.803-1.42 13.343-5.53V39.1c.026-.355-.025-.965-.457-1.446-.076-.076-.152-.152-.254-.228-.025 0-.025-.025-.05-.025-.127-.076-.228-.127-.33-.203l-.228-.152v-.025a8.11 8.11 0 0 1-.965 1.142c-.127.127-.254.254-.406.38-1.243 1.117-2.867 2.08-4.617 2.842-2.9 1.268-6.138 2.106-8.598 2.613m-24.05-6.62c-.05.025-.076.076-.127.102l-.05.05c-.05.05-.102.102-.127.153l-.026.025-.152.228-.025.025c0 .025-.025.025-.025.05l-.076.153v.05c-.026.076-.076.152-.102.228a7.94 7.94 0 0 0-.203.583c-.025.05-.025.127-.05.153a1.97 1.97 0 0 0-.051.228v.025-.025c0-.076 0-.127.025-.203 0-.127.026-.28.026-.406 0-.102.025-.228.05-.33 0-.025 0-.076.025-.102 0-.05.025-.102.025-.152s.025-.102.025-.153v-.076c0-.05.025-.127.025-.177v-.178c0-.025 0-.05.025-.076a.88.88 0 0 0 .05-.254v-.025c.025-.05.025-.127.05-.178v-.025c.025-.126.076-.254.102-.38v-.05c0-.025 0-.05.025-.076.05-.203.127-.406.178-.583v-.025c.05-.153.127-.33.177-.482v-.025c.025-.076.05-.127.076-.203.05-.102.076-.203.127-.304 0-.026.025-.076.076-.178.025-.025.025-.076.05-.102.025-.05.05-.102.076-.177l.026-.05c-.026-.025-.076-.025-.102-.05h-.025l-.05-.025c-.228-.102-.482-.203-.736-.28h-.05a3.51 3.51 0 0 0-.508-.102c-.102 0-.203-.025-.305-.025H16c-.127 0-.254.025-.38.025-.05 0-.076 0-.127.025-.05 0-.127.025-.177.025-.025 0-.05 0-.076.025-.05 0-.076.026-.127.026-.076.025-.178.05-.254.076-.025 0-.076.025-.102.025-.102.05-.228.076-.33.127-.05.025-.076.05-.127.05l-.203.102c-.05.025-.102.05-.153.102-.05.025-.102.05-.153.102-.05.025-.102.076-.152.102-.025.026-.076.05-.102.076-.076.076-.177.153-.254.228l-.127.127c-.076.076-.127.152-.203.228l-.025.025c-.025.05-.076.076-.102.126l-.076.076a4.36 4.36 0 0 0-.355.583c-.026.025-.026.05-.05.076-.05.102-.076.203-.127.305-.025.05-.025.076-.05.127 0 .025.025.05.025.076.025.102.05.177.076.28v.05c.025.076.076.177.1.254.102.254.203.482.33.685.025.025.025.05.05.076v.025l.025.025a2.52 2.52 0 0 0 .228.38c.127.177.228.305.305.406l.05.05c0 .025.025.025.025.025l.05.05c0-.05-.025-.102-.025-.127a4.16 4.16 0 0 1-.102-.964v-.05c0-.203 0-.406.025-.583l.076.228c.025.102.076.203.102.305v.05a5.26 5.26 0 0 0 .507 1.066 4.81 4.81 0 0 0 .508.735c.026.025.05.05.05.076l.05.05c-.076-.355-.127-.685-.127-1.015v-.33c0-.152 0-.28.025-.406a5.05 5.05 0 0 0 .203.66v.025a7.4 7.4 0 0 0 .837 1.598l.025.025c.05.05.076.102.102.152.026.025.05.05.05.076l.075.075v-.05c0-.05-.025-.102-.025-.153l-.076-.508c0-.102-.026-.228-.026-.33v-.56c0-.127.026-.28.026-.406.025.076.05.178.076.254.025.05.05.127.076.178v.025l.025.025c.025.076.05.153.076.203.05.127.102.254.178.355.076.153.127.28.203.38.05.076.076.127.102.178.05.076.102.153.127.203.05.05.076.102.102.153l.025.025c.025.05.076.076.102.127.026.025.05.05.05.076.05.05.076.102.102.102l.025.025V41l.076-.634V40.3a5.27 5.27 0 0 1 .127-.7c0-.025 0-.05.025-.102v-.025c0-.025 0-.05.025-.076 0-.05.025-.076.025-.127.025-.177.076-.355.102-.533l.076-.43v-.05c0-.025 0-.05.025-.05v-.05c0-.025.026-.076.026-.102s0-.05.025-.076c0-.05.025-.102.025-.127s.025-.076.025-.102c0-.05.025-.102.025-.127s0-.05.025-.076c0-.025 0-.05.025-.05 0-.05.026-.076.026-.102v-.076l.128.08M48.56 47.98l.913-.33c.482-.203.735-.355.735-.406-.025-.05-.305-.025-.812.102-.254.05-.558.102-.94.203a4.18 4.18 0 0 1-.583.102c-.203.026-.432.076-.66.102-.458.076-.965.127-1.522.177l-.837.076c-.28.025-.583.025-.888.05-1.217.025-2.562-.025-3.932-.28a8.62 8.62 0 0 1-2.384-.838l-.025-.025c.406-1.446 1.928-1.65 1.928-1.65l-.05-.025h-.076a15.13 15.13 0 0 1-.583-.076c-.127-.025-.228-.025-.305-.05-.076 0-.153-.025-.178-.025-.913-.05-1.42.7-1.572 1.04l-.076.152a3.14 3.14 0 0 0-.254 1.015c-.05.685.127 1.42.66 2.055.355.432.965.812 1.75 1.117-.685-.432-1.294-1.27-1.32-2.562.787.33 1.674.533 2.36.66 1.446.28 2.866.305 4.1.228l.913-.076a12.04 12.04 0 0 1 .863-.102l1.523-.28c.228-.05.457-.102.66-.178a3.25 3.25 0 0 0 .583-.179" fill="#f2d2ac"/><path d="M47.367 31.033c.76.025 1.27.254 1.624.61.076-.33.127-.735.102-1.192-.025-.482-.127-.913-.28-1.243-.05-.203-.356-.736-.736-.71-.482.025-.837.965-.76 2.08 0 .152.025.305.05.457m1.27 2.866c0 .203.076.38.178.457.177.102.406-.102.507-.432 0-.025.025-.05.025-.076.076-.305 0-.61-.177-.685-.178-.102-.406.102-.508.43 0 .102-.025.204-.025.305m-3.45.558a1.19 1.19 0 0 0 .355.355c.33.203.685.228.887.05l.076-.076c.076-.152.05-.355-.076-.558-.076-.127-.203-.254-.355-.33-.33-.203-.685-.228-.863-.076-.025.025-.05.05-.076.102-.076.126-.05.33.052.532M57.794 39.1c-.026 0-.026 0 0 0m-.406 7.028a12.08 12.08 0 0 1-1.624 1.293c-2.613 1.776-6.265 3.172-8.854 3.502-1.953.305-3.856.355-5.505.152-.965-.127-1.802-.33-2.537-.61-.786-.305-1.395-.685-1.75-1.117-.533-.635-.685-1.395-.66-2.054.025-.356.102-.71.254-1.016l.076-.152c.178-.33.66-1.117 1.572-1.04a.58.58 0 0 1 .178.025c.076 0 .203.026.305.05l.583.076h.076c2.51.305 4.92.28 7.205-.076 3.323-.508 6.393-1.7 9.132-3.552l.432-.305 1.497-2.232c-4.54 4.135-9.54 5.328-13.343 5.556a24.93 24.93 0 0 1-4.896-.178c-.05 0-.076 0-.102-.025-.33-.05-.583-.076-.787-.102-.102 0-.177-.025-.228-.025a2.15 2.15 0 0 0-.812.102c-.507.152-.964.507-1.294.964-.406.558-.66 1.32-.66 2.08 0 .634.153 1.294.482 1.902.025.025.025.05.05.076.05.076.076.127.127.203s.127.178.203.254c.787.99 2.51 1.7 4.795 2.004 1.547.203 3.35.178 5.302-.102 5.784-1.04 8.524-2.917 9.792-4.21.102-.102.177-.178.254-.28.457-.533.66-.94.736-1.09v-.025c.025-.05.025-.076.025-.076l-.025.027" fill="#664f44"/><path d="M38.995 26.087c-.178-.102-.38-.178-.583-.228l-.406-.076c-.05 0-.102 0-.152-.025-.685-.05-1.27.05-1.27.05-.127.025-.254.05-.355.102a4.03 4.03 0 0 0-2.004 1.32c-.355.457-.61.94-.735 1.42-.026.05-.026.076-.026.127-.025.127-.076.254-.102.355-.076.406-.127.76-.127 1.066l.025.66c.153-.355.33-.66.508-.964.432-.736.888-1.345 1.37-1.827.913-.94 1.85-1.446 2.56-1.7.762-.255 1.295-.28 1.295-.28m10.984-1.295l-.025-.05c-.102-.127-.228-.254-.38-.355-.355-.228-.837-.355-1.497-.228 0 0-.787.177-1.243.7 0 0 1.37-.583 2.84.457.127.102.28.203.406.33s.28.254.406.432c0 0-.05-.635-.432-1.193-.025-.05-.05-.075-.076-.1" fill="#e9b784"/><path d="M39.173 34.89l1.725-.457c.102-.482.127-1.065.05-1.7-.178-1.472-.837-2.613-1.497-2.537s-1.04 1.345-.862 2.816c.1.762.303 1.42.583 1.878" fill="#664f44"/><path d="M36.154 1.733l-1.37.305.28 2.487-3.628-1.853-1.497.458.025.025 4.414 5.023.102-.05.406-.254c.05-.025.102-.05.153-.102l.61-.356L33.77 5.26 36.8 6.73l.28-.152-.28-2.157 1.37 1.598h.025c.127-.05.228-.127.355-.178l.05-.025.05-.026c.025 0 .05-.025.05-.025l.152-.076s.025 0 .025-.025l.482-.228-3.198-3.704" fill="#ffd250"/><path d="M34.8 2.113v-.076.076m0-.076l.203-.05c-.33-.153-.736-.254-1.192-.33-.913-.127-2.08 0-3.4.33s-2.816.913-4.39 1.7c-3.17 1.572-6.672 3.983-10.072 7.077-1.192 1.065-2.283 2.182-3.298 3.272l4.1 5.073c1.117-1.218 2.308-2.435 3.628-3.628 1.75-1.598 3.526-3.02 5.276-4.236 1.7-1.193 3.4-2.207 4.997-3.02l-.7-3.246.026-1.827-.026-.025 1.497-.458 2.917 1.497-.076-1.015.507-1.115" fill="#4d9ed7"/><path d="M34.8 2.037l-.508 1.117.076 1.04.7.355zM33.77 5.26l3.044 1.497-1.167.66zm3.044-.838l.28 2.157 1.09-.558z" fill="#132134"/><path d="M48.28 3.635h.56c.507 0 .99.076 1.446.178.025 0 .05 0 .076.025h.025l.05.026h.05c-.05-.026-.102-.076-.153-.102-.507-.203-1.04-.33-1.598-.406-2.74-.356-5.886.66-7.66 1.37-.102.05-.203.076-.305.127l-.457.203-.787.355c-.05.025-.076.025-.127.05l-.482.23s-.026 0-.026.025l-.152.076c-.026 0-.05.026-.05.026h-.102l-.026.025a2.34 2.34 0 0 0-.355.178h-.025c-.025.025-.05.025-.076.05h-.025c-.026 0-.05.025-.05.025l-.532.28c-.127.076-.254.127-.38.203h-.025l-.28.152c-.305.153-.583.33-.888.508-.025.025-.05.025-.102.05-.025.025-.05.025-.076.05s-.05.025-.076.05l-.025.025-.61.356c-.05.025-.102.05-.153.102l-.406.254-.102.05-1.142.76-1.852 1.32c-.076.05-.152.126-.228.177-1.598 1.192-3.12 2.487-4.59 3.806l-4.44 4.338-1.928 2.004-1.624 1.878s.102-.076.28-.254l-.406.482c2.334-2.486 4.896-5.023 7.662-7.407a74.38 74.38 0 0 1 5.226-4.135c.786-.558 1.598-1.117 2.41-1.65.254-.177.532-.33.787-.507.127-.076.254-.153.406-.228a1.02 1.02 0 0 1 .228-.127c.153-.076.28-.178.432-.254.127-.076.28-.153.406-.254.076-.05.153-.076.228-.127l.532-.305c.102-.05.203-.127.305-.178l1.015-.532c.025-.025.05-.025.076-.05l.153-.076c.076-.025.127-.076.203-.102.025-.025.05-.025.076-.05l.152-.076s.025 0 .025-.025h.025a6.45 6.45 0 0 1 .431-.203c.026 0 .05-.025.076-.05l.153-.076c.178-.076.33-.152.508-.228.05-.025.102-.05.127-.076.025 0 .05-.025.076-.025.05-.025.102-.05.152-.05.203-.076.38-.178.583-.254.178-.076.33-.153.508-.228a37.24 37.24 0 0 1 2.689-1.015c1.575-.435 2.97-.713 4.187-.764" fill="#fff"/></svg>
\ No newline at end of file
diff --git a/web/modules/webform/images/addons/mailchimp_webform_handler.svg b/web/modules/webform/images/addons/mailchimp_webform_handler.svg
new file mode 100644
index 0000000000..ef3f80d277
--- /dev/null
+++ b/web/modules/webform/images/addons/mailchimp_webform_handler.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64"><path d="M60.432 46.635c0-.102-.025-.203-.025-.305 0-.076-.025-.127-.025-.178a2.61 2.61 0 0 0-.102-.432 2.45 2.45 0 0 0-.457-.787c-.203-.228-.432-.406-.66-.532-.254-.128-.508-.203-.71-.254-.076 0-.127-.025-.178-.025.28-1.218-.076-2.156-.305-2.587l.05-.05.786-.863.05-.05c.178-.254.28-.508.355-.736.05-.203.102-.38.102-.558v-.483c-.025-.38-.076-.862-.33-1.395-.127-.254-.304-.533-.532-.787a3.13 3.13 0 0 0-.837-.66c-.025-.025-.05-.025-.076-.05a12.36 12.36 0 0 0-2.132-2.359l-.965-.76-.634-.457c-.305-.228-.532-.356-.634-.406l-.533-.355c-.076-.076-.127-.102-.153-.127 0 0 0-.025-.025-.076-.025-.076-.025-.178-.025-.355l.025-1.142.228-3.4.025-1.345c-.025-.685-.127-1.294-.254-1.852-.025-.127-.076-.254-.102-.38-.025-.102-.05-.153-.076-.203a1.8 1.8 0 0 0-.102-.254c-.025-.05-.025-.102-.076-.153-.05-.127-.102-.254-.178-.38l-.025-.025-.026-.076-.025-.05c-.127-.228-.28-.432-.432-.61-.076-.355-.203-.862-.43-1.446-.203-.508-.457-1.065-.837-1.624-.127-.203-.28-.38-.432-.558l.05-.05c.076-.076 1.852-1.953 3.272-4.388 2.613-4.54 1.75-7.306.558-8.828l-.025-.05-.026-.05c-1.14-1.27-2.714-2.03-4.617-2.283-3.984-.508-8.5 1.472-9.69 2.03l-2.182-2.385c-.203-.203-.406-.406-.634-.558l-.734-.425C35.2.287 34.632.135 34.023.058 32.83-.094 31.46.058 30 .44c-2.207.558-4.668 1.675-7.256 3.22s-5.276 3.552-7.89 5.936C11.65 12.488 9 15.558 7.083 18.5c-.965 1.446-1.75 2.866-2.334 4.236-.583 1.345-.965 2.64-1.117 3.806-.102.863-.102 1.675.076 2.4.076.33.178.635.33.94.178.38.406.735.685 1.04l2.258 2.36.254.254-.025.025-.076.152c-.05.076-.076.153-.127.203l-.076.153c-.025.076-.076.152-.102.228l-.076.153c-.025.076-.076.153-.102.228-.025.05-.05.102-.05.153l-.076.228c-.026.05-.026.102-.05.153-.025.076-.05.152-.076.254 0 .025-.025.05-.025.076s-.025.05-.025.076c-.026.076-.05.177-.076.254 0 .05-.025.102-.025.152 0 .025-.025.076-.025.102 0 .05-.025.102-.025.152s-.025.102-.025.153c-.026.102-.026.203-.05.33 0 .025 0 .05-.025.102v.026c0 .076-.025.152-.025.203 0 .102-.025.228-.025.33v1.27c0 .05 0 .102.025.153 0 .05 0 .127.025.203v.076c0 .05.025.127.025.178s.025.102.025.177c0 .025 0 .05.026.076 0 .025.025.076.025.102v.05c0 .05.025.102.05.203 0 .025 0 .025.025.05.025.05.025.102.025.127l.025.05c0 .025 0 .025.026.05l.025.05v.076c0 .025 0 .025.025.05l.025.05c0 .05.025.076.025.127.025.05.025.102.05.203v-.025.025c0 .025 0 .025.026.05.025.076.05.127.05.152.025.05.05.102.076.203l.025.025c.025.05.025.102.05.127l.025.05c0 .025.025.05.025.076s.025.076.05.102l.025.05c.025.025.025.076.05.102s.025.05.025.076c.025.05.05.102.076.178l.025.025c.025.025.025.05.05.076s.025.076.05.102a.42.42 0 0 1 .076.153l.025.025c.025.026.025.05.05.076.025.05.05.076.05.102.025.026.05.076.076.127v.025c.025.026.025.05.05.076a.37.37 0 0 0 .076.102c.025.025.05.076.102.153.025.025.05.05.05.076.025.05.05.076.076.1s.05.076.076.127c.025.025.05.076.076.102.025.05.05.076.102.102l.102.102c.05.05.076.102.127.152l.05.05.076.076.204.203.076.076.025.026c.05.05.127.1.177.177l.025.025c.025.025.05.025.076.076.076.076.152.127.228.203l.05.025.025.025.05.025c.076.05.127.102.203.153l.025.025c.025.025.05.025.05.025l.05.05c.05.05.102.076.153.127l.05.026.076.076c.05.025.127.076.177.102.026.025.05.05.102.05l.05.025.025.025h.025c.102.05.178.102.254.152l.05.025.304.153h.025l.046.014.152.076c.025 0 .05.025.076.025.026.025.05.025.102.05h.025c.05.025.102.05.153.05h.025c.05.025.102.05.178.076h.025l.05.025c.025 0 .05.025.076.025h.025a2.98 2.98 0 0 0 .254.076h.026c.127.05.254.076.38.102h.025c.102.026.228.05.33.076h.102c.102.026.203.05.305.05h.102c.076 0 .127.025.203.025 0 .026.025.05.025.076.177.482.355.965.558 1.42 2.994 8.295 11.29 14.74 20.75 15.93 9.463 1.167 19.584-5.124 23.694-13.623.177-.33.33-.634.482-.964.406-.432.735-.863.94-1.32.33-.28.406-.838.38-1.32M7.894 43.337" fill="#664f44"/><path d="M52.34 5.132a5 5 0 0 0-1.573-1.167c-.102-.05-.203-.076-.33-.1-.05-.026-.102-.076-.152-.102-.508-.203-1.04-.33-1.598-.406-2.74-.356-5.886.66-7.662 1.37-.102.05-.203.076-.305.127l-.457.203-.787.355c-.05.025-.076.025-.127.05l-.482-.558-.228-.254-.203-.228-.076-.1-1.85-2.132-.153-.178-.203-.228h-.025l-.533.127-.61.127c-.33-.153-.736-.254-1.193-.33-.913-.127-2.08 0-3.4.33s-2.816.913-4.39 1.7c-3.17 1.572-6.672 3.983-10.07 7.077-1.192 1.065-2.283 2.182-3.298 3.272-.99 1.065-1.878 2.157-2.69 3.197-1.65 2.156-2.892 4.236-3.704 6.113-.532 1.243-.862 2.385-.99 3.374-.102.7-.076 1.344.05 1.852.05.177.102.305.153.457.127.305.28.558.482.787l2.055 2.156.228.228.025-.025a.79.79 0 0 1 .203-.203l.102-.102c.05-.076.127-.126.177-.203.05-.05.076-.076.127-.102s.076-.076.127-.102l.05-.05c.05-.026.076-.076.127-.102.05-.05.126-.102.177-.152.025-.026.076-.05.102-.076h.026c.076-.05.127-.102.203-.153.05-.025.076-.05.127-.102.076-.05.127-.102.203-.153.05-.025.076-.05.127-.076.076-.05.152-.102.228-.127.05-.025.076-.05.127-.076.076-.05.153-.076.228-.127.05-.025.076-.05.127-.076l.05-.025c.076-.025.127-.076.203-.102.026-.025.076-.025.102-.05.05-.025.102-.05.178-.076l.152-.076.05-.025.38-.153c.05-.025.076-.025.127-.05s.076-.025.127-.05l.05-.025c.026 0 .05-.025.076-.025.052-.024.103-.024.18-.05h.05c.076-.025.127-.025.203-.05.05-.025.127-.025.178-.05.076-.025.152-.025.228-.05.026 0 .05-.025.102-.025.025 0 .076 0 .102-.025.076-.026.153-.026.228-.026s.127-.025.203-.025c.05 0 .102-.025.153-.025h.203c.254 0 .558 0 .863.025h.05a8.16 8.16 0 0 1 1.015.153c.076.025.178.025.254.05.025-.025.025-.076.05-.102.203-.33.38-.685.583-1.015 1.142-1.902 2.36-3.577 3.602-5.048.432-.508.863-.965 1.294-1.42 1.8-1.877 3.602-3.323 5.226-4.44.356-.254.735-.482 1.066-.7.482-.305.94-.558 1.37-.812a13.01 13.01 0 0 1 1.015-.532c.532-.28 1.015-.508 1.446-.685l.38-.152c.177-.076.355-.152.507-.203-.127-.025-.28-.025-.406-.025h-.508c-.127 0-.28 0-.406.025l-.812.076c-.102.025-.177.025-.28.05.685-.355 1.37-.61 2.004-.812a13.22 13.22 0 0 1 1.269-.305c.558-.102 1.09-.177 1.573-.203.33-.025.635-.025.913-.025s.558.025.787.025a8.23 8.23 0 0 1 1.344.177c-.127-.177-.28-.304-.43-.43-.305-.23-.634-.38-.94-.508-.127-.05-.228-.076-.33-.127-.076-.025-.152-.05-.203-.05.153-.025.28-.05.406-.05.152-.025.28-.025.432-.05 1.192-.102 2.257 0 3.044.127.94.177 1.523.406 1.523.406-.127-.254-.33-.482-.558-.685-.153-.127-.33-.254-.482-.355a9.36 9.36 0 0 1 .913.254c.76.228 1.395.508 1.902.736l.458.228c.05.025.076.05.102.05.457.254.7.432.7.432a1.92 1.92 0 0 0-.432-.761c-.05-.05-.102-.127-.152-.177h.025c.026 0 .05.025.102.025.025 0 .076.025.127.05a9.4 9.4 0 0 1 .862.38c.025 0 .025.025.05.025l.152.076c.127.076.254.127.38.228l.38.228c.076.05.127.076.203.127.127.102.28.203.406.33.153.127.28.254.406.38l.076.076c.102.102.203.203.28.305.178.203.33.432.482.66.177.28.305.61.432.94 0 .025 0 .05.025.05.076-.076.228-.228.406-.432 1.465-1.723 5.88-7.304 3.216-10.703" fill="#132134"/><path d="M58.9 46.812s.05-.38-.153-.735c0-.025-.025-.05-.025-.05l-.102-.102c-.05-.05-.102-.102-.177-.153a.54.54 0 0 0-.127-.076 1.71 1.71 0 0 0-.432-.127c-.127-.025-.254-.025-.406-.025h-.203v.05c0 .025.025.05.025.102 0 .025 0 .05.026.05.025.076.05.203.076.305 0 0 0 .025-.025.076v.025c-.076.178-.28.583-.736 1.09-.076.102-.152.177-.254.28-1.27 1.32-4.01 3.17-9.792 4.212-1.954.28-3.78.305-5.302.102-2.283-.28-3.983-1.015-4.795-2.004-.076-.076-.127-.177-.203-.254-.05-.076-.076-.127-.127-.203-.025-.025-.025-.05-.05-.076a4 4 0 0 1-.482-1.903c0-.786.254-1.522.66-2.08.33-.457.76-.812 1.294-.964.254-.076.533-.127.812-.102a.88.88 0 0 1 .228.025c.177.026.457.05.787.102.025 0 .076 0 .102.025 1.09.127 2.816.305 4.896.177 3.806-.228 8.803-1.42 13.343-5.53v-.026c.025-.355-.025-.964-.457-1.446-.076-.076-.153-.153-.254-.228-.05-.05-.127-.076-.177-.127-.076-.025-.127-.076-.178-.102l-.228-.153v-.025a.52.52 0 0 0-.102-.153c-1.168-1.776-2.79-2.816-3.45-3.298-.305-.228-.508-.33-.508-.33-1.395-.863-1.598-1.142-1.472-3.45l.228-3.424c0-.203.025-.38.025-.558v-.735c0-.127-.025-.254-.025-.355 0-.05 0-.102-.025-.152-.025-.127-.025-.254-.05-.38 0-.05-.026-.127-.026-.177 0-.076-.025-.127-.05-.203-.025-.05-.025-.127-.05-.177-.025-.076-.05-.153-.05-.228 0-.025-.025-.05-.025-.076s-.025-.05-.025-.076v-.025l-.025-.076c-.025-.05-.05-.102-.05-.152V22.9l-.025-.05-.025-.05c-.05-.102-.076-.203-.127-.28l-.026-.076c-.05-.076-.102-.178-.153-.254l-.05-.05c-.05-.05-.076-.102-.127-.152l-.05-.076c-.05-.076-.102-.127-.153-.177v-.203a8.28 8.28 0 0 1-.076-.355c0-.025-.025-.076-.025-.102v-.025c0-.05-.026-.076-.026-.127-.025-.102-.05-.203-.102-.305 0-.025-.025-.076-.025-.102l-.076-.228c-.025-.05-.025-.102-.05-.127-.025-.076-.05-.153-.102-.228l-.076-.153c-.025-.076-.076-.153-.102-.228l-.076-.153c-.05-.076-.076-.152-.127-.228l-.076-.153a2.13 2.13 0 0 1-.152-.254c-.025-.05-.05-.076-.076-.127-.025-.026-.05-.076-.076-.102-.076-.076-.127-.153-.203-.228l-.05-.025c-.102-.102-.178-.203-.28-.28l-.025-.025c-.05-.026-.1-.076-.126-.102h-.026c-.05-.026-.076-.05-.127-.076l-.025-.025c-.05-.025-.127-.076-.228-.127-.025-.025-.076-.025-.127-.05-.228-.076-.507-.177-.862-.28-.025 0-.05 0-.076-.025-.28-.076-.61-.153-.965-.203-.127-.026-.228-.026-.355-.05-.05 0-.102 0-.178-.025h-.076c-.28-.026-.532-.05-.812-.05h-.025c-.355 0-.7.025-1.04.102.076-.127.305-.28.508-.406.28-.152.532-.254.532-.254a2.72 2.72 0 0 0-.457.051c-.05 0-.102.025-.153.025-.025 0-.076 0-.1.026h-.025c-.026 0-.05 0-.076.025-.787.178-1.547.457-1.98.635l-.153.076h-.025c-.05 0-.076 0-.127.025.305-.583.76-.887 1.117-1.04.05-.025.127-.05.178-.076.025 0 .025 0 .05-.025.05-.025.102-.025.127-.05.076-.025.127-.025.127-.025h-.406a6.04 6.04 0 0 0-2.309.761c-.457.254-.863.533-1.218.812-.102.025-.177.05-.28.05-.965.203-2.054.457-3.196.812-.432.127-.863.28-1.294.432l-1.015.38-.736.304c-1.75.787-3.5 1.827-4.946 3.222l-.152.153-.38.38-.153.152c-.05.076-.127.153-.177.203a10.3 10.3 0 0 0-.787.989 8.92 8.92 0 0 0-.508.812l-.025.025c-.33.583-.634 1.192-.862 1.877-.127.33-.228.685-.33 1.04-.025.102-.05.178-.076.28l-.025.05a9.7 9.7 0 0 0-.223 1.195c0 .076-.025.153-.025.254-.025.203-.05.406-.05.634-.025.203-.025.38-.025.583v.787a6.22 6.22 0 0 0 .025.685v.025c0 .23.026.457.05.71 0 .102.025.203.025.305v.076c0 .05 0 .102.025.177.025.254.076.533.102.812 0 .076.026.153.026.228.05.228.076.482.127.71 0 0-.05-.305-.025-.76 0-.102.025-.228.025-.33.026-.254.076-.558.178-.837l.076-.228c0-.025.025-.05.05-.102.05-.127.127-.28.203-.406.025.102.025.203.05.28v1.344c.025.863.102 1.903.28 2.79 0 0 .025-1.598.305-1.8 0 0 .482 2.994.913 4.11.05.152.127.254.178.33v-.305l-.05-1.648v-.178c.33.685.7 1.37 1.142 2.106.127.203.228.406.355.61-.812.7-1.573 1.75-2.132 2.968-.076.203-.177.406-.254.61-.05.127-.076.228-.127.355 0 .025-.026.076-.026.102-.025.076-.05.178-.076.254 0 .05-.025.076-.025.127-.025.076-.05.177-.076.254 0 .05-.025.076-.025.127l-.076.38c-.025.127-.05.254-.05.38 0 .05 0 .076-.025.127 0 .102-.025.178-.025.28 0 .05 0 .102-.025.153 0 .102-.025.177-.025.28v.888a1.57 1.57 0 0 0 .025.33v.076c0 .127.025.254.05.406 0 .05 0 .076.025.127 0 .102.025.178.05.28 0 .05.025.102.025.152.025.076.025.178.05.254 0 .05.025.102.025.153.025.076.05.152.05.254.025.05.025.102.05.178s.05.178.076.254c.026.05.026.102.05.153.025.076.05.177.076.254.025.05.025.102.05.153.025.102.076.203.102.28.025.05.025.076.05.127l.38.837c.025.05.05.076.076.127l.153.305c.025.05.05.102.102.152.05.076.102.178.152.254.026.05.076.102.102.153.05.076.102.177.177.254.05.05.076.102.127.178l.177.254c.05.05.076.102.127.177.076.076.127.178.203.254.05.05.076.102.127.153.076.102.153.177.254.28l.127.127c.127.127.254.28.38.406 0 0-.076-.102-.178-.305-.025-.025-.05-.076-.05-.127l-.076-.153c-.025-.05-.05-.102-.076-.178a4.26 4.26 0 0 1-.355-1.827l.228.305c.076.178.203.406.33.66a1.14 1.14 0 0 1 .127.254c.203.356.406.76.66 1.142.305.482.61.94.94 1.37 0 0-.38-.812-.508-1.345-.025-.152-.05-.28-.025-.355.025.025.05.076.102.102.025.026.05.076.102.102a4.88 4.88 0 0 0 .228.304l.05.05c.05.05.076.127.127.178.05.076.102.153.177.228.533.685 1.27 1.598 1.776 2.08.178.153.33.28.432.33l-.736-1.32c1.675 1.37 8.626 3.12 15.45 1.167a17.87 17.87 0 0 0 2.461-.887c.482-.203.964-.457 1.446-.71l.076-.05a20.28 20.28 0 0 0 .99-.583c.254-.152.507-.33.735-.482a18.87 18.87 0 0 0 1.218-.913c.026-.025.05-.05.076-.05.38-.33.76-.685 1.09-1.04a15.43 15.43 0 0 0 1.217-1.446l.025-.026c.102-.127.178-.228.254-.355l.025-.025c.025-.05.05-.076.076-.127l.355-.508c.025-.05.05-.076.076-.127a1.72 1.72 0 0 1 .178-.279c.05-.076.076-.127.127-.203a1.02 1.02 0 0 0 .127-.228c.076-.127.153-.28.228-.406l.076-.153.153-.305.073-.155.025-.05c.05-.127.127-.254.178-.38v-.025c.228-.203.38-.406.532-.583.025-.025.05-.05.05-.076.152-.482.254-.86.254-1.217m-40.818-4.92c0-.025 0-.05-.025-.102-.076-.43-.153-.887-.177-1.344v-.102c-.076.025-.153.127-.254.254-.025.05-.076.102-.102.177-.228.432-.432 1.04-.432 1.04a4.97 4.97 0 0 0 .05-.609v-.076l.076-.635v-.076c.025-.254.076-.482.127-.7 0-.025 0-.05.025-.102v-.025c0-.025 0-.05.025-.076 0-.05.025-.076.025-.127.025-.177.076-.355.102-.532l.076-.43v-.05c0-.025 0-.05.025-.05v-.05c0-.025.025-.076.025-.102s0-.05.026-.076c0-.05.025-.102.025-.127s.025-.076.025-.102c0-.05.025-.102.025-.126s0-.05.025-.076c0-.025 0-.05.025-.05 0-.05.025-.076.025-.102v-.076l-.05.05c-.05.025-.076.076-.127.102l-.05.05c-.05.05-.102.102-.127.153l-.025.025-.152.228-.025.025c0 .025-.025.025-.025.05l-.076.153v.05c-.025.076-.076.153-.102.228a7.94 7.94 0 0 0-.203.583c-.025.05-.025.127-.05.153-.025.102-.05.203-.05.228v.025-.025c0-.076 0-.127.025-.203 0-.127.025-.28.025-.406 0-.102.026-.228.05-.33 0-.026 0-.076.025-.102 0-.05.025-.102.025-.153s.025-.102.025-.152v-.076c0-.05.025-.127.025-.177v-.177c0-.026 0-.05.025-.076.025-.076.05-.177.05-.254v-.025c.025-.05.025-.127.05-.178v-.025c.025-.127.076-.254.102-.38v-.05c0-.025 0-.05.025-.076.05-.203.127-.406.177-.583v-.026c.05-.152.127-.33.177-.482v-.025c.025-.076.05-.127.076-.203.05-.102.076-.203.127-.305 0-.025.025-.076.076-.177.025-.025.025-.076.05-.102.025-.05.05-.102.076-.177l.025-.05.432-.787c.025-.025.025-.076.05-.102v-.025l.026-.05c.05-.076.102-.178.152-.254.076-.127.127-.254.203-.355.127-.228.228-.432.305-.533.025-.076.05-.102.076-.127-.025 0-.153-.102-.355-.228-.254-.153-.61-.355-1.04-.558-.153-.076-.28-.127-.432-.203-.178-.076-.38-.152-.583-.228-.05-.025-.102-.025-.153-.05l-.507-.153-.356-.076c-.102-.026-.203-.026-.304-.05-.05 0-.102 0-.153-.026-.05 0-.1 0-.152-.025-.127 0-.28-.025-.406-.025h-.203c-.305 0-.583.025-.862.076h-.047a7.45 7.45 0 0 0-1.472.38c-.152.05-.305.127-.482.203-.05.025-.076.05-.127.05l-.153.076c-.457.228-.888.533-1.294.863h-.024c-.355.28-.66.61-.94.94l-.228.305c-.102.127-.177.254-.254.38a6.81 6.81 0 0 0-.431.735c-.05.102-.102.178-.127.28 0 .025-.025.025-.025.05-.254.61-.457 1.243-.533 1.928-.025.126-.025.254-.05.406v.05c0 .102-.025.203-.025.33v.457c0 .102 0 .203.025.305v.127c0 .076.025.152.025.228v.025c0 .05 0 .076.025.127 0 .076.026.153.026.203s.025.102.025.152c.025.076.025.127.05.203 0 .05.025.102.05.152v.025l.025.05v.05l.025.05c.026.05.026.102.05.152s.025.127.05.178.05.102.05.177l.026.05c.025.05.025.076.05.127s.05.102.076.177l.076.153c.025.025.025.05.05.076s.025.05.05.076l.076.152c.025.05.05.127.102.178a.54.54 0 0 0 .076.127c.025.05.076.127.102.177s.05.076.076.127.076.127.127.177c.025.05.05.076.076.102.05.05.076.127.127.177.025.025.05.076.076.102.05.05.102.127.152.178a.33.33 0 0 1 .076.102c.05.05.102.127.152.178l.076.076c.05.05.102.127.177.178l.076.076.178.178c.025.025.05.05.076.05.05.05.127.102.203.177.026.025.05.025.076.05.076.05.127.102.203.153.026.025.05.025.05.05l.228.152.05.026.228.152.05.026c.076.05.178.1.254.152l.05.025c.076.05.177.102.254.127l.05.025c.102.05.178.076.28.127l.025.025c.102.05.203.076.28.127h.026c.1.025.203.076.304.102h.025c.05.025.102.025.152.05s.102.025.178.05h.025l.33.076c.102.025.228.05.33.05.355.05.7.076 1.065.102h.254c.127 0 .228 0 .355-.025.153-.025.33-.025.508-.05l.43-.076c.228-.05.457-.102.66-.178.66-.177 1.218-.432 1.573-.7 0 0-.228-1.016-.406-2.03-.052-.053-.078-.155-.103-.256" fill="#90694c"/><path d="M34.38 4.194l-.076-1.015.508-1.117.203-.05c-.33-.152-.736-.254-1.192-.33-.913-.127-2.08 0-3.4.33s-2.816.913-4.39 1.7c-3.17 1.573-6.672 3.983-10.072 7.078-1.192 1.065-2.283 2.182-3.298 3.272-1 1.065-1.877 2.157-2.69 3.197-1.65 2.156-2.892 4.236-3.704 6.113-.532 1.243-.863 2.385-1 3.374-.102.7-.076 1.345.05 1.852.05.177.102.305.152.457a2.72 2.72 0 0 0 .482.787l2.055 2.157.228.228.025-.025c.05-.076.127-.153.203-.203l.025-.026.076-.076c.05-.076.127-.127.177-.203.05-.05.076-.076.127-.102s.076-.076.127-.102l.05-.05c.05-.025.076-.076.127-.102.05-.05.127-.102.178-.153.025-.025.076-.05.102-.076h.025c.076-.05.127-.102.203-.152.05-.025.076-.05.127-.102.076-.05.127-.102.203-.152.05-.025.076-.05.127-.076.076-.05.152-.102.228-.127.05-.026.076-.05.127-.076.076-.05.153-.076.228-.127.05-.025.076-.05.127-.076l.05-.025c.482-1.344 1.218-2.842 2.182-4.364 1.167-1.877 2.664-3.856 4.44-5.835 1.116-1.243 2.334-2.487 3.653-3.68a53.88 53.88 0 0 1 5.175-4.161 45.08 45.08 0 0 1 3.424-2.182c.102-.05.203-.127.33-.178a15.63 15.63 0 0 1 .887-.482 24.67 24.67 0 0 1 1.877-.888l-.305-.355-.05-.05-.38-.432L30.04 5.05l.025-1.827-.025-.025 1.497-.457 2.843 1.45" fill="#2f83c1"/><path d="M58.9 46.812s.05-.38-.153-.735c0-.025-.025-.05-.025-.05l-.102-.102c-.05-.05-.102-.102-.177-.153a.54.54 0 0 0-.127-.076 1.71 1.71 0 0 0-.432-.127c-.127-.025-.254-.025-.406-.025h-.203v.05c0 .025.025.05.025.102 0 .025 0 .05.026.05.025.076.05.203.076.305 0 0 0 .025-.025.076v.025c-.076.178-.28.583-.736 1.09-.076.102-.152.177-.254.28-1.27 1.32-4.01 3.17-9.792 4.212-1.954.28-3.78.305-5.302.102-2.283-.28-3.983-1.015-4.795-2.004-.076-.076-.127-.177-.203-.254-.05-.076-.076-.127-.127-.203-.025-.025-.025-.05-.05-.076a4 4 0 0 1-.482-1.903c0-.786.254-1.522.66-2.08.33-.457.76-.812 1.294-.964.254-.076.533-.127.812-.102a.88.88 0 0 1 .228.025c.177.026.457.05.787.102.025 0 .076 0 .102.025 1.09.127 2.816.305 4.896.177 3.806-.228 8.803-1.42 13.343-5.53v-.026c.025-.355-.025-.964-.457-1.446-.076-.076-.153-.153-.254-.228-.05-.05-.127-.076-.177-.127-.076-.025-.127-.076-.178-.102l-.228-.153v-.025a.52.52 0 0 0-.102-.153c-1.168-1.776-2.79-2.816-3.45-3.298-.305-.228-.508-.33-.508-.33-1.395-.863-1.598-1.142-1.472-3.45l.228-3.424c0-.203.025-.38.025-.558v-.735c0-.127-.025-.254-.025-.355 0-.05 0-.102-.025-.152-.025-.127-.025-.254-.05-.38 0-.05-.026-.127-.026-.177 0-.076-.025-.127-.05-.203-.025-.05-.025-.127-.05-.177-.025-.076-.05-.153-.05-.228 0-.025-.025-.05-.025-.076s-.025-.05-.025-.076v-.025l-.025-.076c-.025-.05-.05-.102-.05-.152V22.9l-.025-.05-.025-.05c-.05-.102-.076-.203-.127-.28l-.026-.076c-.05-.076-.102-.178-.153-.254l-.05-.05c-.05-.05-.076-.102-.127-.152l-.05-.076c-.05-.076-.102-.127-.153-.177l-.203-.203a1.02 1.02 0 0 0-.228-.127c-.025-.025-.05-.025-.076-.025l-.152-.076c-.025 0-.05-.026-.076-.026-.05-.025-.102-.025-.127-.05-.025 0-.05-.025-.102-.025s-.076-.025-.127-.025h-.558c-.025 0-.05 0-.076.025-.025 0-.05 0-.076.025-.05 0-.1.025-.177.05h-.05c-.153.05-.28.102-.432.153l-.05.025c-.05.025-.102.05-.178.076l-.076.025-.152.076-.076.05-.153.076-.076.05c-.05.025-.102.076-.153.102l-.05.025c-.05.05-.127.076-.178.127l-.025.025c-.076.05-.127.102-.203.127-.127.076-.254.177-.38.254-.102.076-.203.152-.33.228l-.05.025c-.102.076-.228.153-.33.203l-.05.025c-.102.076-.228.127-.33.203l-.05.025c-.102.076-.23.127-.356.178l-.05.025c-.127.05-.228.102-.355.152l-.05.025c-.127.05-.254.076-.38.127h-.02l-.406.076c-.23.025-.483.05-.71.05-.38 0-.76-.025-1.167-.076l-.38-.076c-.05 0-.102-.025-.127-.025L39.68 23.4c-.153-.025-.28-.076-.43-.102l-.71-.153c-.05 0-.102-.025-.127-.025s-.076-.025-.102-.025c-.05 0-.102-.026-.153-.026s-.102-.025-.153-.025h-.05c-.05 0-.102-.025-.127-.025-.102-.025-.203-.05-.33-.05-.025 0-.076 0-.102-.025-.076 0-.153-.025-.228-.025-.05 0-.076 0-.127-.025-.076 0-.127-.025-.203-.025H35.67c-.127 0-.228.025-.355.025h-.102c-.076 0-.153.025-.228.025h-.025c-.05 0-.076.025-.127.025-.076.025-.152.025-.228.05-.05 0-.102.025-.127.025-.076.025-.152.05-.228.05-.05 0-.076.026-.127.05-.076.025-.178.05-.254.076-.05.025-.076.025-.102.05a5.01 5.01 0 0 0-.355.152c-.965.558-1.8 1.32-2.435 2.182a9.43 9.43 0 0 0-.609.913c-.203.33-.356.685-.507 1.04-.05.102-.076.203-.127.305-.05.177-.127.355-.178.533 0 .025 0 .05-.025.05l-.153.634c-.05.228-.076.43-.102.66-.026.127-.026.228-.026.355-.025.33-.025.635 0 .965v.076c0 .076 0 .153.026.254a6.22 6.22 0 0 0 .102.685.74.74 0 0 1 .051.254c.025.076.025.153.05.228.152.583.38 1.117.66 1.572 1.04 1.802 2.765 2.892 4.034 3.476.482.203.99.406 1.522.583l-.05.05c-.102.025-.203.05-.33.076-.177.05-.406.127-.634.203-.254.076-.558.203-.863.33-.812.33-1.725.812-2.537 1.472-.102.076-.203.177-.305.254-.178.153-.33.304-.482.482l-.127.127c-.05.076-.127.127-.178.203l-.076.076c-.076.102-.153.203-.203.305-.076.102-.127.203-.203.305-.482.837-.76 1.852-.685 3.07v-.05c0-.025 0-.05.025-.076v-.025c0-.025.025-.05.025-.102v-.025c0-.026.025-.076.025-.127s.025-.076.05-.127v-.03c.025-.05.025-.102.05-.152v-.025c.026-.05.026-.102.05-.153V44.2c.026-.05.05-.102.076-.178l.025-.025c.025-.05.05-.127.102-.177.05-.102.102-.178.153-.28.025-.025.05-.076.076-.102l.025-.025.153-.228c.05-.05.1-.127.152-.177l.05-.05c.05-.05.076-.102.127-.127l.05-.05c.05-.05.127-.1.177-.177 0 0-1.09 2.487-.61 4.44v-.38c0-.05 0-.102.025-.153 0-.05 0-.102.026-.153v-.025c0-.05.025-.127.025-.178v-.05c.025-.076.025-.127.05-.203v-.025c.025-.076.05-.153.05-.203 0-.026.025-.05.025-.076l.026-.05c.025-.05.05-.127.076-.178.025-.076.076-.152.127-.228 0-.026.025-.05.025-.05l.152-.228s-.05.61-.05 1.345c0 .127 0 .228.025.355 0 .076 0 .152.025.228a10.02 10.02 0 0 1 .406-2.207c-.203.685-.355 1.42-.406 2.207-.025.507-.025 1.015.026 1.547.076.887.305 1.85.684 2.84 0 0-.355-1.142.153-2.283l.153.305c.05.33.102.812.203 1.344.102.888.508 3.552 2.334 5.403 0 0-.685-.887-.583-2.03.076.152.152.28.203.406.305.583.913 1.65 1.598 2.4 0 0-.532-1.04-.406-1.27 0 0 1.776 2.207 2.334 2.4l-.735-1.217-.025-.026c2.562 1.878 6.113 2.562 10.477 1.345.76-.203 1.522-.482 2.334-.812.482-.203.964-.457 1.446-.71l.076-.05c.33-.177.66-.38 1-.583.254-.153.507-.33.735-.483a18.87 18.87 0 0 0 1.218-.913c.025-.025.05-.05.076-.05.38-.33.76-.685 1.09-1.04a15.43 15.43 0 0 0 1.217-1.446l.026-.025a3.2 3.2 0 0 0 .254-.355l.025-.025c.026-.05.05-.076.076-.127l.356-.508c.025-.05.05-.076.076-.126.05-.102.102-.178.178-.28.05-.076.076-.127.127-.203s.102-.152.127-.228c.076-.127.153-.28.228-.406l.076-.152.23-.457.025-.05c.05-.127.127-.254.178-.38v-.025c.228-.203.38-.406.532-.583.025-.026.05-.05.05-.076a1.87 1.87 0 0 0 .327-1.06m-41.02-6.47c-.076.025-.153.127-.254.254-.025.05-.076.102-.102.177-.228.432-.432 1.04-.432 1.04a4.97 4.97 0 0 0 .05-.609v-.076l.076-.635v-.076c.025-.254.076-.482.127-.7 0-.025 0-.05.025-.102v-.025c0-.025 0-.05.025-.076 0-.05.025-.076.025-.127.025-.177.076-.355.102-.532l.076-.43v-.05c0-.025 0-.05.025-.05v-.05c0-.025.025-.076.025-.102s0-.05.026-.076c0-.05.025-.102.025-.127s.025-.076.025-.102c0-.05.025-.102.025-.126s0-.05.025-.076c0-.025 0-.05.025-.05 0-.05.025-.076.025-.102v-.076l-.05.05c-.05.025-.076.076-.127.102l-.05.05c-.05.05-.102.102-.127.153l-.025.025-.152.228-.025.025c0 .025-.025.025-.025.05l-.076.153v.05c-.025.076-.076.153-.102.228a7.94 7.94 0 0 0-.203.583c-.025.05-.025.127-.05.153-.025.102-.05.203-.05.228v.025-.025c0-.076 0-.127.025-.203 0-.127.025-.28.025-.406 0-.102.026-.228.05-.33 0-.026 0-.076.025-.102 0-.05.025-.102.025-.153s.025-.102.025-.152v-.076c0-.05.025-.127.025-.177v-.177c0-.026 0-.05.025-.076.025-.076.05-.177.05-.254v-.025c.025-.05.025-.127.05-.178v-.025c.025-.127.076-.254.102-.38v-.05c0-.025 0-.05.025-.076.05-.203.127-.406.177-.583v-.026c.05-.152.127-.33.177-.482v-.025c.025-.076.05-.127.076-.203.05-.102.076-.203.127-.305 0-.025.025-.076.076-.177.025-.025.025-.076.05-.102.025-.05.05-.102.076-.177l.025-.05c-.025-.025-.076-.025-.102-.05h-.025l-.05-.025c-.228-.102-.482-.203-.735-.28h-.05c-.178-.05-.33-.076-.508-.102-.102 0-.203-.026-.305-.026h-.25c-.127 0-.254.026-.38.026-.05 0-.076 0-.127.025-.05 0-.127.026-.178.026-.025 0-.05 0-.076.025-.05 0-.076.025-.127.025-.076.025-.178.05-.254.076-.025 0-.076.026-.102.026-.102.05-.228.076-.33.127-.05.025-.076.05-.127.05l-.203.102c-.05.025-.102.05-.153.102-.05.025-.102.05-.152.102-.05.026-.102.076-.153.102-.025.025-.076.05-.102.076-.076.076-.178.152-.254.228l-.127.127c-.076.076-.127.153-.203.228l-.025.025c-.026.05-.076.076-.102.127l-.076.076c-.127.178-.254.38-.356.583-.025.025-.025.05-.05.076-.05.102-.076.203-.127.305-.025.05-.025.076-.05.127-.026.102-.076.203-.102.33v.102c-.025.076-.025.152-.05.228 0 .05 0 .076-.025.127 0 .05 0 .076-.025.127v.102c0 .127-.025.254 0 .38 0 .102 0 .203.025.304v.05c0 .05.025.102.025.153.025.203.076.38.127.583a7.31 7.31 0 0 0 .153.406c.1.254.228.482.38.7.305.457.7.863 1.192 1.167a3.4 3.4 0 0 0 .862.406 3.49 3.49 0 0 0 .913.203c.076 0 .153.025.203.025h.33c.102 0 .203-.025.305-.025.05 0 .127 0 .178-.025l.432-.076h.025c.05-.025.102-.025.177-.05a3.01 3.01 0 0 0 .508-.203l.025-.025c.05-.025.102-.05.127-.05-.076-.43-.152-.887-.177-1.344.128-.056.128-.08.128-.106" fill="#fce9cd"/><path d="M35.013 4.498l.076.05z" fill="#4d9ed7"/><path d="M57.363 45.772c0-.025 0-.05-.025-.05-.026-.05-.026-.076-.026-.102-.127-.406-.28-.7-.43-.94-.178-.28-.33-.432-.33-.432l.076-.305a1.96 1.96 0 0 0 .05-.38c.102-.913-.127-1.624-.33-2.03a1.29 1.29 0 0 0-.076-.177l-.432.304c-2.74 1.852-5.8 3.045-9.132 3.552-2.283.355-4.693.38-7.205.076l.05.025s-1.522.203-1.928 1.65l.025.025-.127.965c.05 1.32.634 2.13 1.32 2.56.7.28 1.573.482 2.537.61 1.65.203 3.577.153 5.505-.152 2.588-.356 6.24-1.725 8.854-3.5.583-.406 1.142-.837 1.598-1.27l.05-.05c0-.177-.025-.28-.025-.38" fill="#fff"/><path d="M52.416 33.24c-1.395-.863-1.598-1.142-1.472-3.45l.228-3.425.025-.558v-.735c0-.127-.025-.254-.025-.355 0-.05 0-.102-.025-.153-.025-.127-.025-.254-.05-.38 0-.05-.026-.127-.026-.177 0-.076-.025-.127-.05-.203-.025-.05-.025-.127-.05-.178a3.51 3.51 0 0 0-.71-.787l-.05-.05-.05-.024h-.025c-.05-.026-.076-.05-.127-.076s-.102-.05-.127-.076c-.406-.254-.887-.406-1.37-.482-.28-.05-.558-.05-.837-.05-.127 0-.28.026-.406.026a9.05 9.05 0 0 0-1.091.228l-.38.254-.33.228-.05.025a2.26 2.26 0 0 1-.33.203l-.05.025c-.102.076-.23.127-.33.203l-.05.025c-.102.076-.228.127-.355.178l-.05.025-.355.153-.05.025c-.127.05-.254.076-.38.127h-.025l-.406.076-.7.05c-.38 0-.76-.025-1.167-.076l-.38-.076c-.05 0-.102-.025-.127-.025l-1.014-.228c-.153-.025-.28-.076-.432-.102l-.7-.153c-.05 0-.102-.025-.127-.025a4.17 4.17 0 0 0-.583.05h-.05a8.51 8.51 0 0 0-1.725.406c-.025 0-.05.025-.102.025-.102.026-.178.076-.28.102l-.355.153c-.837.355-1.624.863-2.385 1.497-.305.254-.583.532-.862.812-.406.432-.76.887-1.1 1.37-.025.026-.025.05-.05.076a6.5 6.5 0 0 0-.458.786l-.152.28v.025c-.153.33-.28.635-.38.965 0 .025 0 .05-.025.05-.026.05-.026.102-.05.153-.05.152-.102.304-.127.457-.05.152-.076.305-.102.482 0 .025-.025.076-.025.102-.025.102-.025.203-.05.28l-.1 1.065v.254a5.83 5.83 0 0 0 .66 1.573c1.04 1.802 2.765 2.892 4.033 3.476l1.522.583.025.025.025-.025c.076-.05.127-.102.203-.153.025-.025.05-.025.076-.05l.228-.152c.025-.026.05-.026.076-.05l.228-.152c.025-.025.05-.025.076-.05l.254-.152c.025-.025.05-.025.076-.05l.254-.153c.025-.025.05-.025.076-.05l.254-.153c.025-.026.076-.026.102-.05l.254-.152c.025-.026.076-.05.102-.05.076-.05.178-.102.28-.152.05-.025.076-.05.127-.05.102-.05.177-.102.28-.127.05-.025.076-.05.127-.05l.28-.127.152-.076.28-.127c.05-.025.102-.05.178-.076.1-.025.177-.076.28-.102.05-.025.127-.05.177-.076.102-.025.178-.076.28-.102l.203-.076c.102-.025.178-.076.28-.102l.228-.076c.076-.025.177-.05.254-.102l.508-.152.28-.076.254-.076c.102-.025.203-.05.33-.102.05-.025.102-.025.152-.05.406-1.04 1.65-3.628 3.755-3.907l.635-.05h.152c-.025-.153-.05-.305-.05-.482-.076-1.117.28-2.055.76-2.08.38-.025.685.533.736.7.152.33.254.76.28 1.243a4.41 4.41 0 0 1-.102 1.192c.05.05.076.102.127.127.482.6.558 1.42.532 2.03.178-.025.38-.025.583-.05.05 0 .102 0 .152-.025h.102l.735-.05 1.7-.102-.53-.278m5.302 15.627a15.67 15.67 0 0 1-2.84 2.004l-1.42.685c-1.04.457-2.03.76-2.917 1-1.954.483-3.298.483-3.298.483 1.065.583 2.4.583 3.323.507.635-.05 1.066-.178 1.066-.178-.025.38-.076.735-.127 1.1a5.47 5.47 0 0 1-.305 1.015v.025c-.153.38-.355.7-.558 1.015-.025.025-.05.076-.076.102l.076-.05 1-.583.735-.482 1.218-.913c.025-.025.05-.05.076-.05l1.1-1.04a15.43 15.43 0 0 0 1.218-1.446l.025-.026c.102-.127.178-.228.254-.355l.025-.025c.025-.05.05-.076.076-.127l.355-.508c.025-.05.05-.076.076-.127a1.72 1.72 0 0 1 .178-.279l.127-.203c.05-.076.102-.153.127-.228l.228-.406.33-.66c.05-.127.127-.254.177-.38-.102.028-.152.078-.228.154M34.58 38.644c-.254.076-.558.203-.862.33-.812.33-1.725.812-2.537 1.472-.102.076-.203.177-.305.254a4.35 4.35 0 0 0-.482.482l-.128.128c-.05.076-.127.127-.178.203l-.076.076c-.076.102-.152.203-.203.305-.076.102-.127.203-.203.305-.482.837-.76 1.852-.685 3.07v-.05c0-.025 0-.05.026-.076v-.026c0-.025.025-.05.025-.102v-.027c0-.025.025-.076.025-.127s.026-.076.05-.127v-.025c.025-.05.025-.102.05-.153v-.025c.025-.05.025-.102.05-.152v-.025c.025-.05.05-.102.076-.177l.025-.026c.026-.05.05-.127.102-.178l.152-.28c.026-.025.05-.076.076-.102l.025-.026.152-.228c.05-.05.102-.127.153-.178l.05-.05c.05-.05.076-.102.127-.127l.05-.05c.05-.05.127-.102.178-.177 0 0-1.1 2.486-.6 4.44v-.38c0-.05 0-.102.025-.152 0-.05 0-.102.025-.153v-.025c0-.05.025-.127.025-.177v-.05c.025-.076.025-.127.05-.203v-.024a.75.75 0 0 0 .05-.203c0-.025.025-.05.025-.076l.025-.05c.025-.05.05-.127.076-.178.026-.076.076-.152.127-.228 0-.026.025-.05.025-.05L30.32 45l-.05 1.344c0 .127 0 .228.025.355 0 .076 0 .153.025.228.05-.786.203-1.522.406-2.207l.178-.557c0-.026.025-.05.025-.076l.203-.507c.025-.026.025-.05.05-.102l.228-.482c.025-.025.025-.05.025-.076l.532-.913c.026-.026.026-.05.05-.076l.228-.33c.025-.025.025-.05.05-.076s.025-.05.05-.076l.28-.38c.026-.025.026-.05.05-.05l.305-.356.38-.43c.102-.102.177-.203.28-.28l.102-.102.6-.583c.558-.508 1.015-.837 1.167-.94l-.33.076c-.154.08-.357.155-.6.23m14.615-5.494s0-.05-.025-.153c-.102-.356-.457-1.218-1.852-1.1-1.472.153-1.98 1.345-2.106 1.75-.025.076-.025.127-.025.127l.05.025c.177-.153.532-.153.862.076.153.102.254.203.355.33.127.203.153.406.076.558l-.076.076s.05.025.153.05c.406.127 1.548.355 2.156-.43.026-.05.05-.076.076-.127-.127-.05-.178-.228-.178-.457 0-.102.025-.203.05-.33.076-.303.303-.48.48-.405m-7.332 10.858l-2.435.457c.025 0 .076 0 .102.026 1.1.127 2.816.304 4.896.177 3.806-.228 8.803-1.42 13.343-5.53V39.1c.026-.355-.025-.965-.457-1.446-.076-.076-.152-.152-.254-.228-.025 0-.025-.025-.05-.025-.127-.076-.228-.127-.33-.203l-.228-.152v-.025a8.11 8.11 0 0 1-.965 1.142c-.127.127-.254.254-.406.38-1.243 1.117-2.867 2.08-4.617 2.842-2.9 1.268-6.138 2.106-8.598 2.613m-24.05-6.62c-.05.025-.076.076-.127.102l-.05.05c-.05.05-.102.102-.127.153l-.026.025-.152.228-.025.025c0 .025-.025.025-.025.05l-.076.153v.05c-.026.076-.076.152-.102.228a7.94 7.94 0 0 0-.203.583c-.025.05-.025.127-.05.153a1.97 1.97 0 0 0-.051.228v.025-.025c0-.076 0-.127.025-.203 0-.127.026-.28.026-.406 0-.102.025-.228.05-.33 0-.025 0-.076.025-.102 0-.05.025-.102.025-.152s.025-.102.025-.153v-.076c0-.05.025-.127.025-.177v-.178c0-.025 0-.05.025-.076a.88.88 0 0 0 .05-.254v-.025c.025-.05.025-.127.05-.178v-.025c.025-.126.076-.254.102-.38v-.05c0-.025 0-.05.025-.076.05-.203.127-.406.178-.583v-.025c.05-.153.127-.33.177-.482v-.025c.025-.076.05-.127.076-.203.05-.102.076-.203.127-.304 0-.026.025-.076.076-.178.025-.025.025-.076.05-.102.025-.05.05-.102.076-.177l.026-.05c-.026-.025-.076-.025-.102-.05h-.025l-.05-.025c-.228-.102-.482-.203-.736-.28h-.05a3.51 3.51 0 0 0-.508-.102c-.102 0-.203-.025-.305-.025H16c-.127 0-.254.025-.38.025-.05 0-.076 0-.127.025-.05 0-.127.025-.177.025-.025 0-.05 0-.076.025-.05 0-.076.026-.127.026-.076.025-.178.05-.254.076-.025 0-.076.025-.102.025-.102.05-.228.076-.33.127-.05.025-.076.05-.127.05l-.203.102c-.05.025-.102.05-.153.102-.05.025-.102.05-.153.102-.05.025-.102.076-.152.102-.025.026-.076.05-.102.076-.076.076-.177.153-.254.228l-.127.127c-.076.076-.127.152-.203.228l-.025.025c-.025.05-.076.076-.102.126l-.076.076a4.36 4.36 0 0 0-.355.583c-.026.025-.026.05-.05.076-.05.102-.076.203-.127.305-.025.05-.025.076-.05.127 0 .025.025.05.025.076.025.102.05.177.076.28v.05c.025.076.076.177.1.254.102.254.203.482.33.685.025.025.025.05.05.076v.025l.025.025a2.52 2.52 0 0 0 .228.38c.127.177.228.305.305.406l.05.05c0 .025.025.025.025.025l.05.05c0-.05-.025-.102-.025-.127a4.16 4.16 0 0 1-.102-.964v-.05c0-.203 0-.406.025-.583l.076.228c.025.102.076.203.102.305v.05a5.26 5.26 0 0 0 .507 1.066 4.81 4.81 0 0 0 .508.735c.026.025.05.05.05.076l.05.05c-.076-.355-.127-.685-.127-1.015v-.33c0-.152 0-.28.025-.406a5.05 5.05 0 0 0 .203.66v.025a7.4 7.4 0 0 0 .837 1.598l.025.025c.05.05.076.102.102.152.026.025.05.05.05.076l.075.075v-.05c0-.05-.025-.102-.025-.153l-.076-.508c0-.102-.026-.228-.026-.33v-.56c0-.127.026-.28.026-.406.025.076.05.178.076.254.025.05.05.127.076.178v.025l.025.025c.025.076.05.153.076.203.05.127.102.254.178.355.076.153.127.28.203.38.05.076.076.127.102.178.05.076.102.153.127.203.05.05.076.102.102.153l.025.025c.025.05.076.076.102.127.026.025.05.05.05.076.05.05.076.102.102.102l.025.025V41l.076-.634V40.3a5.27 5.27 0 0 1 .127-.7c0-.025 0-.05.025-.102v-.025c0-.025 0-.05.025-.076 0-.05.025-.076.025-.127.025-.177.076-.355.102-.533l.076-.43v-.05c0-.025 0-.05.025-.05v-.05c0-.025.026-.076.026-.102s0-.05.025-.076c0-.05.025-.102.025-.127s.025-.076.025-.102c0-.05.025-.102.025-.127s0-.05.025-.076c0-.025 0-.05.025-.05 0-.05.026-.076.026-.102v-.076l.128.08M48.56 47.98l.913-.33c.482-.203.735-.355.735-.406-.025-.05-.305-.025-.812.102-.254.05-.558.102-.94.203a4.18 4.18 0 0 1-.583.102c-.203.026-.432.076-.66.102-.458.076-.965.127-1.522.177l-.837.076c-.28.025-.583.025-.888.05-1.217.025-2.562-.025-3.932-.28a8.62 8.62 0 0 1-2.384-.838l-.025-.025c.406-1.446 1.928-1.65 1.928-1.65l-.05-.025h-.076a15.13 15.13 0 0 1-.583-.076c-.127-.025-.228-.025-.305-.05-.076 0-.153-.025-.178-.025-.913-.05-1.42.7-1.572 1.04l-.076.152a3.14 3.14 0 0 0-.254 1.015c-.05.685.127 1.42.66 2.055.355.432.965.812 1.75 1.117-.685-.432-1.294-1.27-1.32-2.562.787.33 1.674.533 2.36.66 1.446.28 2.866.305 4.1.228l.913-.076a12.04 12.04 0 0 1 .863-.102l1.523-.28c.228-.05.457-.102.66-.178a3.25 3.25 0 0 0 .583-.179" fill="#f2d2ac"/><path d="M47.367 31.033c.76.025 1.27.254 1.624.61.076-.33.127-.735.102-1.192-.025-.482-.127-.913-.28-1.243-.05-.203-.356-.736-.736-.71-.482.025-.837.965-.76 2.08 0 .152.025.305.05.457m1.27 2.866c0 .203.076.38.178.457.177.102.406-.102.507-.432 0-.025.025-.05.025-.076.076-.305 0-.61-.177-.685-.178-.102-.406.102-.508.43 0 .102-.025.204-.025.305m-3.45.558a1.19 1.19 0 0 0 .355.355c.33.203.685.228.887.05l.076-.076c.076-.152.05-.355-.076-.558-.076-.127-.203-.254-.355-.33-.33-.203-.685-.228-.863-.076-.025.025-.05.05-.076.102-.076.126-.05.33.052.532M57.794 39.1c-.026 0-.026 0 0 0m-.406 7.028a12.08 12.08 0 0 1-1.624 1.293c-2.613 1.776-6.265 3.172-8.854 3.502-1.953.305-3.856.355-5.505.152-.965-.127-1.802-.33-2.537-.61-.786-.305-1.395-.685-1.75-1.117-.533-.635-.685-1.395-.66-2.054.025-.356.102-.71.254-1.016l.076-.152c.178-.33.66-1.117 1.572-1.04a.58.58 0 0 1 .178.025c.076 0 .203.026.305.05l.583.076h.076c2.51.305 4.92.28 7.205-.076 3.323-.508 6.393-1.7 9.132-3.552l.432-.305 1.497-2.232c-4.54 4.135-9.54 5.328-13.343 5.556a24.93 24.93 0 0 1-4.896-.178c-.05 0-.076 0-.102-.025-.33-.05-.583-.076-.787-.102-.102 0-.177-.025-.228-.025a2.15 2.15 0 0 0-.812.102c-.507.152-.964.507-1.294.964-.406.558-.66 1.32-.66 2.08 0 .634.153 1.294.482 1.902.025.025.025.05.05.076.05.076.076.127.127.203s.127.178.203.254c.787.99 2.51 1.7 4.795 2.004 1.547.203 3.35.178 5.302-.102 5.784-1.04 8.524-2.917 9.792-4.21.102-.102.177-.178.254-.28.457-.533.66-.94.736-1.09v-.025c.025-.05.025-.076.025-.076l-.025.027" fill="#664f44"/><path d="M38.995 26.087c-.178-.102-.38-.178-.583-.228l-.406-.076c-.05 0-.102 0-.152-.025-.685-.05-1.27.05-1.27.05-.127.025-.254.05-.355.102a4.03 4.03 0 0 0-2.004 1.32c-.355.457-.61.94-.735 1.42-.026.05-.026.076-.026.127-.025.127-.076.254-.102.355-.076.406-.127.76-.127 1.066l.025.66c.153-.355.33-.66.508-.964.432-.736.888-1.345 1.37-1.827.913-.94 1.85-1.446 2.56-1.7.762-.255 1.295-.28 1.295-.28m10.984-1.295l-.025-.05c-.102-.127-.228-.254-.38-.355-.355-.228-.837-.355-1.497-.228 0 0-.787.177-1.243.7 0 0 1.37-.583 2.84.457.127.102.28.203.406.33s.28.254.406.432c0 0-.05-.635-.432-1.193-.025-.05-.05-.075-.076-.1" fill="#e9b784"/><path d="M39.173 34.89l1.725-.457c.102-.482.127-1.065.05-1.7-.178-1.472-.837-2.613-1.497-2.537s-1.04 1.345-.862 2.816c.1.762.303 1.42.583 1.878" fill="#664f44"/><path d="M36.154 1.733l-1.37.305.28 2.487-3.628-1.853-1.497.458.025.025 4.414 5.023.102-.05.406-.254c.05-.025.102-.05.153-.102l.61-.356L33.77 5.26 36.8 6.73l.28-.152-.28-2.157 1.37 1.598h.025c.127-.05.228-.127.355-.178l.05-.025.05-.026c.025 0 .05-.025.05-.025l.152-.076s.025 0 .025-.025l.482-.228-3.198-3.704" fill="#ffd250"/><path d="M34.8 2.113v-.076.076m0-.076l.203-.05c-.33-.153-.736-.254-1.192-.33-.913-.127-2.08 0-3.4.33s-2.816.913-4.39 1.7c-3.17 1.572-6.672 3.983-10.072 7.077-1.192 1.065-2.283 2.182-3.298 3.272l4.1 5.073c1.117-1.218 2.308-2.435 3.628-3.628 1.75-1.598 3.526-3.02 5.276-4.236 1.7-1.193 3.4-2.207 4.997-3.02l-.7-3.246.026-1.827-.026-.025 1.497-.458 2.917 1.497-.076-1.015.507-1.115" fill="#4d9ed7"/><path d="M34.8 2.037l-.508 1.117.076 1.04.7.355zM33.77 5.26l3.044 1.497-1.167.66zm3.044-.838l.28 2.157 1.09-.558z" fill="#132134"/><path d="M48.28 3.635h.56c.507 0 .99.076 1.446.178.025 0 .05 0 .076.025h.025l.05.026h.05c-.05-.026-.102-.076-.153-.102-.507-.203-1.04-.33-1.598-.406-2.74-.356-5.886.66-7.66 1.37-.102.05-.203.076-.305.127l-.457.203-.787.355c-.05.025-.076.025-.127.05l-.482.23s-.026 0-.026.025l-.152.076c-.026 0-.05.026-.05.026h-.102l-.026.025a2.34 2.34 0 0 0-.355.178h-.025c-.025.025-.05.025-.076.05h-.025c-.026 0-.05.025-.05.025l-.532.28c-.127.076-.254.127-.38.203h-.025l-.28.152c-.305.153-.583.33-.888.508-.025.025-.05.025-.102.05-.025.025-.05.025-.076.05s-.05.025-.076.05l-.025.025-.61.356c-.05.025-.102.05-.153.102l-.406.254-.102.05-1.142.76-1.852 1.32c-.076.05-.152.126-.228.177-1.598 1.192-3.12 2.487-4.59 3.806l-4.44 4.338-1.928 2.004-1.624 1.878s.102-.076.28-.254l-.406.482c2.334-2.486 4.896-5.023 7.662-7.407a74.38 74.38 0 0 1 5.226-4.135c.786-.558 1.598-1.117 2.41-1.65.254-.177.532-.33.787-.507.127-.076.254-.153.406-.228a1.02 1.02 0 0 1 .228-.127c.153-.076.28-.178.432-.254.127-.076.28-.153.406-.254.076-.05.153-.076.228-.127l.532-.305c.102-.05.203-.127.305-.178l1.015-.532c.025-.025.05-.025.076-.05l.153-.076c.076-.025.127-.076.203-.102.025-.025.05-.025.076-.05l.152-.076s.025 0 .025-.025h.025a6.45 6.45 0 0 1 .431-.203c.026 0 .05-.025.076-.05l.153-.076c.178-.076.33-.152.508-.228.05-.025.102-.05.127-.076.025 0 .05-.025.076-.025.05-.025.102-.05.152-.05.203-.076.38-.178.583-.254.178-.076.33-.153.508-.228a37.24 37.24 0 0 1 2.689-1.015c1.575-.435 2.97-.713 4.187-.764" fill="#fff"/></svg>
\ No newline at end of file
diff --git a/web/modules/webform/images/addons/marketo_ma.png b/web/modules/webform/images/addons/marketo_ma.png
new file mode 100644
index 0000000000..8f4ee50206
--- /dev/null
+++ b/web/modules/webform/images/addons/marketo_ma.png
@@ -0,0 +1,29 @@
+�PNG
+
+���
IHDR���������R-����`PLTE������tsq�y����wi���足�XOs���0&PXXV�����C:`f^�POM���cb`��󡠟~!E���V>���ؠ�����������������������!�IDATx^��I��ðe��͟ea�#q�xRL�@��A��A��A��A��A��A��A��A��A��A��A��A��A��A��A��A��A��A��A��A��A��A��A��A��A��A��A��A��A��A��A��!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!���"|��SN����Ϯ�Fa-,�*JAa0K����\MK2HӼw�_�5�Ok�J8-�3%����%���+��ϫ�%��RP��C)(a��0,G��J����JA	��zP¿J���h	�����}o_�|	�}(#��q&K�:��N��y���?v����%�J��e\ϔ0�~a�[����`�S[�D	S�R0�x�&J�:��F߉�8����k��m�`�i�XDY�W����eɚ���%vk㜧R������Ȼ�od�`���$w�՚TSkfلy��1`���Y,�m�X�ĭk���ѣ����%ĪD\�C�C[B�V�ᭈK�L�I�oE\B�g4#�q	Q�+;0�;���рރ��@.N(F�&��ZB��BF�v�$���l�w��A���k5#AK��g4}q�_BTb/#���"4�����}%{0���1B���:LQ.!����`�GhԻS�Ke?"��?��#4N1.!��� #���_�a�zl:B.!�r��п�vN�%t��b�����#�BY,#���|����tyV|���I�%t~�;#�o���I����,c,���/r+F�_�`#��x1r	^�N���n��|(J.�wr�I3B��*�?/����9Ȼ%��pw��F�]��#���(��j����p����p��n/r+F�]��#Lp���=��p	�7Ӄ���#<���./�ǖKh���=jF�B�����~��S�%4�\���}�z��>?�����ps���F�ی�#��|�,�%�/������6��3L�%���B�u��/��&"].��%��*���Vd��7)l#�t��E�KxM6�k\ӣu�y�_~�!��������%��O㐚���D+��o�]�� ��U�&+�q�jE����M��̜�@Ua{:�=�3&�-��|/!D�?-mzmQ���6p�X��4b�,�Yk���� ���V���YZ9����d��iAx����#�"�}I5�ur1�+4ž=����98��n���sxg�U������@X��+��`q��f����2���a�d�K���!�_�wB'��L�|�9<,��\FoỘ~i&�B��Rא���
�ļ$��C����P��Z�e�J��g�&
�X�6^���[��%C�;(���Ą�D�gB9�co
+�i X_n�՗Z��c]�	�7�q�&:��J��7�`@bB9��T���T3�7@�s�t�a�sg�e�I�����5�j���I�K��x5n%�0A�؄3��]%z't$&\4�b:��fB���_�3R!����&<�P�`���ش܄�	�����0���c�i�X1Ä��	gCb08�G�L�\n���o�<̈́�S{�:4���7ل�Ąr�8�G�fJM�
0��J3a��6*� B�O4���6�ă�'�]3O��	#�kR�L��)M}4�m�o�$�$&�3���������ִ<̈́�î�^�jجo��j��P��`���	�bkQ�L���U彡�
+!8�	'��&|�<�������J4-N3af�T:8���£܄$&3�d�U~�G��Ma3af����!��Ԅ
+D&3�@�%1=$2�5��6��J,�N��B�ZO)7�c��ح�"���){���p�:Q(L3a�.�nW��j}7mS��ұ�&�		�:�F-���v 0a�eQ&���0G)����\B��D�������`��kڜ�z�g�k��<(�:�yñ��e��fl&�!��[_�	��!4�l%e
��`B2�S�ِ0��i��c�'�_����-����"���\PL<
+��9m��XZeׄƩ��6��I�p�2L-��h��CH��w~͠2�sA�	���̒AB�L'��g�	m�(~�1җ��S�BGߣ2��1Ei&�����<�L3�=��g�P/Ԓ�G֢K�Q��%��g�Q�f��d����!��]�O�Mhfz�Q�ؗ�p�;޺"�:����`!�Ei&̿���D٣B�cI�K;�	��|Kf0�D'��e�A�q'�W}�
+�	�S�fOk���Tꏄ�)&��
+�Y��ޘ�W� tD�YQ�f�<������c��I}�A6���M����Y��7V�5���C>���h�"�����3��N� |J�%���fšΩ�/� t$�w�5O�	�(�0� S���W�`2��YS���L��e_��Q�.N~ٝBUnB��D+�R�^\[�I8��]�����d�pP����Bp�+7�\��+ȾzT��I��u�	�f��G����ᘀ�̄O�C�f�>�9JN�5 �Cb�3̈́�]�
+�ax�M�7�Y��LQ��/�h,�E>��N6J*���-[�'���RF�C�e���>�H!�����^�fBIiY�C��f�7�Y��<do}+|�J���1��$�/1�L�/M��2�0Eg�1L��?Q>��2�G�IL#!4�߇X���fBn���
+��?uB>|>�C-U�I�Q�BE��h��0EV��1Q�HlB��!����r7H���G{d���W�֢BB1�	�B��T�S�O�K�B��4�_���n�����
�>8����!쫬v�*.m&�>�V�p:/�Ą�Bf��P=Z�?���~�טf��.�2w"'�HM�x������*�C׊62���CA�	���B+�Pי\�A^�	y�S���#7��B�[+	ႉ�4�"?̈́���Mṁ�r>/��	�M����O3!u���:��
&�B�e�L3!!̈́�M�6�!$zPn��!�����6��T=�A��>Ą�}�����f�<'�@�)��8�`�\��!TrU�=.KE�	?�^�Jb���xvC�1�Ҍ���'�!��3�C�1���u}��x�>>�Gjڝ�Y���vT����A�gEc#�cU7|��}&��U�$�w�G��B>�`�VOh&�țe�Ok�~�37��#�NW-}�~±�)�̈́�7U�]��1����0&��
+`I +N�������yi&$V\6G%��GL&�d˜�Q�l��Q�G[���!D����^ELg�˄��=f&���aL�U[�BU�V���(��&āx�f_�}����&�_w���l@m���[9�m����&,�?�0)BT-��LH�2Vk�>|��3a~2��&Y=���1s��(~0�goȆZt�p�	s�3�����C�8�2�v*���ܷ	kA��Q��F���t���!+{9��u>a�e�
ԝ�h&$,SRX
‰~��0!�Ȗ��l�>��^Q����8\�I�wA�0{=;rx��&L��=��_]�6���]prU����� D�A���0?8��+֙���h����7KǮ�4�fB9���b���{M��,����	�-@B�]ݸesVͯ��L(�p�BO��ӄ���8%�1ai�m��cu;u��:�<��4�#�j“�V�n��p�2u�.3�1��<�U�_9"����� �H��7w����Y��+��Y\v�q�����j�F/�n��A�L8P��y�[MH�Hv%�x���l	V�pU���l�IDO�5��t&�<�	C����B"���Y���qSH�3n�:Mw�kqR�KZY?���fj�}�̈́�QC7&�%n7a������v�+����f!M:�/O���=R*��i{l��J��?�f¼I������߄8�a�قr����qx��,��7Ci�E���{1�̈́HŸ�=��L<�o6a�̈��N��`B�ԉ�wC�O'�|�	р$�����̅�bB�Ԉ·B��	`3����o�S��Q��J\у<:�B��:� l&<>ބ���dy!���S���P�ہ�0!l&D���L��->:��‰
!*)���8�x�
a3�x�b�?̈́��V�� D˃P�B}���ӎ�H!l&�H��6!�;<]71�>�%�x)����0<�	������0��|{�� dj6q�fT�k!̩��P�aIg��i�t\93��0��n�Oz�>'fF�B��fB�
�A�7��v�ï���19�k>�z�G���6����	qI˻�M\�
+ @(S6'2̈́!��нՄ�t@��8h ����;���+~2��7&ݓ~�ׄ�D����!n�*@x.����#�C�f�f�?��u ��&��PJˏOS*A�r���!D�����0�����̜����t?Ԅ,u�k�U�C��H������Hp�/�v�!Dax�$*`D��0����[��0�Y�5-h����#L��$�q/�>I3T�+S��0|������,5���3��`�޲i0	���b��Xp���C�Y_�_u
+g,u�Vb�uZqH������x(��"���F��gܕ�(������Ѱ����y=�T�d�P`.aR��0�/]>B�
+v�_Y���&�p�nD��*���� #�)c���:H���C��:H��
m��A"F�2�F� #�=L�I��ص��Fa(
+ö��B������[NL[���و��mX��~��KxY���9H��_c^�쟃D,a��n���k�$��X7sP)b	��%<~��w��%�q$"�p���X�ˌw��3���x��n���{��`�[�<؋X�;��؉X����yj:c�1�=X��\rw�`��
�k&}%���o��#`	�� R��xe%�l+?Xh��(e�dB>WIZU%��X��̲�ȧ�M�����wY��F6mD6A6VM	���C��Q��m�T.��Kڨ��c�Om0]_UM�}p,���(&��6'o4���NE	��lB���&�K�����U�T��vkׂ�΃$�
+eX�ˌ��Ь�r�V�$O��K���ڰ�w�U��H��m@:���%���ڰ�5
+��4U�T��v[���K���Gh�.(,����He�-&y����q�t�J��/{g��,˄a DC�d0����ew���
�ҧ��7r�v����5<.H*LZ�0��'��A�i�7ބ!k=�i���_�e x/��9����)�ƪuk4P�h�j����(!S�7���F{��"����"=*%U�����g��(���M1� ,F*�KZ2M�9&eȈ���%��c.�1Ny�ʼ����"�����g��2��,}m�B�(a�SQ<��D�8Nͯ#��|�N�7�:�^k�
+�ڒz*r��k��VP奄Tw�����A���r�WJ7�����S�2����J���j�5��P��f4�*q��G��0������8m�=�#k�B��FAR�1[��J�n)vS�E�DF�@(,w7�K�����7�t��ݟ}@@b�?愭1��r���U8oh��1}�VR�O�Lᥑ��
az!b�I��	�Ptk�fڲ�:�*������e������~���c��z %5(�Z���yC'�
���V�Ŭ�
!qg�HB �^���n�BD2v�P��͝�p���FV6-���5X
+}s��T%'3��Y�v,�]l��b�y�v��P��:�z�n5"�����d3������Z;���QI���S�+Z9�Z�ov��1(����l;�.�l�B'b�Jg���s����0�� T����o91��B����~t�╺V����S#_r����%%�H�q���k�{�zW}��#A>]b<�q{-��%��*�g��"�W�B4����!ⶲaz�F,���0(]�1R)���(���5'[�_���4I�0�/���n'
+3PR�_�[.閮����
+�[BxGP7͊��c-*)��[<�'xQRj���
+zs�c1��,•*�m#r�e�Z����
+��LU
��H4zCi�@R�
+5f�s���Œ���@X,)���3E�,Y�Z�w��~���#Fj� ����X��J.����L�+�ҏ�\��ì���$ݨp7��h>)��hX�!�d.Q�S;�A�V�D��uz�1B3G�ԁ������8�0� u[�3��_�ԡg�
ᑆ���U�<����Ȥ'�!�;�A91����H���[��"F��!��M�#��� \.>������12#�p�!�CGM<�C]�-�ǃ���*	�X4!�xyG	Ж{�>q�D�jU�!�o��3&d�J����(H��A���k�⬡�Bd���V�ld�B	}�}]��M��fª�D!��3~�1!U_8v�*���C��xCx��30`!� ^����@d�!|�A�ĝ�}�(�~A�#�(�_�!�@Dք�6s�T_��P7���(J�����nE�%�5�����pI�-{�H������R3e�B�L�-�6=G)SJ*��a�?m�Hd
+�n��N��
U�C����;q����B�8�h�]?-�&:C“��Hq��	ƳA$(���}C8^�d����"1<c �o�H0aG/���F��┅�E�1"T�0��oom��!L=	����������t+�~0iZ�uc�PG�_�a�~΄D��Z�a��~Cxm+��!t}��k����	����p�\\�f>kB��/V��	!����^�@�K��p\�K�pyDŽ!\u�mܠ�Ie�ϛ��И�z�X��r,�x@�g�!���z�m�0�.ehM��Q3V�/Nf��oM�_��~�2^3bB���K�oi�TEx����؉9�����V`�	���P���BIQ�tv/����g�����0�85�B�.���Xʸp���<�=!V�n�_n��@"��s�?}ĄXIF��!���o��G[{���f"�)�6�$�����efL��0*�z�!
+�2!Mj���	�&��'�
�&1��u��`�[�ekp�P��6!�W�XRo�O/��>dBn {�b���l�2(FR�@��v\��4|7�$���	��}��:��Es5I�8��3�s���x(E2�U��
��!�Kjµ���)B����$[�qPe��ݓR"�S�J�Z���&,�\�j�qbh��V�o7�8����!D�b0#�+Q�q�z9EЁ	��ȤXοD�jv�q2��IJd�߇_H�n�5�6FR����tϨ�aķ��[/Ȅ�W���o�ϣ�����Q�E��?dB|���GQ���$�!,�p��!�-�Φd�55��N�
+��tM(�&�x�h|e����(�]I�ǧL������fȄ���U�����I
@�̌&��%����#0҅&\U���a��~��PE^��S��9F�
��2!���w�y`S/�2́��
a"!p��0�K����u�*���D��/�z*(�S	�U_t;EG�D�a4��`���h�Z�y)��s��*�]2�΅z+�
+6��o�]l�#��m}Sm��IC���(��F�27�����8�.N�^�6|
>4�Pg����E���*%��1���^�����&|4�|{C�L��D�Dyb���Z�
FRBU��b�j@y�S�©�F+W�8b�lY��ew��o�j�H�6��C�27��M�k�� ��[lV�r�H�u�!��!Kp���Y�oBl2p�Y��Q\s��w��0<��xtۮU��a2G�
ɐ�4<�����lk�� �a@����	m=��+�*�MH}o7��ڪRR��Jj�YB8��*%��L|w���>A�]r�]�0�ZU��TL�m��~��va>��uǹ�Q�)���T����~f�~u��J�ݻ���ɟ곾��?�݂�R&)��n���(���{w�8��e��JIFa.�������R�b��L�a'��dw1}U�i�lfEt���v��k�0 �V���-,Z{�cV��24���dws�!��=��F�p���V�,ᖳ�����E!B��y�!X�<�X�,a���F�`	�d�*D�0w��!X�\�\����~!B����N!B����T'B���������>O���"����g[���}�n��F"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D""""""""""""""""""""""""""""""""_4j��\r�����IEND�B`�
\ No newline at end of file
diff --git a/web/modules/webform/images/addons/sharpspring_webforms.png b/web/modules/webform/images/addons/sharpspring_webforms.png
new file mode 100644
index 0000000000..7ce7b79a56
--- /dev/null
+++ b/web/modules/webform/images/addons/sharpspring_webforms.png
@@ -0,0 +1,72 @@
+�PNG
+
+���
IHDR��b������������	pHYs������~��� �IDATx��}p[�y�R�,Q��aɲl��,�i�uR׵bBNpi��N�:�vK��d���r�m�iWp���;�1��L�LZ��m&i�c�i���6g'�&1��N�X P;�d[6aY�E}p���RWp?��{Ͻx~3���Ź��}�����,.."�T*Ǣ�2���J��P	�B!��#=ab�ʱ8�ԙ�o?4п*����c�B!�?�������@��FO��#�B!��FoX|�G����K~
+�P��r��x#c�����>�.M!�B���,�g�~�ܺ�k~���o��צBx/�ٴcr�R��[B!�B!�Q���ӿ1���<�a���i�m�a�������kV�o��zI!�B���۰j�g��D�|��D�b�q��]ۆ�?ퟫT��ڄB!�ȋ��:J���е����
��G:������ȝ[���M�o��J�B!�B$DڈX�r,��3���M�~���""��$���%�1<46W��ؽ	!�B��+��G�G����\�����8�<���6��+׬[��<�7!�B!b�|�;����s�~[�/��XR����;^o���b�B!�P�5ED�~p���G�Y7��gƃz�b�)��D����w�n��<�8!�B!bW�'O~���o�O��_�.�?:��V���k�0�{��	1F�!�B�[�&��W���?𥍫"+y+�!�a1���oK���%y�!�B!b����3G��_�-p�6�~�*��Q1B!�B$��s�*�cѓo�4پ�����h������v��_}�M�VbB!�"�F�*�c�g^?�qU�"�5��_J�f�ucs�J��G!�BH
+�O�xy���
l��IQn�c�����|�B!�t��M��n\�e5��3BLTK\�൙�J%�&$�B!����,��m���P|׋_�aB!��]Bl���:�l��_��M-�M�-I!�BH����(#1��Ԇ���:kr���s�J�MI!�BH10%��B�6އQ1B!�B�D���ԭ��������
�7RB!�B!f&"��b��;��OI��F����T�lRB!�BB,İ�bYH$�J�O�%E���IaG!�B	�KZJq��(����v\���Mx�1�)F!�BH��X\�%��W�^s�}	!�B!���#�&�;�t�}l��V���ù����J�B!�b#� Y��Zn���8�uvX3��*��`"1�a:FLcJ*!�B��v����:��a�qϛn�?!�B!$$B,61����=b-���1�~�
+1B!�B�A�W��U���$�!��2z
+�:>&Ŗ����D��?���(���\TU�|B��N�Ŀ����ք��P���Ze�B(�:K�n��q������bw�����J%3�HLөP2�"�K�#
ޯ&��dBB`'��Nf[��:1��=��뺽0MaF���b-��{cw���o����ЕB,�()�Pd`��۪�1fp2���1��M	���
+[9���D���xZQf�U�-0ÀB!���ڨ�&F��0x������ŏ��}�"�w٩h�d�ѲI:��meFت�?�q����L���$m��$��_��(	����荲}o��IJ��E:��}s�J|0��v��C[a��Rb#�I�B[ٔ���riEI2e��П��2RF�<> E�O�����IMPl`K��е��F��߽��<���WOL+JN��.+xN��Vf%���0OFZdڢ?�K�h��$5qH��D��y���)7ݱƣ�LAK?	�S�m��K�\�K_%+�D�^1l���(�B$����R/�a��
�Ɗ����v�`���s#!�t���<�V�TQUKl5*!&a�D$CR
+���h":5r�Ϟ�����I*�"��սfp��F���L�rIg�" �L� �L��Tx�Y�Xa3S0�Ĩ&!n�7)��6����i�u��ǒ�>~���x%�"s�Jj0��r(¦��;��"��2D�Klv��P��@�&�V��]�Ѣ�9)����4.b�P�J�*!�a��-�x��k7�`�B!�����rn�;+��������w �D��n+���B+ʑ�,'Y�w�B!�؎(K��j���D��Oܜ~��
+6�~]�au�Tx6�#+�
#��/�r6Dؾ��z��XD��B$f�hE�k��M7���e����d��o}�ađ0th�X�Y��T��
+	�0�^BH0me�1f��r�������"mPu�ߔ�\�k\-_/�A΀�1c���n=��u�U*�"��qYE!�H����U��!J.=������BLF'<h%������u�ޟ���0BH�#�
+3K�~�"��яk6�:�
+(!���/~pW�o�ܴS��,UD�ǒ��b6�
+�GF!�����U5�&"!"��5h�:	�C���?�Կ�hW`�K$�ds���Px��]��Z��O��q��z�9!�Ȉ���L�B���
+��Z��3-7΅Z�
��..��n��V����w
ɷG�&�=���m�X�?��b�*��`"(�$���X�]B!"�	S�PHB*��!��ck��*"���/���7N��s;$��RM0���,���'����\V*d��lQUKꄐnG��hVU�N*!��)�n�^�tbåk�}�wmL$%���9�9@;�yp��-�\S2��8CǂB,I�<6��,B�Y�-\�w�Ŷ�x��zi
+u�����n���LԲb���*H�bm�KlB�Y���,� �ۖ���\;,���i�/h8�gӎ�]Wl�R���j�͘y�B��u
+1B�S��&F3ׯ_�$~m��T��$��R1q�������OH�NAJO��<V�'�[����B�b׮^����/v�}eb�DbH��HТaw]?�E¶J��eބ"	M+�r!��,�N/�ܳm�%;nyY�aK8?t��)I�E�C�B!��Xlb4��o����2,�j_@dm�j���O�~��DB!�B��(��U�+�}C�k������[����E$m��\�L$�P�B�B�$�(Q7r���&sV��OHw���u�W�Gw�>��H��{f$��U	�!
���{VJ�7�F��G`)�!�:�)a�¦$a��
+@�Ÿ�S*�j5�_5(6?H�F���F�QZQ�`��w��w	���Ģ��b�����صq ��:�H�0�!f��A��� �58�!�.�s�����Uo�&�eT[u`Ž�
+8��[D�-�޳��� �c�5B,�(�f�U5���fE�ig{ư��xZQf
}�����I\Y�|����E��X�������\��KBl�"n_y�����7�T�E���Y�/ 61�H4,,"f��6�:�IC?I-{Jy������f���ڱ�U�v�x����]�?R
�2`���-`����N��s�};�P׺?�(�;��[�f�wS�&�Ą�7y�i�ѷ�\�7�0{\��)��0F�Ҋ�1؋fQ穢�f97q3�� 2fpe�u>�m��v��q7,���iE��y���va�,[p�O��8�*&�$� oZ�+y 0ѰV�_�,&���Dҙ�R#VBd���(�b�$_Ytv�)`/���]&��j�Yd�ɽiF8�vګ	"0Gz�G9`�'��j&ĸp������՜> �V��v"w�����A��6�Y-
�EQU.�U��G�
�p���?$�
+aY�G{�o\��y}&c2���X�C�>E!����0�A��rF6�9V�B��	����XF����w���m�;�V��Om�5�$zl�Y�E�^\(�tݺS�/��W�����Eh/m���h'?������O)gq����d�����f\��Iho�کj�Ϲ%0��\P���.�O�y���'�vǠ^�>�i��<��k��#�w����[��=W�H��(V�jfFF�	�̨EӊR�0'&�N:���
+gBC�V��#����ա��L'%0iZQ�.�;�[8?V�{�>������G��dg��r�����4�_��p�&b��0?�o��2iE�8�Ȉx"�(� �L[~�#fdD����.��}�Xێ�T�%}h[�Y��
{��̀e0Z��n���)Ö��J7�����W�V��A��}���pVd�'Y1��rH�آ6A'b{ھ���n��A��'y@��q R��fcR���3�t�_Ɂ��8,��n��EU�1���V<����sH,�yF�����#0
+���l�1e�Fᫌ�|)�-�3_���&�ׯZ�k�(�%%��PG��e􍁾Uf��6'�δ�hK+J*({��$�B�^�]|d�N����6��|�cE��Ny��JW���I�P��xV,�؉�MA��n����%���T=��V�2�V�M_6,:��s#�V����Z����ӊ�Y�f�8OÿE.=C#YT՜�m4��)�f�u	�B\u���Hoԅ�^8��=3���v�XQU������XwM�����N~f�;����:|s�������U�� \dQU�E~�٤5�V�87�75j)a���i�g%5�Nӽt���>)'�^p��d�A��Fݮc��E��Z,ƔB$��\�ch�̼x�$�I1��6y�>i!�"bA&E��H�u��ʲ����}AҊ1a�Z�ƅ�x@�P���*٘C���&G�����1�q ���Ÿ�d�q�8���"-��Pem|氉kJ�\��-&ϱL�e�G�0:LT��@
+1C[�rp���ZuP�J�C��5o�X�~}^����Vӊ2cb��|�O�����O���<�S?��U}%	{��z�߲�WE{��ª�}<e���@+~P�p+A�Hh�0H@��d�/Z�y�I+J��K��a5�oJ.ܫ��y�K��N��Ў�*AQ
+Q7�w�VvD��*���g@�P�}<H}�adzF,�����`sQmX�sʶ�M�Z	���A��x�2�xnX��8(ZTU}�2s���\8aSh��0^�ß����CiE){��Wh��]��(����/��y?KU7h����7i�$4J�r��[�X�Žvu/����EZ�ivY����S�V�aSЪ�ͻ�w� ��
:�V��DUi�lFh�F���-D�Y[ul�H��%��7i��s�o���07FJ���6"������k���m���i�ϟK$���y`)�:�Vb�R��r�t�q�76T��@�\��VT�BQU��
+��,�xU�C8,5�S����q�ѮIX�c�/C+��1l2��.�jJ���ff
@�+����EU�@K�b�-[%9�^Z�w3u�������M{��=._R�FfLf�&ڰEX#;5ܤ�����>UTՔM{���E�숰)�I�#�b��ü��^�U�{m<'�B����7��ܐD�t��'�a��E)He�]p2�R���a��=���
+X�x��O�K@�˕d�ĥl8W��K�S�<���!g�u{��."�{l�*��׼M�~<h�*�IT���&d�'�����t�q3ib3|/F$�|����Y�N�.�+����S�l��}/��k6��%��B,
+�ׯ_l�DӐ�([/����;����'��0}R
+��fm:z�֮�3f�Q��B�v��ݕ�1��+��tQUs~s����
+󈡢��9T^N~���x�ߊ�Gޖ��C-�{�"�zE���K�3�&M'_+�
+��<���‰���d6C��8ob���+;�h���-D?��˶ǯ�I1��1��.Ē��ֹ��<ptw��d���W~�և���l؈_���؉@M��������ܜ�N�p���}�ظO]q��>Z9M��S!hƛ9T>�uS#�[��X�F�b�۝����!rfv.�����8)Xg��a'i�g�3�=�
�H���Se�彊��������{?����RO��1{^ ���s�����Ѱ�����O�����\:��(S6���>��$:��gox*–�+����j�I�j̧�b��l��F�t]8�������n�'����%�ӊR�9B�u����D�fަ��p��L�X���m*ˢ���x�˷�"�(m��
+�(�"KQ�(uĖ�����T���߁s������4?6
����-!�#�'-��h�����h4)g�Z����
+\W1�NSƥ{����Pe$-�ktX838�������c�.�SU!\>�YZ�#�9�d�1�J���$����|�mD����(���X܉@�B��{N��'Nulb4i�O���}�J���l@5�(��
+�嫔%�r�����d��قE[xms3�z5o2�U��z>���TWǁ�)����9��VAV�Oi�6�[�ռ���Յ'fBv6�k}M��JĽ2�sSܛ�ӑr1Ц�Z�mZ�h�x�M&i)9��׎�$�$7��{6��"�0�7��q��M��.p0d0��^��v�d<m��zI�4� �۫���-���
�:��5�a]���B�M�0e1�H�U��r1k���w;��Ny�5�t>iϝvܑ��k�Kkp����&FS���w���%�
�yge,dF#l��29�0_�尿�J��ɀ��r�V��ۑ�6쥾Pp$�(մ��B�UP�1%��=+�p������0��T��O�e�2	�a�Wg�<X�Cv�J!v����o�k��e.[���h���I��?~����۶��:�U*�H!��`��}#�	�`��`t��� �.:j�j2�U��=�V�6`u�C{9��1@K�~��*ȇ�Z3�R#���cN���I_�Zd���ޡ��A�ύK2�-y�l��;Jlb4`xm�j<��.��@�f��8I>	`Z�T)�0�-��`X9�)tB��:��^1�hX!`�m�e=�U�g{mu�Y���-փ
s �#>du�$؃̾�-rK�5#H{
m/@��#������禂����厳["liC�C��[_�?	ʤ5)��ZdF#h��&i�i�U��O�
+��:T�Z�c�L�{mo��Z(�j;�ж8	� b����a �_����,
+"a��"��-!��g�"�p���K��R9��E�_:�7οx������#\�7w�,�B��d� +H|m%	��-Z��rИ
��)��{��EȂ$���mT]�Z����8'; k�X��������6迼v�׮��x��r�k\lb4	QQ�ӷ��k!9��+i �Zu0tA6)�2������n)�x8�v�#h5F}� �夈��Ak{Ȍ�LƳ�N�3�{m��h���%�>/�Z���b������Ezb����Q�'+~��Ӟ1}�Lnމ�杛hK�#�F���^h{Ȳ~͚�S��E;�����)���a� ���:b�m�6���U���(�&���w;מ��:f@�:]3l�_,Ԏ[����8�y�&����'&��a�s���:����׻�Pt�����@��J�,��H��K��d7�V"1
+x��Y�8�C�ɮ�"H���F<Ђ�D���~c��������Ӽ���m�>�G
Ͱ�{�}��Zv��oZ�J��f:�8}�$N_|�U�c,��w=�-:���U��(�n8����(KtYY��f_���A_��j�}eZD�L�Y�L{Y
+�X���j�U���W�1RQoy{�����:���ֹ�:g*�2��l}�D���*ۥ��(�A8��(ٔ��F��A��T�a�%�<�3���#hu�)��e���Y8/�$��s�aR�I�pH��%���y`�9�?5�����A�疒W�%v́�M�f 6��a��^A�;�p!�+Ro�������Ǥ�@�Q�x�р|�R�������5�ٹ�b
+h�R�x�o`#��ֱ�}�pÚ����^~�;7_j����wI�mM"b��zزs#R�p�
���l�āFA #�H�άPJ+J*�=�7�Dqy!(�́� ��+��1��+Ł�{��j�����b�ا`���I��(7�[*f�<��	���=�/��<��wD����K��޻B*��;IDAT5~�-k?(���O�NZy�����������.�13�$���!�4�`XL�L���JDW��	BT�l���K�I�zh�^R��ߒpc&��a_����/\P�ʉ���e$�š��"?1���%�b�)}���������[�qC�9�EU�A+�ag/İ_i7�#�+�V�lZQ�ӊ2��ǡ�B��l�19�>p���Vaю����}��,��Hv��������}�;�?V߸R����Ϯ���_���0��sМ��(D9��杸���-3�Ĺ(	�b'5c\�j�Ğ����CBtE�2�%�V�/�Ł�)�b,/�Q 2��U��l.�'t��@/�$C���z��Ͽ�{E��;��������T�_lV�~9�޾����%g���'���kv�X����Z|�ӊ�O+J���`!��eh�=+{A�u�!��B��Ͻ���vܳ��~�=���Wɽ��r�)�Ou�E�U���'���0��bަ�@۸N�`Ѵ���AK9�^IBܳ�YXG�F�E@H�w��_b�k���_ܱ;"���_�k{v����K���tRDX�*�LI$m�1+�b�)7҉��jG��|�Yh�?���#�
`w@J&�
{Y�9Gsነp�Ջ�}����쟼{�����q���K��%�"bto�D�A1&��#O�C[&�
+0����^^v�����H'�Ҋ�ZᛦN�8���#��%��H��`M�j������[��p����Gw[����h�̄�w?��$�6���h���]�%��;a�Т\�U5^T�lQUa��l/'�E��Ȳ�!a�o��f��I���D�L6��R������ow����=&���,�7��%²���Z�iRf!��\<*�,�k."	�St��u�&",�����v��w��0��~���E�;dC����)�j���9�0��nt�E�YT,"Q'�m�U��"�+��;�Zy��������X��tڹ(�|����;,!¬xL��jD!v��rP�5�i�$HԺ�/_!����E�HEi��v��U�[lb��``�z�*f�|��=aIX��֡U7̳ňdu������+��&"a��a��"=q��SX�t�՗����,�!�ޜ~��ꉋX�/
+1oEq�B��:�a�Ǻa�O����B�iՄ�-�
+A���aW	1Q���}a�}l8�)�������m�0nj'~�Q+��
�|��%Xo�Y���!�a�00�/�Bz��'�b!’�����g��m��3l�ܜ���#;�@wD��c�{����*��H�!�[6�T,���sg���[D~�kx?�ն���~�u��;}�,���\$�<���yJ�cLG$��v!fc1����85�Ҷ�(u�8o&Ĥ�'�b��%.��xaŗtg�����[6l��u~���o��78̈��"��O��:$_�"b�j�HB(�IЩ�٧M_�?&C�J��D�h�H.�_}�g��l��w�p[�D��N����>p��Y?s��H�y�S�H(g��E�&��	�i,�AZ���"EU������P�^��
+2^�N�][����8y��p���*�Q0��'~��|�?|�o,����ذj=�"V��&"�%6i���X1�H��M�>��B,�*A�H�+�����Z~�S�K"lGd;~�geu��t���D":�Hd����˟����/r|0㟓2K'�H�UTc�MD{�q6"����	1;61|BLP��bۉ��:׃g��Xa�z�-����D"3�H��Jlk�W��ݺQ֛��ڷ�>�����v�I	�&v�������`TC�ʦW���'e�;N!�H I)�W��+�k]��T��[6�OS�`�
+���:����k0��b%N
+}�ޓ{���d_�Yo~��/>��m<�����9����L�-�X����>Ʈq�Y���B�^TU
+1"%bo�a����o���<ā�~��ް��ً���1���툰Yh��Ӄ�D��G\u.ѯ��o.�z�g_�1��9�/>��ȇw���D(Ĥ%6�oȴ�N!ֽ�-寧�f��E���Y
+xp
+��,��lؾ�Uj����"ۍ��:׃s��{��5�=���Q���D"9�H�슰��h
+�*\�lǦU�-����}�������o�y$@j0s��l��W�"M����gg�,-1�y��t"bk��7ƴ�>���8��E~����^���
+���������ʹ�O�u���gvi'�s����{��2�������˗��ϣ���%7����%��u�ъ�8Z��Aq�����J
+m>N!֝�JΆ�g{� 0	�q�
+���$QA�8w�)�q��ƒ���ʅ��Ǔ�_|����W����_�r�x����qzb�q�#ƿ��_�����e��Ͼ^=����W�폿�W��_��v��&4�ވ����H1"��L׊��mB�lnf�����-��gK��P�V��#iE	�Be����,�㜿t�{�Km�ϙG��E�h�ޘm���2pI����7�}[n��nj;~�$��/
���h�X�+����:��Ut��ݙ�V���<x�
+��l�f���%6	b\[ٺB�
+��b��P�����a��/>j����q�/Ѱ����[�$�=�L$ʵG���
�
�_�qqձ�K�j��4t��j����'*A�bY��Й�v�]��ڄ�V���<	���y &����V��1*o�d��E/�"��k�2p���:;зj���|IL�}�\{���}��?����}b%�����pĈ�X���ZWun��>g:gÙ�uY���`�SP�BQڨ��6�)F�H@���GҊ
+;�H�%C�^M��S=Ͽ��e[8�^���d��⡝��H|��Vj�>9)�Й�/-?[�J{�1�"gG w��Y}��t��7���B���`:��J�~�a/��&�I�����OY$2�w�1!Ʀ���S?�^������m�2r��n'7��� �y'nX�9&��� j���ѱ�?�^9�����B�a�d�<�j��ae�|1�b2���T��}
v"5t�ް�����biEI���	V²#s�2�#'���9&ӊ2�63�Z
9e�R�c��P�����'N��z�M��b�ܰ�&�O�L�E�;���G�����vq��iVL�c�to���%�N؀���C_�l�֧��WT���#�N:Ӳop��,B��Y\D����}슰�<�sL߀���v��!!�<�iE�����jI��7D�ϟ��}�ϯ�������N�x�U�w��F�s�����Ã�D��k�>Y��=�}�g�*}ZCZQ
+2�2+5f�W-�Z��y�d	dz��B�}F���(��&��rZ���:y���EUY��%��LIT�h��B^�OՆ�*��6���B��ao�toZQ�b��=Sb,v$��e��HM��)��ݿ��3'�b���xy�M
Xlb��Y/�uۿ=p�*|x�$a�>�'Ҋ2-ۉ���:Ǣ[�z�g"���9�q��C^�u~<i��#iE�t۩N+J\��>n��{\(H�}�	!"���c�ғd[�6�r�D����6Ļ��DH��v�O�tZQ�n�s�
����dС��~�+8�r�T�ᄡ�S��,*�mx��ց�xߖ[�$��3��D)���8��sk��0qZ9\�EU�����o�1��ʚp�51�ua[K�U��Ww�;m?�t�VP;.�����21'2
+|d[y�ı�x�f��x<�(U7����,�o���R��S�&��$� �KU,��;0�B�\��ݖUS튱'k��W^�F�ǟ�'OK+4�,�
�����������U��:ˉ�W�^�u�)��i�*�(���X9VzJS|p�
x��{����~�YA��Ri�fsڸd%/S
���Vօ��J�wb���T�b`��~�V���v
+��H�"��@[`�)�y'�.b��|=���i�M_�o�H�+�c)Xo<nH�'ߛ�������O����w���~�8�;��]G�&���hÃ
�
&aL�Y�qh�Mg���vk2�n�S`%�8a�NZ�)fя	5�N�@ֆ1�gp��>/�[� �m�A
��2��Yyq��b�%eӁ6
+��"LJ�9v��
�'��J��Sb,el:5�RQ����E�)��S0���Cc�qZy�`QU��H�F��E�i�cX��O+��͋9�8Ϧ��3�:�&16������_(	�i�O��A��^�7\��Q;pt��gv�)�
'���s�|��E:�a�"u(�`�>-}dVL�%��Vk��)�ϰ͗�@��n3���)|�������eJ�i��$)�άM�x�����k��I�B�_�z�ឺ��Њ��%8�����%��AHT�ݜ���SЪ&��q�&���3����5�N���w�P�j�������B� ƒ���V��%C�ڣO"61:c�A�����m��ޕ}����GMR��w�^)qv0���.�y�P}Ud�aR��X���+%I��I�����rZQ��~�x=�Z78���LR8�N
|������kr†�|�]^�ɋ[)�<��/���4���nb���e�������3B�W9�I���U�I���a<օ�n{�OG%��3��T�塭¥�a��q���;Ֆ��[=��yi~!~ѫ����)k���9�{�<`���F�<�s��E�i�Q����8�Y��&�k_*���9^�F�K��ڤ�y���>O����,@[(�D���`3kB�MK�w�
+�v��p�#��x�ۖ�p<N	��BH	h�jb3AVM$���P*����T"1�k �P{�ɂ0–<s|�:�����v���F�������m2���VJ4�RQU��6o�$��:���$)��c���?%��$.D�c��Yh�ϸ�v���墪���F�����X�H��Uo�S�p� NF�U�j�]��5a����$mY��O��,�^�V�^Xq�c�q7Eq���g�>��5~�G����o�h�D���M7�C[)��^�`�����`3:�&NVӚ����ę���@^T8̸`C�
+O�2����4�������J1���ZnV�����񘃖�J���K���tg�ǡ�$�&a3E䭅��ұ>(�\pU�-4ɀ|�{���"�ǩ�D�܅�PdqїR���b�hm�SB�����S+�fgO�a^Y�8d�
�&�C;2�˩�%Y�h�X�����ҵ�B��I�����4�X��}�z��}lW�<�Z��^����g�.�)����%IǤ^�U/��
��Qr�=��¼G%��Y\\���b�8��}�Eܾ����tv�L�s�vD������ >�H0����)Äةh�^M��<)�N
+�G��`��>b�@:���Ҋb6�=&R;iK�f�^"��{&
�K�-hՄsS��,�#��7q�z\��Fc�̹��P�Q%�swQUK}�]sމ��K+��E��ܙ��V"�>����l����)®�P�Xv���j41�[����T��5}����1՝�F���w��0IW�ԖT��{N7p*��}��eB�՘-���RQ{��jlb� ��-�p�m1fG�}b�=��.��L$&��9T�lb���)C�t�8 �Ҿ=�\���&y8�xR:և�_m����f/���JS�u`#���!��i��$�B!�t�AЌ����	�ڣO�^Q:և��+�f��Tu��پ��9t&��0�Y!s�D��*�>!�B!�7y�*�b,�΅z��
+����/XE�N���S����+��qk���m��5�e�ه��H!�B��L[J���dq���=}Zt���_�ٸf�
+v�t�i
+�U��}�G�]S	!�B	����k�>Y�vBvK,\DO��^|��K?Ͽ��H��lǧo��FgX%�B!���U4=��xNY���%�pL�Yۿp�8Vɽ/lO7�L!�B��dL��`q���(ܑ��*��a���l�z_���D���N!�BH ��t`��ce�/�q���#��L$r��B!��AZQ���B#Ą+��;x�#���^�e��	!�B�
+3}�����	1!�
+n�1]�
E(�!�B!�E:�2�
+����/hc�3�ܼ_���E!�B!�r�"�b1�B>7"{�0��}X�/}uD�0B!�B$C�
3��MUu>�BL��2�$��V���؝�����~��j�nVG$�B!DZ�a
�7�c_P��^�>61Z��_ۿz��gM_��5vmKbϭ–�
���fB!�B�%�(�����"�bAV��oſ�m���Sg�?s/�_�[��"�i'������1��� |�:��`�B!�H/��ͤ
+�D�B!�t~+��I�����]7Go�����M��A�~�#�B!:J
+���Z
+��l��a�b:�����n�?y��ް��=�WG���)*�%סUQ�L$�r�B!���G��eF��}eQ�~���S�Y	Ⱦ0߹��ԗ|Y���/�:��oX����+�\�}�uk}_����i�1B!�B�<)�1������L��%�Ҋ��0b�ԩ��NZ�__7��O�>��_0��o���O����׻⃛VE�+W���V�uP����?��D�ËB!�����m����MUՓ���yXG�t���}�~�����$��_=>W�D$����Ͻ�[�7���(���0/D��*S
	!�Bq,|��g�HZQ���:-�D
+b@֦��
+�9����[m�(�QD#���3��B!���bW�Dp9Jh�?�YhU'E>���H���׼���'/�#�B!��D��G�J�3��V�f�i�Yh�Do=��}&�B!��BQU��v��	"����U���jE���B!�B�c%�ɴ�d�ʈIriu��Њ��u�/�!���RG���l�Bߨ�y�N��D���1�.�&X�]�ӳ���;L!�B�Q�0���̵ۢ��b�B!�� �.W:����:���ӭ���#�B!�t�8�3�O/�˝J9����6�泶^�����IEND�B`�
\ No newline at end of file
diff --git a/web/modules/webform/images/addons/vipps_recurring_payments.png b/web/modules/webform/images/addons/vipps_recurring_payments.png
new file mode 100644
index 0000000000..f32f8b9d5c
--- /dev/null
+++ b/web/modules/webform/images/addons/vipps_recurring_payments.png
@@ -0,0 +1,237 @@
+�PNG
+
+���
IHDR�����
+����2U���	pHYs������E����;�iTXtXML:com.adobe.xmp�����<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
+<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.6-c138 79.159824, 2016/09/14-01:09:01        ">
+   <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+      <rdf:Description rdf:about=""
+            xmlns:xmp="http://ns.adobe.com/xap/1.0/"
+            xmlns:dc="http://purl.org/dc/elements/1.1/"
+            xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/"
+            xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
+            xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#"
+            xmlns:tiff="http://ns.adobe.com/tiff/1.0/"
+            xmlns:exif="http://ns.adobe.com/exif/1.0/">
+         <xmp:CreatorTool>Adobe Photoshop CC 2017 (Macintosh)</xmp:CreatorTool>
+         <xmp:CreateDate>2018-02-01T13:49:10+01:00</xmp:CreateDate>
+         <xmp:ModifyDate>2018-02-02T15:45:13+01:00</xmp:ModifyDate>
+         <xmp:MetadataDate>2018-02-02T15:45:13+01:00</xmp:MetadataDate>
+         <dc:format>image/png</dc:format>
+         <photoshop:ColorMode>3</photoshop:ColorMode>
+         <xmpMM:InstanceID>xmp.iid:5dd81576-c032-494c-83ee-7f534d335ee1</xmpMM:InstanceID>
+         <xmpMM:DocumentID>xmp.did:ea520862-9390-4b2c-a412-440ad584f54e</xmpMM:DocumentID>
+         <xmpMM:OriginalDocumentID>xmp.did:ea520862-9390-4b2c-a412-440ad584f54e</xmpMM:OriginalDocumentID>
+         <xmpMM:History>
+            <rdf:Seq>
+               <rdf:li rdf:parseType="Resource">
+                  <stEvt:action>created</stEvt:action>
+                  <stEvt:instanceID>xmp.iid:ea520862-9390-4b2c-a412-440ad584f54e</stEvt:instanceID>
+                  <stEvt:when>2018-02-01T13:49:10+01:00</stEvt:when>
+                  <stEvt:softwareAgent>Adobe Photoshop CC 2017 (Macintosh)</stEvt:softwareAgent>
+               </rdf:li>
+               <rdf:li rdf:parseType="Resource">
+                  <stEvt:action>saved</stEvt:action>
+                  <stEvt:instanceID>xmp.iid:d269c944-0cbb-475e-94d4-d2d2380e501e</stEvt:instanceID>
+                  <stEvt:when>2018-02-02T15:06:42+01:00</stEvt:when>
+                  <stEvt:softwareAgent>Adobe Photoshop CC 2017 (Macintosh)</stEvt:softwareAgent>
+                  <stEvt:changed>/</stEvt:changed>
+               </rdf:li>
+               <rdf:li rdf:parseType="Resource">
+                  <stEvt:action>saved</stEvt:action>
+                  <stEvt:instanceID>xmp.iid:5dd81576-c032-494c-83ee-7f534d335ee1</stEvt:instanceID>
+                  <stEvt:when>2018-02-02T15:45:13+01:00</stEvt:when>
+                  <stEvt:softwareAgent>Adobe Photoshop CC 2017 (Macintosh)</stEvt:softwareAgent>
+                  <stEvt:changed>/</stEvt:changed>
+               </rdf:li>
+            </rdf:Seq>
+         </xmpMM:History>
+         <tiff:Orientation>1</tiff:Orientation>
+         <tiff:XResolution>8454898/10000</tiff:XResolution>
+         <tiff:YResolution>8454898/10000</tiff:YResolution>
+         <tiff:ResolutionUnit>2</tiff:ResolutionUnit>
+         <exif:ColorSpace>65535</exif:ColorSpace>
+         <exif:PixelXDimension>1921</exif:PixelXDimension>
+         <exif:PixelYDimension>778</exif:PixelYDimension>
+      </rdf:Description>
+   </rdf:RDF>
+</x:xmpmeta>
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                            
+<?xpacket end="w"?>�nw���� cHRM��z%��������������u0���`��:���o�_�F����IDATx���w�Ve����Ö!"��"�Ž���Y6lgf�l���˲��ms���L�{�8PAY��?Aϸ�s����~�dp_�������{54�Vs�������(�"�������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`��������(���h#]�'�-���]�ڭGҥkҩK���t��mJ��$MM�Ӓ�$S'%�OJ��V�:m�L��ӱӛװ�'��*�W]�%]{$��ޤCc��oL/�}��I���ӓ�'&S&ױ���k�>:4&=WHz�)��n=�W���z�n=�7f�&�̚��z#�1��Oycf��S�w�2g�|���M����BVX9Ye��ߠd�U�_WX9�b�k�-��55%^Jƿ����2&�\����g����t2$�?8���kX�U�>�����ߖ6����W_L^y�����tq�9ݜ��h�X��+)��~�%+(��+$

��wϘZ<��������r2ql2��d�����Y3�@+jh>b�f1������-Ym�d�
��7L��\�X9S+f�J^|*y��d�C�S���0th,
+C�a���\+�R�����8����s�&Oߗ<}��0�����!&C6J��X�x����v��ı���ɋ��s��ǒ�,V���������l�m���k�u�"J��9-y�䉻���(�YQʯs�d�͓��I��,Yk�=}��۔<�X����w&�R�6����Xz��2Yw��ޤ��X�s��G}<u_��=�K���Q������5�`�dӝ�
�%�,�8�OI�9y��䁛����=�ACC2x�d�]�
�K�٢h[6MME����n,VBY�2$�d�d��:��A�e�_y������o.�����-�"0���$��;�j���vI�.������;�N��O2��ԓƎ�C+��l�K���j^}1����Ϋ��;&��sz���}��$}�d��c�oJ(Ϟ%��P�����.�l�w��{�/Z��skh�[������k�
+���Cѵ`��$[�,�[&���~ur�%ɸ��A}h�l�s2t�d�]�Ӌ���#�����s}2k�L���**�x�d�Zrx�Y3���ˡ���-Yi59�o�s�}#������Hv~�3x���U���6��~ �jϢ�3��/�Q��qA��1Kn����+Tw��OLn�W��ߕVMv9,���O��y��v�5VR��%km^<̱��Eg����E7��/O��>€1��@���9,�I{�g�l:4&��5鵂,�w�ד��`i���1��\���3k�=v�U�w?<Yy��vi�y2��ɍ�XiS6߻"Ym����Ǔ�X�ﱡC���ɞGm��Kj�k�����5��<h_=�$;��vx����hi��;F\�L/��:���=�&S&*�-����K%�2Y�c��fN+�<@Y���sd����.��,��yJ��/'ם[R�L����݋U�{,�7Hˢ��ɾ�(�����s�L�[{�d�#��:v�GkYa��~��/�����䉻�T�"0�̙��rY�A�
;H�l��+�����b�(���K�\�󿡃<ZR��������K�+϶�&��y��G��?j_Ж֡1�����mɿ��<x�\h=
�-�H��d���hK�������m-�����I��@�)���+/�*C�U�M^xBe����^rx����d��v|�e+��S������On�8���E�E`�u����dߏ�^�6خx=qwr�ϋ����46&;Z<4��<��Z�%��6yiTr�Yɭ��o0Pj��@����cw&�o#�����E��
+��}$y�19�P�&�_ܿ�+�m5v,��;\<`z�Y�DÒ�ܵhS|�g��=�����*��ߋ���y2�A��?��ߓ����j�5�L��ir�璋~��s�L�RR�4�|E���v��Ÿʡs���j�U���@���{>_�M��Y��S�����aE!��?&�g���!v`�����y��Mv,^w\���Ʉ�d’����X��z0h����$�H��~��=2JŦH���&����j�U�!ˡ�5vL��G�9=��
+9�P��N~rm�fQ�vt�V�~�m�aQV[/��yŊ4��2t����$�S�҆w���)%G���\o��4���ŵ��J��JCx��Y�M��aa� �z��d��r��mW$3����4`��p�%��ʣV��j���+JV"��k��#�LN�,YgKyԪ�]�C����?��{Ƀ�[a��_$'_P�_������O-��"0����`a��׾r�n�2x+���G����|��
+'�d��9;�(_��&;%?��h����PV�|���C-��ɃB���<�����C����'%�^�^_@}�����N��[o�w_2ֳƎ�V{�a~�>��~X�ԗA�$߹$y������Qo:uN;Η�TW��O}/9����Ֆ{-�w:ă�U7d��;�,V�w]Ne���w.-�w��P����q�f[Ou�-���Ϊ��ICC��'��^�xX�T=��a=��u�L�e�ˡ��w�{&��a���*���b��S.NV�PU���~>9���V$�uFx�;�N�M��[m��V]�J+�͚��r�����&'��|�Va�Icc������Ƀ����7�M�
�G�l�}�+�\%�HN���'��ղ�z�����VT���~#��29�U�~��C�Po��~�ۮLfL���o���/�7�Ie5d���+�����k��*Z�z�����]����$��ʣ�v9,9��d�MdQU��-����b�`�:�,��bʊ�����
?O�Ծ}?�|�o���dQv]�'G�4�܏}�Jy��iQ0�`;YT��,����,ʦs��?L>u�B?�m�/ځ�d�E``��<�<u��j�}�[Vo����ɨ��@���99�'�_�j�jvx���T,��N�$�:/YaeYTɠ���\�3h��<����9�/I6�A@MS�و�e�V=z+K�ZA/伶��ֻ_��$ۿGU5h�仾T�NuhL>���3?L:v�Gu�sfr��Z�׻��%����ݼ��z''����QY��{{*��~u2�u9��v�ˠ^l��V��53��r9�P����zQ�B�j�ޫ�Ru�Oɂ�ѹkQ�sܒ$}.9��������ɉL������!�跒�OJ��E`��͚��r��j���6�Ծ�����*�>E�Ԟu�JN�0Yq�,(4t(VT�S+*�}=�O���d�d��6ۥh%l��:��Ӑ|��'�kK
+���v��$E``ц_ ����#�xG9ԺN��-v����Z��.�W��{��A�W�l5��O���&ko!�n�!�^�km&�Zס1����>)�ΰ�/�U����o"��'�g���n�m�P�)�y2y�^9�P[��?9�7EUx'�o�|��d��eAm�Z���=CY��}���-�|WYԪ���/���p�,X6�풜�{�`�f(�n��2x��w�ee���8����lPr�ϒƎ���
Z;9��bUԂ����V�,��]���kpn�%'����Z��*5Cxw��;�9M���M��Z��f�Jn�\�Ԏ�J>��b�WX\}��Uו����t���`�uhL>��d�ɢVt��d��eA���B�$@;�~��xWo�HnV@z+Mk�V����d�d9�P;�P
+�,�ymU��D��VV�f�yjr�����:4&G��M7�g�m�/��8����ǝ��2BK��l��rr�E
+����Z��n����̲��'��_�57�m��J�7�i����Y9�����?L��[����gXs���'o`�<�X2�!9̯S�d�=�Ps��^�<q��h�nU���0-�[��ij����tx�=�i98!��rh��l�9�6�O��h����q��ʊ�ڣ��Z;9�w�E�e�X�h
=`MYк:uN��m��z��e�d���Жv<$9�(9ж��D�����9E``��zE2s��ɎI��r�%
+�o�3;��R9�оz�+Vlv�%Z^�>�����8P�����?J��F�����lw�����$�:]�����l���6�,��Ӓۮ���;&[�%�Zѹ�V���d�d9�Ў?��%'�.�;@��>�����(CK{ߗ�m�����C�]�h=}WI��k�R�~:4&_��&@�^zD�,�e���cӝ��v�P+���(��,h}+I��]����a&���h}��/�*��,Z+�c�,���Խg�峒��e�	E``Ɍ~8y�9�o��^}�P��+�yƎN�S�����l��h;ko�|�'Ū:XVC6J>�}9�v�.��xN�b��u���Z�Ɂ�0`
?_�6���F\ ��5tH����u�l���~A��,��Ǧ;-T��m�Wr��r`������SYж��Wt5被A��b�d�Oȁ�2t�d��hu�������d�9�o�A2ho����<sf'7]"���
++'G��h
����$;"�NCCq
[aeY�>��}���-����'O���C_M��D@�R�܌��mW�a~�l��YI�I+�7�sm��$9����/�ܞ{��O|7Y��,�>�l��h_[�|�Z�gA��@��7wL���
@�R����d0������C+跜�Z��N;�x8�[��ɗ���+ߺ[%�+j�!��`���}�m���m�Փ#�.��(Kgԃ���a~� ������=�<z��h���;%�JԎVN��YҡQ���=�N�j��~��$�%>�{%;Eԇ�O���h����~���Ɋ����~ӈ��f9��>�BPk6���h9��V���/jK�^�Yt7`��I��@����I��r�Z�"0��n�"�5S���i���9ɍ���`~!�`[9��i�F��_����v���@}�b�!m����,��S�;�����Hm{ZA���k�)���0���䨟&=��P���h��.rX����ԧ�):�����"�������<�o��2$yy�,ڊ��oy��%�<8�?8�Jҥ{ҥk�u�d��d�d��d����g�q�&^�@-�R�ӓ�k

ԩ��0��ɔ��x'����F}��i�W�Of͐�"��e�Խɘ'�A��b���%��Zm�k�d�]�$��$�*XR

��%M��2Yw�ۋi����{�GnM�#y���y�|j�V{%����/Y����
+ɑ�&g#�w��?�89P�VZ5y�QɅ?��"��e7���ߒ�<���V6�-��EI2�B'X�oX<�3쀤�e��vO6ٱx%�ı�-�'7_�����j�G��<|[����l�O�
�W�⭶�#����~2yQ������=��ew�e��7�0����UוC�|��s���)��b9��i�P|qv��i�%~�e
+����Ɂ�M~xu����t

������y���u�Ū`��oH�B����99��r�Z�"0��OI����7t?���ݓ�v�C��{��,�(

ɶ�'?�6��/��7oۿ�-������d���@{�z�b%@=�٧(��v�
+�r�r�d#�[�Nh�ϗ���;@�M+�7��@�N�l�|��?O��־�e����~[��67����S�B
+@=�f�d��0Ͼ����oݬ�����2��;yi���Z2d#9��^�7�$^J�Y�V��$�F�+qk�f�m�:*��h���C�>ɡ���_�Fҹ���l��(籽�{��,E`��X
��m��Ak�
+�M#.L����7`�仗$�Y���v�v\�'}V2g��a�#��Q��A��������/���"0�rn�4�=K�l���VЅ�M�
��>�|�d�:��~��*9��ߧ��^�c�v�ԯ�?��[����=����8hisf'�^I�}$y����[�{�[��ȭ�����ɋO'�_M��d��V���A9�K���3urr�5ɰe�$}WI��4y�~Y�4����(>���O>~j���{���O�:6����-��Y���ɍ���?�:'G|#��g���@箎���ܜ�<:�P��3���ſ��R2}������.�\�;�x@���d����C��M��]r��|r��������"0вF\�<��RniZA/x��?�|���}��:'_�e���[�e>���'%w_�L]@��b�d�]��GVo�V/�gMY��}�����7mr��l�Zx~]��0��i�Ʀ�z[c�W�d�&W�#`�)-��;��W"�$�z�䯧ٳ�%m��V�I2ql���r�$��#�]����C�O��z�y�Z1�բ���g��1^,~o����IɌ��7sZq�v�Q�{����=�_ޭ8(�7�X3h����
��&|:��g���װq�%^J&�M^{���M�\��ܜ�~�xu].��X<��c��իo��ߠ�5頵��V�J��|�+���*}��w@QDdў�;�����������^fNO��x�����Ŗ>��S?[����?�\wn2k�,�%�����d�ɇ�*�$Y�_��6ɣ�ˢ�l{��d�E.�$�z���,�x:$��QQXz�f�mm�������-��<�HQ Y�?cޯǾ�׫o2x�bO�(^]��������5k�/�aYL}-y�ׯQ$�-�5l�7�y����u�V��ڬ����eQ(�}\�X{����yaQׂ����pQ2~L�����臋�%�,���Wl��a���W�r�y���HC�k5�hQ=�$��%��II2���ߒCK��39��V���˻$^vLPm����|aҥ[��6������rQ�
L�)�z��#ɽ�'�RM�6���hl,
+���T���������_�[����g+u���9y�
�÷�^��A�U�װMwJ6��綶6~Lr�^ɜ���w/)Z�	/'��C���;�N���|�(����k��$`�)���3����L�L��3�MZK��E�Ԫ�oD���ȁj��=9��ro?�Ҩ�['o�0��@��<�x���$�_���8`�d�}�a�L�k���G����"p�x����{Y/j�n{��;�j�d�~�FÊn'�����\���w��W�X	<���ɿ~���O�j�Аl�Gr���C&$�=���XL��l��)b�Z��׋6%+Ԟ��؃�es�qn���XG��l�C���s��w�b�.j�r��}��C-{cF�2�O�N�����l���~_��<~W�e�÷&:�A�vuj5:��=�Us��(齢�VM����o���\uN�>����~g�Q�L���������j�݉�3dâ
pӜr�s��V{������#�o(缿�L2���Iɺ[%;W{�WXtX܏8"�Zţ�%㞗��PX6�{&� �I��o�ն�v�.�Uc���l��9�e���Jr���/�X�G?\cx��w_I��Sr�ϋN3�����Cj˘�����|i�䂟$c���1Lx9����ݒ_[��u������s�]��3�s������Ͼ�)���I���l�
�b8�bRZGss2“i�o뽋=MXz[�nO�$����W!Ԃ���ȓ�5�O|7����Ò�<�h�y�.��O�M��1�>)���ɗwN�~z���m��?-��K����|m�d���7�LMM�m�N����/�a���sd�������/&'�?qA��=ql�5�߾[���<�?�:,��M����K�}S6?�X����d��\|U���kVk�+L������5sZr��cw+Z)ϙ]�1Κ�����q�'��h�J����d�~r�}Lx99��+�%w���PF�\��8�X�L���/١��s��^�u����'�S�_�ZE��Ū��}�h�_E[���Z,E`��L���}�����,-E�ƒ7&��(��s���/Ts�|&���1����\<�x�ɕg�Ҳ{cF��&'�Y�Y�bQ[k���	9жf��\���Ľ�[�H��Vc��\�|��be��)���������~���՝�1O��ɯ:Ɵ�;9��܊�Cc���`�."�Z���o�r�<��VЅ�Ȁj���ʆ*��-�x'�KN�P���T��ɯ&��jrʡVԵ��O���m㉻�����ɬ����>Oس(���V^=�j�r�m���'����ɔ�����>X�B���/Zx��@�z��d�9$����,���t������r���9�����C�n}��\���ځE��F=�|�ɿ~��m�Dz��#��*Z٬���}(��<�L,Za�qTQ�b��r���Eদ��/$��9��j�+��G�������滙�])��yn2���o�A2XR=zk�$7\T|���Zw����V�{&��9�oʄ�G�(����ʹw2{Vr�ϊ��\6{},il���ŧ�o��ػ\+��s]���_YzknR�C�I����7����<u�c��L������������{�])����l�kw9,����
+���8��ʶ��d�!I����߇n��;�@򍃒;�#���g�d�=�@˻�ɷ־}Q�NN~��b��9�屴v�`��3p�����g�,�O$�9�Zc�d���*�X$E`��M��{���S�b[�6����[�W^���Сx �d�F�oPe��#��NJ{Lm��ə������ci��A�r��&?���{�Ly�k^��^��}��������&=��g<�V�|��X\�\������ܐ�p�yIh�ϓ�<�(��գw��09\������8鵂��Ҫ4*�yn�o'>Y��%u���O?�̘*�%�ᰤ�`9��fNK~��?�Œz��b���e��:vJv<�<��J���豤��Q��X�1x��@�x�������v�)�ű�^�a��������2��f�Ȁ�3;��1�Z��L�sx2i�,�DCC���r`ټ>)��ǒn��Қ86��d�4v�Pq-+��kUk�F\��ǒ��Fr�7�3�k$�o`ށw�����ȋ�O�n���V���S{���u�������^�Tˌ�ɏ>���_Y,��H��d�s�X;�t�,�Τq��G�t�lf�H~�����d�$���l�]9Ʋ�՚�ۯr�.���L:�v�9ޑ"0�vn�(��u_��š��Λ�e�C6���:uNV�PTì�E���d�Rƿ��zX2�IY,�^+$[�)���W�ӎH�<%���4'��I:C,��>P�{�*m���d�K�ݥu����@����e`�\��3��rH��f��rX���/��ԡ�z�Kz���[���(�Y3��3��W-m���{Q^Vٰ�^����H�󭡹��^!x�m�{ҵ{}�a���5gO��]������j�u�~�z[�s`����5�$Eqs��(VK'ן/Xy�f��2���6%??�
+��4eb�&㞗���d�d��r`�̚���EvZǼB��e�8:u)��g}�Wk�<���.�muƺ���X(E`�m=p�v6�l��މV����\�X��`a�
����S�o�C��oLH~�e-�ֱS��/XY�s�_��~X��us��o'�����v`}��V��|M�]VcG'�R��n�G��`΁�Q���
��C���M�g%9,�V��M�$sf;�w?,L�Pb��m2\7�63~L�O'o̐Żv�xw��Ar��rh+s��3��<�,�͆������W��|�>�1���G5��w�d���7�6��@ۻᢢ\u

����aa���/��zh���\�LI=pCr�rhk�N~��bU�l�m=�ɢ�ryr�����f�(����,����;T�%���Z��rd2��j�u+K��S�ބ���o�CR��ZC��Ɇ�V;���L�=�X�$��]ӭ�(��c���K��r߈�3�(

�tᝍy*����^�LH~�d�,Y,ʰ����w����/�xm	�g%w]S��n����Fh#�rL���Y��~��z�����`�w�2�\��N~qt2u�,��e�N�.�E�b�v�f$g~A[���̃ɟ�i�-�%t��0l˩ʽ�*C����7��E`�}�C2q��d��d0���V{�S_��S��0�E?K�}T���9��Ʉ�d�N�ݲz-Iyw��a��3r�7^R�X���d�]��w�V��Zi5�kKy���*�lg�
,@hs��.�C�lg���׫o���jgp�%Z�����a}I͜&��;���(�Z1}Jr����Cc�Ɏr�Mߒ\�9Ԓ������������Z���Vt��g��ɨ�1֍ݣ�o��"���pq�ڠ�V�0��	�$ZA'�p��aS_���̘*����NRp�5Oܝ\�{9���v���Ӓ���ښ����Y���v�4v�C�[{s��'��87�6���|�Oh?���<x��d�e�h����ˣ0?E��{}�(����'��\rf���rX�Mw�7;o^�lsT���?��9,L�ɺ[ˡ֭2�~�o�EO�[�qv�����"0о�_ �ľ��V�I2���o�8�p^����Ǔk�,�Z5gvr�׭p\���Т�����r�e��2���[BWq��-�p����+��ÇoM��K2u�����@��x���d�~��a�:ɠ��1OU7�����69��j�x+��-�x�P�VҤUgM{��s�=?,���t碋���S\�jݬ��9�L��X��kع߫���Q�yv@2�B�kK��r��r��w��ɫ/%/>Utky���Qů�ށ"0о����%���,�= ���ꎿꭠo�,������j�����]e1������+�V�Ծ��H��?��G��`[T�=�Vg�z��m�W%Cu�Z��5��������=ϜV�yZ�d�Z�gh)/�J�ޢ���ܦ�s𘧊��K����3�|X&��@����=G%

��a��-k�?ߵ����O&kn"��=���_Ms�~"�z1}J�ϟ'G�*��
�(��͗�U�7q
�/��(�b��SY�o���m����;����QCCr����}����=W[E�9��g�"������ysuo۟�Bh��$�ܚl�}�sXeH�e�臫7���V��w{��{��������r�~]wnq�G�qA�LJ��K(4vL�ټ��j���j,��������9Y�o�m�\�}N�Or�9���Z�Z�f�*
+�c��_����s��m�V�Ԇ��SN�m��fx���=�#/r�â<z{�ϑr���;e@���Fr���Po�����Ǟ%���?T�j�6��ի�6�����gݭ���Ny���ԡ1����i*��e��J���o�H^zz�b諸x?�Ťy���v�Ԇ{�O&���^��9l�r�O�uc�g�d�-�;��_O��5���ۋvX;�"I�)������ˡ.�ׯK�{,��,�YwkT�mW&㞗C=�9-����'�b�Ak'�VH�L���;ql��lUt��o��e1�����_��j�QŊ�y��/+�5G�
Ms�.֞iŁɚ�&O�_�1o�O�����2{����9-y��d�]e�<7�o������Au{�i.�A=�Y̳����ߐEU΁�F��ڿ%��j����Mr���V��$�z��ɨ�Kk�kK�߿>�X�����ˣ��*V�z��#��@�yar�g�]L���U*ݷ��=��>,�������)�@}��d�89ԳoLF?��XIҩs����wˢ*?�_|Z�l���?&�'�y�ݪ�������Ψ�c�峒SK&���]�__��Oz������+{_�$3��)����nO6خ�9l�r����_H�[A?u_���}Xw^�|���r���Èԯ��Ye�ǣ~*�y��D�*����`�?���t�&�$Y}��y��g%����T����?��ߒS��6޵d�k�7$/=S������?O�"��:���)ן/���%�lQ��V����a��~��6��&�K��X�>=qw��r(�ۯ��{~�T@a�1�o��`�����0��
��:�z��Q��jɷ�O�
���z%��s�W|�|�~`�����rϵ�fL���S�qV���i�W9�aI���Ş�U��َ��u�ʠ,��$����Y}T���ѩ�2�T*�
+�t힬�z��ߗG��$YeHr��ɐ�d�")�e���K��^I��r��ꭠo�<yc�c��ı�]A?y|r�"uj�����ʡLF^䡔y��t�V�Ԛ���/�C��<:y�69�SO�D]E��{���${!�ޑ"0P{�k	�^+$�|o�ʷ�v��R����J�����,�P�n��h�Ny�>)��z9$E��V��c��Q.#/��<����ه���:uN�<%9���(�o�Ԟq�%��.�m�/����
+����s��Ҙ<>��W��&#.4�ԯ�.�A)��i�}�K�*�r���ɴ�rH��A���IfN7go��ɏ������w�`�(�i�/��՞Ic�r���j�����������*��M��_/~�z4~L�Խr(��nN&��C�V.�9���/�ٳ���-����A�mJF�o��{��c''�]�l��<�H�Ԫ��I��V���l�S9�6t�궂�9ݗ
�����ߞX�����*y�sN����2(��E�o��kʠ����לr�ЭGҧ�����0g���zɱ�IN�8�l�b��*�O�6͞��t���W�qU��mW$o���ًO'>��c|����ߘk��]���v��2H�U�Ƞ��Ne���k��Poױ��4_�c�M������d�O$=z�����ڥen�§s�r����È�XV7\�\wn9�6���_���6y|��}r(�Q$^�C�^I�>r(�{�K�ynr��$+�^_?{��������̛�/�<�z��Sg��T�"0P�^�	Ϯ�%��\�1Uy�TgSh+�nr��r���Iɏ>n[��7_�S^��Z~�3@K��y��d�+r(�;��$��Q?�u��b_z�L�ɶ�'_�ur��Q?I��!&��Sj��e�m�ZBW�l0���Mɯ�\��W3�&?�T� �;_�V�7� ��Ut,��o�A<y�}���v���lYt�l����?+
+§]�v|����0@�tP���O��o%�Ux�-vO�v/G��*���9=��
+�4��Y3��|&����j���G�(�@�kn.�����+��FҩK�s��Ut,�Gn�A45%�ޖl�W�sPgװ�G�F�oZf

���y�=_���@��c�s�yX�N)�m��͗%{��t�l�[rۿ�,U^|�U��i�ih-�f$g|.��w�]�������'�N�=g.)��/l��ߙ�cw$��T�VYݱP&Ms�'�CU<p�"p�AIc��دS&&ݒl���5�_�x
;���?&y����G���&��
+��)�o���.'�v*��q|�sZ[SSr�7��H>��⋬zp߈�7'$ӧ�Cʣ,-�Y<ݬ��j��2y��rtbb�aUס�(�}�~��W(��~����L�>�X%�ܣ�{=V<�:�I^�5B�}/>�<qw��V��`���=��N�[A?�x2�A�2��k��<y_���&����9{Vr�O����h�e���2��'�A��2(�5�Tɫ/&^N��R���J�U��ڢP�n���ҳO�Ѱ�5Ϭ��O�Y~����g͐@;P�È�]��)�r��K�w�^|�s��臒����d�O$�:���{��䯧&/=c�(���A�<�H�ƌ�K����|����7e0�~T͓�$�P��_����mW&;���[K:wM�ܤx��<�X!��cE���+ZJ�:��)���k��~�X
[U�P�E�~��5#��r�0���o+mG\�|�+�6���{�l�$�^o~(�I��W5MME�l�����
+��q�;�`������݊���z�y�����C2`��5�y6i��
+Ï�=�X���.I�-F��f$�\�����f�ᰤG�d���{��WK�lT�y����	e�����yLq��ɶ������O�<;��ʤi�9��O������_I��M6�U��E}���`Q@\}�W��\���f���{3��o����,�y�g(���ԏ�T��ؘ�/����{��T��ȋ��P+F?��u\r�O��>�lw`�Ҫ����1#�����&��*���'dP�klխ���`�S2��ϙ]l�TU��z���N>�3�pYt둬�u�iN���󏽹���{�`1(��'���K�޼�ݷ>��U�x̓�(�Z4��3�א����*V�
�(i\���q�'Oޝ�;<y��d�LyS�{6���Ge��F�j�S������A'�W%���8�q\V��ss�
��o��^��k'�h�̃�xE`���8��E���&��K^_?��j��Vs��_���Z7��7W�u�Q��I���k����ѻtM:uM��MfN-�:�6%�\�����ŃJ�t}�֢�RM�_,���zT7�zl���Y	\]�?^�"p�:]	�Ԕ\���#�rWM�Պ��{/x?2����w���&Y��ԗۯ.n���RC�����Z?﹪��g�Ln��9uu��H��xKg��Ҭ��[�}c��\�1Pc��Ae�a�&9�5�
??��S������o`��v���gL-���Rtjzy���J� ��̚���jg��~��~��
+�����S���T˸��r���FU{���r��:�A��z��j��s���y����ü]��f�$�F���&g�H>vr���˾@P�ψ�=�u�L����Z�V�#/r�P=�� �*�l��߽�c��͙�����j�s2�^���p��C��~��=?�|���Y�'��~��NI�F����ԟ�K�y�����ڪ��~iT�n��F�ڪ^@Q.�5��YU5��iNůcu\njJ�~��ŷ\�d��''�����䈯%��'�T���4�⫁�ۿ>�gU[AW�����Q���W��t��A�J���a����a��G&��Xf��^1�����H���d�C�N]��=E`�>���d����E��ZV�Vгg%7_���^#�*SvԻ	/ˠ�^���Le�������rXZkl�|��/oI?)鳒L���ԧ7f$�^Q���W��o��9/w^�L�����L�A�͞�L}�����ݞ��n�2���c�=�2��ytrٯ�,���>����b��k��;��@�qA��?���~��_�y�
+�*�8NU���j�߾��m�xT�����e�h���'/<�x�e4v,��������,�n(�k��ɳ�Tw���I�Q��m��������'�vnP]V3��t[�1P�&����U�֥[9��4'��	ɜَiZNCC� ��������	P����V�U������;=/pNP]�O*�t��^{E���k%p�Mr
+��O.��hy��I~zmr�1I�n2j��%���zE2szu�_��o�_��b���K���T״�d@2eb��ߩ�c�u�z�zůaei=�U�$�⸦ut����'�M��S@MR���i�mWTw��I�_[頻��ﺦX�U5c�Hf�^��w�����w��n��2(����㒉ceA�Ya��س��~�� ��(�o��������l+���T�"0I2�q@����\:S&&�8�����-vK~xU�ˡ��j�"0P�F=X��RUCk��Z�V�c�M�ӹ@�)�(�t��p�����_ú�,�F=���ێoZ_��O}/9��I���;E`���
+s�U��6���R�V�#/,�L@�Y=E����إ�͜�4ϭ���;�.N���8mc�]��]�l8L@�R��˓Y3�;�ZY
\�V�Ms�/q�6�$��)2�>U��ǂ�
]^���~�h�WL����c�e�}���%��65���7���_7�Ul}��ɔ	�A��5S@��������=����'&�h�i
�C��{V�*��)�1�ꎽO�d�-��=Z�����܊���l�VxU��Y����_H��۱N��b���~e�)E`�<��?�duǿ������ø�Gos���3s��:�����f�H~���{$h+��IN�g����ڌ"0P.�+�x�~I��v��+����vR��V��Ω��g���۹�%��}��>�<z�,h;��&�87�`;Y�mB(��/��~t�VH��>���&��V�MMɍ�8����?]�x	���aPצM��xg�H~�{Ӷ��H��ǢE4@k���(��S�;�����;�}�ޡ�U/�{�O&�w��<]��I��2�>5v�TѼ��7�S��Ϝ/�J!hu��@�T�%��{�ϗUl=�<���[u�Z���*�_��2�����_K.��,h;�
+���,��(��ԽɋOWs���N6ھm��*��?&y�V����ao�e%0����C�5��conN.93�嗪�����K�J��\@�P�iD�W;�m��*��qa�<�y����$ih���Kw���2����ÒW_�m�s���?$ג����r���d��j�}�ݓNm�[�ZA�mJn�W��M�.2 �V�6�U�R�k����w�Qݱ7�1�I��c�7ޓ�s�,h=z''����#�E)�4urr�������.m�wU��}#�I�8��`a� P��4�OuԫN]����jQ�3\��ߴ��ϏN�~�Ҵ�~�/��t�$�Ÿ��k������؇���߶�{��ʭ���S2x���Q��I�U�\Y���d��E!��Q��Y1P�A�$�+�0�ܦj�Y�z$S_�CՏ�*�n_�47'��s���Q?I�/Z׺[%�F��Sd�E`����;y�d����%]�'3���߳���u�K�7:��5�V{&C6^�vzsf��{�'w_��yR���j�^2�����q�*W[ջX	�pc�L�}H����F��z�8��N��Xf�A�6��j��K��ܚ�l��_�Z���0i�뼚�z[''���|d�&�l�d��u씬�I��/'?�2��U�n�'�����T}/X�'����2��ʷ���x'Ms�K�L�q`Q�����ӓ����,3E`��n���{�ݷu��m��V��s�.rN�3h���&��G��N-�o֠��O|7��M�{?�t�*k�zѻ�Hz�Pݱ��F���\AUW���~wc�JN�Pr�7�)�A���=��O�V��F(��'%w]Sͱo�k�>�<�bE��o(����Ǝ�a�'�_���M��=��N�l����+w�zй�}�Iz���اYAW��_QUק�ǯ���in.:ϝ�G��?$�gɄ�������L���~~5�ݱS����g�(Yi�j�9�|�����o�������O��s?NN�C��T���+ɠ��T�P<��7Y��ǀ�Kf����?JNڻ�Dg�(Z�!�$ג�����{��d��j�}�Z�ϭZ+�c���U�����J�ޢ}���vI~xU����i��LKhzWx%�"p�[^�1P�Yf�L��Kc���w_I��r���Jah	;[f��\@�(��ܜ����c�h��G��s��
+z�E��
+^s�b����R�����/�
+�6�]EU��1�U�&�wԻV�A�U�<y��_V/>�����W�In�8i�#�ݺ[%;,`�(�pӥռ�nlL�ڻe�̪��n���pQuϝ��%'��t�Q;����&��Aҡ1�Ԙ�m���
����(���5l5T���ũ,-�g�?|-�����O��&��NL�v�����j�2!���j�}X���Z+�nL&�\�c�[��ߵ�j�e�������j�J�ePe�+>��:���A�@����o�L/�qr��oOJF= �N��>+`�)�1��j�{��-ۖ�j����J<I�<%�V���a���3�5C�ڪ^���u�QlAB5��t�Z��O~�1�Zf���|ir�����\y���,��>n�z`�����GoK�=_�q7tH���2V�ZA�6>�x5ϗ�vI�O���a&���@�P���o�;q�c�q���_�\��Ę���~��c�O{O�(�]�nɁVKF����dDEWo�BE�aV+��%MM�;^:vJ>~j���}?��v�k@-Xa�{/9T�*C�=�)Vѕ���ePU+W�f%pۚ۔<xS�w��%��X�߿Vs��o�í��"0P-7]V͢�:[_�.���j��ܜ��h+�ߟ�P_��c''kn�PV]GU������Y��Ɏ�R��ɠ�W|�_�'p��۔<rk���&��W�Ӓ{�K����|:uI����ŦT���ɽ�Wo�

ɶ�/۟��I�U��ك7&��X�c��19��:|����,���u�Z�.�z���^?Yy���Jr�2E�j�٧�+S���F���,I������5I�8*��6�7J�~zr�����Su��`�uP9��K�ޫz��or�9������U���t�������C_K��-�9h-
�56J6�)�qQ�}��ޘ���L���C7%�ܖ̜&�*�����œW_r���\��X�W���X���&�=V����7Yc�d�u��Z'�V�P7�׭G��������B���oMƏI�
�ָ��4����/S�VГ_���$��}���w;<�Dr�p�:hI��Iv�`��>I���ӥ[����k��Ro�wr�?�Qȴ���HU4��E�q�9ʢ���V:�ʢJ�
*
++U5}J2�5�A��2!�d񚧱c2`͢ ��z��u�jut���>�\��b+3�EP��yn2����7�m�M��ݒ����
+�����9�;>:uI6ޱ����ӓ'��%��MvJ�\���-p���xH�z����O�\�e4x��g��7dQ%knZ��/̓�Ԯ�7O�ZU��f�aԷ�9�O�\���w��fAxު�U׭�Ce���ɺ[%��%`���j����}_�^���X�"p�ZA77'#/��y���I��?��+&�N��/���R_�H>pB�f�a���JF\����d�T��Ic�b�S�ʢJ�ݪ����c�L��T�j�٢��0�Jk��䉻���V����*kj)]Ovz�"0���j�<�h����j�%�H^zf��?Uk�ȭ�+/T�h�bO{�or����W������+��W�]k�����h����C������"p��80Y�_�3���cY���*7�/�b%p��b�oě���1���W
����j��}����̜.�)�5����d�~ɥ�Z���j����_�sb�����OM���~n��6�%���ھ��Ҫɷ�O~{�UWe������CUT}]b]٬�Qҹ[2k�,��k���*�F����?��-[��JV[�����ɬ=u�l���P�")����Ʉ����5�a-Y�J���LL���*C�5��z'��Q��#������Иzlr�g��=t�|�I�>�u�0'e���ű5�IU��j���d�뎃2��9Yw�䡛eQ�mS�̪���ӧm���z����<h���*kh)ݖ��[X$E`����&#.L���j�{�!ō�O��[�V�7]�̙]�s��-�6�.��ɕg������|���C���44$G��̞��p���w�z$C6JF= �*�h�j��~��=���a�e`%0Kc������o�^�N�k)�^2x�d����+�iy��V<P;�
Y��T�
%�S��~��\�E�u��
+�J�����㊽��}�5��o`rҟj��'O+:u<|�9�wm�\ת���Œy�qPFn'���x�j���ɤq�ZƜ��s���/-~��C��b����&�m��<DV-�K�d�m�o��PD�TڤW��o�޸��x�ݶ�U'�Go��^n����eԱSr̙�+����^r�E���Cc��3��+��z��N2���O���H9� Y��ʮ�d��aК��&c�Mn�<9���	{%GK~}l�{�&�h���t3�ޙ"0���7�VM�l�����C��>������n*����'����$Ŗ�_�[m��k��?,ZDS���"��We��n2P@)���d���Pv[�!�\�h��'��;��	�QC�ӏH��c��,^��p�
�ı�������Eu�|��Zrϵ΅��K~���r�y���Q�{,_��u����0g�L��z���=�ۛ"pym���q�=�F;�۔<vgr���cvL~�ɢ@<{�l�3ޚ�C���0�)yQ�ƽ;�^aU�V�7]R�[SuoL+�?���
.TQ��������S?����N]�]=��z�m�G�=��&��Ʋ�6�Ζ"e֫o��f�Y	L-�۔<xc�*�K;&����>I.�f�-d�,�"0@��pQ�GI��]%Yg˅�oUk=�|�@��{��c��%�ү���7�ҭGr��>���}�80��毞m�}ң��j�e`p�u��8/�5l/�4�M^xʱ@m�21��ɗvJ�rj2e�L��;}�T�"0@�Lx�h]5�ڷJ���3yy�s I^y��쿚�F��cr�ɠu������k=��)�v9��������A�����j�A2�\2k��m�f&��=9n�䲳�gAkl,`���ya�Ƽ�>Eq୪�
+z�U���ŧ�3�-�H��9�?1�l��}�+��l��T׶��h��.�>�j�{Le��I���P6+������}Tԏ�ӓ��H��o������e�,�"0�<��H^_�1�?t�߫R+詯%w]�؟�{�5�C�\߅1X������G�N*��7O��C��|����dPv
�.���A�<}�ZK��Ń�zȢ���|�#��NKfϒGRly��@9�o�0OSS2��{��{�ZA�r���P��h�|�g�*C�=�4h����+�X6�YK�z���2(�����3I&�K&�$�*��p{ǖIcc��"p��{e��z�X<\�燓���|�oɯoK~{w���7�QkhnN��K��?�I�-�m:��`>#/L�sT��h�o�S��9ſWi��p��0{V�Ri��3��=��~����d��Jtl�J��Mҹ[9�ӧ2p�d̓�^�|hr�ϓ�oȢ������{dP�WK6�!y�FY��V{�U7k�v�Kb���k��k&�*�y�ދ�����9��<�`r�����)����*�w��S�߫/�7ݹ:c^�w���7��
ݿ�~��j큻�ZE�X���_&?�d���]CCr�O�/��d�
��Y���v�'7^"�z����6��!I����R�8B�,�9RI2��7����\k�W����\q�\[�ıE{���ګaWV�N�F\X�"pR|)���E�^+Td�/p�/���M>�ݢEZ�l�}�ѓ�?}�1@�{���滖o\��kn��>W.�=���}�;y�~������*�q�ɢ�
ٸhiO��thLVZ��b�5�U��H:wmٿk����0eb�O$�^\ݕ�V��V�
O&�Z��R[���[o����MN�ڱ�0S''�O�ܳzc������$�������n�!_,��VZ��ֻ��K6��J�zֵ{�������#r�����O'�|S�l�O�`�*��ر��4p�7[8\+Ye��c��y�r����c�3>�|�����Z��ʎ�m�ުiNr���A��Θ��H6ݥ(W�͗ۓpQ��k5��Ir�ג	/'w]�8����n��3ʻ�}�>���"p=��#Eko�g��D����3�I�Ȣ
\+���y�D�:u)V��+�Z�X��j�߽b���{�3��~>?�\|Fr�I���+��m�f�Ɂ�-��s�׫�
+z䅎�Ey��b��A�To�
���4���b�h���&���X�WV
+O���EΧ�Zw�vO����y�VTQc���$;M���/T�3��<�x�����Y4�-�z���X|���������iW�1������c��S�d�,�������/v6ھ:c�7��|��'����_%ǜYͱw�����Ò��q,Pw���/�:Yq`��I9|���ɡ������E
+�,������s��1ԏAk[\Oװ9[eH�p�}{��~w�M��RSS�S�o�[��/�;ym�c���������U����`q���b���7�����|�/�)��
+A-��i�:[�����/���N6�9y�Yԋ^+$~F�L�R����:uI>&9�벨'��d����v~�̿_�U�L����퐍�8���cw&O�S��I���SX@���{�O�L�C�L=��j9,���䂟T;�VN����I�>��d�C�1Vm����k�m#owȗ�n=�0�#�%s��Xi;R�J�>l4,�l9�3kfQk���}�Yw�5?��d��&lW�p��?�q��<�zc��Ӽ���4�In�Ter�eɬrX\�\�����$'��x�jͰ��X��>ќ�����]�C=�V���0�ZYAG��И|��r�������0���Jf�@���/T'�U�$��9���}#�)�ѹ�y��"�:�TF\(�%���+��l�
���)����@��pX��Uk̯<o���'$=zˡ�54$G�ZQx���I�MvL��K�n�'��'��a5� ˋ��w͠m�mJZcy��(�K�Me�̃���aIM���C9��ir����
���|��Ic�j�{���lz,�z�j�N�K��F�;:y����9��V]ղ��$�'����Y�L(�X���wu쵇n��x<�,H��\o5p)Xս�F^�<v�6�V!���w@r�9�ܛӃ<���ɺ[ɡ��|�rx�{��oZq`�/ɡV}씤kw9���1O�����j�MvL:uv����Pi�����k���H�̜���o9,�����o$�f�B!��ԣwr�9I��*x�����1PF

�g~�Z�>y�v�s�52`A�}"Yk39ԚN��Mou�յ�~^]��.�l��c��M~5����Rx7sf'�\&�zv���3�,�=�\�s9$E!��s��=eA��\r���kUs��?�̜�8(����h]Sv�@��rx�	/'��j�|�G�Bג~��#O��������=Z���;�1��=W��6�6����V��m��k��s��2�z['_��B0m�S���&knR���qPv{,�tg9Ԃ�WO>�
9,�=�R�V�|�r���~R<@ǂj�A�g��l��.����3V �����`1�<:y�N9ԣgI�{L-anS���%Msd��o����'ZO�N�1g+Ы��V��:>��j�;�%��%_�U�E{�6�Ԗ]?`�_-8��d�-�0w���dy���sfUt���>�b[�<�:cm�k��(,.�I�U�-k̓�%���<���|����)�����/��~vگVG����46ʢ�|��go7eB��r�]ΡӋ������N���ɝ����4kf��G��qD�F��3���u�T�
,�O��u�5����POfNOn�B-�߿S��_�Ւo��^_��7��/�W�d���"n/��l�����Z]û��=9���i��.:J�p����Y���P�Ւm�vL��*Fߘi��(,�ٳ��.�C=��d�49�����7'OmS�ݯh
��N�`�)���ynr�?�P5{~$��p9��-�H�����ʀųʐ�?/���m,�/9��������}���tT���l+��Vg�S&�o`���Kb�E2�'ZA������<i����%'�>��0Y��:wS��߽Ó	/ɡ�>vr���rhkn�}�֔�����������d��#���=x�䄳��d�(7\\���۪7��O���q�V����8��N�O1��|�X/>�<q�����&��Ck����#��a�;���S�'8���\��ɉP��ߕgˠ�;&��&YsSY��U�-�'UZ!�4�fi�����/ȡ5u���d�
d�(�<X|�Q�^}1�\����@����Tc��O2���(,�Ƞ��P���9��W�i�e�V~&9��y�e�k��kM�*�y�)y�9TY�n�	(�y����|�OI�>�X������K���yߗ�=��Ck��)9�������X�Z=tK5��)�g[Xu�j��W�5�6���Kꎫ�jݬ�-�ˡ-L������.ɩ�aQVZ5���ɐ�d1�*��7�-V��r�N�yn��&���M�$_���<%��CrhI;�>cq͞��zE���Gn�������gZO������1�I��7�6���K�!�����P�n�2�1Um�k��ϓ��X3��%ɖ{Ȃ��Qr�E��Cd��u��ɳ�ȁB�>�����R���|aҧ�,G=����y�BpK�ҭhc�������a��G�(:/TM���~l+�ִᰤ�"%�*�Uޕ"0����pM� ����^2�)9,L�^ɱ�)�|���m�G�$���b~�_O��=9��y+���J�bݭ�o��hAϻ�2�(�@K8���G�aY|���F�d�؟��d;�i��'����er�g��e�A��ˣ�7�6���Kc̓�S�ɡ=�x2�A9��Y3�_}�h7�����N��$�>�|��b�St�O��������]\G��GKc��{�ۯ~�]^2g�h9��r��=�4�����d�Md���<�<z[���;���\��d���-�O�d�ݫ3ޱϚs�m��ֈ�eP��b�v��d���aQ6�6�����ʢ��|;����Ao����˳h��$��"9�Ρ���ߘ|�+ŵ�c'y,��9�u�ʁ���aɉg��x6�99�b{�.�����������\5tH��[Ĵ�>�4V�����}�R���e%�c�����О��o�M����|�[E1���70����j<�n���㫹K��C��/�2麜<�w��+L���,��^��d�r�ul�C��˒�֓ŢthL�br��u1XRS_Kn�����ıɨ*�9�w�3����ߖ�ʐd�#��Yj���x����Ҭ�-�ɡ��qU2}����e�ű�G��]��XU����w/OV�P���'^��o뽓�\�^_���{�*~e���
+:�O�A�)+�y�>+%_�[r�1��?,���I��g��]�����
+��e��!����Ǝ����;�P�����20��3�3��̜.�w�ʐ�ԋ�����J;mX�}\���M���Xr�(����S��t�yJ���DK�{}�J��ܵ�#�س��}�1��%߿*YokY,����mg��Iss��o�:���s,/���N�ݪZc~�A�,�O����'�Qn�j˜'�/�
/=S��c1��������d���Q&+�^�ֆu�F=���t9��:v*���ߓkV;�
���=��g����2�mm�g򃫒��U;�>��c��S�-�;�.Z+ף�c��n2���)����}���f���c*���!s,�"0��q�j�U����+���$�����v����}۞g���!��𢰿��X��'��̖�n���6��|�z{��]%9�E�~��Qɽ�ˁ��{��<>��;�;uN�l��k�-�p,,����_��F\h��e���bqm�{r��|��?�P�����'3�ɡ=͞��z�j�y?L�M���!��#ɏ�)��Y�U�HN<'��w�.��(�s�_9��,h9;�G���d؁忎v�Y�|��-��_�'h/��R�~���/������U�8!���i��qU����=���'S&��y?��mr�I�=�l���/����,�<:��c�X(E`�e�ƌ�f�vu�����r�Es��3�IƏ�Œ�R���HV[O���CQ�����&;�cq\tF��r�u�80��ϒ��3�d��k��O'?^�NZ�K��ۯ���S����$?�>����9_������}��������yKhn.d�wsf'�\f>�w���S���;}{ߗ�/����Du`��Z����k��k�����>W<0��Yw���˓O��#��4d��ԋ�V�e�����qUr���@ۜ�'�S�ޫ�����^19����7��z,o�[�U�Ԛ�}�#������]r�^�=����ޛ|��E�����t����
+x���+�ڼi���i�%�j�u9y$�$_�kr����k�Ehh>b-?QZ�w/)�h�m�4*9i9ԃ��.�3�tf�L��cr�9��)���&��r����^�?��rX2�d����1��ֺW_L��G�������S{C���.�%��[�I�;:9q�j��w�Uf5?��.Tם[�<�+,�a��,��<��o�'y����˿N��˼.̔�ŃK#�/VNWMcc��G�C�K:w����Ԕ|vK����qR���vx�$m��'�����{>_�`b�M��\���ڿ%3�ˣ=t�����=Gy
+I�>)���E!�l��˜���#�[.O��̞U{�q�E�w��&+�n�Z�o�On�W�3P�/�*��ۮL&����ףwQ����d��<0����o��5���HN���.ʄ����)n�U��[��?�Xm��y���{��ΗNE`��u��W�jږ��N�������g��x����ג+�.Z�Y�6:vJv~r�QI�U䱤��$?�X�؝��"p��15y���EA��V7vL�ٲ�W|�]�A똛����*Uo�\���&O�S<�r߈�m<`����.�����h}s����-:����`m����K�n'/��8��%�n�d���9�V�v���;PhI�<�hJ۸��ɯ�*�;;%_�S��PY���ӊ}��s2i�<Z����J�~�䱴��䆋�;>E�rhnN^|�xX��{�я$�k��`����~ko���E�k�n�=�����[�\��װ'�N�y0y��b[��ֹ[����Z���:�e����o��O���r�m�����,�Q�N�?��n2젢�|�>��m��s���%S&�xG���-i�F�w/�C[9���cwȡ-�;9��d�!�h)Ms�ۮH�=7��<ZB���nL��D�g%y,��!9�G��"py�1#�d2��d�����^-V�>!��������ܹI�o^Cz�)^��&+*�����U��V�m-x���G��C�\V�s���/���5셢��듒���kYSS�ei֌��աc��x��W��E�~�������V��̜��G2��r���Cr��MK��n,tz���\���^}�d�=���&���`��07%?���E�(�4����G��VZ�����wʡ^M����S�){���4vLv8�x�~8�����WUco�����ɞIv~�=[���M.���_]�%knZ�(��M�߿'ʭ�CѦy���(���*o8)b����ߙ륱�&���/�G=�<u_���s��4�����ݒ��-���%�m]<0���*��J���� ��w��چ_оVXv�/�Z�ƹ��niC6J>���*
+�7]R�5uμ�N��vs;Z|aeK��Pr�	�=�6]wn�:��Sl	Sv�/
+�konΗE�nŖL�o�4sz������<_t��J2���S��Y���v-�	��$�ҪEW���+}:���1sZr��r�ޕ"0@K���䈯7ش�9����o���/�NN�C�����u�b��]->��qu�2���e�_8��E�݁ɰ��dҒ^y!��FjӔ	�?ϔP��r���Ņ?M��ws������n��E��iS��/��)~������%F��Eǯ�E`Z�M�s�.|�
+��fLMn�2����h-�\[�aE9<ts����ϐEkZi������G-z�Y<U?��:94vL��&�j�d�}���96Z�듊��S&��M��a�=@]~&��������(�p�d's�ֺt+^}Ȣ�?_�bQh�����[5�dP6��;�b��oȢ-�2$9��k�����o.�\�b���o`�����;$����괎Y3��|:��,���؝�-����{���N�޸�~z��a:H�w'/<!`���	�F=X�[]TK�θ�Go�C���E;�C��E[��;v`�w�=vG��}��{%��J�����6�kmV�y�o�yn+MMə�$��P�f�J��M{���Ÿ%��X�q��Lr���FPeW�Q�bSh-��O�<E-m����+�K�,�:�Ӳh/�W+^�Z��������?���d2��������X>�f2h�7��Zm�bo+���R�ք@����Ŷ��hԃ��V��_��d���Vv,PMc�L�N�bSh-�^�|�EA���4'��9��?.����AYԂ�ݓ��)^�<�X5����W���W�I�$�_OfN[���CcQ��٧x�^1Y~���*�k�A�*�+ǩ�Nr��r�j׳�$W�A@}�3;����KOK{cFr���c�t<PM����`�(���S�;�Jv<D-��k�)�Pv��ɟON�tMv8X��w��Ζ���S��aSS��;���X���H�tK:u�o���/�k�&�v͞������@=��g�*�����d�uɖ{Ȃj�|q�,E`��4�E��4�BTEss���%:��W-���!�޳xQ^W�>��Wr�j��g(����{���$�y��f�0j�>��:.�i�;�K���Z���/�Z��1�÷ʡJ�6%�=�h�Ԧk�^�p�e�ݑ\�G9����ػ�0;��|�O� �"�����V��֊�ϊJŭ��Z��E� ���@,;"?I�MYY!$!��@B��aȾ�df��K.D��r�{����+��9�9��;ϻ�[���u�ϯ[������)ɽf[N	��F
�Ao=,��C��T��V�h��Y�ӓ��4��+���:h^�};y�q9��{nN�I���N�0�U���}����
r�]]��k������Q
+'�1��2��@����dY���4~���^�ONH�ʁ���˲� �VP���+�{o�ö�|G��]����N#��40�,~yi2�v9��i��Rr��֬H���dc�,���5ɕ���jJ`��0�jl�і�&�p������0�,fMJ��!�9�_���d�:Y�.s���r�FWߊ&�6Q��E��5�,J�S<�&W�"�o7�X��k�/���R�tm��gٓ2��\pt�h�6��+ʒ�P�Y�l�l3%0@1x���tˁg��'�E�xm@���2�B��fHY����d�J�k��䦋�@c��d�mr�R�̛!�й!��8�_�6S��;�tv�aKtw%c�ˁ�n܈d�������t�i��!r��ulH����ò��K���~@l��g%�N�k��ɵg�aklX���oQ�+O���+����e���[�%�mi6^��;�S�LV.�������o�e�as,��\z�87^��!�N�����LV-�c��伯Z�h[,]���9�ino�4�k����i�Pȋ�6{jr����d��sC�Os�5�`��u}r�O�@����dؙr`�,Y��返p��eme�+jl��Ӓ��}L�.9N@�Q����UTm�����Ɂ����ɉ�L�,�V�W$���g/:��U�%3'ʁ�3sbr���G�6!z��?kW%��l)�oK~�m9�\6v&g�܏�%0@��IF�ݺY�7r�-�jYr�g��n�l��&'}B�Ƕ��X>�zj�,�{f��s�����tqY���Z��r[��,z��e`4�ooz��)����etϯ�;;\l��
e&��D�[j���;O͑�n����'��ʂ��6��\�v�,�}��<r��;]����w}��'#Ε���˓q���uJ`���jYr߭rx!S�&K��[�Ƌ�!_H֯�l�I#��>��h������m�r��ڒ�?�,wޢ�tv��������t'�L%��6�r�j�x�ց>�c�r}A����n�䄏�YB����_J:�ɂ�7eLr��r�w-kKN>2i��8}l��{���^.zϦ��d�_�� >D4���{��.Y�}B	0�߭�z>���L`�
I�?<�|�,�7m�L��z2�̲g=��1Ò��H�޵��G&m�dA�X�XY޾c�,�v�
+�n�E����S�@�X4;9�s�}J	0 7~=f�>���I�Z��,�7�K��&K���^�k�NF^!�͒E
+`�#���d�FY�
�(��͗%?>�}!oY[r�Qe�8�>�(�F��97�=e���k���ӎJV.��m�=e���������ɝ?�[�m~r�'���L~�_�#�N��d���`���Y��l0����9�Se`.@S��K��#��릎K���}h���7K��J��[/ON��d�S�����$}#�p�,�2s�%'~܇���n-39�l�u�����-j�����~:Y�.�W���#������` Y��F
�}oٓ�i��;��㴎u��s��\qr��u����*�"���Є���<hwݠf�\R
+�id�h�NK��d�ò�,�[���H	0�����M��'SFɁ��ӝ�p~��n�9��;-��G�{o��aS<~�,xac�I���d�Y�X�!���އ�hv)�N�E�Z�Dr�'��o�}���kM�3%0�@��NF�7I2v��i̍�7�7�ye���m�,h,�]�E�&#�����'vfr�7����1���d����������qN���u���wr�w
�oLYV#[�L@�S���(?{zJ0֮J��Z��/�)�+�$g|.��Ĥ�C4����OJF�#��~M)�n�@4�)c��}6Y�R<㖟$���r�A����)�`�`z�uu�W��u���`��hO&���L��<���k�m�1H�M4��G'��m�`���sˌO���xn�#\�\fNLN�D�d�,Z]���c�+O�3�Y͚���ro�t>�H.:��0w>�����Yk?�;~�5@cX�49�Kef����lX�\���ϗ���L�^���_͚je�ޒ|���GeA�Y4�`�3U��m~y
����^^V���r}
[j��仟N�9�O	���<բ{�x�l�]7$������dAs�qO��p����Ќ�39ሤm�,Z���2K术����Y-oON>2��&Y��{nN��h2�aY�d���ÒG&˂-����G
+���t��V4���k����g��䂣�ӏ�\9�k�����'��cҾ@4�Es�o�r��ǒ�|��5�X�������{<*��%�~+9�?�dQ��y�I�N.?�@%^����S�~�Ve��Q�ޚ�����sOc{讲���@c�<*9�ɨ����.kV$g~>q��v�zz�[/O���d�yP������ӎ*�
+��̉�qNF�E����d��1��\�oZ4��fs�e�]���h˞L��Z�y�ݖ|�9t�K��Q
+������Z���]}��%��A�z������ˣ&m��>�����j����aɴ	���`}r�)e���s��J�<Q����rҾP��7^�|������������(�;����\?�|�_�Ϳ%��o�]�-?I���}�Ƀ�0mBr܇,]�M��qX�A�`ٓ��M���tuɣ�͜X����'��ne�ݚ�����Cfje�f�-L���tn�а�@y`\�յ׾�?֕K�I#=�4�ɣ��L>pTrؿ'��.��C�+ON<"Z�ʥ��K���?���"�4��J~rB2�Y�zz���O�|���^%�f�zy2��d�0�/E����q�&��z�I
�K+X�&����[.3�h
+f4�c�m��:~D���sN��w$7^�|�o��?��/�/H�|19���0fX��A84��˓K�Uf�(�iu�f$�4��<�A3ݟ����&��V��\�ڒ�N��`2�vy�n���k�M~q��8�4����f��ָ�e)h*�zyrթ��ߛL�Q���jEr�ie�9�&�3�$��l��u�Ry4�����Jq2z��6��H�R��|t�<�#���O.�v�.����d�ʠ����Q�����\xL��]@S�4@�Y�D2el�w��gܛ���\S���y_M~yIr�W�C�	[�sC�Y~���ڕ��s�u����#�+yϧ��ˤQ�w[)�>*x>f%'~2y��%�<:y�2i�f'C�L&�^�2�-1gj��N����'���2��lތd�Yɔ1���������x�Y�Tl��2
+���*��|]��ה�����6ǚ��'���l�����@�:�|P��C�����]~��w[��/&��L��r(O>��87��z���fOM~��d��}��<���Mc��r_��_4=?}�є����ɞ����V/O��sL�~�������(p�kS�{��ɒE�1������?}G�Q���eҟ�M({�θG�5֮L�����+��-���f�O���.,�c;�A�Z4;���2��=�J����%/�K���@r���;��@5�������܄�����e/,hs�'g9��������d�����:7����)��L�<xg��C�O|5�� ����=7'����_�-���"ןW���Aep�^�OK~qIr��IW�<�[+��L���/�����ɫ�"�F��S���d���TgPϑ�Ј��/2����ߗ<��ֵ����?����'��!�V�zyr�Uɭ�'��ɣ&/�/2�u��/&�F6Н����I>��Ɂo���-��&�-�o�By�����_Ӛ�}��e�F��A�a����a���-==e��/.)��@��2@��O�z�<���lE2vx�7k_ �ZJ`�Fv�%��U��91��=��$;�o��o�V�[�XrەɸkJ�B}���U��W�%��g�Cޓl7�kuk̝���:�pc�~�<j�n��m��'��C��O@��V<UV`3����d�v��ޞ������]v�I_��I�ߝ�Q�)�X/�z�4�ag��ʵ�5�s
+�t�O�][�W�)y�?&o�@����EOO2eL2���������2sb9��7y��C֗�'��e����1C����X�D2����M����G$��3�����M���eϮ�2�q_�M(�;&�We9x�p�y�����a+�Ř	��(v���/>\J�W,�f����.3,i�/�Va&p��~�]���%��X���';����Ɇu��ے{~Y"vvȤ��	�<����_����2����'�5)�pCr�m��%2�y��c��?K�����.�{6߂Y�đ�=7'�ϔв������ז���J^��<]WW���R�>0���֢n�������L��-[p�k�=w������[���҈�K	�|����ʬ෼79��d�\�kcY�a���[�eOz/S�}^������"9��f	��������)c�)���_�����
m���F��������7�Y�����b�I�S7g	��v�1yퟗ"���O��UOw2{j2u\���d΃��@	���c�הs�!�&�xmY��F���k긲����޿������kߖ��Ɂoh���==e��{�iw'�&�M�x%0�@��a��O�Q��z㻒�!��0gjYb��ʃB	��%�o��W��6�~KY>�Yg�u�/��#����G�OV��幔�u=���H���R����̠��q��$IfM.�#���yޯ���K|��^W��;���Ƿnu��C�f�IJ��U�w��a{��4�Ύd���np)&�����S�
+�FWW��=e��I�'K�ZAۼr�^���~�+_��pٷ}��4^1�ve���23���cӒy�,Q�h��d�r$�:�
����הs�~�Jn�k����G��k��dތ��)�ج���pc��A�:e���{~�W&/e�����TOOh���r>X03��`�6�|
�-��hF�]e��$W����G���*y�_�����6O-L��/Ǵ	e�9���²�&��8��?.������a�����w��N��_��,����g~}��d�l�T��~M���6ᙿ�}��Ae�޿q�s����\�"Y�ij�cK%��$�3hzKOOy�/x�j-/ޫ�{��o��˓�^���e�k���s�|_]]e��m���Ǔ���e�Z�<17鰬3@oQ��`ќr���2���7�B��IzS��2z!�ۓ��}zO�_�!~��+�r�3'����K���%��$��%ɋ^��K��N/*����"�s����UIz����,Y�<Y�<Y��l8�wumL�?\��f���ܵ��n�W~���ɠ$���LI�ӮɆ����X�l�Hz���kE�z�ӿ./�Y���rI9^Ȏ�<}��G�Ӯ�f�]�׶���v�]�~��f�n:�[��c��2�
�~���MWW��q֤���'��:y՛K)�GZf|���d�̲�Ɍ{�-�uɒuɒ'd4�5��dE{9���Y$�&���]wW2wz9F^Y�n��˞����������ѳGt�`ú����3K���Cɼ�et:����TJ	�Њ֮*3`g����m78y�~ɾ�Bx��ʞp{�W��ܠ��]]e���I��d�2�w�e��M˒���@�P�Ptw%m��q��gm�v�K^��o)�w�3y�K��p{�]�]v+�A��{���A[�}�t'�֔}�6�-�F�ZZ��\���߻lq�����+������$Q��9z�������f���vI�P����o�})��d��R<o�nuY���C������
�����
뒬K֮��������D�������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������Td{���l��d���}�]�^��֭n��؆u����3��ȃz��������P�A������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E���������Q������TD	������P%0������@E������������ӔK�������IEND�B`�
\ No newline at end of file
diff --git a/web/modules/webform/images/addons/webform_paragraphs.png b/web/modules/webform/images/addons/webform_paragraphs.png
new file mode 100644
index 0000000000..b193a75656
--- /dev/null
+++ b/web/modules/webform/images/addons/webform_paragraphs.png
@@ -0,0 +1,32 @@
+�PNG
+
+���
IHDR���������7�����	pHYs�������+�� �IDATx����}�s���
���6�0�NZDž@
Ihjܦ!�U���R[�C՗�Լ�TU��M�P�[�%�7��~�6��^����}��N_X�>��y�;3�a�ɺ��|ιgfΜ���s��O�DDi�Q�$��)%IB���E�wvD���}}���p�sE�D�\���,����
~�*��D�e&���?�$IV���7����6ѱ�-�e��f�7V�o�cw������M�H�]�Ŭ˧a?�F�.����k�pCu�N��v�ľ�N��v��b��O����O#����`��-֕�~Pn�	1�-~f���%��+���ٙ�1q��f_E��f�g�?�nq.�H��|>p�����#���m�
����G
+*_Ԩ�N��e�����|q�t���W�i^p��N�n��3D�_~$�s�XVX[7{��o.���}�[�+�nl�I[��d&��쌉�f��)ʕ��Ȭ�����P,+&�7ƺ)�l����|d�r^���E�>�(�W�Y�n��
+�pCv��J'�0d��6e�yq���������������!�h�@ϗ�C�t)�Q���.�"�:"����t��M���CT���0�A�����A�z�b�N5��ٺ��I4S�;\U�,;p�q��`�ΦA0���y�f`���eA�\�!��]�Å[�[�w��6�V/���H�m���+x^�o�T�.p���Å�[d�+�E�k�M���
+"K��U]p]���U��H(&�ȏ��p�V�֙��l�a�*�j�!��ظ���g���O��2��9��\�g�v�pCv}�`]�
Q��gt�J�5@�w�&W��?�l�O.{,�%b��n.�/�On,��3!�aҙ�f)&��W6C��������-�U9p��슈�>�˓Y��f;��l%�}ry|����\�pCvu�bwW������V��ؓk��u�0I����d�.�ܺ�P]�]p�…[�[G�ˑ�B�d��P�ˑ�j�e��n1.������l�3C�=�m�㚔�7C7#�[�+���\�!�u��G&�'���<���:B�]ӥ7�ź�>���i��
�UQ�gg:[�5�3���_����o6=�P�-�e"��.ܐ]��RW�?zg�D�E�y�Y��������5$�*1���n\�1�U~���՟	�>'�8.��UO<�Ġ;�Ź�t����U�3��
�$�T����#J�v�6.�tz��� B5K�[��Z��7&WE���W��Y��	�5,��ٸ����͐u⦣5�v��4\�U�,>�yU��gp٫h��n�g[6��g7�����"�-�p�wM^p�����۳D�� �U�`�.�]�j�g��e
�ea+������5.\��
�q��]�?�+�
F7uu}X:��*�4��?V-�d�و:E��H��ԏ�{�*re�p�wU�h;\����y����b3�Q"����y\��n��]_F�p�����r�TH�Ż�>���i��
�UQ�����ͦgj����+"�_��"T�#�d� ��p�}p���V�]>����e�t��8W�N�\�1��{&V���� B5K�[��Z��7&WE�.Bu9t3d���h
���z$
nU.�m^�.Bu9rYd�e�`n����.�\bv�ˑ��V\�Ń۟k
+\�p�w��>�n����tnU�i1���+[f�[���E���
�5�#F���p�w}YÅ[�[w�ˡkR!�����Ƨ�7dWE�d�����a��l;�^v!T�9v_?�I����\Z�N�d�h�R�^�����0���nXY�dIS����ɢi�
+�ӥ��Y9T��r���x��znn���b��n�>g3>�̍O+{/�ںld�/���:�P]f�p�VᲸ��\���N۱���>����1����æ�q媰��ڹ��y�pcuY�變d�7ʢ�!L�}>��->\o�p�pY|�i��6T�.�Z/�N��[�<�k�X/���n�n���������0�4����}�N@Yˢe.���(�3��S��c]Z��<}���ZÅ[�[g�& �_�̶�^]_��l�WT���*p��֙U��xL�t@�O�,OGW6e���+�r\�#JnȮ�:������P.�����P.���5n�n�.�ܺ�P]�\!t��>���­�eq}߹p�ˡ�¦C�k��.ܘ]�:����Ç�
n.��3��\��������í�E�.�\���ŁP]���|��p�V���������
+\�E�u���&�
+�W�����+�.Bu9r���Bu9r���Bu9rM�[�[D��7�� T�#WGE��3x�p�pY\�w.\��r誰��ڹ�u�7f���.Buy����zÅ[����L�,��<r��,|�p�v��#��@q T�g.��5\�U�u��<qA����n�n�A�.��ɱ�-Ǖ9�4p��ʨ��P]�\����P]�\����P]�\S��Q���
��;����BG���.�*\������*l:D�v.{]��e���P]���:|��p�V��<�*�E�.�\��(:ܪ]������P�����k
nn�A�.O\P->/���[�[g�ˡkr�p�qe�(
\�!�2��"T�#��@� T�#��@��z�=?3]
+b]�TZ��ٺ�r���,9��wUiM�!\�!�u��./���~�N�������T3L�\~��dV[���)u�]�D�$	5
�?a�Wx���V���'�����_����$	u�]�;6m�DCCC�遟�iJ�.]���YJӔ��6u:Z^^�v�M�nwe`�u��D4���kJ���?����g=�P����g������>��t讻�~��x�	Z�n]P�r��lnn��\�B�.]�.Ѕ��ŋt��%�t�]�z���Z-�k�Q�ۋ��\ln���'�%���=����:|�l!ui�Һu��������idd$������M�����i۶m��v���P�ۥ�7o���MOOә3g�>�'N���
S������]w�����߿?�D~�dӠ�6;j������.��������.pD�ۥ���~�:����t��Qz��w�ڵk���H�F���>#�В͊tˎ|�(�eK��<�1��ɒo�5k�W�Wi͚5BG���l��k�.Q�Ѡ��Z�f
mܸ�~�a:�<���[t��	z��w�ƍ444�}t�z�����U��bE�A���b�2���%�<�ɳ@���ea��L��v��.���Ӻu�V�_�>W�H����M�Ѡ��1����i���t��:y�$9r��x�
ZXXP��dm��݌�]�N4cb_y_�YT�ӎ��u�|QG��͐��A��e1�P���}�:��.҆
��_�:}�+_�O>��^x�:~�8]�|������
+�干�`�n����sQG%�)�/�U^щ�|Q���q�r��*|pU������t:�����t�w����0l]���(p�n�$�j�hÆ
������J��>��ZZZ�f���s4|�-�����;v����%�O��=��(�rX\\���	�����j)����+¤��]�&IBCCC�e�ڳg�s�=4;;K/^�>�(��;���e�*�j��:�>�+�g��*[r��u="�H��>��3ڶmmڴ����J:���g�S����܇�f�}xx���ڻw/


ѹs�hnnN9����O��nYY�d]E��]��Z��ٺ�r���ե{��
:s��Z-ںu+
��ׇ}�kz����f?H���@۶m�+W�����ٜ�{T�,\{���ȅ���r@}I�[��GGGi˖-�i�&��;zf�U�e�Ν��O����[ZZ�Ç���_j��=��#�裏
+G��y�|�2���+t��y����Q���qڲe������0�Y��FFFVf뢎Htl*7{�����������\ϊ����k��V��]������l�s��M�����?\i��&���}��);8�[a�N�8A��_�UZy�4�f�I�ׯ�G}���fטm�oܸAG����{��9d��h4��lR�բ��Aڸq��3�M�6��w�M[�lY������Q��������u�Vz������hpp��~�k������"T���O$IB�f��4�N�������YVvv���,�k��.��}ff�N�>M�f����h�֭411A�w尿{���5�
+�yX�v-8p�6o�L����irr��;�E6���b+9�ަAmv�qy}�|��
+C?����|�OD�6�v��\�B333��;�СC���;�]�v�7��M������ׯ�A���oxx�~�a��������{:v�u> >ܫv��|��Uh�,�I�D���Z�-��8�(CY.�,�.,,����izz��y��җ�D�?�8�ݻ�6l� =F�w��w�}��������^}��U�[��!״���"T�#���n2%��N�7_Y�5E���e*�U��L����իW�7ޠ'N���Eڿ?=��4<<��Ku�m�F�&&&��g����:z�h�/,};�������͐�h;�r��L\��E��*�mTnܸAo��&�8q�v��MO=�=���+���yh4�y�f��?�S�W_}����+�
���D�%@�D��D����u�r��*|pU�j�PwWU7�t2���i>�t�y���M�[�����<���[t��Yz�'����s����J˦M����.�����~���������kro��6�D� �Ǝ�x�Ϻe5��~�Z|(CUd�\��455E������7�|���D�l޼��}�Yڳgu:���D��.Mӕ:xW���'sE�l]]9Cq�}p��DuB6XS��c����2���Zj�t:t��1����O/��]�|Y��_�پ};����رC������:��;�,M�n��nS��}�������>ݒ[�\~�����n��Ե���U�n6�t���G?����.H���h4h�Ν�����466��Ʌr|v}�V�����N�+!`s=����'�D���X4���֋*�on6𘟟��_~������~�_����lƑ��}���w��\��t���kJ�����B��g=~IQ�?�kJh.(�2n$�>2������r�c�v�t��1����;�����v�9���?^zycw��VLbuW���
+'B����]4��ה�\�����6����{��~���㏥����q����M�7o^�Ł|���cw�~Xbv���v|����ߦ��˿�ӧO��l6��K��K�'�'��):��a�^�ې͊L^�˄2_����Ǎ~a�+K�ZnW9��]��cZN�2��&ɭ�|��G���>��S�|�nur�w羚}�k^[�)����*S~]�^���W���Tm\�Oׁ�pYD�"d�U�7�W��n��>
͋*C(n��?~��{�9���Z٧;g###�;��;ʥ�P΃WG�nC�Y�fL�LU�E(cV�)��������3�!k|ln\�2��&IB�N�~����?��?���<��Y�$�s�Nzꩧ��j�ʷ�������bq�DYC�W��Ó�P�=������q�r��*|pU��+����*�>ݬM����8oBr�N�7��F,��


�c�=F��{/��m/�-Wto��"T_�e�$Ihnn���y:u�vF��n޼����oQ�ݮdV����<s}��t�}�:!��(jy2�~���$��w�3g�����!�D�6�Mz衇���Wur���nA�.��l{=��g2���Jg�����*CHn����;�Б#G�y��lذ��qR����Wׇ�j�.Buy�����k���fu���b�HZ6[/�!�I����,����;}����sƟ�V�E�?�8���=�|;6�\Sbu��S�G7{���]����l���O?�C��͛7W��Vn��6n�H�<�H��
�%2[1��E�.O]����׎lP����G}��&IB�����C��������cw���A�''I:�<����+��l�̟����~����X�Ƈ�{�.Buy���
+͕�W-���w�.���1-�mbp��:�?~�Ν;'L�322B{��f�)�>_��הX]��r䲈��Ȁ�No��n����5>|��U�X�F�A���t���p\��Jv~��^ھ};u:��͵�#v�����1��g�'B���ܸ�e��M����6;vl%��<f�7o�L�v�Zi�|=6�\�^,.Bu9tU������݋P]~`fꚔ˔�e��m6�499I���t��~�/~�4::ꤼ!��{+v��@p�Z|(C�$IBt��q�r���6��h6��c�Z�vm%�|&����tߥ���	�`MEQ˓y��S��S�N��Ԕ��4
���?O����y�]ސ�:�P]���>�z�]��d�/��O��Ƶ���U�ܫW��ٳgW��o�|֬YC<��*��cs��0P��E�.O��uwm���N�tT,I�f�E�!Fw~~��y�e@�����0�ڵK��xl.\Sbu��S�G7{���]��>�Ir�הgϞ����U����l6i����j��f6E�7��l�$V��<uA>\�c\��I���_�NSSS�}����Qڸq�Y��j�?v���(t|�$IB׮]�ӧO�###t��wS��)�d�����j��<��_X���ҫ��U��;m��e���Ӷ1�I����<MNN
+����
6�r�cpM��E�.G.�������&���M\Y�ç5�E�!F7I�v�t��5Z^^��':�CCC�~�z�v���WG�.Bu9r3LGcp�#� O���qm���h4��իt����}���h4h||�'&e��
ŵ����D#ά�V5�l${/�O���˗�}Uძ�U
e�]U�ԍnu�t�M׈����(C�n�܊j���гOv~GGGihhHy�}96��ɽ��P] 8|�>�!���M�]��j����1�d����<s}��t�}�:!��(jy2�~������3������\�u��<s�}�%����>��>?ݒ��k3{+���6�te�!&ׇ�j�.Buy�����k���f5���b�HZ6[/�1�<8��\Sbu��S�G7{���]����8��\"��X]�����py�q}��7����]���d�0�mJ��0p��E�.��V������v�#�N�epY>��-C���� 


����c��5%V���,��2�ӛ�[v7qEd�����E�!V7MSZ�v-�]�v�v���q����Y=��<���E�.Gn��hny�䉐5>67�mbte��������⢳�����bq�ˡ��U
e�]U�ԍnu�t�M�_T.S�!F�������������n�K����h4J��1�&�VlnKց��De'�f��o�[Pd���ٞ
+����ڢu�����@�>��]ZZ���ij4V� ������y�������D�N���ɼ��)C�n��+��)�.�X\\�vp��k�� T�gn�O��V7��g�|���[r4umfoe�!7Mo=�����򙟟��/�tp��kׇ�j�.Buy�����k���fu���b�HZ6[/�����Z�nMLLHg'���y�&�;w��ͦ����5%V��<uAy�q#����l�����j�h���400�j�?��n�>��SZ^^F��d�$V��<uA>\�c\���/���j�V������"}�������r�.BuP2���Y�~==��=K�2n޼I��.:8C|�W�"T�����\Yz�r��}��2�,�rږ!67MSڵkmذA��O733C�����e�7הX]��r䲈�/Ȁ�No��n����5>|��U���4Mi``�v��Ew�y�t����N�C}����zl.]������0��-�<�<����Ƶ-C,n�ӡ�۷Ӟ={�QI�󻸸H'O����Y'�
ѵ����"T�CW�ʺ�������鮛j��\��-Cnv�v��I[�n]�]�yff�>��c��/����&�Vl.Bu���Շ*f{*P'�IӔ��.mܸ�8����X���3g��?��������y�������D�N���ɼ��)C,n�բ}��ѽ��+u������ �IDAT��7oޤ7�|���y(�l�� T�g.;Je?�����,_����M]��[Ye�MӔ6l�@����5k�H]6�K�.ѱcnj�C��C�ժ]�����Qw�6?�� �4MGŢ��l�^Tbq��կҗ����ϲ��[?.9z�(]�tI�H×cs���P]���<ʸ����d�������t:�m�6ڿ?�������ܤiJ�.]�#G�h�����������"T��.ȇ�s��kN�ۥ����7����M�������'��\[�Z��E�.�J����~�~�~K�Kt�fff襗^���n`���]����~a�+K�ZnW9��]��cZN�2���m�������6������t:t��I:u�Ԫ?
���|sM��E�.G.�������&���M\Y�ç�yQe�%���888H������Dw��4���iz饗���櫫#v�����1��g�'B���ܸ�e�m6���Oҁhpp��-..��Ç��ɓ400Piycrmfx�����U����n�F��}���/*�)y����v顇�g�yf�o�T�,�w��Y:t�-//K#��>�\�{+6W�g�F�q�޳nY
"�����#i�����޽����������>]����@/��"�9s�����<s}��t�}�:!��(jy2�~����t���g�}�v�ر�Q��Y�ӡ��~�~�ӟ��|9���:�P]���>ݒ[�\~�����n��Ե���U�v�M��s}�{ߣ]�v�CDt��9���Z^^���>�\�U���)6ף�m~��AԈ���E#i�l��2��iJ�v�x���?�3z�G��lJg�9�z�*=���t��Ij6�^[H�)����.�]�e���zl�x���qmF�!��<ʸ���ʯ<�:�������{��g�}�v��)�s��9k���ӟ��>���>[h.�:�urW�gJ���Ǵ��F|����𡲡s+�����/%;�}�ߠ�|�;=��D����ҩS��������$�r�`Z��u,nK�d`s�bv��:�iz�?.���~��~�i���;{�y�v�t��	��������fZ0>ܫv[�N�ҟi�U���hTK�p�
�����v���<�(�/n�ӡ4MiϞ=��SO�#�<B�����w��9z����̙3Ɲ�O�!�N���L�Lh���}�'�*���~��1%�M;P���r��0}>�o\�D�~%966F��k�F�<�m޼y%ڈ�<��ӕ+W�����?���߻�rBr�FK�0?;d?����@]��g�xEi�͘�]Qg��M��2i@t�&+w�ep�f��FFFh�޽��o}�|�����[u���i������?�3���k+���<�ಟE�@�n�ݠu�;���D�v�6��k���H�Y��t���1�צU�D��B��ݻ�k_�=��c�q�ƞ��4�W�^��{�:�ӹU}l����buW���Mí"o�Yev�T#��P�4�5(I�/����c��W��Z�~=
J���n�&''�?�!>|���n��	�KϏL�ģ,y�9�k�p�uUim��eτ�t��.ʐ�͖ �4�u���]w�E�v�����t�������{�m�Y�=}�4=��s���S��\�;9>�3_ݺ�b+�jC?i����e�n�g;utei��:��鰊��e�!�����>��m�t:466F411A��+�B�v��
6�w�!���yy���o��o���Eϲ����k��)6��:A&�M`��Wg�K$���B�.כ��ߞ���R�n���Q��$	5����I����mݺ�6o�L��sm߾��m�F7n����U���c3�?�4���Yz����G?�}���j����"�[�\�Uv�buW��l�;µIW�(ĉig k�u���(2�>::J?�0mٲ�����)
�t\w�u�[��֮]Kw�q������ت{die��ߟ"wjj������^y��v�ڪ����k��յ���+?2%��GT7�i�-c�������g��v�m��e�h4��j���:3�����ЩS��_��_�������
+����@�PG�"T�%�$	5�Ms]#�hh��6������Ћ/��2k�Z��:۪\��r�ͳ$�f�<���}����:6wnn��=J���
+?~���J�p1�u������~�.���]"���%����W^��^{��_�NI��<o3=�pѹBu9r������
?T��}n�ۥ�ׯӅ襗^�����499ICCC+��D�a����e?���]����5IW�i$�,{o�?�ucV�{��5z����7ޠ��~�.^�H�v����
+9�p�wM���"TYev�T#�n]�Kt�#���433Co��?~�N�8A׮]�$�5����|������.�˞/��ۉ˜��n�ݦ�W���˗�O>�cǎ��ӧirr����i```����8�p���Bu9t�>۩�+K˿���M��O�����XZZ���)�x�"�={�N�>M~�!������<��mj6�488�*ϲ�/������\��r��,D�H\L��1]�7)�������<u:��7�9ID4??O���t��E������I����.�ŋ��ի+���r�!�l���]�U֖��"T���>�x����T�F���+W�Џ�c:w��?vn4433C7nܠ4Miaa������͛4??Osss�$��U6�MZI[�9���յ�����Cuc���2f�*onn�����N�:��U�t�]�v�Dt���?"Z�Hf�p�<�(�E�.�J�Y��O�ͦ�NT�O�mUn��)��.���iCDtne��U��9����.�M���D��!�W�����
+��]�	wuX,�#[�Wa�� s��&�[t���4T
C��C�� ������JU#���g��uP=<��+Cס�ϙU���5�tǦ*w?e�W岟Ey��"T�'�I�rt�*_�{����C���[�pU��X�ߩ�4�*�vP��Uf��V���<�����#"�tX�n��ll�n��*-���'mѮn{e���4�-I��l�̡,ʚY��TN���{�2�͒cQ���2��˻��:��<��t�']�#�:�P\"������{6e�y�E۔.\�˾���X�U38[�pmҕ1�qbZ�e������`��E�.\Wז��6�D1͐@��*:?�˓G����ˇ1����<�(�m�;�Y
+D���:�𩳭�E�.��<K�kF�l��,\��6�����g��•f��y������n�SG�(\����r��e�:��W��Ca��ӈ�2u����kZ�~����e?���E�.O\�4p��<U�����3d������p�\�}����CV�MfZe"���pBu�
�U��5�-��m��p����r�TN���{�2�͒cQ���2��˻��:����:�P\"������{6e�y�E۔.\�˾���X]��QaZ�e������`��E�.\Wז��"TQE�Gty��׵|�0#�[7��E��@�`���O�mU.Bu9��Y\3�Hg��Xe���A�.Gd?>P=e���3�-�3��&�\v{�:ZD��� T�#��-�ׁ?~�rt
+�/�F����_^�r�S�pU.�Y�G�.Buy⚤�+G��7ݟ!�?To�e�W���E�.��l2�*Y�ǽ���n�*-���'mѮn{e��� T�Cפr�U������m����e�.\����E�.���ن��gD�|?س)����,ڦp��\�U֖��"T�
+Ӻ,�d����m/�p�ڸ��46��@p�*:?�˓G����ˇ1����<�(�E�.�J��|�l�r��!6ϒ��QE:�%�*��.�
Bu9"���({�p��my��ee0A�����"��.�����l����Õ��P�|�4��L]�;�򚖻�2���r�Ϣ<bw���$
\9:O���������x�-\�*�t_�.Bu���Uf��V���<��܀P]p�pUi�e�<i�vu۫(\�u���&��:-�^��h��XT�.�p���N.Bu9ħ�6�H?#�����M�D~�g�6e�W粯��4V��@T��e�'�t�7�n{Qe���յ�����CT��]�<�um_>̈���
�qD�.BuP2Xu�>�Sg[��P]�y�׌*��.9VY�p�m��ُT�@�c�+��n��-+�	2�ݞ��Q�pA/����g��u���]���˧�e�����״���.\��~���P]��&i���y�|e�M�g��U��o��U���bu���2�̴�DV�q/������J�/k�I[���^E�­;���5��p�i��:�eD�%Ǣ�wYe��wE�ur��!>u���D�Q?���l�$��<��)\�:�}�������´.�<Y'����tۋ*\�6��-��E�.��Ώ���ѯk;��aF�>n(�#�t�������:۪\��r�ͳ$�fT��vɱ�2��n�P]��~|�z�+\�gv[�ghYL����<u��2��zA�.G.?[��p��:6_>�(/S�������p�\��(��]����5IW��S�+{o�?Cv�:�~����5���P] 8d��d�U&�:�{�7 T� \UZ~Y3Oڢ]��*��n�A�.��I儫N˿��/#�,9U��*\��+z���P]�
�%�ψ��.~�gS&���Y�M��չ쫬-��E�.�uY��:)�
��^T�µqumil.Bu��Ut~D�'�~]���3b��qCyQ��P]��V����V�"T�Cl�%�5��t�K�U�.\p��rD���3P�X��?���<C��`��e�穣E�.\�Bu9r��2��+Gס���iDy���w��5-w?e�W岟Ey��"T�'�I�rt�*_�{����C���[�pU��X]���!��&3�2��y���������˚y���WQ�p�Bu9tM*'\uZ��~�fɱ��]V���]�k�\��r�O�m(.�~F��w�=�2��<Ϣm����e_emi�.Bu��0��2O�I��o0��������kKcs�����#�<y����|�í���"]���d���|��ζ*��b�,	�U��]r��p�� T�#������
+W��ݖ�ZVd.�=O-�p�^�ˑ�ϖ���?\9��͗O#���心/�i��)\�*��,�#v��<qM�����T��ޛ�ϐ�����2���rM���"TYe6�i�����^��
�7W��_�̓�hW���2��[w�ˡkR9����u�ˈ6K�E����.�^��"T�C|�lCq��3�~���ٔI��ymS�pu.�*kKcu�D�i]�y�NJ��U�pm\][��P] 8D���ɣ_�v��Ìn}�PG�"T�%�U�>u�U����gIpͨ"��c�e�������@��=V����<�в2� s��y�he��P]�\~��_�����u(l�|Q^�.�|yM��O��U��gQ����k�����W��t���Pu���.\�k�/V��@p�*��L�Ldu��n@�.�A�����f��E���U�.ܺ�P]]��	W����_F�Yr,�~�U�pyW�Z'���Sg�K����]�`ϦL"?ϳh�2���s�WY[��P] *L�̓uR:�L���2��k�����\���!����.O����/f�p���8�H���(�:�𩳭�E�.��<K�kF�l��,\��6�����g��•f��y������n�SG�(\����r��e�:��W��Ca��ӈ�2u����kZ�~����e?���E�.O\�4p��<U�����3d������p�\�}����CV�MfZe"���pBu�
�U��5�-��m��p����r�TN���{�2�͒cQ���2��˻��:����:�P\"������{6e�y�E۔.\�˾���X]��QaZ�e������`��E�.\Wז��"TQE�Gty��׵|�0#�[7��E��@�`���O�mU.Bu9��Y\3�Hg��Xe���A�.Gd?>P=e���3�-�3��&�\v{�:ZD��� T�#��-�ׁ?~�rt
+�/�F����_^�r�S�pU.�Y�G�.Buy⚤�+G��7ݟ!�?To�e�W���E�.��l2�*Y�ǽ���n�*-���'mѮn{e��� T�Cפr�U������m����e�.\����E�.���ن��gD�|?س)����,ڦp��\�U֖��"T�
+Ӻ,�d����m/�p�ڸ��46��@p�*:?�˓G����ˇ1����<�(�E�.�J��|�l�r��!6ϒ��QE:�%�*��.�
Bu9"���({�p��my��ee0A�����"��.�����l����Õ��P�|�4��L]�;�򚖻�2���r�Ϣ<bw���$
\9:O���������x�-\�*�t_�.Bu���Uf��V���<��܀P]p�pUi�e�<i�vu۫(\�u���&��:-�^��h��XT�.�p���N.Bu9ħ�6�H?#�����M�D~�g�6e�W粯��4V��@�iJ�����v�^�ۥ�ׯ+]Y��uR"����ƍ+�D^�������R�e���յ�����arr�fgg��ؑ���,�?��ݮt@��3Ij����g����6�˗/���45��������"]��A�h4�ܹst��!Z\\�zKKK���/�g�}F�f��2
��o�MG��v�-�fff�'?�	���b8çζ*��b�,��n�$���H?�����_��7o��ݸq��9B����e�gh�n�Ѡ��E:x� ������u�]����_|�^�u�g�e�.ܺ�<��)��!y�d��^{
+"qtn����(��po��v�4::J���A�������nܸA?��O��^>S���$r��.mذ����o�c�=F�����vijj�^}�U����o�rie��&ٿZ�ɩ⢩J_]Q�-J�����Ej�Z4>>NI��իWiyy���U�������422Bccc�n��ʕ+�$	
��.�~\���yD�f��!`���D��=��u}c�C�G���3-�SSݐ67+nlP6�u �����P]pk���٭;���5��p�u��s�u�7tW�Z'���Sg[W������˾���X]���DV�E�.�X\][��P]���:Ä�,���e����5��ζ*��"���\p��ŭ
�#�;�~;.ٯ]�g�3�<n����?��5�p�q�4��.ܐݺ��DY�	���~f��uy�Mո�t��2��[���� ��e?���E�.���Q�͖d������(��[;�t�.��ݺ�P]]��	�X�_:W]7�pCwE�ur��!>u�uqu���\���쫬-��E�.PKdu^T���յ����j��3L�p�r}}lP��P]��P|�l�r��!�A�-ϕn]�:�P]�H�0�Y��iL�9\�!�u����l�����-��Pu�p��ⲟEy��"T���(A�.���Q�P]pk�.5Å�[w�ˡkR9���K��n��N.Bu9ħζ.�.=?؃7t�}������j��΋�\�����46��@-�u�	nY���
�t���j�O�mU.Bu9D�#��2�­�['ٛ���d��	�5>�3�"�PHS�a{��.ܺ�u�A��109Y�'T�f������_�Y�-׵���
�
��E��?�����T��E)\�����pCt}X)q���_U�ܩ������-��[��K����
�͐�1�����SV.�C+���G�p���n2�� ����&��E�uu۳�>��ZlNp���f�Ey��j���eۙU��Á��KW�}�{�]P��h`n������C�+�IY��xإx�v��.��]���]������#�p�tM���\�����Sg[��P]�[�����ʀ�.n�@�.G�k�pݺD~�B��-ҭ������n���n�ne,�E�.�����`W/t����û/�b���IDATJ�����eaY�p�qui�\����{ f��@��}�	nY.��&31�����f�nLn�Y�G�.Buy����
HD�pCwM���"T��R�h�h`n�j�.Bu�Z���\�e�&m{l.Bu�@
𩳭�E�.��έɏV��we��[�N T�#صc�n]"�G�p���	��r[~]g
�\�փ7D7�2�"T��t�p�sE��:��
��a�ą�P]]Ѳ�,O�Ÿ����.����=��P]�v�>��,��u��\�����b3p�7&7�,�#F��<pAu�$��	\�����cs��
+v)^�]40�7tW�?f��@-�q�.�2]��=6��������V�"T�CD���G+p�2�­�['����1\�.�ߣP�p�t�Bu9�-����[�k����B�v��l:n���"��p����R��E�.��hYX�'�b\]Z~�n�n����E�.P;|u…[��v���L.Buy��j�8����}���P]��:t��.��]�����j�/�.��������P]����|n��I���P]��P|�l�r��!�sk���]p��ŭ��v��[���Q(\�E�u����_�Y�-׵���
�
��E���67��\���pCt}X)q�"T�CW�,,�n1�.-?��7t7Cv��"T���:��-�e;B�d&��<pA������>���E�.\P��h`n����\����]�m
L��
�U��E�.PK|\>��Lפm��E�.���>u�U���ѹ5��
+����p���	��r�v׭K��(.�"�:�P]�`˯����zp��PƢ]������n�v�B\�!�>���p�ˡ+Z��	�W�������!�bv���G�p���n2��P]��ZlNp���f�Ey��"T�.�݀D40�7t�tl.Bu�Z�.ŋ��&p�����"T�%>.��[�kҶ���?�w��A/����IEND�B`�
\ No newline at end of file
diff --git a/web/modules/webform/includes/webform.install.inc b/web/modules/webform/includes/webform.install.inc
index c40f8ea053..cd154bcbb1 100644
--- a/web/modules/webform/includes/webform.install.inc
+++ b/web/modules/webform/includes/webform.install.inc
@@ -187,7 +187,7 @@ function _webform_update_webform_setting_settings(array $settings) {
 }
 
 /**
- * Update webform handler settings to reflect changes in a handler's default configuration.
+ * Update webform handler settings to reflect changes in the handler's settings.
  *
  * @see \Drupal\webform\Plugin\WebformHandlerInterface
  */
@@ -325,6 +325,10 @@ function _webform_update_field_storage_definitions() {
  */
 function _webform_update_webform_submission_storage_schema() {
   $manager = \Drupal::entityDefinitionUpdateManager();
+  if (!$manager->getEntityType('webform_submission')) {
+    $type = \Drupal::entityTypeManager()->getDefinition('webform_submission');
+    $manager->installEntityType($type);
+  }
   $manager->updateEntityType($manager->getEntityType('webform_submission'));
 }
 
diff --git a/web/modules/webform/includes/webform.install.requirements.inc b/web/modules/webform/includes/webform.install.requirements.inc
index ac9b2d706e..7b6d826727 100644
--- a/web/modules/webform/includes/webform.install.requirements.inc
+++ b/web/modules/webform/includes/webform.install.requirements.inc
@@ -123,14 +123,18 @@ function webform_requirements($phase) {
       if (\Drupal::moduleHandler()->moduleExists('webform_bootstrap')) {
         $requirements['webform_bootstrap'] = [
           'title' => t('Webform: Bootstrap integration'),
-          'value' => t('Webform Bootstrap module installed.'),
+          'value' => t('Webform Bootstrap sub-module installed.'),
         ];
       }
       else {
+        $t_args = [
+          ':install_href' => Url::fromRoute('system.modules_list')->toString(),
+          ':disable_href' => Url::fromRoute('webform.config.advanced')->toString(),
+        ];
         $requirements['webform_bootstrap'] = [
           'title' => t('Webform: Bootstrap integration'),
-          'value' => t('Webform Bootstrap Integration module not installed.'),
-          'description' => t('The Webform Bootstrap module helps support Webform to Bootstrap integration. <a href=":href">Disable Webform Bootstrap Integration warning</a>', [':href' => Url::fromRoute('webform.config.advanced')->toString()]),
+          'value' => t('Webform Bootstrap Integration sub-module not installed.'),
+          'description' => t('The <a href=":install_href">Webform Bootstrap sub-module</a> helps support Webform to Bootstrap integration. <a href=":disable_href">Disable Webform Bootstrap Integration warning</a>', $t_args),
           'severity' => REQUIREMENT_WARNING,
         ];
       }
diff --git a/web/modules/webform/includes/webform.install.update.inc b/web/modules/webform/includes/webform.install.update.inc
index 3af2053617..d1bf53ab0c 100644
--- a/web/modules/webform/includes/webform.install.update.inc
+++ b/web/modules/webform/includes/webform.install.update.inc
@@ -3910,3 +3910,9 @@ function webform_update_8209() {
   }
 }
 
+/**
+ * Issue #3158114: Delete own submission with secure token not working.
+ */
+function webform_update_8210() {
+  _webform_update_webform_settings();
+}
diff --git a/web/modules/webform/includes/webform.theme.template.inc b/web/modules/webform/includes/webform.theme.template.inc
index f3c0e17170..afee030df9 100644
--- a/web/modules/webform/includes/webform.theme.template.inc
+++ b/web/modules/webform/includes/webform.theme.template.inc
@@ -159,11 +159,13 @@ function template_preprocess_webform_confirmation(array &$variables) {
   // Get query string parameters.
   $query = \Drupal::request()->query->all();
 
-  // Add Ajax trigger to back link.
+  // Add Ajax trigger to back link except for webform with unique limits which
+  // break the ajax callback.
   // @see \Drupal\webform\WebformSubmissionForm::getCustomForm
   // @see Drupal.behaviors.webformConfirmationBackAjax (js/webform.ajax.js)
   $is_ajax = (!empty($query['ajax_form'])) ? TRUE : FALSE;
-  if (!empty($is_ajax)) {
+  $is_limit_unique = ($webform  && ($webform->getSetting('limit_total_unique') || $webform->getSetting('limit_user_unique')));
+  if (!empty($is_ajax) && !$is_limit_unique) {
     $variables['back_attributes']->addClass('js-webform-confirmation-back-link-ajax');
   }
 
@@ -326,14 +328,12 @@ function template_preprocess_webform_submission_information(array &$variables) {
     $variables['uri'] = Link::fromTextAndUrl($source_url->setAbsolute(FALSE)->toString(), $source_url);
   }
 
-  if ($webform->getSetting('token_view')) {
-    $token_view_url = $webform_submission->getTokenUrl('view');
-    $variables['token_view'] = Link::fromTextAndUrl($token_view_url->setAbsolute(FALSE)->toString(), $token_view_url);
-  }
-
-  if ($webform->getSetting('token_update')) {
-    $token_update_url = $webform_submission->getTokenUrl('update');
-    $variables['token_update'] = Link::fromTextAndUrl($token_update_url->setAbsolute(FALSE)->toString(), $token_update_url);
+  $token_operations = ['view', 'update', 'delete'];
+  foreach ($token_operations as $token_operation) {
+    if ($webform->getSetting('token_' . $token_operation)) {
+      $token_url = $webform_submission->getTokenUrl($token_operation);
+      $variables['token_' . $token_operation] = Link::fromTextAndUrl($token_url->setAbsolute(FALSE)->toString(), $token_url);
+    }
   }
 
   if (($source_entity = $webform_submission->getSourceEntity()) && $source_entity->hasLinkTemplate('canonical')) {
@@ -360,9 +360,23 @@ function template_preprocess_webform_submission_information(array &$variables) {
   if ($webform_submission->access('delete')) {
     /** @var \Drupal\webform\WebformRequestInterface $request_handler */
     $request_handler = \Drupal::service('webform.request');
-    $base_route_name = (strpos(\Drupal::routeMatch()->getRouteName(), 'webform.user.submission') !== FALSE) ? 'webform.user.submission.delete' : 'webform_submission.delete_form';
-    $url = $request_handler->getUrl($webform_submission, $source_entity, $base_route_name);
 
+    $current_url = Url::fromRoute('<current>')->toString();
+    $source_entity_url = $webform_submission->getSourceUrl()->setAbsolute(FALSE)->toString();
+
+    $route_options = [];
+    if ($current_url === $source_entity_url) {
+      $base_route_name = 'webform.user.submission.delete';
+      $route_options = ['query' => \Drupal::destination()->getAsArray()];
+    }
+    elseif (strpos(\Drupal::routeMatch()->getRouteName(), 'webform.user.submission') !== FALSE
+      || !$webform->access('submission_view_any')) {
+      $base_route_name = 'webform.user.submission.delete';
+    }
+    else {
+      $base_route_name = 'webform_submission.delete_form';
+    }
+    $url = $request_handler->getUrl($webform_submission, $source_entity, $base_route_name, $route_options);
     $variables['delete'] = [
       '#type' => 'link',
       '#title' => t('Delete submission'),
diff --git a/web/modules/webform/includes/webform.translation.inc b/web/modules/webform/includes/webform.translation.inc
index 0c0913127d..73f080e4c6 100644
--- a/web/modules/webform/includes/webform.translation.inc
+++ b/web/modules/webform/includes/webform.translation.inc
@@ -133,7 +133,7 @@ function webform_form_config_translation_add_form_alter(&$form, FormStateInterfa
  */
 function _webform_form_config_translation_add_form_alter_elements(array &$elements, array $element_alterations) {
   foreach ($elements as $key => &$element) {
-    if (Element::property($key) || !is_array($element)) {
+    if (WebformElementHelper::property($key) || !is_array($element)) {
       continue;
     }
 
diff --git a/web/modules/webform/js/webform.admin.js b/web/modules/webform/js/webform.admin.js
index a421d1d21a..343a1649f2 100644
--- a/web/modules/webform/js/webform.admin.js
+++ b/web/modules/webform/js/webform.admin.js
@@ -26,7 +26,7 @@
           $(this).bind('autocompleteselect', function (event, ui) {
             if (ui.item) {
               $(this).val(ui.item.value);
-              this.form.submit();
+              $(this.form).trigger('submit');
             }
           });
         });
@@ -42,7 +42,7 @@
     attach: function (context) {
       // Only attach the click event handler to the entire table and determine
       // which row triggers the event.
-      $('.webform-results-table', context).once('webform-results-table').click(function (event) {
+      $('.webform-results-table', context).once('webform-results-table').on('click', function (event) {
         if (event.target.tagName === 'A' || event.target.tagName === 'BUTTON') {
           return true;
         }
diff --git a/web/modules/webform/js/webform.ajax.js b/web/modules/webform/js/webform.ajax.js
index 32cf3dd420..ad3ffd34bc 100644
--- a/web/modules/webform/js/webform.ajax.js
+++ b/web/modules/webform/js/webform.ajax.js
@@ -13,6 +13,10 @@
   // floating toolbar.
   Drupal.webform.ajax.scrollTopOffset = Drupal.webform.ajax.scrollTopOffset || ($('#toolbar-administration').length ? 140 : 10);
 
+  // Set global scroll top offset.
+  // @todo Remove in Webform 6.x.
+  Drupal.webform.scrollTopOffset = Drupal.webform.ajax.scrollTopOffset;
+
   /**
    * Provide Webform Ajax link behavior.
    *
@@ -90,12 +94,12 @@
     attach: function (context) {
       $('.js-webform-confirmation-back-link-ajax', context)
         .once('webform-confirmation-back-ajax')
-        .click(function (event) {
+        .on('click', function (event) {
           var $form = $(this).parents('form');
 
           // Trigger the Ajax call back for the hidden submit button.
           // @see \Drupal\webform\WebformSubmissionForm::getCustomForm
-          $form.find('.js-webform-confirmation-back-submit-ajax').click();
+          $form.find('.js-webform-confirmation-back-submit-ajax').trigger('click');
 
           // Move the progress indicator from the submit button to after this link.
           // @todo Figure out a better way to set a progress indicator.
@@ -152,7 +156,7 @@
       var addSelector = (addElement === '_root_')
         ? '#webform-ui-add-element'
         : '[data-drupal-selector="edit-webform-ui-elements-' + addElement + '-add"]';
-      $(addSelector).click();
+      $(addSelector).trigger('click');
     }
 
     // If not add element, then scroll to and highlight the updated table row.
@@ -164,16 +168,14 @@
       setTimeout(function () {$element.removeClass('color-success');}, 3000);
 
       // Focus first tabbable item for the updated elements and handlers.
-      $element.find(':tabbable:not(.tabledrag-handle)').eq(0).focus();
+      $element.find(':tabbable:not(.tabledrag-handle)').eq(0).trigger('focus');
 
-      // Scroll to elements that are not visible.
-      if (!isScrolledIntoView($element)) {
-        $('html, body').animate({scrollTop: $element.offset().top - Drupal.webform.ajax.scrollTopOffset}, 500);
-      }
+      // Scroll element into view.
+      Drupal.webformScrolledIntoView($element);
     }
     else {
       // Focus main content.
-      $('#main-content').focus();
+      $('#main-content').trigger('focus');
     }
 
     // Display main page's status message in a floating container.
@@ -214,40 +216,15 @@
    * @see Drupal.AjaxCommands.prototype.viewScrollTop
    */
   Drupal.AjaxCommands.prototype.webformScrollTop = function (ajax, response) {
-    // Scroll to the top of the view. This will allow users
-    // to browse newly loaded content after e.g. clicking a pager
-    // link.
-    var offset = $(response.selector).offset();
-    // We can't guarantee that the scrollable object should be
-    // the body, as the view could be embedded in something
-    // more complex such as a modal popup. Recurse up the DOM
-    // and scroll the first element that has a non-zero top.
-    var scrollTarget = response.selector;
-    while ($(scrollTarget).scrollTop() === 0 && $(scrollTarget).parent()) {
-      scrollTarget = $(scrollTarget).parent();
-    }
-
-    if (response.target === 'page' && $(scrollTarget).length && $(scrollTarget)[0].tagName === 'HTML') {
-      // Scroll to top when scroll target is the entire page.
-      // @see https://stackoverflow.com/questions/123999/how-to-tell-if-a-dom-element-is-visible-in-the-current-viewport
-      var rect = $(scrollTarget)[0].getBoundingClientRect();
-      if (!(rect.top >= 0 && rect.left >= 0 && rect.bottom <= $(window).height() && rect.right <= $(window).width())) {
-        $(scrollTarget).animate({scrollTop: 0}, 500);
-      }
-    }
-    else {
-      // Only scroll upward.
-      if (offset.top - Drupal.webform.ajax.scrollTopOffset < $(scrollTarget).scrollTop()) {
-        $(scrollTarget).animate({scrollTop: (offset.top - Drupal.webform.ajax.scrollTopOffset)}, 500);
-      }
-    }
+    // Scroll top.
+    Drupal.webformScrollTop(response.selector, response.target);
 
     // Focus on the form wrapper content bookmark if
     // .js-webform-autofocus is not enabled.
     // @see \Drupal\webform\Form\WebformAjaxFormTrait::buildAjaxForm
     var $form = $(response.selector + '-content').find('form');
     if (!$form.hasClass('js-webform-autofocus')) {
-      $(response.selector + '-content').focus();
+      $(response.selector + '-content').trigger('focus');
     }
   };
 
@@ -278,7 +255,7 @@
     if (a.pathname === window.location.pathname && $('.webform-ajax-refresh').length) {
       updateKey = (response.url.match(/[?|&]update=([^&]+)($|&)/)) ? RegExp.$1 : null;
       addElement = (response.url.match(/[?|&]add_element=([^&]+)($|&)/)) ? RegExp.$1 : null;
-      $('.webform-ajax-refresh').click();
+      $('.webform-ajax-refresh').trigger('click');
     }
     else {
       // Clear unsaved information flag so that the current webform page
@@ -357,29 +334,4 @@
     }
   };
 
-  /** ********************************************************************** **/
-  // Helper functions.
-  /** ********************************************************************** **/
-
-  /**
-   * Determine if element is visible in the viewport.
-   *
-   * @param {Element} element
-   *   An element.
-   *
-   * @return {boolean}
-   *   TRUE if element is visible in the viewport.
-   *
-   * @see https://stackoverflow.com/questions/487073/check-if-element-is-visible-after-scrolling
-   */
-  function isScrolledIntoView(element) {
-    var docViewTop = $(window).scrollTop();
-    var docViewBottom = docViewTop + $(window).height();
-
-    var elemTop = $(element).offset().top;
-    var elemBottom = elemTop + $(element).height();
-
-    return ((elemBottom <= docViewBottom) && (elemTop >= docViewTop));
-  }
-
 })(jQuery, Drupal, drupalSettings);
diff --git a/web/modules/webform/js/webform.behaviors.js b/web/modules/webform/js/webform.behaviors.js
new file mode 100644
index 0000000000..39c67ffa8a
--- /dev/null
+++ b/web/modules/webform/js/webform.behaviors.js
@@ -0,0 +1,41 @@
+/**
+ * @file
+ * Webform behaviors.
+ */
+
+(function ($, Drupal) {
+
+  'use strict';
+
+  // Trigger Drupal's attaching of behaviors after the page is
+  // completely loaded.
+  // @see https://stackoverflow.com/questions/37838430/detect-if-page-is-load-from-back-button
+  // @see https://stackoverflow.com/questions/20899274/how-to-refresh-page-on-back-button-click/20899422#20899422
+  var isChrome = (/chrom(e|ium)/.test(window.navigator.userAgent.toLowerCase()));
+  if (isChrome) {
+    // Track back button in navigation.
+    // @see https://stackoverflow.com/questions/37838430/detect-if-page-is-load-from-back-button
+    var backButton = false;
+    if (window.performance) {
+      var navEntries = window.performance.getEntriesByType('navigation');
+      if (navEntries.length > 0 && navEntries[0].type === 'back_forward') {
+        backButton = true;
+      }
+      else if (window.performance.navigation
+        && window.performance.navigation.type === window.performance.navigation.TYPE_BACK_FORWARD) {
+        backButton = true;
+      }
+    }
+
+    // If the back button is pressed, delay Drupal's attaching of behaviors.
+    if (backButton) {
+      var attachBehaviors = Drupal.attachBehaviors;
+      Drupal.attachBehaviors = function (context, settings) {
+        setTimeout(function (context, settings) {
+          attachBehaviors(context, settings);
+        }, 300);
+      };
+    }
+  }
+
+})(jQuery, Drupal);
diff --git a/web/modules/webform/js/webform.dialog.js b/web/modules/webform/js/webform.dialog.js
index c888e7a106..e5489f9e03 100644
--- a/web/modules/webform/js/webform.dialog.js
+++ b/web/modules/webform/js/webform.dialog.js
@@ -26,7 +26,7 @@
     // Init the webform dialog behavior.
     Drupal.behaviors.webformDialog.attach($div);
     // Trigger the link.
-    $div.find('a').click();
+    $div.find('a').trigger('click');
   };
 
   /**
diff --git a/web/modules/webform/js/webform.element.ajax.js b/web/modules/webform/js/webform.element.ajax.js
index 5bf4f4d381..eb364057b2 100644
--- a/web/modules/webform/js/webform.element.ajax.js
+++ b/web/modules/webform/js/webform.element.ajax.js
@@ -19,7 +19,7 @@
     attach: function (context) {
       $('[data-webform-trigger-submit]').once('webform-trigger-submit').on('change', function () {
         var submit = $(this).attr('data-webform-trigger-submit');
-        $(submit).mousedown();
+        $(submit).trigger('mousedown');
       });
     }
   };
diff --git a/web/modules/webform/js/webform.element.checkboxes.js b/web/modules/webform/js/webform.element.checkboxes.js
index d5a82520da..7a5e8ddf6a 100644
--- a/web/modules/webform/js/webform.element.checkboxes.js
+++ b/web/modules/webform/js/webform.element.checkboxes.js
@@ -41,7 +41,9 @@
           // All of the above.
           if ($options_all.length) {
             $options_all.on('click', toggleCheckAllEventHandler);
-            toggleCheckAllEventHandler();
+            if ($options_all.prop('checked')) {
+              toggleCheckAllEventHandler();
+            }
           }
 
           // None of the above.
diff --git a/web/modules/webform/js/webform.element.codemirror.js b/web/modules/webform/js/webform.element.codemirror.js
index 95b98b0337..9539cfc8e5 100644
--- a/web/modules/webform/js/webform.element.codemirror.js
+++ b/web/modules/webform/js/webform.element.codemirror.js
@@ -59,7 +59,7 @@
               $(textarea).hide().removeClass('visually-hidden');
 
               // Tabindex + 2 accounts for the CodeMirror's iframe.
-              $tabbable.eq(tabindex + 2).focus();
+              $tabbable.eq(tabindex + 2).trigger('focus');
             }
 
           }
diff --git a/web/modules/webform/js/webform.element.composite.js b/web/modules/webform/js/webform.element.composite.js
index ac0184db1a..48cfa5909d 100644
--- a/web/modules/webform/js/webform.element.composite.js
+++ b/web/modules/webform/js/webform.element.composite.js
@@ -34,7 +34,7 @@
               $element.attr({'required': 'required', 'aria-required': 'true'});
             }
           }
-        }).change();
+        }).trigger('change');
       });
     }
   };
diff --git a/web/modules/webform/js/webform.element.computed.js b/web/modules/webform/js/webform.element.computed.js
index bf59d2d8c0..09234f42ba 100644
--- a/web/modules/webform/js/webform.element.computed.js
+++ b/web/modules/webform/js/webform.element.computed.js
@@ -136,7 +136,7 @@
           $wrapper.addClass('webform-computed-loading');
 
           // Trigger computation.
-          $element.find('.js-form-submit').mousedown();
+          $element.find('.js-form-submit').trigger('mousedown');
         }
       }
     }
diff --git a/web/modules/webform/js/webform.element.details.js b/web/modules/webform/js/webform.element.details.js
index 9b1b98cdd9..8906c27049 100644
--- a/web/modules/webform/js/webform.element.details.js
+++ b/web/modules/webform/js/webform.element.details.js
@@ -15,7 +15,7 @@
   Drupal.behaviors.webformDetailsInvalid = {
     attach: function (context) {
       $('details :input', context).on('invalid', function () {
-        $(this).parents('details:not([open])').children('summary').click();
+        $(this).parents('details:not([open])').children('summary').trigger('click');
 
         // Synd details toggle label.
         if (Drupal.webform && Drupal.webform.detailsToggle) {
diff --git a/web/modules/webform/js/webform.element.details.save.js b/web/modules/webform/js/webform.element.details.save.js
index 6983b33da4..7d001f139b 100644
--- a/web/modules/webform/js/webform.element.details.save.js
+++ b/web/modules/webform/js/webform.element.details.save.js
@@ -33,10 +33,9 @@
       }
 
       // Summary click event handler.
-      $('details > summary', context).once('webform-details-summary-save').click(function () {
+      $('details > summary', context).once('webform-details-summary-save').on('click', function () {
         var $details = $(this).parent();
 
-
         // @see https://css-tricks.com/snippets/jquery/make-an-jquery-hasattr/
         if ($details[0].hasAttribute('data-webform-details-nosave')) {
           return;
@@ -90,6 +89,11 @@
       return '';
     }
 
+    // Ignore details that are vertical tabs pane.
+    if ($details.hasClass('vertical-tabs__pane')) {
+      return '';
+    }
+
     // Any details element not included a webform must have define its own id.
     var webformId = $details.attr('data-webform-element-id');
     if (webformId) {
diff --git a/web/modules/webform/js/webform.element.details.toggle.js b/web/modules/webform/js/webform.element.details.toggle.js
index 44b8599019..c0d21a283d 100644
--- a/web/modules/webform/js/webform.element.details.toggle.js
+++ b/web/modules/webform/js/webform.element.details.toggle.js
@@ -42,13 +42,15 @@
         var $toggle = $(options.button)
           .attr('title', Drupal.t('Toggle details widget state.'))
           .on('click', function (e) {
+            // Get details that are not vertical tabs pane.
+            var $details = $form.find('details:not(.vertical-tabs__pane)');
             var open;
             if (Drupal.webform.detailsToggle.isFormDetailsOpen($form)) {
-              $form.find('details').removeAttr('open');
+              $details.removeAttr('open');
               open = 0;
             }
             else {
-              $form.find('details').attr('open', 'open');
+              $details.attr('open', 'open');
               open = 1;
             }
             Drupal.webform.detailsToggle.setDetailsToggleLabel($form);
@@ -56,7 +58,7 @@
             // Set the saved states for all the details elements.
             // @see webform.element.details.save.js
             if (Drupal.webformDetailsSaveGetName) {
-              $form.find('details').each(function () {
+              $details.each(function () {
                 // Note: Drupal.webformDetailsSaveGetName checks if localStorage
                 // exists and is enabled.
                 // @see webform.element.details.save.js
diff --git a/web/modules/webform/js/webform.element.location.places.js b/web/modules/webform/js/webform.element.location.places.js
index 6a2bcbd642..bbd0717464 100644
--- a/web/modules/webform/js/webform.element.location.places.js
+++ b/web/modules/webform/js/webform.element.location.places.js
@@ -43,7 +43,7 @@
         var $input = $element.find('.webform-location-places');
 
         // Prevent the 'Enter' key from submitting the form.
-        $input.keydown(function (event) {
+        $input.on('keydown', function (event) {
           if (event.keyCode === 13) {
             event.preventDefault();
           }
diff --git a/web/modules/webform/js/webform.element.multiple.js b/web/modules/webform/js/webform.element.multiple.js
index 8923a201e3..a44347b35f 100644
--- a/web/modules/webform/js/webform.element.multiple.js
+++ b/web/modules/webform/js/webform.element.multiple.js
@@ -43,7 +43,7 @@
           if (event.which === 13) {
             // Note: Mousedown is the default trigger for Ajax events.
             // @see Drupal.Ajax.
-            $submit.mousedown();
+            $submit.trigger('mousedown');
           }
         });
       });
diff --git a/web/modules/webform/js/webform.element.other.js b/web/modules/webform/js/webform.element.other.js
index 124aaab403..6e02d38da0 100644
--- a/web/modules/webform/js/webform.element.other.js
+++ b/web/modules/webform/js/webform.element.other.js
@@ -35,7 +35,7 @@
       $element[showEffect]();
       // If not initializing, then focus the other element.
       if (effect !== false) {
-        $input.focus();
+        $input.trigger('focus');
       }
       // Require the input.
       $input.prop('required', true).attr('aria-required', 'true');
@@ -151,7 +151,7 @@
         var $container = $(this).find('.js-webform-webform-buttons');
 
         // Create set onchange handler.
-        $container.change(function () {
+        $container.on('change', function () {
           toggleOther(($(this).find(':radio:checked').val() === '_other_'), $input);
         });
 
diff --git a/web/modules/webform/js/webform.element.signature.js b/web/modules/webform/js/webform.element.signature.js
index 4401e41a1b..f95364000c 100644
--- a/web/modules/webform/js/webform.element.signature.js
+++ b/web/modules/webform/js/webform.element.signature.js
@@ -58,13 +58,13 @@
         }
 
         // Set resize handler.
-        $(window).resize(debounce(refresh, 10));
+        $(window).on('resize', debounce(refresh, 10));
 
         // Set reset handler.
         $button.on('click', function () {
           signaturePad.clear();
           $input.val('');
-          this.blur();
+          this.trigger('blur');
           return false;
         });
 
diff --git a/web/modules/webform/js/webform.element.states.js b/web/modules/webform/js/webform.element.states.js
index 26325fe0c7..d3005870e4 100644
--- a/web/modules/webform/js/webform.element.states.js
+++ b/web/modules/webform/js/webform.element.states.js
@@ -26,7 +26,7 @@
         });
 
         // Initialize trigger and selector.
-        $trigger.on('change', function () {$selector.change();});
+        $trigger.on('change', function () {$selector.trigger('change');});
 
         $selector.on('change', function () {
           var selector = $selector.val();
@@ -47,7 +47,7 @@
           }
           // Always disable browser auto completion.
           $value.attr('autocomplete', 'off');
-        }).change();
+        }).trigger('change');
       });
 
       // If the states:state is required or optional the required checkbox
@@ -98,7 +98,7 @@
         requiredChecked = null;
       }
     }
-    $input.change();
+    $input.trigger('change');
   }
 
 })(jQuery, Drupal, drupalSettings);
diff --git a/web/modules/webform/js/webform.element.tableselect.js b/web/modules/webform/js/webform.element.tableselect.js
index 45751a98cc..b0207ac68e 100644
--- a/web/modules/webform/js/webform.element.tableselect.js
+++ b/web/modules/webform/js/webform.element.tableselect.js
@@ -59,7 +59,7 @@
         return true;
       }
 
-      $checkbox.click();
+      $checkbox.trigger('click');
     });
   };
 
diff --git a/web/modules/webform/js/webform.element.telephone.js b/web/modules/webform/js/webform.element.telephone.js
index ef7819f9c2..cf23d9ef5c 100644
--- a/web/modules/webform/js/webform.element.telephone.js
+++ b/web/modules/webform/js/webform.element.telephone.js
@@ -27,7 +27,7 @@
         var $telephone = $(this);
 
         // Add error message container.
-        var $error = $('<div class="form-item--error-message">' + Drupal.t('Invalid phone number') + '</div>').hide();
+        var $error = $('<strong class="error form-item--error-message">' + Drupal.t('Invalid phone number') + '</strong>').hide();
         $telephone.closest('.js-form-item').append($error);
 
         var options = {
@@ -54,17 +54,33 @@
           $error.hide();
         };
 
-        $telephone.blur(function () {
-          reset();
+        var validate = function () {
           if ($.trim($telephone.val())) {
             if (!$telephone.intlTelInput('isValidNumber')) {
               $telephone.addClass('error');
-              $error.show();
+              var message = Drupal.t('The phone number is not valid. (e.g. @example)', {'@example': $telephone.attr('placeholder')});
+              $error.html(message).show();
+              return false;
             }
           }
+          return true;
+        };
+
+        $telephone.on('blur', function () {
+          reset();
+          validate();
         });
 
         $telephone.on('keyup change', reset);
+
+        // Check for a valid phone number on submit.
+        var $form = $(this.form);
+        $form.on('submit', function (event) {
+          if (!validate()) {
+            $telephone.focus();
+            event.preventDefault();
+          }
+        });
       });
     }
   };
diff --git a/web/modules/webform/js/webform.element.terms_of_service.js b/web/modules/webform/js/webform.element.terms_of_service.js
index 55535c5813..eac191da3a 100644
--- a/web/modules/webform/js/webform.element.terms_of_service.js
+++ b/web/modules/webform/js/webform.element.terms_of_service.js
@@ -53,7 +53,7 @@
         }
 
         // Set event handlers.
-        $a.click(openDetails)
+        $a.on('click', openDetails)
           .on('keydown', function (event) {
             // Space or Return.
             if (event.which === 32 || event.which === 13) {
diff --git a/web/modules/webform/js/webform.element.time.js b/web/modules/webform/js/webform.element.time.js
index 2ca0c7b51a..adced77ab9 100644
--- a/web/modules/webform/js/webform.element.time.js
+++ b/web/modules/webform/js/webform.element.time.js
@@ -57,6 +57,11 @@
           options.step = 1;
         }
 
+        // Set step to 'any' to prevent clientside validation issues.
+        // @see \Drupal\clientside_validation\Plugin\CvValidator\Step
+        // @see https://www.drupal.org/project/clientside_validation/issues/2941434
+        $input.attr('step', 'any');
+
         options = $.extend(options, Drupal.webform.timePicker.options);
 
         $input.timepicker(options);
diff --git a/web/modules/webform/js/webform.filter.js b/web/modules/webform/js/webform.filter.js
index b5b64b7591..faa52b9e83 100644
--- a/web/modules/webform/js/webform.filter.js
+++ b/web/modules/webform/js/webform.filter.js
@@ -60,7 +60,7 @@
 
           // Make sure the filter input is always focused.
           if (focusInput === 'true') {
-            setTimeout(function () {$input.focus();});
+            setTimeout(function () {$input.trigger('focus');});
           }
         }
 
@@ -73,7 +73,7 @@
          */
         function resetFilter(e) {
           $input.val('').keyup();
-          $input.focus();
+          $input.trigger('focus');
         }
 
         /**
diff --git a/web/modules/webform/js/webform.form.auto_focus.js b/web/modules/webform/js/webform.form.auto_focus.js
index c1d089db73..03ea81b9b7 100644
--- a/web/modules/webform/js/webform.form.auto_focus.js
+++ b/web/modules/webform/js/webform.form.auto_focus.js
@@ -18,7 +18,7 @@
   Drupal.behaviors.webformAutofocus = {
     attach: function (context) {
       $(context).find('.js-webform-autofocus :input:visible:enabled:first')
-        .focus();
+        .trigger('focus');
     }
   };
 
diff --git a/web/modules/webform/js/webform.form.submit_back.js b/web/modules/webform/js/webform.form.submit_back.js
index 155cbf7794..dc60b8c006 100644
--- a/web/modules/webform/js/webform.form.submit_back.js
+++ b/web/modules/webform/js/webform.form.submit_back.js
@@ -13,7 +13,7 @@
     window.onpopstate = function (event) {
       $('#edit-wizard-prev, #edit-preview-prev, .webform-button--previous')
         .slice(0, 1)
-        .click();
+        .trigger('click');
     };
   }
 
diff --git a/web/modules/webform/js/webform.form.submit_once.js b/web/modules/webform/js/webform.form.submit_once.js
index ce535d4112..af865b4d80 100644
--- a/web/modules/webform/js/webform.form.submit_once.js
+++ b/web/modules/webform/js/webform.form.submit_once.js
@@ -32,14 +32,14 @@
 
         // Track which submit button was clicked.
         // @see http://stackoverflow.com/questions/5721724/jquery-how-to-get-which-button-was-clicked-upon-form-submission
-        $form.find('.js-webform-wizard-pages-links :submit, .form-actions :submit').click(function () {
+        $form.find('.js-webform-wizard-pages-links :submit, .form-actions :submit').on('click', function () {
           $form.find('.js-webform-wizard-pages-links :submit, .form-actions :submit')
             .removeClass('js-webform-submit-clicked');
           $(this)
             .addClass('js-webform-submit-clicked');
         });
 
-        $(this).submit(function () {
+        $(this).on('submit', function () {
           // Find clicked button
           var $clickedButton = $form.find('.js-webform-wizard-pages-links :submit.js-webform-submit-clicked, .form-actions :submit.js-webform-submit-clicked');
 
diff --git a/web/modules/webform/js/webform.form.unsaved.js b/web/modules/webform/js/webform.form.unsaved.js
index 3b1c46aa02..bd0bf26d3f 100644
--- a/web/modules/webform/js/webform.form.unsaved.js
+++ b/web/modules/webform/js/webform.form.unsaved.js
@@ -105,9 +105,14 @@
    * Date:    19th May 2014
    */
   $(function () {
-    if (!navigator.userAgent.toLowerCase().match(/iphone|ipad|ipod|opera/)) {
+    // @see https://stackoverflow.com/questions/58019463/how-to-detect-device-name-in-safari-on-ios-13-while-it-doesnt-show-the-correct
+    var isIOSorOpera = navigator.userAgent.toLowerCase().match(/iphone|ipad|ipod|opera/)
+      || navigator.platform.toLowerCase().match(/iphone|ipad|ipod/)
+      || (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1);
+    if (!isIOSorOpera) {
       return;
     }
+
     $('a:not(.use-ajax)').bind('click', function (evt) {
       var a = $(evt.target).closest('a');
       var href = a.attr('href');
diff --git a/web/modules/webform/js/webform.jquery.ui.dialog.js b/web/modules/webform/js/webform.jquery.ui.dialog.js
index 479fc2be0f..993d8d27e0 100644
--- a/web/modules/webform/js/webform.jquery.ui.dialog.js
+++ b/web/modules/webform/js/webform.jquery.ui.dialog.js
@@ -42,7 +42,7 @@
               // Move focus to close dialog button.
               hasFocus = $element.parent().find('.ui-dialog-titlebar-close');
             }
-            hasFocus.eq(0).focus();
+            hasFocus.eq(0).trigger('focus');
           });
         }
       });
diff --git a/web/modules/webform/js/webform.scroll.js b/web/modules/webform/js/webform.scroll.js
new file mode 100644
index 0000000000..51b67dc85f
--- /dev/null
+++ b/web/modules/webform/js/webform.scroll.js
@@ -0,0 +1,92 @@
+/**
+ * @file
+ * JavaScript behaviors for webform scroll top.
+ */
+
+(function ($, Drupal) {
+
+  'use strict';
+
+  Drupal.webform = Drupal.webform || {};
+  // Allow scrollTopOffset to be custom defined or based on whether there is a
+  // floating toolbar.
+  Drupal.webform.scrollTopOffset = Drupal.webform.scrollTopOffset || ($('#toolbar-administration').length ? 140 : 10);
+
+  /**
+   * Scroll to top ajax command.
+   *
+   * @param {Element} element
+   *   The element to scroll to.
+   * @param {string} target
+   *   Scroll to target. (form or page)
+   */
+  Drupal.webformScrollTop = function (element, target) {
+    if (!target) {
+      return;
+    }
+
+    var $element = $(element);
+
+    // Scroll to the top of the view. This will allow users
+    // to browse newly loaded content after e.g. clicking a pager
+    // link.
+    var offset = $element.offset();
+    // We can't guarantee that the scrollable object should be
+    // the body, as the view could be embedded in something
+    // more complex such as a modal popup. Recurse up the DOM
+    // and scroll the first element that has a non-zero top.
+    var $scrollTarget = $element;
+    while ($scrollTarget.scrollTop() === 0 && $($scrollTarget).parent()) {
+      $scrollTarget = $scrollTarget.parent();
+    }
+
+    if (target === 'page' && $scrollTarget.length && $scrollTarget[0].tagName === 'HTML') {
+      // Scroll to top when scroll target is the entire page.
+      // @see https://stackoverflow.com/questions/123999/how-to-tell-if-a-dom-element-is-visible-in-the-current-viewport
+      var rect = $($scrollTarget)[0].getBoundingClientRect();
+      if (!(rect.top >= 0 && rect.left >= 0 && rect.bottom <= $(window).height() && rect.right <= $(window).width())) {
+        $scrollTarget.animate({scrollTop: 0}, 500);
+      }
+    }
+    else {
+      // Only scroll upward.
+      if (offset.top - Drupal.webform.scrollTopOffset < $scrollTarget.scrollTop()) {
+        $scrollTarget.animate({scrollTop: (offset.top - Drupal.webform.scrollTopOffset)}, 500);
+      }
+    }
+  };
+
+  /**
+   * Scroll element into view.
+   *
+   * @param {jQuery} $element
+   *   An element.
+   */
+  Drupal.webformScrolledIntoView = function ($element) {
+    if (!Drupal.webformIsScrolledIntoView($element)) {
+      $('html, body').animate({scrollTop: $element.offset().top - Drupal.webform.scrollTopOffset}, 500);
+    }
+  };
+
+  /**
+   * Determine if element is visible in the viewport.
+   *
+   * @param {Element} element
+   *   An element.
+   *
+   * @return {boolean}
+   *   TRUE if element is visible in the viewport.
+   *
+   * @see https://stackoverflow.com/questions/487073/check-if-element-is-visible-after-scrolling
+   */
+  Drupal.webformIsScrolledIntoView = function (element) {
+    var docViewTop = $(window).scrollTop();
+    var docViewBottom = docViewTop + $(window).height();
+
+    var elemTop = $(element).offset().top;
+    var elemBottom = elemTop + $(element).height();
+
+    return ((elemBottom <= docViewBottom) && (elemTop >= docViewTop));
+  };
+
+})(jQuery, Drupal);
diff --git a/web/modules/webform/js/webform.states.js b/web/modules/webform/js/webform.states.js
index 7fcd8c7060..f34f284b94 100644
--- a/web/modules/webform/js/webform.states.js
+++ b/web/modules/webform/js/webform.states.js
@@ -212,7 +212,7 @@
 
   $document.on('state:checked', function (e) {
     if (e.trigger) {
-      $(e.target).change();
+      $(e.target).trigger('change');
     }
   });
 
@@ -318,7 +318,7 @@
         .once('webform-radios-required')
         .each(function () {
           var $element = $(this);
-          setTimeout(function () {radiosRequired($(this))});
+          setTimeout(function () {radiosRequired($element);});
         });
     }
   };
@@ -530,6 +530,7 @@
    * @param {element} $input
    *   An input.
    * @param {boolean} required
+   *   Is input required.
    */
   function toggleRequired($input, required) {
     if (required) {
diff --git a/web/modules/webform/js/webform.wizard.pages.js b/web/modules/webform/js/webform.wizard.pages.js
index b19f20cd7c..5b4f52b61f 100644
--- a/web/modules/webform/js/webform.wizard.pages.js
+++ b/web/modules/webform/js/webform.wizard.pages.js
@@ -39,12 +39,12 @@
                 'aria-label': title,
                 'tabindex': '0'
               })
-              .click(function () {
-                $button.click();
+              .on('click', function () {
+                $button.trigger('click');
               })
-              .keydown(function (event) {
+              .on('keydown', function (event) {
                 if (event.which === 13) {
-                  $button.click();
+                  $button.trigger('click');
                 }
               });
             // Only allow the marker to be tabbable.
diff --git a/web/modules/webform/modules/webform_access/js/webform_access.admin.js b/web/modules/webform/modules/webform_access/js/webform_access.admin.js
index 026c651de7..9477dc8774 100644
--- a/web/modules/webform/modules/webform_access/js/webform_access.admin.js
+++ b/web/modules/webform/modules/webform_access/js/webform_access.admin.js
@@ -18,7 +18,7 @@
         var $permissions = $(this);
         var $checkbox = $permissions.find('input[name="permissions[administer]"]');
 
-        $checkbox.click(toggleAdminister);
+        $checkbox.on('click', toggleAdminister);
         if ($checkbox.prop('checked')) {
           toggleAdminister();
         }
diff --git a/web/modules/webform/modules/webform_access/src/Plugin/Block/WebformAccessGroupEntityBlock.php b/web/modules/webform/modules/webform_access/src/Plugin/Block/WebformAccessGroupEntityBlock.php
index 2ec9c83f2a..2679ee1451 100644
--- a/web/modules/webform/modules/webform_access/src/Plugin/Block/WebformAccessGroupEntityBlock.php
+++ b/web/modules/webform/modules/webform_access/src/Plugin/Block/WebformAccessGroupEntityBlock.php
@@ -4,6 +4,7 @@
 
 use Drupal\Core\Block\BlockBase;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
+use Drupal\Core\Language\LanguageManagerInterface;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
 use Drupal\Core\Session\AccountInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
@@ -33,6 +34,13 @@ class WebformAccessGroupEntityBlock extends BlockBase implements ContainerFactor
    */
   protected $webformAccessGroupStorage;
 
+  /**
+   * The 'language_manager' service.
+   *
+   * @var \Drupal\Core\Language\LanguageManagerInterface
+   */
+  protected $languageManager;
+
   /**
    * Creates a WebformAccessGroupEntityBlock instance.
    *
@@ -46,11 +54,14 @@ class WebformAccessGroupEntityBlock extends BlockBase implements ContainerFactor
    *   The current user.
    * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
    *   The entity type manager.
+   * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
+   *   The language manager.
    */
-  public function __construct(array $configuration, $plugin_id, $plugin_definition, AccountInterface $current_user, EntityTypeManagerInterface $entity_type_manager) {
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, AccountInterface $current_user, EntityTypeManagerInterface $entity_type_manager, LanguageManagerInterface $language_manager) {
     parent::__construct($configuration, $plugin_id, $plugin_definition);
     $this->currentUser = $current_user;
     $this->webformAccessGroupStorage = $entity_type_manager->getStorage('webform_access_group');
+    $this->languageManager = $language_manager;
   }
 
   /**
@@ -62,7 +73,9 @@ public static function create(ContainerInterface $container, array $configuratio
       $plugin_id,
       $plugin_definition,
       $container->get('current_user'),
-      $container->get('entity_type.manager')
+      $container->get('entity_type.manager'),
+      $container->get('language_manager')
+
     );
   }
 
@@ -76,9 +89,13 @@ public function build() {
       return NULL;
     }
 
+    $langcode = $this->languageManager->getCurrentLanguage()->getId();
     $items = [];
     foreach ($nodes as $node) {
       if ($node->access()) {
+        if ($node->hasTranslation($langcode)) {
+          $node = $node->getTranslation($langcode);
+        }
         $items[] = $node->toLink()->toRenderable();
       }
     }
diff --git a/web/modules/webform/modules/webform_access/webform_access.info.yml b/web/modules/webform/modules/webform_access/webform_access.info.yml
index ef6e6ef9fa..348127145b 100644
--- a/web/modules/webform/modules/webform_access/webform_access.info.yml
+++ b/web/modules/webform/modules/webform_access/webform_access.info.yml
@@ -7,7 +7,7 @@ dependencies:
   - 'webform:webform'
   - 'webform:webform_node'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/modules/webform_attachment/src/Element/WebformAttachmentUrl.php b/web/modules/webform/modules/webform_attachment/src/Element/WebformAttachmentUrl.php
index 3ac0139758..2cdd89bb07 100644
--- a/web/modules/webform/modules/webform_attachment/src/Element/WebformAttachmentUrl.php
+++ b/web/modules/webform/modules/webform_attachment/src/Element/WebformAttachmentUrl.php
@@ -31,6 +31,8 @@ public static function getFileContent(array $element, WebformSubmissionInterface
       /** @var \Drupal\webform\WebformTokenManagerInterface $token_manager */
       $token_manager = \Drupal::service('webform.token_manager');
       $url = $token_manager->replace($url, $webform_submission);
+      // Url can be a URI.
+      $url = file_create_url($url) ?: $url;
       // Prepend scheme and host to root relative path.
       if (strpos($url, '/') === 0) {
         $url = \Drupal::request()->getSchemeAndHttpHost() . $url;
@@ -48,11 +50,10 @@ public static function getFileContent(array $element, WebformSubmissionInterface
    */
   public static function getFileName(array $element, WebformSubmissionInterface $webform_submission) {
     if (!isset($element['#filename']) && !empty($element['#url'])) {
-      $filename = basename($element['#url']);
       /** @var \Drupal\webform\WebformTokenManagerInterface $token_manager */
       $token_manager = \Drupal::service('webform.token_manager');
-      $filename = $token_manager->replace($filename, $webform_submission);
-      return $filename;
+      $url = $token_manager->replace($element['#url'], $webform_submission);
+      return basename($url);
     }
     else {
       return parent::getFileName($element, $webform_submission);
diff --git a/web/modules/webform/modules/webform_attachment/src/Plugin/WebformElement/WebformAttachmentBase.php b/web/modules/webform/modules/webform_attachment/src/Plugin/WebformElement/WebformAttachmentBase.php
index 0e47a16ddf..eb325a81bf 100644
--- a/web/modules/webform/modules/webform_attachment/src/Plugin/WebformElement/WebformAttachmentBase.php
+++ b/web/modules/webform/modules/webform_attachment/src/Plugin/WebformElement/WebformAttachmentBase.php
@@ -97,7 +97,8 @@ protected function formatTextItem(array $element, WebformSubmissionInterface $we
       default:
       case 'link';
       case 'url';
-        return $attachment_element::getFileUrl($element, $webform_submission)->toString();
+        $fileUrl = $attachment_element::getFileUrl($element, $webform_submission);
+        return $fileUrl ? $fileUrl->toString() : '';
     }
   }
 
diff --git a/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_access.yml b/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_access.yml
index 89f04765c4..36f1ab0ff1 100644
--- a/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_access.yml
+++ b/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_access.yml
@@ -177,6 +177,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_email.yml b/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_email.yml
index 204dcbab9f..796f8326ce 100644
--- a/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_email.yml
+++ b/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_email.yml
@@ -62,13 +62,13 @@ elements: |
             </SOURCE>
          </asx:values>
       </asx:abap>
-
+  
   attachment_twig:
     '#type': webform_attachment_twig
     '#title': attachment_twig
     '#filename': 'attachment_twig-[current-date:html_date].xml'
     '#template': "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<asx:abap xmlns:asx=\"http://www.sap.com/abapxml\" version=\"1.0\">\n   <asx:values>\n      <VERSION>1.0</VERSION>\n      <SENDER>{{ webform_id }}</SENDER>\n      <WEBFORM_ID>{{ data.email }}</WEBFORM_ID>\n      <SOURCE>\n        {% for key, value in data %}\n         <o2PARAVALU>\n            <NAME>{{ (elements_flattened[key]['#xml_name']) ? elements_flattened[key]['#xml_name'] : key }}</NAME>\n            <VALUE>{{ value }}</VALUE>\n         </o2PARAVALU>\n        {% endfor %}      \n      </SOURCE>\n   </asx:values>\n</asx:abap>"
-
+  
 css: ''
 javascript: ''
 settings:
@@ -198,6 +198,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_sanitize.yml b/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_sanitize.yml
index db0f67256f..0141d3de5c 100644
--- a/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_sanitize.yml
+++ b/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_sanitize.yml
@@ -157,6 +157,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_states.yml b/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_states.yml
index 858742ed6a..2adb16ddc4 100644
--- a/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_states.yml
+++ b/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_states.yml
@@ -28,7 +28,7 @@ elements: |
       'enabled':
         ':input[name="attach"]':
           checked: true
-
+  
 css: ''
 javascript: ''
 settings:
@@ -158,6 +158,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_token.yml b/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_token.yml
index dfe8d5ec8c..eece68d887 100644
--- a/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_token.yml
+++ b/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_token.yml
@@ -165,6 +165,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_twig.yml b/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_twig.yml
index 18874de25b..72773a73a1 100644
--- a/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_twig.yml
+++ b/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_twig.yml
@@ -167,6 +167,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_url.yml b/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_url.yml
index f4020c2a89..24b564c7ae 100644
--- a/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_url.yml
+++ b/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_url.yml
@@ -168,6 +168,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/webform_attachment_test.info.yml b/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/webform_attachment_test.info.yml
index a49b123868..62b4362fd4 100644
--- a/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/webform_attachment_test.info.yml
+++ b/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/webform_attachment_test.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8
 dependencies:
   - 'webform:webform_attachment'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/modules/webform_attachment/webform_attachment.info.yml b/web/modules/webform/modules/webform_attachment/webform_attachment.info.yml
index 64cbc944f2..5014b9ba9a 100644
--- a/web/modules/webform/modules/webform_attachment/webform_attachment.info.yml
+++ b/web/modules/webform/modules/webform_attachment/webform_attachment.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/modules/webform_bootstrap/tests/modules/webform_bootstrap_test_module/webform_bootstrap_test_module.info.yml b/web/modules/webform/modules/webform_bootstrap/tests/modules/webform_bootstrap_test_module/webform_bootstrap_test_module.info.yml
index ca5de7c22f..bbdee0f3bd 100644
--- a/web/modules/webform/modules/webform_bootstrap/tests/modules/webform_bootstrap_test_module/webform_bootstrap_test_module.info.yml
+++ b/web/modules/webform/modules/webform_bootstrap/tests/modules/webform_bootstrap_test_module/webform_bootstrap_test_module.info.yml
@@ -8,7 +8,7 @@ dependencies:
   - 'webform:webform'
   - 'webform:webform_bootstrap'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/modules/webform_bootstrap/tests/themes/webform_bootstrap_test_theme/webform_bootstrap_test_theme.info.yml b/web/modules/webform/modules/webform_bootstrap/tests/themes/webform_bootstrap_test_theme/webform_bootstrap_test_theme.info.yml
index 78645a70a0..92cf244219 100644
--- a/web/modules/webform/modules/webform_bootstrap/tests/themes/webform_bootstrap_test_theme/webform_bootstrap_test_theme.info.yml
+++ b/web/modules/webform/modules/webform_bootstrap/tests/themes/webform_bootstrap_test_theme/webform_bootstrap_test_theme.info.yml
@@ -22,7 +22,7 @@ regions:
 libraries:
   - 'webform_bootstrap_test_theme/global-styling'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/modules/webform_bootstrap/webform_bootstrap.info.yml b/web/modules/webform/modules/webform_bootstrap/webform_bootstrap.info.yml
index 6ccc6cb871..71130259ae 100644
--- a/web/modules/webform/modules/webform_bootstrap/webform_bootstrap.info.yml
+++ b/web/modules/webform/modules/webform_bootstrap/webform_bootstrap.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/modules/webform_cards/js/webform_cards.js b/web/modules/webform/modules/webform_cards/js/webform_cards.js
index 1b25de702f..50aee52ea8 100644
--- a/web/modules/webform/modules/webform_cards/js/webform_cards.js
+++ b/web/modules/webform/modules/webform_cards/js/webform_cards.js
@@ -42,7 +42,8 @@
           toggleHideLabel: $form.data('toggle-hide-label'),
           toggleShowLabel: $form.data('toggle-show-label'),
           ajaxEffect: $form.data('ajax-effect'),
-          ajaxSpeed: $form.data('ajax-speed')
+          ajaxSpeed: $form.data('ajax-speed'),
+          ajaxScrollTop: $form.data('ajax-scroll-top')
         };
 
         var currentPage = $form.data('current-page');
@@ -137,8 +138,8 @@
             // If input and the cursor is not at the end of the input, do not
             // trigger navigation.
             // @see https://stackoverflow.com/questions/21177489/selectionstart-selectionend-on-input-type-number-no-longer-allowed-in-chrome
-            if (event.target.value !== undefined
-              && event.target.selectionStart !== undefined
+            if (typeof event.target.value !== 'undefined'
+              && typeof event.target.selectionStart !== 'undefined'
               && event.target.selectionStart !== null) {
               if (event.target.value.length !== event.target.selectionStart) {
                 return;
@@ -149,15 +150,21 @@
               }
             }
 
+            // If input[type="radio"] ignore left/right keys which are used to
+            // navigate between radio buttons.
+            if (event.target.tagName === 'INPUT' && event.target.type === 'radio') {
+              return;
+            }
+
             switch (event.which) {
               // Left key triggers the previous button.
               case 37:
-                setTimeout(function () {$previousButton.click();}, Drupal.webform.cards.autoForwardDelay);
+                setTimeout(function () {$previousButton.trigger('click');}, Drupal.webform.cards.autoForwardDelay);
                 break;
 
               // Right key triggers the next button.
               case 39:
-                setTimeout(function () {$nextButton.click();}, Drupal.webform.cards.autoForwardDelay);
+                setTimeout(function () {$nextButton.trigger('click');}, Drupal.webform.cards.autoForwardDelay);
                 break;
             }
           });
@@ -196,19 +203,35 @@
          * @param {jQuery} $activeCard
          *   An jQuery object containing the active card.
          * @param {boolean} initialize
-         *   Are cards being initialize
+         *   Are cards being initialize.
+         *   If TRUE, no transition or scrolling effects will be triggered.
          */
         function setActiveCard($activeCard, initialize) {
           if (!$activeCard.length) {
             return;
           }
 
-          // Unset the active card
-          $allCards.filter('.webform-card--active').removeClass('webform-card--active');
+          // Track the previous active card.
+          var $prevCard = $allCards.filter('.webform-card--active');
+
+          // Unset the previous active card and set the active card.
+          $prevCard.removeClass('webform-card--active');
+          $activeCard.addClass('webform-card--active');
+
+          // Trigger card change event.
+          $form.trigger('webform_cards:change', [$activeCard]);
+
+          // Allow card change event to reset the active card, this allows for
+          // card change event handler to apply custom validation
+          // and conditional logic.
+          $activeCard = $allCards.filter('.webform-card--active');
+          if ($activeCard.get(0) === $prevCard.get(0)) {
+            initialize = true;
+          }
 
           // Set the previous and next labels.
-          $previousButton.val($activeCard.data('prev-button-label') || $previousButton.data('default-label'));
-          $nextButton.val($activeCard.data('next-button-label') || $nextButton.data('default-label'));
+          setButtonLabel($previousButton, $activeCard.data('prev-button-label') || $previousButton.data('default-label'));
+          setButtonLabel($nextButton, $activeCard.data('next-button-label') || $nextButton.data('default-label'));
 
           // Show/hide the previous button.
           var hasPrevCard = !!$activeCard.prevAll('.webform-card:not([style*="display: none"])').length;
@@ -220,9 +243,6 @@
           $submitButton.toggle(!hasNextCard);
           $nextButton.toggle(hasNextCard);
 
-          // Activate the card.
-          $activeCard.addClass('webform-card--active');
-
           // Hide the next button when auto-forwarding.
           if (hideAutoForwardNextButton()) {
             $nextButton.hide();
@@ -230,7 +250,11 @@
 
           // Show the active card.
           if (!initialize) {
+            // Show the active card.
             applyAjaxEffect($activeCard);
+
+            // Scroll to the top of the page or form.
+            Drupal.webformScrollTop($activeCard, options.ajaxScrollTop);
           }
 
           // Focus the active card's first visible input.
@@ -246,8 +270,6 @@
           // Track progress.
           trackProgress();
 
-          // Trigger card change event.
-          $form.trigger('webform_cards:change', [$activeCard]);
         }
 
         /**
@@ -329,11 +351,11 @@
                 if ($links.attr('role') !== 'link') {
                   $links
                     .attr({'role': 'link', 'title': card.title, 'aria-label': card.title, 'tabindex': '0'})
-                    .click(function () {
+                    .on('click', function () {
                       var $card = $allCards.filter('[data-webform-key="' + $(this).data('webform-key') + '"]');
                       setActiveCard($card);
                     })
-                    .keydown(function (event) {
+                    .on('keydown', function (event) {
                       if (event.which === 13) {
                         var $card = $allCards.filter('[data-webform-key="' + $(this).data('webform-key') + '"]');
                         setActiveCard($card);
@@ -351,9 +373,11 @@
           // Set properties.
           var properties = getCardsProgressProperties();
           for (var property in properties) {
-            var attribute = '[data-webform-progress-' + property + ']';
-            var value = properties[property];
-            $progress.find(attribute).html(value);
+            if (properties.hasOwnProperty(property)) {
+              var attribute = '[data-webform-progress-' + property + ']';
+              var value = properties[property];
+              $progress.find(attribute).html(value);
+            }
           }
 
           // Set <progress> tag [value] and [max] attributes.
@@ -387,11 +411,11 @@
             $('body').on('keydown', function (event) {
               switch (event.which) {
                 case 37: // left.
-                  setTimeout(function () {$previousButton.click();}, Drupal.webform.cards.autoForwardDelay);
+                  setTimeout(function () {$previousButton.trigger('click');}, Drupal.webform.cards.autoForwardDelay);
                   break;
 
                 case 39: // right
-                  setTimeout(function () {$submitButton.click();}, Drupal.webform.cards.autoForwardDelay);
+                  setTimeout(function () {$submitButton.trigger('click');}, Drupal.webform.cards.autoForwardDelay);
                   break;
               }
             });
@@ -414,15 +438,15 @@
               $step
                 .find('[data-webform-progress-link]')
                 .attr({'role': 'link', 'title': title, 'aria-label': title, 'tabindex': '0'})
-                .click(function () {
+                .on('click', function () {
                   // Set current card.
                   $currentCardInput.val(card);
                   // Click button to return to the 'webform_start' page.
-                  $button.click();
+                  $button.trigger('click');
                 })
-                .keydown(function (event) {
+                .on('keydown', function (event) {
                   if (event.which === 13) {
-                    $(this).click();
+                    $(this).trigger('click');
                   }
                 });
             });
@@ -445,11 +469,11 @@
                   .attr('name', $cardButton.attr('name') + '-' + card)
                   .attr('data-drupal-selector', $cardButton.attr('data-drupal-selector') + '-' + card)
                   .attr('title', Drupal.t("Edit '@title'", {'@title': title}).toString())
-                  .click(function () {
+                  .on('click', function () {
                     // Set current card.
                     $currentCardInput.val(card);
                     // Click button to return to the 'webform_start' page.
-                    $button.click();
+                    $button.trigger('click');
                     return false;
                   });
                 $card.append($cardButton).show();
@@ -651,10 +675,10 @@
               setActiveCard($nextCard);
             }
             else if ($previewButton.length) {
-              $previewButton.click();
+              $previewButton.trigger('click');
             }
             else {
-              $submitButton.click();
+              $submitButton.trigger('click');
             }
           }
           // Prevent the button's default behavior.
@@ -705,7 +729,7 @@
             return value;
           });
           if (inputHasValue) {
-            setTimeout(function () {$nextButton.click();}, Drupal.webform.cards.autoForwardDelay);
+            setTimeout(function () {$nextButton.trigger('click');}, Drupal.webform.cards.autoForwardDelay);
           }
         }
 
@@ -732,7 +756,8 @@
           }
 
           var inputValues = [];
-          var name, type;
+          var name;
+          var type;
           $autoForwardInputs.each(function () {
             name = this.name;
             type = this.type;
@@ -779,7 +804,7 @@
 
           var $firstInput = $activeCard.find(':input:visible').first();
           if (!inputHasValue($firstInput)) {
-            $firstInput.focus();
+            $firstInput.trigger('focus');
           }
         }
 
@@ -789,7 +814,7 @@
          * @param {jQuery} $input
          *   An jQuery object containing an :input.
          *
-         * @return {{boolean}}
+         * @return {boolean}
          *   TRUE if next button should be hidden
          */
         function inputHasValue($input) {
@@ -807,9 +832,24 @@
             default:
               return $('[name="' + name + '"]').val() ? true : false;
           }
-          return false;
         }
 
+        /**
+         * Set button label value or HTML markup.
+         *
+         * @param {jQuery} $button
+         *   A jQuery object containing a <button> or <input type="submit">.
+         * @param {string} label
+         *   The button's label.
+         */
+        function setButtonLabel($button, label) {
+          if ($button[0].tagName === 'BUTTON') {
+            $button.html(label);
+          }
+          else {
+            $button.val(label);
+          }
+        }
       });
 
     }
diff --git a/web/modules/webform/modules/webform_cards/src/Form/WebformCardsConvertForm.php b/web/modules/webform/modules/webform_cards/src/Form/WebformCardsConvertForm.php
index cdcdc903cf..7bd587bb4b 100644
--- a/web/modules/webform/modules/webform_cards/src/Form/WebformCardsConvertForm.php
+++ b/web/modules/webform/modules/webform_cards/src/Form/WebformCardsConvertForm.php
@@ -31,8 +31,7 @@ public function buildForm(array $form, FormStateInterface $form_state, WebformIn
     ];
     $form['warning'] = [
       '#type' => 'webform_message',
-      '#message_message' => '<strong>' . $this->t('Webform cards support is an experimental module/feature.') . '</strong><br/>'
-        . $this->t('Please make sure to test the converted webform on a staging server before using cards in production.'),
+      '#message_message' => $this->t('Please make sure to test the converted webform on a staging server before using cards in production.'),
       '#message_type' => 'warning',
     ];
     $form['description'] = [
diff --git a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_access.yml b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_access.yml
index e5882c57af..d3b70e5383 100644
--- a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_access.yml
+++ b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_access.yml
@@ -187,6 +187,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_ajax.yml b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_ajax.yml
index 9df9758476..e83803a01a 100644
--- a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_ajax.yml
+++ b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_ajax.yml
@@ -160,6 +160,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_auto_forward.yml b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_auto_forward.yml
index 7ecc59b1d2..82751afde4 100644
--- a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_auto_forward.yml
+++ b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_auto_forward.yml
@@ -222,6 +222,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_auto_forward_hide.yml b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_auto_forward_hide.yml
index c8710f8d4d..e8a0b1db67 100644
--- a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_auto_forward_hide.yml
+++ b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_auto_forward_hide.yml
@@ -197,6 +197,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_draft.yml b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_draft.yml
index 389b35722a..2b952720c5 100644
--- a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_draft.yml
+++ b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_draft.yml
@@ -160,6 +160,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_javascript.yml b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_javascript.yml
index 1d55dfa60f..970957507e 100644
--- a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_javascript.yml
+++ b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_javascript.yml
@@ -5,8 +5,6 @@ dependencies:
   enforced:
     module:
       - webform_cards_test
-_core:
-  default_config_hash: ahRBaC5cLszQYVnyTm6-FNHsoxJRBnXqznJTPThCO7k
 open: null
 close: null
 weight: 0
@@ -34,18 +32,19 @@ elements: |
       '#title': 'Element 2'
       '#default_value': '{element_2}'
       '#required': true
+  
 css: ''
 javascript: |
   (function ($, Drupal) {
-
+  
     'use strict';
-
+  
     Drupal.behaviors.webformCardsTestJavaScript = {
       attach: function (context) {
         var $forms = $(context).is('form.webform-submission-form')
           ? $(context)
           : $('form.webform-submission-form', context);
-
+  
         $forms.once('webform-cards-test-javascript')
           .on('webform_cards:change', function (event, $activeCard) {
             console.log('webform_cards:change');
@@ -54,9 +53,9 @@ javascript: |
           });
       }
     };
-
+  
   })(jQuery, Drupal);
-
+  
 settings:
   ajax: false
   ajax_scroll_top: form
@@ -128,6 +127,7 @@ settings:
   wizard_progress_states: true
   wizard_auto_forward: true
   wizard_auto_forward_hide_next_button: false
+  wizard_keyboard: true
   wizard_start_label: ''
   wizard_preview_link: false
   wizard_confirmation: true
@@ -183,6 +183,8 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
+  serial_disabled: false
 access:
   create:
     roles:
@@ -232,3 +234,5 @@ access:
     permissions: {  }
 handlers: {  }
 variants: {  }
+_core:
+  default_config_hash: ahRBaC5cLszQYVnyTm6-FNHsoxJRBnXqznJTPThCO7k
diff --git a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_long_100.yml b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_long_100.yml
index 4ef5fa6598..390ccaa46b 100644
--- a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_long_100.yml
+++ b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_long_100.yml
@@ -746,6 +746,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_progress.yml b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_progress.yml
index 7e62c551d9..cc0877bc6b 100644
--- a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_progress.yml
+++ b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_progress.yml
@@ -160,6 +160,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_progress_custom.yml b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_progress_custom.yml
index 1abe08679e..978c1d81d3 100644
--- a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_progress_custom.yml
+++ b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_progress_custom.yml
@@ -249,6 +249,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_progress_links.yml b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_progress_links.yml
index 02ffabf547..dc84cdfa2b 100644
--- a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_progress_links.yml
+++ b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_progress_links.yml
@@ -160,6 +160,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_states.yml b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_states.yml
index cd08c521bd..3f8270dc81 100644
--- a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_states.yml
+++ b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_states.yml
@@ -249,6 +249,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_titles.yml b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_titles.yml
index eec8a72053..59863b2f63 100644
--- a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_titles.yml
+++ b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_titles.yml
@@ -163,6 +163,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_toggle.yml b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_toggle.yml
index c4d45fa606..64ab2ab525 100644
--- a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_toggle.yml
+++ b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_toggle.yml
@@ -160,6 +160,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_validation_errors.yml b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_validation_errors.yml
index 83545210e0..f5169403fa 100644
--- a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_validation_errors.yml
+++ b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_validation_errors.yml
@@ -168,6 +168,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/webform_cards_test.info.yml b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/webform_cards_test.info.yml
index 2ab111efd0..6e94cc4b2b 100644
--- a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/webform_cards_test.info.yml
+++ b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/webform_cards_test.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8
 dependencies:
   - 'webform:webform_cards'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/modules/webform_cards/webform_cards.info.yml b/web/modules/webform/modules/webform_cards/webform_cards.info.yml
index 4cd771df83..6444b60e48 100644
--- a/web/modules/webform/modules/webform_cards/webform_cards.info.yml
+++ b/web/modules/webform/modules/webform_cards/webform_cards.info.yml
@@ -1,15 +1,14 @@
-name: 'Webform Cards [EXPERIMENTAL]'
+name: 'Webform Cards'
 type: module
 description: 'Provides a ''Card'' container element for fast clientside multistep form pagination.'
-experimental: true
-package: 'Webform [EXPERIMENTAL]'
+package: 'Webform'
 core_version_requirement: ^8.8
 dependencies:
   - 'webform:webform'
   - 'webform:webform_clientside_validation'
   - 'drupal:inline_form_errors'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/modules/webform_cards/webform_cards.libraries.yml b/web/modules/webform/modules/webform_cards/webform_cards.libraries.yml
index e3ecff9937..a96dee70b4 100644
--- a/web/modules/webform/modules/webform_cards/webform_cards.libraries.yml
+++ b/web/modules/webform/modules/webform_cards/webform_cards.libraries.yml
@@ -9,6 +9,7 @@ webform_cards:
     - core/drupal
     - core/jquery.once
     - core/jquery.ui.effects.shake
+    - webform/webform.scroll
 
 webform_cards.admin:
   version: VERSION
diff --git a/web/modules/webform/modules/webform_cards/webform_cards.module b/web/modules/webform/modules/webform_cards/webform_cards.module
index 7a1dbbf6f5..f78d696474 100644
--- a/web/modules/webform/modules/webform_cards/webform_cards.module
+++ b/web/modules/webform/modules/webform_cards/webform_cards.module
@@ -18,6 +18,7 @@
 use Drupal\webform\Element\WebformMessage;
 use Drupal\webform\Utility\WebformArrayHelper;
 use Drupal\webform\Utility\WebformDialogHelper;
+use Drupal\webform\Utility\WebformElementHelper;
 use Drupal\webform\WebformInterface;
 use Drupal\webform\WebformSubmissionInterface;
 
@@ -178,6 +179,8 @@ function webform_cards_webform_submission_form_alter(array &$form, FormStateInte
     'ajax_effect',
     // Ajax speed.
     'ajax_speed',
+    // Ajax scroll top.
+    'ajax_scroll_top',
   ];
   foreach ($setting_names as $setting_name) {
     if ($value = $webform->getSetting($setting_name, TRUE)) {
@@ -322,7 +325,13 @@ function webform_cards_form_webform_admin_config_forms_form_alter(array &$form,
         '#title' => t('Default wizard/cards start label'),
       ],
       'default_wizard_confirmation_label' => [
-        '#title' => t('Default/cards wizard end label'),
+        '#title' => t('Default wizard/cards end label'),
+      ],
+      'default_wizard_toggle_show_label' => [
+        '#title' => t('Default wizard/cards show all elements label'),
+      ],
+      'default_wizard_toggle_hide_label' => [
+        '#title' => t('Default wizard/cards hide all elements label'),
       ],
     ],
   ]);
@@ -348,6 +357,41 @@ function webform_cards_form_webform_admin_config_elements_form_alter(array &$for
  * Implements hook_form_FORM_ID_alter() for webform settings:form.
  *
  * @see \Drupal\webform\EntitySettings\WebformEntitySettingsFormForm
+ * @see /admin/structure/webform/manage/{webform}/settings
+ */
+function webform_cards_form_webform_settings_form_alter(array &$form, FormStateInterface $form_state) {
+  /** @var \Drupal\webform\EntitySettings\WebformEntitySettingsGeneralForm $form_object */
+  $form_object = $form_state->getFormObject();
+  /** @var \Drupal\webform\WebformInterface $webform */
+  $webform = $form_object->getEntity();
+  /** @var \Drupal\webform_cards\WebformCardsManagerInterface $webform_cards_manager */
+  $webform_cards_manager = \Drupal::service('webform_cards.manager');
+  // Check if the webform has cards.
+  $has_cards = $webform_cards_manager->hasCards($webform);
+  if (!$has_cards) {
+    return;
+  }
+
+  // Move hide/show from container to jus the progress type.
+  $form['ajax_settings']['ajax_container']['ajax_progress_type']['#states'] = $form['ajax_settings']['ajax_container']['#states'];
+  $form['ajax_settings']['ajax_container']['#states'] = NULL;
+
+  // Display info message.
+  $form['ajax_settings']['ajax_container']['ajax_progress_type']['#weight'] = -10;
+  $form['ajax_settings']['ajax_container']['ajax_cards_message'] = [
+    '#type' => 'webform_message',
+    '#message_type' => 'info',
+    '#message_close' => TRUE,
+    '#message_storage' => WebformMessage::STORAGE_SESSION,
+    '#message_message' => t('The below Ajax scroll, effect, and speed settings will also be applied to cards.'),
+    '#weight' => -9,
+  ];
+}
+
+/**
+ * Implements hook_form_FORM_ID_alter() for webform settings:form.
+ *
+ * @see \Drupal\webform\EntitySettings\WebformEntitySettingsGeneralForm
  * @see /admin/structure/webform/manage/{webform}/settings/form
  */
 function webform_cards_form_webform_settings_form_form_alter(array &$form, FormStateInterface $form_state) {
@@ -385,6 +429,10 @@ function webform_cards_form_webform_settings_form_form_alter(array &$form, FormS
       ],
       'wizard_track' => [
         '#title' => t('Track wizard/cards progress in the URL by'),
+        '#options' => [
+          'name' => t("Page/card name (?page=contact)"),
+          'index' => t("Page/card index (?page=2)"),
+        ],
       ],
       'wizard_prev_button_label' => [
         '#title' => t('Wizard/cards previous page button label'),
@@ -426,7 +474,7 @@ function _webform_cards_form_alter_elements(array &$form, array $elements) {
         continue;
       }
 
-      if (Element::property($key)) {
+      if (WebformElementHelper::property($key)) {
         $form[$container_key][$key] = $element;
       }
       elseif (is_array($container)) {
diff --git a/web/modules/webform/modules/webform_clientside_validation/css/webform_clientside_validation.ife.css b/web/modules/webform/modules/webform_clientside_validation/css/webform_clientside_validation.ife.css
index 0d0ef9b75d..4d023c162c 100644
--- a/web/modules/webform/modules/webform_clientside_validation/css/webform_clientside_validation.ife.css
+++ b/web/modules/webform/modules/webform_clientside_validation/css/webform_clientside_validation.ife.css
@@ -3,6 +3,7 @@
  * Webform clientside validation styles.
  */
 
-.webform-submission-form strong.error.form-item--error-message {
-  display: block;
+.form-item.js-form-type-tel + strong.error.form-item--error-message,
+.form-item.js-form-type-tel + strong.error.form-item--error-message + strong.error.form-item--error-message {
+  margin-top: -1em;
 }
diff --git a/web/modules/webform/modules/webform_clientside_validation/tests/modules/webform_clientside_validation_test/config/install/webform.webform.test_clientside_validation.yml b/web/modules/webform/modules/webform_clientside_validation/tests/modules/webform_clientside_validation_test/config/install/webform.webform.test_clientside_validation.yml
index 151f03ade2..da17edafbd 100644
--- a/web/modules/webform/modules/webform_clientside_validation/tests/modules/webform_clientside_validation_test/config/install/webform.webform.test_clientside_validation.yml
+++ b/web/modules/webform/modules/webform_clientside_validation/tests/modules/webform_clientside_validation_test/config/install/webform.webform.test_clientside_validation.yml
@@ -312,6 +312,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_clientside_validation/tests/modules/webform_clientside_validation_test/webform_clientside_validation_test.info.yml b/web/modules/webform/modules/webform_clientside_validation/tests/modules/webform_clientside_validation_test/webform_clientside_validation_test.info.yml
index 1749a41f24..7eec94a721 100644
--- a/web/modules/webform/modules/webform_clientside_validation/tests/modules/webform_clientside_validation_test/webform_clientside_validation_test.info.yml
+++ b/web/modules/webform/modules/webform_clientside_validation/tests/modules/webform_clientside_validation_test/webform_clientside_validation_test.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8
 dependencies:
   - 'webform:webform_clientside_validation'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/modules/webform_clientside_validation/webform_clientside_validation.info.yml b/web/modules/webform/modules/webform_clientside_validation/webform_clientside_validation.info.yml
index a806997e3c..0134648170 100644
--- a/web/modules/webform/modules/webform_clientside_validation/webform_clientside_validation.info.yml
+++ b/web/modules/webform/modules/webform_clientside_validation/webform_clientside_validation.info.yml
@@ -8,7 +8,7 @@ dependencies:
   - 'clientside_validation:clientside_validation'
   - 'clientside_validation:clientside_validation_jquery'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/modules/webform_demo/webform_demo_application_evaluation/config/install/webform.webform.demo_application.yml b/web/modules/webform/modules/webform_demo/webform_demo_application_evaluation/config/install/webform.webform.demo_application.yml
index 612ed4beba..b7d194a939 100644
--- a/web/modules/webform/modules/webform_demo/webform_demo_application_evaluation/config/install/webform.webform.demo_application.yml
+++ b/web/modules/webform/modules/webform_demo/webform_demo_application_evaluation/config/install/webform.webform.demo_application.yml
@@ -288,6 +288,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_demo/webform_demo_application_evaluation/config/install/webform.webform.demo_application_evaluation.yml b/web/modules/webform/modules/webform_demo/webform_demo_application_evaluation/config/install/webform.webform.demo_application_evaluation.yml
index 13f645bc98..97fab95d62 100644
--- a/web/modules/webform/modules/webform_demo/webform_demo_application_evaluation/config/install/webform.webform.demo_application_evaluation.yml
+++ b/web/modules/webform/modules/webform_demo/webform_demo_application_evaluation/config/install/webform.webform.demo_application_evaluation.yml
@@ -169,6 +169,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_demo/webform_demo_application_evaluation/webform_demo_application_evaluation.info.yml b/web/modules/webform/modules/webform_demo/webform_demo_application_evaluation/webform_demo_application_evaluation.info.yml
index 9b04f98b11..8ff6f48116 100644
--- a/web/modules/webform/modules/webform_demo/webform_demo_application_evaluation/webform_demo_application_evaluation.info.yml
+++ b/web/modules/webform/modules/webform_demo/webform_demo_application_evaluation/webform_demo_application_evaluation.info.yml
@@ -9,7 +9,7 @@ dependencies:
   - 'webform:webform'
   - 'webform:webform_node'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/modules/webform_demo/webform_demo_event_registration/config/install/webform.webform.demo_event_registration.yml b/web/modules/webform/modules/webform_demo/webform_demo_event_registration/config/install/webform.webform.demo_event_registration.yml
index 531e535515..5576b02dff 100644
--- a/web/modules/webform/modules/webform_demo/webform_demo_event_registration/config/install/webform.webform.demo_event_registration.yml
+++ b/web/modules/webform/modules/webform_demo/webform_demo_event_registration/config/install/webform.webform.demo_event_registration.yml
@@ -61,7 +61,7 @@ elements: |
     '#type': webform_actions
     '#title': 'Submit button(s)'
     '#submit__label': Register
-
+  
 css: ''
 javascript: ''
 settings:
@@ -191,6 +191,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_demo/webform_demo_event_registration/webform_demo_event_registration.info.yml b/web/modules/webform/modules/webform_demo/webform_demo_event_registration/webform_demo_event_registration.info.yml
index cc8517efb0..b5931ec676 100644
--- a/web/modules/webform/modules/webform_demo/webform_demo_event_registration/webform_demo_event_registration.info.yml
+++ b/web/modules/webform/modules/webform_demo/webform_demo_event_registration/webform_demo_event_registration.info.yml
@@ -13,7 +13,7 @@ dependencies:
   - 'webform:webform_scheduled_email'
   - 'webform:webform_share'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/modules/webform_demo/webform_demo_event_registration/webform_demo_event_registration.install b/web/modules/webform/modules/webform_demo/webform_demo_event_registration/webform_demo_event_registration.install
index 07c9b9959c..cf6a00c474 100644
--- a/web/modules/webform/modules/webform_demo/webform_demo_event_registration/webform_demo_event_registration.install
+++ b/web/modules/webform/modules/webform_demo/webform_demo_event_registration/webform_demo_event_registration.install
@@ -6,6 +6,8 @@
  */
 
 use Drupal\Core\Datetime\DrupalDateTime;
+use Drupal\field\Entity\FieldConfig;
+use Drupal\field\Entity\FieldStorageConfig;
 use Drupal\node\Entity\Node;
 use Drupal\webform\Utility\WebformDateHelper;
 use Drupal\webform\WebformInterface;
@@ -49,4 +51,18 @@ function webform_demo_event_registration_uninstall() {
       $node->delete();
     }
   }
+
+  // Delete field configuration manually.
+  $field_names = ['field_webform_demo_event_date', 'field_webform_entity_limit_total'];
+  foreach ($field_names as $field_name) {
+    $field_config = FieldConfig::loadByName('node', 'webform_demo_event', $field_name);
+    if ($field_config) {
+      $field_config->delete();
+    }
+
+    $field_storage_config = FieldStorageConfig::loadByName('node', $field_name);
+    if ($field_storage_config) {
+      $field_storage_config->delete();
+    }
+  }
 }
diff --git a/web/modules/webform/modules/webform_demo/webform_demo_group/config/install/webform.webform.webform_group_contact.yml b/web/modules/webform/modules/webform_demo/webform_demo_group/config/install/webform.webform.webform_group_contact.yml
index 835cf54fb9..f168296fa8 100644
--- a/web/modules/webform/modules/webform_demo/webform_demo_group/config/install/webform.webform.webform_group_contact.yml
+++ b/web/modules/webform/modules/webform_demo/webform_demo_group/config/install/webform.webform.webform_group_contact.yml
@@ -87,7 +87,7 @@ elements: |
     '#type': webform_actions
     '#title': 'Submit button(s)'
     '#submit__label': 'Send message'
-
+  
 css: ''
 javascript: ''
 settings:
@@ -217,6 +217,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_demo/webform_demo_group/webform_demo_group.info.yml b/web/modules/webform/modules/webform_demo/webform_demo_group/webform_demo_group.info.yml
index 49fa8ea2a6..22aebb940f 100644
--- a/web/modules/webform/modules/webform_demo/webform_demo_group/webform_demo_group.info.yml
+++ b/web/modules/webform/modules/webform_demo/webform_demo_group/webform_demo_group.info.yml
@@ -11,7 +11,7 @@ dependencies:
   - 'webform:webform_node'
   - 'webform:webform_group'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/modules/webform_demo/webform_demo_region_contact/config/install/webform.webform.demo_region_contact.yml b/web/modules/webform/modules/webform_demo/webform_demo_region_contact/config/install/webform.webform.demo_region_contact.yml
index 115337785b..882a2820bb 100644
--- a/web/modules/webform/modules/webform_demo/webform_demo_region_contact/config/install/webform.webform.demo_region_contact.yml
+++ b/web/modules/webform/modules/webform_demo/webform_demo_region_contact/config/install/webform.webform.demo_region_contact.yml
@@ -40,7 +40,7 @@ elements: |
     '#type': webform_actions
     '#title': 'Submit button(s)'
     '#submit__label': 'Send message'
-
+  
 css: ''
 javascript: ''
 settings:
@@ -170,6 +170,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_demo/webform_demo_region_contact/webform_demo_region_contact.info.yml b/web/modules/webform/modules/webform_demo/webform_demo_region_contact/webform_demo_region_contact.info.yml
index 6bf37872f6..97c6075912 100644
--- a/web/modules/webform/modules/webform_demo/webform_demo_region_contact/webform_demo_region_contact.info.yml
+++ b/web/modules/webform/modules/webform_demo/webform_demo_region_contact/webform_demo_region_contact.info.yml
@@ -10,7 +10,7 @@ dependencies:
   - 'webform:webform_node'
   - 'webform:webform_access'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/modules/webform_devel/webform_devel.info.yml b/web/modules/webform/modules/webform_devel/webform_devel.info.yml
index 6cb5928bd3..eb4113c5f5 100644
--- a/web/modules/webform/modules/webform_devel/webform_devel.info.yml
+++ b/web/modules/webform/modules/webform_devel/webform_devel.info.yml
@@ -7,7 +7,7 @@ dependencies:
   - 'devel:devel'
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/modules/webform_editorial/webform_editorial.info.yml b/web/modules/webform/modules/webform_editorial/webform_editorial.info.yml
index d5f6ecf95a..504a58ea95 100644
--- a/web/modules/webform/modules/webform_editorial/webform_editorial.info.yml
+++ b/web/modules/webform/modules/webform_editorial/webform_editorial.info.yml
@@ -8,7 +8,7 @@ hidden: true
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/modules/webform_entity_print/tests/modules/webform_entity_print_test/config/install/webform.webform.test_entity_print.yml b/web/modules/webform/modules/webform_entity_print/tests/modules/webform_entity_print_test/config/install/webform.webform.test_entity_print.yml
index d35752323f..b6742beaec 100644
--- a/web/modules/webform/modules/webform_entity_print/tests/modules/webform_entity_print_test/config/install/webform.webform.test_entity_print.yml
+++ b/web/modules/webform/modules/webform_entity_print/tests/modules/webform_entity_print_test/config/install/webform.webform.test_entity_print.yml
@@ -149,6 +149,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_entity_print/tests/modules/webform_entity_print_test/config/install/webform.webform.test_entity_print_custom.yml b/web/modules/webform/modules/webform_entity_print/tests/modules/webform_entity_print_test/config/install/webform.webform.test_entity_print_custom.yml
index 43114bdbee..a76f2e0776 100644
--- a/web/modules/webform/modules/webform_entity_print/tests/modules/webform_entity_print_test/config/install/webform.webform.test_entity_print_custom.yml
+++ b/web/modules/webform/modules/webform_entity_print/tests/modules/webform_entity_print_test/config/install/webform.webform.test_entity_print_custom.yml
@@ -163,6 +163,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_entity_print/tests/modules/webform_entity_print_test/webform_entity_print_test.info.yml b/web/modules/webform/modules/webform_entity_print/tests/modules/webform_entity_print_test/webform_entity_print_test.info.yml
index 2510d4c905..f1fe5a63bc 100644
--- a/web/modules/webform/modules/webform_entity_print/tests/modules/webform_entity_print_test/webform_entity_print_test.info.yml
+++ b/web/modules/webform/modules/webform_entity_print/tests/modules/webform_entity_print_test/webform_entity_print_test.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8
 dependencies:
   - 'webform:webform_entity_print'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/modules/webform_entity_print/webform_entity_print.info.yml b/web/modules/webform/modules/webform_entity_print/webform_entity_print.info.yml
index bcf201bd1c..f32f5820ea 100644
--- a/web/modules/webform/modules/webform_entity_print/webform_entity_print.info.yml
+++ b/web/modules/webform/modules/webform_entity_print/webform_entity_print.info.yml
@@ -7,7 +7,7 @@ dependencies:
   - 'webform:webform'
   - 'entity_print:entity_print'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/modules/webform_entity_print/webform_entity_print.module b/web/modules/webform/modules/webform_entity_print/webform_entity_print.module
index e3669ab094..ea2d3532df 100644
--- a/web/modules/webform/modules/webform_entity_print/webform_entity_print.module
+++ b/web/modules/webform/modules/webform_entity_print/webform_entity_print.module
@@ -180,6 +180,9 @@ function webform_entity_print_preprocess_entity_print(array &$variables) {
     return;
   }
 
+  // Add webform submission to variables.
+  $variables['webform_submission'] = $webform_submission;
+
   $webform = $webform_submission->getWebform();
 
   $css = [];
diff --git a/web/modules/webform/modules/webform_entity_print_attachment/tests/modules/webform_entity_print_attachment_test/config/install/webform.webform.test_entity_print_attachment.yml b/web/modules/webform/modules/webform_entity_print_attachment/tests/modules/webform_entity_print_attachment_test/config/install/webform.webform.test_entity_print_attachment.yml
index 696a83f6da..bb0cc4c344 100644
--- a/web/modules/webform/modules/webform_entity_print_attachment/tests/modules/webform_entity_print_attachment_test/config/install/webform.webform.test_entity_print_attachment.yml
+++ b/web/modules/webform/modules/webform_entity_print_attachment/tests/modules/webform_entity_print_attachment_test/config/install/webform.webform.test_entity_print_attachment.yml
@@ -34,7 +34,7 @@ elements: |
     '#display_on': both
     '#view_mode': twig
     '#template': '{This is a custom template}'
-
+  
 css: ''
 javascript: ''
 settings:
@@ -164,6 +164,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_entity_print_attachment/tests/modules/webform_entity_print_attachment_test/webform_entity_print_attachment_test.info.yml b/web/modules/webform/modules/webform_entity_print_attachment/tests/modules/webform_entity_print_attachment_test/webform_entity_print_attachment_test.info.yml
index 27e5126651..dc22833e3e 100644
--- a/web/modules/webform/modules/webform_entity_print_attachment/tests/modules/webform_entity_print_attachment_test/webform_entity_print_attachment_test.info.yml
+++ b/web/modules/webform/modules/webform_entity_print_attachment/tests/modules/webform_entity_print_attachment_test/webform_entity_print_attachment_test.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8
 dependencies:
   - 'webform:webform_entity_print_attachment'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/modules/webform_entity_print_attachment/webform_entity_print_attachment.info.yml b/web/modules/webform/modules/webform_entity_print_attachment/webform_entity_print_attachment.info.yml
index 258a8bca02..b66d23fbbf 100644
--- a/web/modules/webform/modules/webform_entity_print_attachment/webform_entity_print_attachment.info.yml
+++ b/web/modules/webform/modules/webform_entity_print_attachment/webform_entity_print_attachment.info.yml
@@ -7,7 +7,7 @@ dependencies:
   - 'webform:webform_attachment'
   - 'webform:webform_entity_print'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/modules/webform_example_composite/config/install/webform.webform.webform_example_composite.yml b/web/modules/webform/modules/webform_example_composite/config/install/webform.webform.webform_example_composite.yml
index 93e1b76e54..592465220a 100644
--- a/web/modules/webform/modules/webform_example_composite/config/install/webform.webform.webform_example_composite.yml
+++ b/web/modules/webform/modules/webform_example_composite/config/install/webform.webform.webform_example_composite.yml
@@ -154,6 +154,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_example_composite/webform_example_composite.info.yml b/web/modules/webform/modules/webform_example_composite/webform_example_composite.info.yml
index e45e78dbed..cba5ed4f07 100644
--- a/web/modules/webform/modules/webform_example_composite/webform_example_composite.info.yml
+++ b/web/modules/webform/modules/webform_example_composite/webform_example_composite.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/modules/webform_example_custom_form/config/install/webform.webform.webform_example_custom_form.yml b/web/modules/webform/modules/webform_example_custom_form/config/install/webform.webform.webform_example_custom_form.yml
index b163434390..03362bae9e 100644
--- a/web/modules/webform/modules/webform_example_custom_form/config/install/webform.webform.webform_example_custom_form.yml
+++ b/web/modules/webform/modules/webform_example_custom_form/config/install/webform.webform.webform_example_custom_form.yml
@@ -434,6 +434,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_example_custom_form/webform_example_custom_form.info.yml b/web/modules/webform/modules/webform_example_custom_form/webform_example_custom_form.info.yml
index db7878c2ec..d0e335257c 100644
--- a/web/modules/webform/modules/webform_example_custom_form/webform_example_custom_form.info.yml
+++ b/web/modules/webform/modules/webform_example_custom_form/webform_example_custom_form.info.yml
@@ -8,7 +8,7 @@ dependencies:
   - 'webform:webform'
   - 'webform:webform_devel'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/modules/webform_example_element/config/install/webform.webform.webform_example_element.yml b/web/modules/webform/modules/webform_example_element/config/install/webform.webform.webform_example_element.yml
index 86a38519a5..259b08b508 100644
--- a/web/modules/webform/modules/webform_example_element/config/install/webform.webform.webform_example_element.yml
+++ b/web/modules/webform/modules/webform_example_element/config/install/webform.webform.webform_example_element.yml
@@ -153,6 +153,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_example_element/webform_example_element.info.yml b/web/modules/webform/modules/webform_example_element/webform_example_element.info.yml
index a15463670e..929dac80e5 100644
--- a/web/modules/webform/modules/webform_example_element/webform_example_element.info.yml
+++ b/web/modules/webform/modules/webform_example_element/webform_example_element.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/modules/webform_example_element_properties/webform_example_element_properties.info.yml b/web/modules/webform/modules/webform_example_element_properties/webform_example_element_properties.info.yml
index ce11d56081..862503cca6 100644
--- a/web/modules/webform/modules/webform_example_element_properties/webform_example_element_properties.info.yml
+++ b/web/modules/webform/modules/webform_example_element_properties/webform_example_element_properties.info.yml
@@ -7,7 +7,7 @@ dependencies:
   - 'webform:webform'
   - 'webform:webform_ui'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/modules/webform_example_handler/config/install/webform.webform.webform_example_handler.yml b/web/modules/webform/modules/webform_example_handler/config/install/webform.webform.webform_example_handler.yml
index df34ed978a..7e941767f5 100644
--- a/web/modules/webform/modules/webform_example_handler/config/install/webform.webform.webform_example_handler.yml
+++ b/web/modules/webform/modules/webform_example_handler/config/install/webform.webform.webform_example_handler.yml
@@ -23,7 +23,7 @@ elements: |
     '#title': Value
     '#required': true
     '#description': 'Enter a value to displayed in a custom message.'
-
+  
 css: ''
 javascript: ''
 settings:
@@ -153,6 +153,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_example_handler/webform_example_handler.info.yml b/web/modules/webform/modules/webform_example_handler/webform_example_handler.info.yml
index a5c76f1bc9..365b50790f 100644
--- a/web/modules/webform/modules/webform_example_handler/webform_example_handler.info.yml
+++ b/web/modules/webform/modules/webform_example_handler/webform_example_handler.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/modules/webform_example_remote_post/config/install/webform.webform.example_remote_post.yml b/web/modules/webform/modules/webform_example_remote_post/config/install/webform.webform.example_remote_post.yml
index 8d954c2c96..766b2b5c67 100644
--- a/web/modules/webform/modules/webform_example_remote_post/config/install/webform.webform.example_remote_post.yml
+++ b/web/modules/webform/modules/webform_example_remote_post/config/install/webform.webform.example_remote_post.yml
@@ -40,7 +40,7 @@ elements: |
     '#title': 'Confirmation number'
     '#type': value
     '#value': '[webform:handler:remote_post:completed:confirmation_number]'
-
+  
 css: ''
 javascript: ''
 settings:
@@ -144,7 +144,7 @@ settings:
   confirmation_title: ''
   confirmation_message: |
     <p>Your confirmation number is [webform_submission:values:confirmation_number].</p>
-
+    
   confirmation_url: ''
   confirmation_attributes: {  }
   confirmation_back: true
@@ -172,6 +172,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
@@ -254,22 +255,22 @@ handlers:
         confirmation_number: confirmation_number
       custom_data: |
         custom_all: true
-
+        
       custom_options: ''
       cast: false
       debug: true
       completed_url: '[site:url]webform_example_remote_post/completed'
       completed_custom_data: |
         custom_completed: true
-
+        
       updated_url: '[site:url]webform_example_remote_post/updated'
       updated_custom_data: |
         custom_updated: true
-
+        
       deleted_url: '[site:url]webform_example_remote_post/deleted'
       deleted_custom_data: |
         custom_deleted: true
-
+        
       draft_created_url: ''
       draft_created_custom_data: ''
       draft_updated_url: ''
diff --git a/web/modules/webform/modules/webform_example_remote_post/webform_example_remote_post.info.yml b/web/modules/webform/modules/webform_example_remote_post/webform_example_remote_post.info.yml
index 4ef3218c4e..de8f193872 100644
--- a/web/modules/webform/modules/webform_example_remote_post/webform_example_remote_post.info.yml
+++ b/web/modules/webform/modules/webform_example_remote_post/webform_example_remote_post.info.yml
@@ -7,7 +7,7 @@ dependencies:
   - 'token:token'
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/modules/webform_example_variant/config/install/webform.webform.webform_example_variant_ab_test.yml b/web/modules/webform/modules/webform_example_variant/config/install/webform.webform.webform_example_variant_ab_test.yml
index 132a15db07..9e0f05d95e 100644
--- a/web/modules/webform/modules/webform_example_variant/config/install/webform.webform.webform_example_variant_ab_test.yml
+++ b/web/modules/webform/modules/webform_example_variant/config/install/webform.webform.webform_example_variant_ab_test.yml
@@ -176,6 +176,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
@@ -318,9 +319,6 @@ variants:
     weight: 1
     settings:
       settings: {  }
-      override_settings:
-        definitions:
-          table: ''
       elements: |
         type:
           '#title_display': 'inline'
@@ -352,9 +350,6 @@ variants:
     settings:
       settings:
         preview: 1
-      override_settings:
-        definitions:
-          table: ''
       elements: ''
       handlers:
         email_confirmation:
diff --git a/web/modules/webform/modules/webform_example_variant/config/install/webform.webform.webform_example_variant_segments.yml b/web/modules/webform/modules/webform_example_variant/config/install/webform.webform.webform_example_variant_segments.yml
index 6417b6ffb7..b7bd8c3ad3 100644
--- a/web/modules/webform/modules/webform_example_variant/config/install/webform.webform.webform_example_variant_segments.yml
+++ b/web/modules/webform/modules/webform_example_variant/config/install/webform.webform.webform_example_variant_segments.yml
@@ -164,6 +164,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_example_variant/webform_example_variant.info.yml b/web/modules/webform/modules/webform_example_variant/webform_example_variant.info.yml
index 665b1cff9c..353a122429 100644
--- a/web/modules/webform/modules/webform_example_variant/webform_example_variant.info.yml
+++ b/web/modules/webform/modules/webform_example_variant/webform_example_variant.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_computed_elements.yml b/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_computed_elements.yml
index 5783576c73..74922b94a6 100644
--- a/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_computed_elements.yml
+++ b/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_computed_elements.yml
@@ -177,6 +177,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_computed_elements_ajax.yml b/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_computed_elements_ajax.yml
index 45a012b6e1..9b8d2cb527 100644
--- a/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_computed_elements_ajax.yml
+++ b/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_computed_elements_ajax.yml
@@ -137,9 +137,7 @@ elements: |
       '#title': BMI
       '#ajax': true
       '#template': '{% if data.weight|length and data.height|length %}{{ (data.weight / (data.height * data.height) * 703)|number_format(2) }}{% endif %}'
-
-
-
+  
 css: |
   .calculation {
     font-size: 2em;
@@ -148,7 +146,7 @@ css: |
     width: 4em;
     text-align: right;
   }
-
+  
 javascript: ''
 settings:
   ajax: false
@@ -277,6 +275,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_element_states.yml b/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_element_states.yml
index f1530c808c..ac5b1910d9 100644
--- a/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_element_states.yml
+++ b/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_element_states.yml
@@ -322,6 +322,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_flexbox_layout.yml b/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_flexbox_layout.yml
index cdc3f92f57..e597d26d5b 100644
--- a/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_flexbox_layout.yml
+++ b/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_flexbox_layout.yml
@@ -248,6 +248,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_input_masks.yml b/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_input_masks.yml
index 05a7dcf727..d72a9ebe04 100644
--- a/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_input_masks.yml
+++ b/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_input_masks.yml
@@ -216,6 +216,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_style_guide.yml b/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_style_guide.yml
index bf3f1c5f3d..3ee4e243e8 100644
--- a/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_style_guide.yml
+++ b/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_style_guide.yml
@@ -647,7 +647,7 @@ elements: |
       '#type': address
       '#title': Address
       '#description': '@see <a href="https://www.drupal.org/project/address">https://www.drupal.org/project/address</a>'
-
+  
 css: ''
 javascript: ''
 settings:
@@ -777,6 +777,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_wizard.yml b/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_wizard.yml
index 97408bcef3..4e3ae6b511 100644
--- a/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_wizard.yml
+++ b/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_wizard.yml
@@ -187,6 +187,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_examples/config/optional/webform.webform.example_cards.yml b/web/modules/webform/modules/webform_examples/config/optional/webform.webform.example_cards.yml
index 07bb31ef0c..b1552e6bf8 100644
--- a/web/modules/webform/modules/webform_examples/config/optional/webform.webform.example_cards.yml
+++ b/web/modules/webform/modules/webform_examples/config/optional/webform.webform.example_cards.yml
@@ -213,6 +213,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_examples/webform_examples.info.yml b/web/modules/webform/modules/webform_examples/webform_examples.info.yml
index eaf2293a50..6403fdd195 100644
--- a/web/modules/webform/modules/webform_examples/webform_examples.info.yml
+++ b/web/modules/webform/modules/webform_examples/webform_examples.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_advanced.yml b/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_advanced.yml
index 9ea1f90140..60266343de 100644
--- a/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_advanced.yml
+++ b/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_advanced.yml
@@ -340,6 +340,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_basic.yml b/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_basic.yml
index a0391df6b3..d9627d604a 100644
--- a/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_basic.yml
+++ b/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_basic.yml
@@ -256,6 +256,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_containers.yml b/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_containers.yml
index bb198a271b..ad10bf30f8 100644
--- a/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_containers.yml
+++ b/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_containers.yml
@@ -181,6 +181,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_labels.yml b/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_labels.yml
index d79a556f14..26a52ae345 100644
--- a/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_labels.yml
+++ b/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_labels.yml
@@ -311,6 +311,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_wizard.yml b/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_wizard.yml
index f5a94e7b1f..2f4491aff4 100644
--- a/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_wizard.yml
+++ b/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_wizard.yml
@@ -186,6 +186,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_examples_accessibility/webform_examples_accessibility.info.yml b/web/modules/webform/modules/webform_examples_accessibility/webform_examples_accessibility.info.yml
index 1591c2f6ca..d6c62d0c1f 100644
--- a/web/modules/webform/modules/webform_examples_accessibility/webform_examples_accessibility.info.yml
+++ b/web/modules/webform/modules/webform_examples_accessibility/webform_examples_accessibility.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8
 dependencies:
   - 'drupal:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/modules/webform_group/tests/modules/webform_group_test/config/install/webform.webform.test_element_group_roles.yml b/web/modules/webform/modules/webform_group/tests/modules/webform_group_test/config/install/webform.webform.test_element_group_roles.yml
index 3601733a37..1393c87b9a 100644
--- a/web/modules/webform/modules/webform_group/tests/modules/webform_group_test/config/install/webform.webform.test_element_group_roles.yml
+++ b/web/modules/webform/modules/webform_group/tests/modules/webform_group_test/config/install/webform.webform.test_element_group_roles.yml
@@ -26,7 +26,7 @@ elements: |
     '#include_internal': false
     '#include_user_roles': true
     '#include_anonymous': true
-
+  
 css: ''
 javascript: ''
 settings:
@@ -156,6 +156,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_group/tests/modules/webform_group_test/config/install/webform.webform.test_group_element_access.yml b/web/modules/webform/modules/webform_group/tests/modules/webform_group_test/config/install/webform.webform.test_group_element_access.yml
index c6318fc222..59bf0fc7ec 100644
--- a/web/modules/webform/modules/webform_group/tests/modules/webform_group_test/config/install/webform.webform.test_group_element_access.yml
+++ b/web/modules/webform/modules/webform_group/tests/modules/webform_group_test/config/install/webform.webform.test_group_element_access.yml
@@ -44,7 +44,7 @@ elements: |
     '#access_create_roles': {  }
     '#access_create_group_roles':
       - custom
-
+  
 css: ''
 javascript: ''
 settings:
@@ -174,6 +174,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_group/tests/modules/webform_group_test/webform_group_test.info.yml b/web/modules/webform/modules/webform_group/tests/modules/webform_group_test/webform_group_test.info.yml
index 2911278cc2..5320bf7f18 100644
--- a/web/modules/webform/modules/webform_group/tests/modules/webform_group_test/webform_group_test.info.yml
+++ b/web/modules/webform/modules/webform_group/tests/modules/webform_group_test/webform_group_test.info.yml
@@ -7,7 +7,7 @@ dependencies:
   - 'webform:webform_group'
   - 'group:group_test_config'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/modules/webform_group/webform_group.info.yml b/web/modules/webform/modules/webform_group/webform_group.info.yml
index 5f71b3a363..2fbf03ba0e 100644
--- a/web/modules/webform/modules/webform_group/webform_group.info.yml
+++ b/web/modules/webform/modules/webform_group/webform_group.info.yml
@@ -1,8 +1,7 @@
-name: 'Webform Group [EXPERIMENTAL]'
+name: 'Webform Group'
 type: module
 description: 'Provides Webform and Group integration.'
-experimental: true
-package: 'Webform [EXPERIMENTAL]'
+package: 'Webform'
 core_version_requirement: ^8.8
 dependencies:
   - 'webform:webform'
@@ -10,7 +9,7 @@ dependencies:
   - 'group:group'
   - 'group:gnode'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/modules/webform_icheck/js/webform_icheck.element.js b/web/modules/webform/modules/webform_icheck/js/webform_icheck.element.js
index 4ba85fade5..66a5c0563f 100644
--- a/web/modules/webform/modules/webform_icheck/js/webform_icheck.element.js
+++ b/web/modules/webform/modules/webform_icheck/js/webform_icheck.element.js
@@ -47,10 +47,10 @@
           .iCheck(options)
           // @see https://github.com/fronteed/iCheck/issues/244
           .on('ifChecked', function (e) {
-            $(e.target).attr('checked', 'checked').change();
+            $(e.target).attr('checked', 'checked').trigger('change');
           })
           .on('ifUnchecked', function (e) {
-            $(e.target).removeAttr('checked').change();
+            $(e.target).removeAttr('checked').trigger('change');
           });
       });
     }
diff --git a/web/modules/webform/modules/webform_icheck/tests/modules/webform_icheck_test/config/install/webform.webform.test_element_icheck.yml b/web/modules/webform/modules/webform_icheck/tests/modules/webform_icheck_test/config/install/webform.webform.test_element_icheck.yml
index ec9f3643c3..e0b4e427cd 100644
--- a/web/modules/webform/modules/webform_icheck/tests/modules/webform_icheck_test/config/install/webform.webform.test_element_icheck.yml
+++ b/web/modules/webform/modules/webform_icheck/tests/modules/webform_icheck_test/config/install/webform.webform.test_element_icheck.yml
@@ -228,6 +228,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_icheck/tests/modules/webform_icheck_test/config/install/webform.webform.test_element_icheck_styles.yml b/web/modules/webform/modules/webform_icheck/tests/modules/webform_icheck_test/config/install/webform.webform.test_element_icheck_styles.yml
index 943b5b68ee..faf6f3c04e 100644
--- a/web/modules/webform/modules/webform_icheck/tests/modules/webform_icheck_test/config/install/webform.webform.test_element_icheck_styles.yml
+++ b/web/modules/webform/modules/webform_icheck/tests/modules/webform_icheck_test/config/install/webform.webform.test_element_icheck_styles.yml
@@ -962,6 +962,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_icheck/tests/modules/webform_icheck_test/webform_icheck_test.info.yml b/web/modules/webform/modules/webform_icheck/tests/modules/webform_icheck_test/webform_icheck_test.info.yml
index b0bb977082..29e32560a6 100644
--- a/web/modules/webform/modules/webform_icheck/tests/modules/webform_icheck_test/webform_icheck_test.info.yml
+++ b/web/modules/webform/modules/webform_icheck/tests/modules/webform_icheck_test/webform_icheck_test.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8
 dependencies:
   - 'webform:webform_icheck'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/modules/webform_icheck/webform_icheck.info.yml b/web/modules/webform/modules/webform_icheck/webform_icheck.info.yml
index 37b1dc0a24..f9db8d77af 100644
--- a/web/modules/webform/modules/webform_icheck/webform_icheck.info.yml
+++ b/web/modules/webform/modules/webform_icheck/webform_icheck.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/modules/webform_icheck/webform_icheck.module b/web/modules/webform/modules/webform_icheck/webform_icheck.module
index ee626e78de..0b1a8732e6 100644
--- a/web/modules/webform/modules/webform_icheck/webform_icheck.module
+++ b/web/modules/webform/modules/webform_icheck/webform_icheck.module
@@ -22,7 +22,7 @@ function webform_icheck_webform_libraries_info() {
     'download_url' => Url::fromUri('https://github.com/fronteed/icheck/archive/1.0.2.zip'),
     'version' => '1.0.2 ',
     'optional' => FALSE,
-    'deprecated' => t('The iCheck library is not being maintained. It has been <a href=":href">deprecated</a> and will be removed before Webform 8.x-6.0.', [':href' => 'https://www.drupal.org/project/webform/issues/2931154']),
+    'deprecated' => t('The iCheck library is not being maintained. It has been <a href=":href">deprecated</a> and will be removed in Webform 7.0.', [':href' => 'https://www.drupal.org/project/webform/issues/2931154']),
   ];
   return $libraries;
 }
diff --git a/web/modules/webform/modules/webform_image_select/js/webform_image_select.element.js b/web/modules/webform/modules/webform_image_select/js/webform_image_select.element.js
index 74d3e07591..7c95cd8812 100644
--- a/web/modules/webform/modules/webform_image_select/js/webform_image_select.element.js
+++ b/web/modules/webform/modules/webform_image_select/js/webform_image_select.element.js
@@ -89,7 +89,7 @@
           .on('keydown', function (event) {
             if (event.which === 32) {
               // Space.
-              $(this).click();
+              $(this).trigger('click');
               event.preventDefault();
             }
             else if (event.which === 37 || event.which === 38) {
@@ -99,7 +99,7 @@
                 $prev = $prev.prev();
               }
               while ($prev.length && $prev.is(':hidden'));
-              $prev.find('.thumbnail').focus();
+              $prev.find('.thumbnail').trigger('focus');
               event.preventDefault();
             }
             else if (event.which === 39 || event.which === 40) {
@@ -109,7 +109,7 @@
                 $next = $next.next();
               }
               while ($next.length && $next.is(':hidden'));
-              $next.find('.thumbnail').focus();
+              $next.find('.thumbnail').trigger('focus');
               event.preventDefault();
             }
           })
diff --git a/web/modules/webform/modules/webform_image_select/src/Plugin/WebformElement/WebformImageSelect.php b/web/modules/webform/modules/webform_image_select/src/Plugin/WebformElement/WebformImageSelect.php
index d221017604..b3b65b19fc 100644
--- a/web/modules/webform/modules/webform_image_select/src/Plugin/WebformElement/WebformImageSelect.php
+++ b/web/modules/webform/modules/webform_image_select/src/Plugin/WebformElement/WebformImageSelect.php
@@ -200,17 +200,17 @@ public function preview() {
     return parent::preview() + [
       '#show_label' => TRUE,
       '#images' => [
-        'bear_1' => [
-          'text' => 'Bear 1',
-          'src' => 'https://www.placebear.com/80/100',
+        'dog_1' => [
+          'text' => 'Dog 1',
+          'src' => 'https://www.placedog.net/80/100',
         ],
-        'bear_2' => [
-          'text' => 'Bear 2',
-          'src' => 'https://www.placebear.com/100/100',
+        'dog_2' => [
+          'text' => 'Dog 2',
+          'src' => 'https://www.placedog.net/100/100',
         ],
-        'bear_3' => [
-          'text' => 'Bear 3',
-          'src' => 'https://www.placebear.com/120/100',
+        'dog_3' => [
+          'text' => 'Dog 3',
+          'src' => 'https://www.placedog.net/120/100',
         ],
       ],
     ];
diff --git a/web/modules/webform/modules/webform_image_select/tests/modules/webform_image_select_test/config/install/webform.webform.test_element_image_select.yml b/web/modules/webform/modules/webform_image_select/tests/modules/webform_image_select_test/config/install/webform.webform.test_element_image_select.yml
index 9a6bb34f73..c868aad496 100644
--- a/web/modules/webform/modules/webform_image_select/tests/modules/webform_image_select_test/config/install/webform.webform.test_element_image_select.yml
+++ b/web/modules/webform/modules/webform_image_select/tests/modules/webform_image_select_test/config/install/webform.webform.test_element_image_select.yml
@@ -294,6 +294,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_image_select/tests/modules/webform_image_select_test/config/install/webform.webform.test_element_images.yml b/web/modules/webform/modules/webform_image_select/tests/modules/webform_image_select_test/config/install/webform.webform.test_element_images.yml
index a8856758d1..7029ef474c 100644
--- a/web/modules/webform/modules/webform_image_select/tests/modules/webform_image_select_test/config/install/webform.webform.test_element_images.yml
+++ b/web/modules/webform/modules/webform_image_select/tests/modules/webform_image_select_test/config/install/webform.webform.test_element_images.yml
@@ -65,7 +65,7 @@ elements: |
         kitten_4:
           text: 'Cute Kitten 4'
           src: 'http://placekitten.com/270/200'
-
+  
 css: ''
 javascript: ''
 settings:
@@ -195,6 +195,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_image_select/tests/modules/webform_image_select_test/config/install/webform_image_select.webform_image_select_images.bears.yml b/web/modules/webform/modules/webform_image_select/tests/modules/webform_image_select_test/config/install/webform_image_select.webform_image_select_images.bears.yml
index 5dec405ed6..81fbdbb3e6 100644
--- a/web/modules/webform/modules/webform_image_select/tests/modules/webform_image_select_test/config/install/webform_image_select.webform_image_select_images.bears.yml
+++ b/web/modules/webform/modules/webform_image_select/tests/modules/webform_image_select_test/config/install/webform_image_select.webform_image_select_images.bears.yml
@@ -5,18 +5,18 @@ dependencies:
     module:
       - webform_image_select_test
 id: bears
-label: 'Cute Bears'
+label: 'Cute Dogs'
 category: Animals
 images: |
-  bear_1:
-    text: 'Cute Bear 1'
-    src: 'http://placebear.com/220/200'
-  bear_2:
-    text: 'Cute Bear 2'
-    src: 'http://placebear.com/180/200'
-  bear_3:
-    text: 'Cute Bear 3'
-    src: 'http://placebear.com/130/200'
-  bear_4:
-    text: 'Cute Bear 4'
-    src: 'http://placebear.com/270/200'
+  dog_1:
+    text: 'Cute Dog 1'
+    src: 'http://placedog.net/220/200'
+  dog_2:
+    text: 'Cute Dog 2'
+    src: 'http://placedog.net/180/200'
+  dog_3:
+    text: 'Cute Dog 3'
+    src: 'http://placedog.net/130/200'
+  dog_4:
+    text: 'Cute Dog 4'
+    src: 'http://placedog.net/270/200'
diff --git a/web/modules/webform/modules/webform_image_select/tests/modules/webform_image_select_test/webform_image_select_test.info.yml b/web/modules/webform/modules/webform_image_select/tests/modules/webform_image_select_test/webform_image_select_test.info.yml
index 9c8c2cf09f..741861c234 100644
--- a/web/modules/webform/modules/webform_image_select/tests/modules/webform_image_select_test/webform_image_select_test.info.yml
+++ b/web/modules/webform/modules/webform_image_select/tests/modules/webform_image_select_test/webform_image_select_test.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8
 dependencies:
   - 'webform:webform_image_select'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/modules/webform_image_select/tests/src/Functional/WebformImageSelectElementTest.php b/web/modules/webform/modules/webform_image_select/tests/src/Functional/WebformImageSelectElementTest.php
index 00970e1fec..f6a58f071c 100644
--- a/web/modules/webform/modules/webform_image_select/tests/src/Functional/WebformImageSelectElementTest.php
+++ b/web/modules/webform/modules/webform_image_select/tests/src/Functional/WebformImageSelectElementTest.php
@@ -46,8 +46,13 @@ public function testImageSelect() {
       'image_select_default' => 'kitten_1',
     ];
     $this->postSubmission($webform, $edit, 'Preview');
-    $this->assertRaw('<figure style="display: inline-block; margin: 0 6px 6px 0; padding: 6px; border: 1px solid #ddd;width: 220px"><img src="http://placekitten.com/220/200" width="220" height="200" alt="Cute Kitten 1" title="Cute Kitten 1" />');
-
+    // @todo Remove once Drupal 9.1.x is only supported.
+    if (floatval(\Drupal::VERSION) >= 9.1) {
+      $this->assertRaw('<figure style="display: inline-block; margin: 0 6px 6px 0; padding: 6px; border: 1px solid #ddd;width: 220px"><img src="http://placekitten.com/220/200" width="220" height="200" alt="Cute Kitten 1" title="Cute Kitten 1" loading="lazy" />');
+    }
+    else {
+      $this->assertRaw('<figure style="display: inline-block; margin: 0 6px 6px 0; padding: 6px; border: 1px solid #ddd;width: 220px"><img src="http://placekitten.com/220/200" width="220" height="200" alt="Cute Kitten 1" title="Cute Kitten 1" />');
+    }
   }
 
 }
diff --git a/web/modules/webform/modules/webform_image_select/tests/src/Functional/WebformImageSelectImagesTest.php b/web/modules/webform/modules/webform_image_select/tests/src/Functional/WebformImageSelectImagesTest.php
index 67e743d2d5..467f456a75 100644
--- a/web/modules/webform/modules/webform_image_select/tests/src/Functional/WebformImageSelectImagesTest.php
+++ b/web/modules/webform/modules/webform_image_select/tests/src/Functional/WebformImageSelectImagesTest.php
@@ -57,16 +57,16 @@ public function testWebformImageSelectImages() {
 
     $dogs = Yaml::decode("dog_1:
   text: 'Cute Dog 1'
-  src: 'http://placedog.com/220/200'
+  src: 'http://placedog.net/220/200'
 dog_2:
   text: 'Cute Dog 2'
-  src: 'http://placedog.com/180/200'
+  src: 'http://placedog.net/180/200'
 dog_3:
   text: 'Cute Dog 3'
-  src: 'http://placedog.com/130/200'
+  src: 'http://placedog.net/130/200'
 dog_4:
   text: 'Cute Dog 4'
-  src: 'http://placedog.com/270/200'");
+  src: 'http://placedog.net/270/200'");
 
     // Check get element images for manually defined images.
     $element = ['#images' => $dogs];
@@ -115,7 +115,7 @@ public function testWebformImageSelectImages() {
     $element = ['#images' => 'animals'];
     $images = WebformImageSelectImages::getElementImages($element);
     $this->debug($images);
-    $this->assertEqual(array_keys($images), ['kitten_1', 'kitten_2', 'kitten_3', 'kitten_4', 'bear_1', 'bear_2', 'bear_3', 'bear_4']);
+    $this->assertEqual(array_keys($images), ['kitten_1', 'kitten_2', 'kitten_3', 'kitten_4', 'dog_1', 'dog_2', 'dog_3', 'dog_4']);
   }
 
 }
diff --git a/web/modules/webform/modules/webform_image_select/webform_image_select.info.yml b/web/modules/webform/modules/webform_image_select/webform_image_select.info.yml
index 1c45af2567..0dbad34088 100644
--- a/web/modules/webform/modules/webform_image_select/webform_image_select.info.yml
+++ b/web/modules/webform/modules/webform_image_select/webform_image_select.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/modules/webform_jqueryui_buttons/tests/modules/webform_jqueryui_buttons_test/config/install/webform.webform.test_element_buttons.yml b/web/modules/webform/modules/webform_jqueryui_buttons/tests/modules/webform_jqueryui_buttons_test/config/install/webform.webform.test_element_buttons.yml
index bc4c85bfda..fbc57770b5 100644
--- a/web/modules/webform/modules/webform_jqueryui_buttons/tests/modules/webform_jqueryui_buttons_test/config/install/webform.webform.test_element_buttons.yml
+++ b/web/modules/webform/modules/webform_jqueryui_buttons/tests/modules/webform_jqueryui_buttons_test/config/install/webform.webform.test_element_buttons.yml
@@ -48,7 +48,7 @@ elements: |
     '#other__option_label': Other
     '#other__placeholder': 'What is this other option'
     '#other__description': 'Other button description'
-
+  
 css: ''
 javascript: ''
 settings:
@@ -178,6 +178,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_jqueryui_buttons/tests/modules/webform_jqueryui_buttons_test/webform_jqueryui_buttons_test.info.yml b/web/modules/webform/modules/webform_jqueryui_buttons/tests/modules/webform_jqueryui_buttons_test/webform_jqueryui_buttons_test.info.yml
index 465d45477b..1353391b7b 100644
--- a/web/modules/webform/modules/webform_jqueryui_buttons/tests/modules/webform_jqueryui_buttons_test/webform_jqueryui_buttons_test.info.yml
+++ b/web/modules/webform/modules/webform_jqueryui_buttons/tests/modules/webform_jqueryui_buttons_test/webform_jqueryui_buttons_test.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8
 dependencies:
   - 'webform:webform_jqueryui_buttons'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/modules/webform_jqueryui_buttons/webform_jqueryui_buttons.info.yml b/web/modules/webform/modules/webform_jqueryui_buttons/webform_jqueryui_buttons.info.yml
index 54867ee755..7dbe5cbf94 100644
--- a/web/modules/webform/modules/webform_jqueryui_buttons/webform_jqueryui_buttons.info.yml
+++ b/web/modules/webform/modules/webform_jqueryui_buttons/webform_jqueryui_buttons.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/modules/webform_location_geocomplete/tests/modules/webform_location_geocomplete_test/config/install/webform.webform.test_element_loc_geocomplete.yml b/web/modules/webform/modules/webform_location_geocomplete/tests/modules/webform_location_geocomplete_test/config/install/webform.webform.test_element_loc_geocomplete.yml
index ea65cbda9f..55848bf13a 100644
--- a/web/modules/webform/modules/webform_location_geocomplete/tests/modules/webform_location_geocomplete_test/config/install/webform.webform.test_element_loc_geocomplete.yml
+++ b/web/modules/webform/modules/webform_location_geocomplete/tests/modules/webform_location_geocomplete_test/config/install/webform.webform.test_element_loc_geocomplete.yml
@@ -95,7 +95,7 @@ elements: |
     '#title': 'Location with geolocation and hidden'
     '#geolocation': true
     '#hidden': true
-
+  
 css: ''
 javascript: ''
 settings:
@@ -225,6 +225,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_location_geocomplete/tests/modules/webform_location_geocomplete_test/webform_location_geocomplete_test.info.yml b/web/modules/webform/modules/webform_location_geocomplete/tests/modules/webform_location_geocomplete_test/webform_location_geocomplete_test.info.yml
index 42da050f22..dc0d4c92f1 100644
--- a/web/modules/webform/modules/webform_location_geocomplete/tests/modules/webform_location_geocomplete_test/webform_location_geocomplete_test.info.yml
+++ b/web/modules/webform/modules/webform_location_geocomplete/tests/modules/webform_location_geocomplete_test/webform_location_geocomplete_test.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8
 dependencies:
   - 'webform:webform_location_geocomplete'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/modules/webform_location_geocomplete/webform_location_geocomplete.info.yml b/web/modules/webform/modules/webform_location_geocomplete/webform_location_geocomplete.info.yml
index 4a079015ac..6cbd4e88cd 100644
--- a/web/modules/webform/modules/webform_location_geocomplete/webform_location_geocomplete.info.yml
+++ b/web/modules/webform/modules/webform_location_geocomplete/webform_location_geocomplete.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/modules/webform_location_geocomplete/webform_location_geocomplete.module b/web/modules/webform/modules/webform_location_geocomplete/webform_location_geocomplete.module
index bba95bd2e7..cf4422bc45 100644
--- a/web/modules/webform/modules/webform_location_geocomplete/webform_location_geocomplete.module
+++ b/web/modules/webform/modules/webform_location_geocomplete/webform_location_geocomplete.module
@@ -23,7 +23,7 @@ function webform_location_geocomplete_webform_libraries_info() {
     'version' => '1.7.0',
     'elements' => ['webform_location_geocomplete'],
     'optional' => FALSE,
-    'deprecated' => t('The jQuery: Geocoding and Places Autocomplete Plugin library is not being maintained. It has been <a href=":href">deprecated</a> and will be removed before Webform 8.x-6.0.', [':href' => 'https://www.drupal.org/node/2991275']),
+    'deprecated' => t('The jQuery: Geocoding and Places Autocomplete Plugin library is not being maintained. It has been <a href=":href">deprecated</a> and will be removed in Webform 7.0.', [':href' => 'https://www.drupal.org/node/2991275']),
   ];
   return $libraries;
 }
diff --git a/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_multiple/config/install/webform.webform.webform_node_test_multiple_a.yml b/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_multiple/config/install/webform.webform.webform_node_test_multiple_a.yml
index fef29e7032..74133f1838 100644
--- a/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_multiple/config/install/webform.webform.webform_node_test_multiple_a.yml
+++ b/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_multiple/config/install/webform.webform.webform_node_test_multiple_a.yml
@@ -149,6 +149,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_multiple/config/install/webform.webform.webform_node_test_multiple_b.yml b/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_multiple/config/install/webform.webform.webform_node_test_multiple_b.yml
index 45b280f87a..7689862d76 100644
--- a/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_multiple/config/install/webform.webform.webform_node_test_multiple_b.yml
+++ b/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_multiple/config/install/webform.webform.webform_node_test_multiple_b.yml
@@ -149,6 +149,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_multiple/webform_node_test_multiple.info.yml b/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_multiple/webform_node_test_multiple.info.yml
index 508df80d5b..8e8b205ee0 100644
--- a/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_multiple/webform_node_test_multiple.info.yml
+++ b/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_multiple/webform_node_test_multiple.info.yml
@@ -13,7 +13,7 @@ dependencies:
   - 'webform:webform'
   - 'webform:webform_node'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_translation/config/install/webform.webform.webform_node_test_translation.yml b/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_translation/config/install/webform.webform.webform_node_test_translation.yml
index bbd0bb9fab..82ed2666f9 100644
--- a/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_translation/config/install/webform.webform.webform_node_test_translation.yml
+++ b/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_translation/config/install/webform.webform.webform_node_test_translation.yml
@@ -150,6 +150,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_translation/webform_node_test_translation.info.yml b/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_translation/webform_node_test_translation.info.yml
index 879bcdf0a1..649770a4a1 100644
--- a/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_translation/webform_node_test_translation.info.yml
+++ b/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_translation/webform_node_test_translation.info.yml
@@ -9,7 +9,7 @@ dependencies:
   - 'webform:webform_test_translation'
   - 'drupal:content_translation'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/modules/webform_node/tests/src/Functional/WebformNodeTest.php b/web/modules/webform/modules/webform_node/tests/src/Functional/WebformNodeTest.php
index ff87dbd261..27e51de81f 100644
--- a/web/modules/webform/modules/webform_node/tests/src/Functional/WebformNodeTest.php
+++ b/web/modules/webform/modules/webform_node/tests/src/Functional/WebformNodeTest.php
@@ -83,13 +83,13 @@ public function testNode() {
     $webform->setStatus(WebformInterface::STATUS_CLOSED);
     $webform->save();
 
-    // Check page closed message
+    // Check page closed message.
     $this->drupalGet('/node/' . $node->id());
     $this->assertRaw('Sorry… This form is closed to new submissions.');
 
     $this->drupalLogin($this->rootUser);
 
-    // Check webform closed warning
+    // Check webform closed warning.
     $this->drupalGet('/node/' . $node->id() . '/edit');
     $this->assertRaw('The <em class="placeholder">Contact</em> webform is <a href="' . $base_path . 'admin/structure/webform/manage/contact/settings/form">closed</a>. The below status will be ignored.');
 
diff --git a/web/modules/webform/modules/webform_node/webform_node.info.yml b/web/modules/webform/modules/webform_node/webform_node.info.yml
index 52fb750e6f..f458dc4885 100644
--- a/web/modules/webform/modules/webform_node/webform_node.info.yml
+++ b/web/modules/webform/modules/webform_node/webform_node.info.yml
@@ -11,7 +11,7 @@ dependencies:
   - 'drupal:user'
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/modules/webform_options_custom/config/install/webform.webform.example_options_custom.yml b/web/modules/webform/modules/webform_options_custom/config/install/webform.webform.example_options_custom.yml
index fd3d02defd..21b588f510 100644
--- a/web/modules/webform/modules/webform_options_custom/config/install/webform.webform.example_options_custom.yml
+++ b/web/modules/webform/modules/webform_options_custom/config/install/webform.webform.example_options_custom.yml
@@ -158,6 +158,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_options_custom/js/webform_options_custom.element.js b/web/modules/webform/modules/webform_options_custom/js/webform_options_custom.element.js
index abf55478c7..27aaa546c6 100644
--- a/web/modules/webform/modules/webform_options_custom/js/webform_options_custom.element.js
+++ b/web/modules/webform/modules/webform_options_custom/js/webform_options_custom.element.js
@@ -136,12 +136,12 @@
               });
               if (event.which === 37 || event.which === 38) {
                 if ($prev) {
-                  $prev.focus();
+                  $prev.trigger('focus');
                 }
               }
               else if (event.which === 39 || event.which === 40) {
                 if ($next) {
-                  $next.focus();
+                  $next.trigger('focus');
                 }
               }
               event.preventDefault();
@@ -253,10 +253,10 @@
               .find('[data-option-value="' + value + '"]')
               .not('text')
               .first()
-              .focus();
+              .trigger('focus');
           }
 
-          $select.change();
+          $select.trigger('change');
         }
 
         /* ****************************************************************** */
@@ -378,8 +378,8 @@
           var options = $.extend({
           }, Drupal.webformOptionsCustom.panAndZoom.options);
           var panZoom = window.svgPanZoom($svg[0], options);
-          $(window).resize(function () {
-            panZoom.resize();
+          $(window).on('resize', function () {
+            panZoom.trigger('resize');
             panZoom.fit();
             panZoom.center();
           });
diff --git a/web/modules/webform/modules/webform_options_custom/src/Element/WebformOptionsCustom.php b/web/modules/webform/modules/webform_options_custom/src/Element/WebformOptionsCustom.php
index 8701c5b2e2..c6a7afaeb8 100644
--- a/web/modules/webform/modules/webform_options_custom/src/Element/WebformOptionsCustom.php
+++ b/web/modules/webform/modules/webform_options_custom/src/Element/WebformOptionsCustom.php
@@ -111,8 +111,8 @@ public static function processWebformOptionsCustom(&$element, FormStateInterface
     // @see webform_options_custom.element.js#initializeTemplateTooltip
     $descriptions = [];
     foreach ($element['#options'] as $option_value => $option_text) {
-      if (strpos($option_text, WebformOptionsHelper::DESCRIPTION_DELIMITER) !== FALSE) {
-        list($option_text, $option_description) = explode(WebformOptionsHelper::DESCRIPTION_DELIMITER, $option_text);
+      if (WebformOptionsHelper::hasOptionDescription($option_text)) {
+        list($option_text, $option_description) = WebformOptionsHelper::splitOption($option_text);
         $element['#options'][$option_value] = $option_text;
         $descriptions[$option_value] = Xss::filterAdmin($option_description);
       }
@@ -297,8 +297,8 @@ public static function setTemplateOptions(array &$element) {
     $options_by_text = [];
     foreach ($options as $option_value => $option_text) {
       $option_description = '';
-      if (strpos($option_text, WebformOptionsHelper::DESCRIPTION_DELIMITER) !== FALSE) {
-        list($option_text, $option_description) = explode(WebformOptionsHelper::DESCRIPTION_DELIMITER, $option_text);
+      if (WebformOptionsHelper::hasOptionDescription($option_text)) {
+        list($option_text, $option_description) = WebformOptionsHelper::splitOption($option_text);
       }
       $options_by_text[$option_text] = ['value' => $option_value, 'text' => $option_text, 'description' => $option_description];
     }
diff --git a/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_entity_test/config/install/webform.webform.test_element_options_custom_ent.yml b/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_entity_test/config/install/webform.webform.test_element_options_custom_ent.yml
index e70373c663..8d598e599e 100644
--- a/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_entity_test/config/install/webform.webform.test_element_options_custom_ent.yml
+++ b/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_entity_test/config/install/webform.webform.test_element_options_custom_ent.yml
@@ -28,7 +28,7 @@ elements: |
     '#selection_settings':
       target_bundles:
         page: page
-
+  
 css: ''
 javascript: ''
 settings:
@@ -158,6 +158,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_entity_test/webform_options_custom_entity_test.info.yml b/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_entity_test/webform_options_custom_entity_test.info.yml
index 41c2b6adb0..0498e75101 100644
--- a/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_entity_test/webform_options_custom_entity_test.info.yml
+++ b/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_entity_test/webform_options_custom_entity_test.info.yml
@@ -8,7 +8,7 @@ dependencies:
   - 'webform:webform_options_limit'
   - 'webform:webform_options_custom'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/config/install/webform.webform.test_element_options_custom_html.yml b/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/config/install/webform.webform.test_element_options_custom_html.yml
index 7aba9c35ab..582f2e86d9 100644
--- a/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/config/install/webform.webform.test_element_options_custom_html.yml
+++ b/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/config/install/webform.webform.test_element_options_custom_html.yml
@@ -49,7 +49,7 @@ elements: |
     '#select2': true
     '#options':
       c: 'C -- This is the letter C. [element#options]'
-
+  
 css: ''
 javascript: ''
 settings:
@@ -179,6 +179,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/config/install/webform.webform.test_element_options_custom_imap.yml b/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/config/install/webform.webform.test_element_options_custom_imap.yml
index 02815fda27..8eae2abfa2 100644
--- a/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/config/install/webform.webform.test_element_options_custom_imap.yml
+++ b/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/config/install/webform.webform.test_element_options_custom_imap.yml
@@ -19,7 +19,7 @@ elements: |
   webform_options_custom_image_map:
     '#type': 'webform_options_custom:test_image_map'
     '#title': webform_options_custom_image_map
-
+  
 css: ''
 javascript: ''
 settings:
@@ -149,6 +149,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/config/install/webform.webform.test_element_options_custom_svg.yml b/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/config/install/webform.webform.test_element_options_custom_svg.yml
index 2e9bb08e08..0b25c91b2a 100644
--- a/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/config/install/webform.webform.test_element_options_custom_svg.yml
+++ b/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/config/install/webform.webform.test_element_options_custom_svg.yml
@@ -25,7 +25,7 @@ elements: |
     '#type': 'webform_options_custom:test_ballroom'
     '#title': webform_options_custom_url_ballroom
     '#required': true
-
+  
 css: ''
 javascript: ''
 settings:
@@ -155,6 +155,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/config/install/webform.webform.test_element_options_custom_twig.yml b/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/config/install/webform.webform.test_element_options_custom_twig.yml
index 6bb58fca44..339797e266 100644
--- a/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/config/install/webform.webform.test_element_options_custom_twig.yml
+++ b/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/config/install/webform.webform.test_element_options_custom_twig.yml
@@ -23,7 +23,7 @@ elements: |
     '#options':
       4: '4 -- Four'
       5: '5 -- Five'
-
+  
 css: ''
 javascript: ''
 settings:
@@ -153,6 +153,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/webform_options_custom_test.info.yml b/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/webform_options_custom_test.info.yml
index 2b3a76d230..3c76e7b7ab 100644
--- a/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/webform_options_custom_test.info.yml
+++ b/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/webform_options_custom_test.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8
 dependencies:
   - 'webform:webform_options_custom'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/modules/webform_options_custom/webform_options_custom.info.yml b/web/modules/webform/modules/webform_options_custom/webform_options_custom.info.yml
index 5a2b648934..511427bc99 100644
--- a/web/modules/webform/modules/webform_options_custom/webform_options_custom.info.yml
+++ b/web/modules/webform/modules/webform_options_custom/webform_options_custom.info.yml
@@ -1,4 +1,4 @@
-name: 'Webform Custom Options [EXPERIMENTAL]'
+name: 'Webform Custom Options'
 type: module
 description: 'Provides a webform element for converting HTML or SVG markup into a selectable single or multiple options input.'
 package: 'Webform'
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/modules/webform_options_limit/src/Plugin/WebformHandler/OptionsLimitWebformHandler.php b/web/modules/webform/modules/webform_options_limit/src/Plugin/WebformHandler/OptionsLimitWebformHandler.php
index 7f59be2092..ac2dcaa5d5 100644
--- a/web/modules/webform/modules/webform_options_limit/src/Plugin/WebformHandler/OptionsLimitWebformHandler.php
+++ b/web/modules/webform/modules/webform_options_limit/src/Plugin/WebformHandler/OptionsLimitWebformHandler.php
@@ -262,17 +262,18 @@ public function buildConfigurationForm(array $form, FormStateInterface $form_sta
           '#source' => $element_options,
           '#source__title' => $this->t('Options'),
           '#destination__type' => 'number',
-          '#destination__min' => 1,
+          '#destination__min' => 0,
           '#destination__title' => $this->t('Limit'),
           '#destination__description' => NULL,
           '#default_value' => $this->configuration['limits'],
+          '#filter' => FALSE,
         ];
       }
       else {
         $form['element_settings']['options_container']['limit'] = [
           '#type' => 'number',
           '#title' => $this->t('@title @type limit', $t_args),
-          '#min' => 1,
+          '#min' => 0,
           '#default_value' => $this->configuration['limit'],
         ];
       }
@@ -456,7 +457,12 @@ public function submitConfigurationForm(array &$form, FormStateInterface $form_s
     $this->applyFormStateToConfiguration($form_state);
 
     foreach ($this->configuration['limits'] as $key => $value) {
-      $this->configuration['limits'][$key] = (int) $value;
+      if ($value === '') {
+        unset($this->configuration['limits'][$key]);
+      }
+      else {
+        $this->configuration['limits'][$key] = (int) $value;
+      }
     }
     if ($this->isOptionsElement()) {
       $this->configuration['limit'] = NULL;
@@ -1233,9 +1239,9 @@ protected function getBooleanLimits() {
    */
   protected function getLimitInformation($label, $limit, $total) {
     $total = $total ?: 0;
-    $remaining = ($limit) ? $limit - $total : NULL;
+    $remaining = ($limit) ? $limit - $total : 0;
 
-    if (empty($limit)) {
+    if (empty($limit) && $limit !== 0) {
       $status = WebformOptionsLimitHandlerInterface::LIMIT_STATUS_UNLIMITED;
     }
     elseif ($remaining <= 0) {
@@ -1429,7 +1435,7 @@ protected function getOptionsLimitLabel($label, array $limit) {
 
       case WebformOptionsLimitHandlerInterface::MESSAGE_DISPLAY_DESCRIPTION:
         return $label
-          . (strpos($label, WebformOptionsHelper::DESCRIPTION_DELIMITER) === FALSE ? WebformOptionsHelper::DESCRIPTION_DELIMITER : '')
+          . (!WebformOptionsHelper::hasOptionDescription($label) ? WebformOptionsHelper::DESCRIPTION_DELIMITER : '')
           . $message;
     }
   }
diff --git a/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/config/install/webform.webform.test_handler_boolean_limit.yml b/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/config/install/webform.webform.test_handler_boolean_limit.yml
index 0a97b937a5..b36f14ec6c 100644
--- a/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/config/install/webform.webform.test_handler_boolean_limit.yml
+++ b/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/config/install/webform.webform.test_handler_boolean_limit.yml
@@ -30,7 +30,7 @@ elements: |
     '#type': checkbox
     '#title': boolean_limit_remove
     '#default_value': true
-
+  
 css: ''
 javascript: ''
 settings:
@@ -160,6 +160,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/config/install/webform.webform.test_handler_options_limit.yml b/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/config/install/webform.webform.test_handler_options_limit.yml
index a6a5bb470d..969964690c 100644
--- a/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/config/install/webform.webform.test_handler_options_limit.yml
+++ b/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/config/install/webform.webform.test_handler_options_limit.yml
@@ -26,6 +26,7 @@ elements: |
       - B
       - C
     '#options':
+      none: None
       A: A
       B: B
       C: C
@@ -33,6 +34,7 @@ elements: |
     '#type': checkboxes
     '#title': options_limit_messages
     '#options':
+      none: None
       D: D
       E: E
       F: F
@@ -242,6 +244,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
@@ -302,6 +305,7 @@ handlers:
     settings:
       element_key: options_limit_default
       limits:
+        none: 0
         A: 1
         B: 2
         _default_: 3
@@ -327,6 +331,7 @@ handlers:
     settings:
       element_key: options_limit_messages
       limits:
+        none: 0
         D: 1
         E: 2
       limit_reached_message: '@name is not available.'
diff --git a/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/config/install/webform.webform.test_handler_options_limit_ent.yml b/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/config/install/webform.webform.test_handler_options_limit_ent.yml
index 2921fa8dde..1c2aded16a 100644
--- a/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/config/install/webform.webform.test_handler_options_limit_ent.yml
+++ b/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/config/install/webform.webform.test_handler_options_limit_ent.yml
@@ -27,7 +27,7 @@ elements: |
     '#selection_settings':
       target_bundles:
         page: page
-
+  
 css: ''
 javascript: ''
 settings:
@@ -157,6 +157,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/config/install/webform.webform.test_handler_options_limit_user.yml b/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/config/install/webform.webform.test_handler_options_limit_user.yml
index db11287896..83cc1676b5 100644
--- a/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/config/install/webform.webform.test_handler_options_limit_user.yml
+++ b/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/config/install/webform.webform.test_handler_options_limit_user.yml
@@ -29,7 +29,7 @@ elements: |
       A: A
       B: B
       C: C
-
+  
 css: ''
 javascript: ''
 settings:
@@ -159,6 +159,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/webform_options_limit_test.info.yml b/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/webform_options_limit_test.info.yml
index bd84b17d85..0dad085f8c 100644
--- a/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/webform_options_limit_test.info.yml
+++ b/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/webform_options_limit_test.info.yml
@@ -7,7 +7,7 @@ dependencies:
   - 'webform:webform'
   - 'webform:webform_options_limit'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/modules/webform_options_limit/tests/src/Functional/WebformOptionsLimitTest.php b/web/modules/webform/modules/webform_options_limit/tests/src/Functional/WebformOptionsLimitTest.php
index c62dcddd8e..23e9175810 100644
--- a/web/modules/webform/modules/webform_options_limit/tests/src/Functional/WebformOptionsLimitTest.php
+++ b/web/modules/webform/modules/webform_options_limit/tests/src/Functional/WebformOptionsLimitTest.php
@@ -29,10 +29,18 @@ public function testOptionsLimit() {
 
     $this->drupalGet('/webform/test_handler_options_limit');
 
+    // Check that option None is not available.
+    $this->assertRaw('<input data-drupal-selector="edit-options-limit-default-none" disabled="disabled" type="checkbox" id="edit-options-limit-default-none" name="options_limit_default[none]" value="none" class="form-checkbox" />');
+    $this->assertRaw('None [0 remaining]');
+
     // Check that option A is available.
     $this->assertRaw('<input data-drupal-selector="edit-options-limit-default-a" type="checkbox" id="edit-options-limit-default-a" name="options_limit_default[A]" value="A" checked="checked" class="form-checkbox" />');
     $this->assertRaw('A [1 remaining]');
 
+    // Check that option None is not available.
+    $this->assertRaw('<input data-drupal-selector="edit-options-limit-messages-none" aria-describedby="edit-options-limit-messages-none--description" disabled="disabled" type="checkbox" id="edit-options-limit-messages-none" name="options_limit_messages[none]" value="none" class="form-checkbox" />');
+    $this->assertRaw('No options remaining / 0 limit / 0 total');
+
     // Check that option D is available.
     $this->assertRaw('<input data-drupal-selector="edit-options-limit-messages-d" aria-describedby="edit-options-limit-messages-d--description" type="checkbox" id="edit-options-limit-messages-d" name="options_limit_messages[D]" value="D" checked="checked" class="form-checkbox" />');
     $this->assertRaw('1 option remaining / 1 limit / 0 total');
diff --git a/web/modules/webform/modules/webform_options_limit/webform_options_limit.info.yml b/web/modules/webform/modules/webform_options_limit/webform_options_limit.info.yml
index 78aca19341..e71242e035 100644
--- a/web/modules/webform/modules/webform_options_limit/webform_options_limit.info.yml
+++ b/web/modules/webform/modules/webform_options_limit/webform_options_limit.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/modules/webform_scheduled_email/src/Plugin/WebformHandler/ScheduleEmailWebformHandler.php b/web/modules/webform/modules/webform_scheduled_email/src/Plugin/WebformHandler/ScheduleEmailWebformHandler.php
index d0ddec96d1..f3e4e08a6b 100644
--- a/web/modules/webform/modules/webform_scheduled_email/src/Plugin/WebformHandler/ScheduleEmailWebformHandler.php
+++ b/web/modules/webform/modules/webform_scheduled_email/src/Plugin/WebformHandler/ScheduleEmailWebformHandler.php
@@ -225,6 +225,10 @@ public function buildConfigurationForm(array $form, FormStateInterface $form_sta
         '#title' => $this->t('Schedule emails for all existing submissions'),
         '#description' => $this->t('Check schedule emails after submissions have been processed.'),
         '#return_value' => TRUE,
+        // Must specify #parents because 'queue' is not a configuration setting.
+        // @see \Drupal\webform_scheduled_email\Plugin\WebformHandler\ScheduleEmailWebformHandler::defaultConfiguration
+        // @see \Drupal\webform\Plugin\WebformHandlerBase::setSettingsParentsRecursively
+        '#parents' => ['settings', 'queue'],
       ];
       $form['scheduled']['queue_message'] = [
         '#type' => 'webform_message',
diff --git a/web/modules/webform/modules/webform_scheduled_email/src/WebformScheduledEmailManager.php b/web/modules/webform/modules/webform_scheduled_email/src/WebformScheduledEmailManager.php
index 598df32b00..3dab8adbaa 100644
--- a/web/modules/webform/modules/webform_scheduled_email/src/WebformScheduledEmailManager.php
+++ b/web/modules/webform/modules/webform_scheduled_email/src/WebformScheduledEmailManager.php
@@ -473,6 +473,7 @@ public function cron(EntityInterface $entity = NULL, $handler_id = NULL, $schedu
       WebformScheduledEmailManagerInterface::EMAIL_RESCHEDULED => $this->t('rescheduled'),
       WebformScheduledEmailManagerInterface::EMAIL_ALREADY_SCHEDULED => $this->t('already scheduled'),
       WebformScheduledEmailManagerInterface::EMAIL_UNSCHEDULED => $this->t('unscheduled'),
+      WebformScheduledEmailManagerInterface::EMAIL_IGNORED => $this->t('ignored'),
       WebformScheduledEmailManagerInterface::EMAIL_SENT => $this->t('sent'),
       WebformScheduledEmailManagerInterface::EMAIL_NOT_SENT => $this->t('not sent'),
       WebformScheduledEmailManagerInterface::EMAIL_SKIPPED => $this->t('skipped'),
@@ -522,6 +523,7 @@ protected function cronSchedule(EntityInterface $entity = NULL, $handler_id = NU
       WebformScheduledEmailManagerInterface::EMAIL_RESCHEDULED => 0,
       WebformScheduledEmailManagerInterface::EMAIL_UNSCHEDULED => 0,
       WebformScheduledEmailManagerInterface::EMAIL_ALREADY_SCHEDULED => 0,
+      WebformScheduledEmailManagerInterface::EMAIL_IGNORED => 0,
     ];
 
     if (empty($limit)) {
diff --git a/web/modules/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test/config/install/webform.webform.test_handler_scheduled_email.yml b/web/modules/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test/config/install/webform.webform.test_handler_scheduled_email.yml
index 5601112e16..853ffb2fd4 100644
--- a/web/modules/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test/config/install/webform.webform.test_handler_scheduled_email.yml
+++ b/web/modules/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test/config/install/webform.webform.test_handler_scheduled_email.yml
@@ -40,7 +40,7 @@ elements: |
       visible:
         ':input[name="send"]':
           value: other
-
+  
 css: ''
 javascript: ''
 settings:
@@ -170,6 +170,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test/webform_scheduled_email_test.info.yml b/web/modules/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test/webform_scheduled_email_test.info.yml
index 80451f29a2..f5e97a8b66 100644
--- a/web/modules/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test/webform_scheduled_email_test.info.yml
+++ b/web/modules/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test/webform_scheduled_email_test.info.yml
@@ -7,7 +7,7 @@ dependencies:
   - 'webform:webform'
   - 'webform:webform_scheduled_email'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test_translation/config/install/webform.webform.test_handler_scheduled_translate.yml b/web/modules/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test_translation/config/install/webform.webform.test_handler_scheduled_translate.yml
index 7a6dfa563e..1c929362e0 100644
--- a/web/modules/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test_translation/config/install/webform.webform.test_handler_scheduled_translate.yml
+++ b/web/modules/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test_translation/config/install/webform.webform.test_handler_scheduled_translate.yml
@@ -21,7 +21,7 @@ elements: |
   value:
     '#type': textfield
     '#title': value
-
+  
 css: ''
 javascript: ''
 settings:
@@ -151,6 +151,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test_translation/webform_scheduled_email_test_translation.info.yml b/web/modules/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test_translation/webform_scheduled_email_test_translation.info.yml
index a9f4d730d9..29a43f4346 100644
--- a/web/modules/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test_translation/webform_scheduled_email_test_translation.info.yml
+++ b/web/modules/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test_translation/webform_scheduled_email_test_translation.info.yml
@@ -10,7 +10,7 @@ dependencies:
   - 'webform:webform'
   - 'webform:webform_scheduled_email'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/modules/webform_scheduled_email/webform_scheduled_email.info.yml b/web/modules/webform/modules/webform_scheduled_email/webform_scheduled_email.info.yml
index 92ed5e5ecc..414438a891 100644
--- a/web/modules/webform/modules/webform_scheduled_email/webform_scheduled_email.info.yml
+++ b/web/modules/webform/modules/webform_scheduled_email/webform_scheduled_email.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/modules/webform_share/js/webform_share.admin.js b/web/modules/webform/modules/webform_share/js/webform_share.admin.js
index eaae5ec84e..4344da762a 100644
--- a/web/modules/webform/modules/webform_share/js/webform_share.admin.js
+++ b/web/modules/webform/modules/webform_share/js/webform_share.admin.js
@@ -21,11 +21,11 @@
         var $message = $container.find('.webform-share-admin-copy-message');
         // Copy code from textarea to the clipboard.
         // @see https://stackoverflow.com/questions/37658524/copying-text-of-textarea-in-clipboard-when-button-is-clicked
-        $button.click(function () {
-          $textarea.select();
+        $button.on('click', function () {
+          $textarea.trigger('select');
           document.execCommand('copy');
           $message.show().delay(1500).fadeOut('slow');
-          $button.focus();
+          $button.trigger('focus');
           Drupal.announce(Drupal.t('Code copied to clipboard…'));
           return false;
         });
diff --git a/web/modules/webform/modules/webform_share/src/Controller/WebformShareController.php b/web/modules/webform/modules/webform_share/src/Controller/WebformShareController.php
index b7c5de8b15..d91a8e6396 100644
--- a/web/modules/webform/modules/webform_share/src/Controller/WebformShareController.php
+++ b/web/modules/webform/modules/webform_share/src/Controller/WebformShareController.php
@@ -137,8 +137,17 @@ public function script(Request $request, $library = NULL, $version = NULL) {
     ];
     $iframe = $this->renderer->renderPlain($build);
 
-    $content = 'document.write(' . json_encode($iframe) . ');';
-    return new CacheableResponse($content, 200, ['Content-Type' => 'text/javascript']);
+    $iframe_script = json_encode($iframe);
+    $iframe_script = str_replace('src=\\"\/\/', 'src=\\"' . $request->getScheme() . ':\/\/', $iframe_script);
+    $content = 'document.write(' . $iframe_script . ');';
+    $response = new CacheableResponse($content, 200, ['Content-Type' => 'text/javascript']);
+
+    $response->addCacheableDependency($webform);
+    if ($source_entity) {
+      $response->addCacheableDependency($source_entity);
+    }
+
+    return $response;
   }
 
   /**
diff --git a/web/modules/webform/modules/webform_share/webform_share.info.yml b/web/modules/webform/modules/webform_share/webform_share.info.yml
index d839848e0c..b604fa4da0 100644
--- a/web/modules/webform/modules/webform_share/webform_share.info.yml
+++ b/web/modules/webform/modules/webform_share/webform_share.info.yml
@@ -1,13 +1,12 @@
-name: 'Webform Share [EXPERIMENTAL]'
+name: 'Webform Share'
 type: module
 description: 'Allows webforms to be shared on other websites using an iframe.'
-experimental: true
-package: 'Webform [EXPERIMENTAL]'
+package: 'Webform'
 core_version_requirement: ^8.8
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/modules/webform_shortcuts/js/webform_shortcuts.js b/web/modules/webform/modules/webform_shortcuts/js/webform_shortcuts.js
index cf261eba5d..5fc4d8bbc0 100644
--- a/web/modules/webform/modules/webform_shortcuts/js/webform_shortcuts.js
+++ b/web/modules/webform/modules/webform_shortcuts/js/webform_shortcuts.js
@@ -14,21 +14,21 @@
   // Add element.
   if (shortcuts.addElement) {
     $(document).bind('keydown', shortcuts.addElement, function () {
-      $('#webform-ui-add-element').click();
+      $('#webform-ui-add-element').trigger('click');
     });
   }
 
   // Add page.
   if (shortcuts.addPage) {
     $(document).bind('keydown', shortcuts.addPage, function () {
-      $('#webform-ui-add-page').focus().click();
+      $('#webform-ui-add-page').trigger('focus').trigger('click');
     });
   }
 
   // Add layout.
   if (shortcuts.addLayout) {
     $(document).bind('keydown', shortcuts.addLayout, function () {
-      $('#webform-ui-add-layout').click();
+      $('#webform-ui-add-layout').trigger('click');
     });
   }
 
@@ -37,10 +37,10 @@
     $(document).bind('keydown', shortcuts.saveElements, function () {
       var $dialogSubmit = $('form.webform-ui-element-form [data-drupal-selector="edit-submit"]');
       if ($dialogSubmit.length) {
-        $dialogSubmit.click();
+        $dialogSubmit.trigger('click');
       }
       else {
-        $('form.webform-edit-form [data-drupal-selector="edit-submit"]').click();
+        $('form.webform-edit-form [data-drupal-selector="edit-submit"]').trigger('click');
       }
     });
   }
@@ -48,14 +48,14 @@
   // Reset elements.
   if (shortcuts.resetElements) {
     $(document).bind('keydown', shortcuts.resetElements, function () {
-      $('form.webform-edit-form [data-drupal-selector="edit-reset"]').click();
+      $('form.webform-edit-form [data-drupal-selector="edit-reset"]').trigger('click');
     });
   }
 
   // Toggle weight.
   if (shortcuts.toggleWeights) {
     $(document).bind('keydown', shortcuts.toggleWeights, function () {
-      $('.tabledrag-toggle-weight').eq(0).click();
+      $('.tabledrag-toggle-weight').eq(0).trigger('click');
     });
   }
 
diff --git a/web/modules/webform/modules/webform_shortcuts/webform_shortcuts.info.yml b/web/modules/webform/modules/webform_shortcuts/webform_shortcuts.info.yml
index 34445a8c76..4cf84fce96 100644
--- a/web/modules/webform/modules/webform_shortcuts/webform_shortcuts.info.yml
+++ b/web/modules/webform/modules/webform_shortcuts/webform_shortcuts.info.yml
@@ -7,7 +7,7 @@ dependencies:
   - 'webform:webform'
   - 'webform:webform_ui'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/modules/webform_submission_export_import/tests/modules/webform_submission_export_import_test/config/install/webform.webform.test_submission_export_import.yml b/web/modules/webform/modules/webform_submission_export_import/tests/modules/webform_submission_export_import_test/config/install/webform.webform.test_submission_export_import.yml
index c408f54d92..78783bfd1b 100644
--- a/web/modules/webform/modules/webform_submission_export_import/tests/modules/webform_submission_export_import_test/config/install/webform.webform.test_submission_export_import.yml
+++ b/web/modules/webform/modules/webform_submission_export_import/tests/modules/webform_submission_export_import_test/config/install/webform.webform.test_submission_export_import.yml
@@ -206,6 +206,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_submission_export_import/tests/modules/webform_submission_export_import_test/js/webform_submission_export_import_test.js b/web/modules/webform/modules/webform_submission_export_import/tests/modules/webform_submission_export_import_test/js/webform_submission_export_import_test.js
index aac955ab48..93a3532d7d 100644
--- a/web/modules/webform/modules/webform_submission_export_import/tests/modules/webform_submission_export_import_test/js/webform_submission_export_import_test.js
+++ b/web/modules/webform/modules/webform_submission_export_import/tests/modules/webform_submission_export_import_test/js/webform_submission_export_import_test.js
@@ -16,9 +16,9 @@
     attach: function (context) {
       $('#edit-import-url--description a', context)
         .once('webform-export-import-test')
-        .click(function () {
+        .on('click', function () {
           $('#edit-import-url').val(this.href);
-          $('#webform-submission-export-import-upload-form').submit();
+          $('#webform-submission-export-import-upload-form').trigger('submit');
           return false;
         });
     }
diff --git a/web/modules/webform/modules/webform_submission_export_import/tests/modules/webform_submission_export_import_test/webform_submission_export_import_test.info.yml b/web/modules/webform/modules/webform_submission_export_import/tests/modules/webform_submission_export_import_test/webform_submission_export_import_test.info.yml
index 304b4d3eb5..e1a9f07ed6 100644
--- a/web/modules/webform/modules/webform_submission_export_import/tests/modules/webform_submission_export_import_test/webform_submission_export_import_test.info.yml
+++ b/web/modules/webform/modules/webform_submission_export_import/tests/modules/webform_submission_export_import_test/webform_submission_export_import_test.info.yml
@@ -7,7 +7,7 @@ dependencies:
   - 'webform:webform_submission_export_import'
   - 'webform:webform_image_select'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453181
diff --git a/web/modules/webform/modules/webform_submission_export_import/webform_submission_export_import.info.yml b/web/modules/webform/modules/webform_submission_export_import/webform_submission_export_import.info.yml
index f247f2b520..73d8b5e1e5 100644
--- a/web/modules/webform/modules/webform_submission_export_import/webform_submission_export_import.info.yml
+++ b/web/modules/webform/modules/webform_submission_export_import/webform_submission_export_import.info.yml
@@ -1,4 +1,4 @@
-name: 'Webform Submission Export/Import [EXPERIMENTAL]'
+name: 'Webform Submission Export/Import'
 type: module
 description: 'Provides the ability to export and import submissions.'
 package: 'Webform'
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453181
diff --git a/web/modules/webform/modules/webform_submission_log/webform_submission_log.info.yml b/web/modules/webform/modules/webform_submission_log/webform_submission_log.info.yml
index b3e9da6498..87d75166c5 100644
--- a/web/modules/webform/modules/webform_submission_log/webform_submission_log.info.yml
+++ b/web/modules/webform/modules/webform_submission_log/webform_submission_log.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453181
diff --git a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_contact.yml b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_contact.yml
index e5fe53221e..69e6d4faa4 100644
--- a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_contact.yml
+++ b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_contact.yml
@@ -36,7 +36,7 @@ elements: |
     '#type': webform_actions
     '#title': 'Submit button(s)'
     '#submit__label': 'Send message'
-
+  
 css: ''
 javascript: ''
 settings:
@@ -166,6 +166,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_employee_evaluation.yml b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_employee_evaluation.yml
index 0a602b264b..a80ebb5daf 100644
--- a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_employee_evaluation.yml
+++ b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_employee_evaluation.yml
@@ -213,6 +213,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_feedback.yml b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_feedback.yml
index 2d7c6265ca..b14d9cb13d 100644
--- a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_feedback.yml
+++ b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_feedback.yml
@@ -41,7 +41,7 @@ elements: |
     '#type': webform_actions
     '#title': 'Submit button(s)'
     '#submit__label': 'Submit feedback'
-
+  
 css: ''
 javascript: ''
 settings:
@@ -171,6 +171,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_issue.yml b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_issue.yml
index 94348e35d2..2c635ef417 100644
--- a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_issue.yml
+++ b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_issue.yml
@@ -254,6 +254,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_job_application.yml b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_job_application.yml
index f49468deb4..d0db2582e9 100644
--- a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_job_application.yml
+++ b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_job_application.yml
@@ -84,7 +84,7 @@ elements: |
     '#type': webform_actions
     '#title': 'Submit button(s)'
     '#submit__label': Apply
-
+  
 css: ''
 javascript: ''
 settings:
@@ -214,6 +214,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_job_seeker_profile.yml b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_job_seeker_profile.yml
index 86ecf18e7d..c67aa8085c 100644
--- a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_job_seeker_profile.yml
+++ b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_job_seeker_profile.yml
@@ -24,7 +24,7 @@ elements: |
       <li>Providing more information gives a better picture to employers</li>
       <li>Salary requirements, location preferences and skill level are all important factors in the hiring decision</li>
       </ul>
-
+  
   information:
     '#title': 'Job Seeker Information'
     '#type': webform_section
@@ -84,7 +84,7 @@ elements: |
       '#type': url
       '#title': Website
       '#description': 'Enter your existing profile/resume/portfolio link.'
-
+  
 css: ''
 javascript: ''
 settings:
@@ -214,6 +214,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_medical_appointment.yml b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_medical_appointment.yml
index 9f528b8c2d..f386052424 100644
--- a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_medical_appointment.yml
+++ b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_medical_appointment.yml
@@ -206,7 +206,7 @@ elements: |
     '#type': webform_actions
     '#title': 'Submit button(s)'
     '#submit__label': 'Send Request'
-
+  
 css: ''
 javascript: ''
 settings:
@@ -336,6 +336,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_registration.yml b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_registration.yml
index 10cfeda9d1..b8339cace2 100644
--- a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_registration.yml
+++ b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_registration.yml
@@ -53,7 +53,7 @@ elements: |
     '#type': webform_actions
     '#title': 'Submit button(s)'
     '#submit__label': Register
-
+  
 css: ''
 javascript: ''
 settings:
@@ -183,6 +183,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_session_evaluation.yml b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_session_evaluation.yml
index a1ff554169..84b8def3c5 100644
--- a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_session_evaluation.yml
+++ b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_session_evaluation.yml
@@ -45,7 +45,7 @@ elements: |
     '#type': textarea
     '#title': Comments
     '#description': 'What did you like most? What would you change? Advice for the speaker to make this session better?'
-
+  
 css: ''
 javascript: ''
 settings:
@@ -175,6 +175,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_subscribe.yml b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_subscribe.yml
index b9c74d479c..d379793862 100644
--- a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_subscribe.yml
+++ b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_subscribe.yml
@@ -32,7 +32,7 @@ elements: |
     '#type': webform_actions
     '#title': 'Submit button(s)'
     '#submit__label': Subscribe
-
+  
 css: ''
 javascript: ''
 settings:
@@ -162,6 +162,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_user_profile.yml b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_user_profile.yml
index be799217f5..36467fbc9d 100644
--- a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_user_profile.yml
+++ b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_user_profile.yml
@@ -126,7 +126,7 @@ elements: |
     '#type': webform_actions
     '#title': 'Submit button(s)'
     '#submit__label': Register
-
+  
 css: ''
 javascript: ''
 settings:
@@ -256,6 +256,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_templates/webform_templates.info.yml b/web/modules/webform/modules/webform_templates/webform_templates.info.yml
index 28b24ce53d..9d907c6948 100644
--- a/web/modules/webform/modules/webform_templates/webform_templates.info.yml
+++ b/web/modules/webform/modules/webform_templates/webform_templates.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453181
diff --git a/web/modules/webform/modules/webform_toggles/tests/modules/webform_toggles_test/config/install/webform.webform.test_element_toggles.yml b/web/modules/webform/modules/webform_toggles/tests/modules/webform_toggles_test/config/install/webform.webform.test_element_toggles.yml
index b8a5934233..5ff62809d3 100644
--- a/web/modules/webform/modules/webform_toggles/tests/modules/webform_toggles_test/config/install/webform.webform.test_element_toggles.yml
+++ b/web/modules/webform/modules/webform_toggles/tests/modules/webform_toggles_test/config/install/webform.webform.test_element_toggles.yml
@@ -50,7 +50,7 @@ elements: |
         one: One
         two: Two
         three: Three
-
+  
 css: ''
 javascript: ''
 settings:
@@ -180,6 +180,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/modules/webform_toggles/tests/modules/webform_toggles_test/webform_toggles_test.info.yml b/web/modules/webform/modules/webform_toggles/tests/modules/webform_toggles_test/webform_toggles_test.info.yml
index 3db2169d70..fde10032a4 100644
--- a/web/modules/webform/modules/webform_toggles/tests/modules/webform_toggles_test/webform_toggles_test.info.yml
+++ b/web/modules/webform/modules/webform_toggles/tests/modules/webform_toggles_test/webform_toggles_test.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8
 dependencies:
   - 'webform:webform_toggles'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453181
diff --git a/web/modules/webform/modules/webform_toggles/webform_toggles.info.yml b/web/modules/webform/modules/webform_toggles/webform_toggles.info.yml
index bea80fd56c..d36927e481 100644
--- a/web/modules/webform/modules/webform_toggles/webform_toggles.info.yml
+++ b/web/modules/webform/modules/webform_toggles/webform_toggles.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453181
diff --git a/web/modules/webform/modules/webform_ui/js/webform_ui.js b/web/modules/webform/modules/webform_ui/js/webform_ui.js
index 210c10bd0c..7ac389b033 100644
--- a/web/modules/webform/modules/webform_ui/js/webform_ui.js
+++ b/web/modules/webform/modules/webform_ui/js/webform_ui.js
@@ -59,7 +59,7 @@
               $row = $row[direction]();
               $cell = $row.find('td').eq(index).find(tagName);
               if ($cell.length) {
-                $cell.focus();
+                $cell.trigger('focus');
                 break;
               }
             }
@@ -81,12 +81,12 @@
               if (direction === 'next' &&
                 this.tagName === 'A' &&
                 $(this).parent('.dropbutton-action').length) {
-                $cell.find('button').focus();
+                $cell.find('button').trigger('focus');
                 event.preventDefault();
                 return;
               }
               else if (direction === 'prev' && this.tagName === 'BUTTON') {
-                $cell.find('a').focus();
+                $cell.find('a').trigger('focus');
                 event.preventDefault();
                 return;
               }
@@ -96,7 +96,7 @@
               $cell = $cell[direction]();
               $focus = $cell.find('a:visible, input:visible, select:visible');
               if ($focus.length) {
-                $focus.focus();
+                $focus.trigger('focus');
                 event.preventDefault();
                 return;
               }
diff --git a/web/modules/webform/modules/webform_ui/src/WebformUiEntityElementsForm.php b/web/modules/webform/modules/webform_ui/src/WebformUiEntityElementsForm.php
index dcdd69b34f..5bed4d5bfb 100644
--- a/web/modules/webform/modules/webform_ui/src/WebformUiEntityElementsForm.php
+++ b/web/modules/webform/modules/webform_ui/src/WebformUiEntityElementsForm.php
@@ -18,6 +18,7 @@
 use Drupal\webform\Plugin\WebformElement\WebformTable;
 use Drupal\webform\Utility\WebformDialogHelper;
 use Drupal\webform\Plugin\WebformElementManagerInterface;
+use Drupal\webform\Utility\WebformElementHelper;
 use Drupal\webform\WebformEntityElementsValidatorInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
@@ -241,7 +242,7 @@ public function validateForm(array &$form, FormStateInterface $form_state) {
     // Preserve the original elements root properties.
     $elements_original = Yaml::decode($webform->get('elements')) ?: [];
     foreach ($elements_original as $key => $value) {
-      if (Element::property($key)) {
+      if (WebformElementHelper::property($key)) {
         $elements_updated[$key] = $value;
       }
     }
diff --git a/web/modules/webform/modules/webform_ui/tests/src/Functional/WebformUiElementTest.php b/web/modules/webform/modules/webform_ui/tests/src/Functional/WebformUiElementTest.php
index b81ee4fa71..7933d3905f 100644
--- a/web/modules/webform/modules/webform_ui/tests/src/Functional/WebformUiElementTest.php
+++ b/web/modules/webform/modules/webform_ui/tests/src/Functional/WebformUiElementTest.php
@@ -227,7 +227,7 @@ public function testElements() {
     // Check change element type link.
     $this->assertRaw('Text field <a href="' . $base_path . 'admin/structure/webform/manage/contact/element/test/change" class="button button--small webform-ajax-link" data-dialog-type="modal" data-dialog-options="{&quot;width&quot;:800,&quot;dialogClass&quot;:&quot;webform-ui-dialog&quot;}" data-drupal-selector="edit-change-type" id="edit-change-type">Change</a>');
     // Check text field has description.
-    $this->assertRaw(t('A short description of the element used as help for the user when he/she uses the webform.'));
+    $this->assertRaw(t('A short description of the element used as help for the user when they use the webform.'));
 
     // Check change element types.
     $this->drupalGet('/admin/structure/webform/manage/contact/element/test/change');
@@ -243,7 +243,7 @@ public function testElements() {
     // Check change element type.
     $this->drupalGet('/admin/structure/webform/manage/contact/element/test/edit', ['query' => ['type' => 'hidden']]);
     // Check hidden has no description.
-    $this->assertNoRaw(t('A short description of the element used as help for the user when he/she uses the webform.'));
+    $this->assertNoRaw(t('A short description of the element used as help for the user when they use the webform.'));
     $this->assertRaw('Hidden <a href="' . $base_path . 'admin/structure/webform/manage/contact/element/test/edit" class="button button--small webform-ajax-link" data-dialog-type="dialog" data-dialog-renderer="off_canvas" data-dialog-options="{&quot;width&quot;:600,&quot;dialogClass&quot;:&quot;ui-dialog-off-canvas webform-off-canvas&quot;}" data-drupal-selector="edit-cancel" id="edit-cancel">Cancel</a>');
     $this->assertRaw('(Changing from <em class="placeholder">Text field</em>)');
 
diff --git a/web/modules/webform/modules/webform_ui/webform_ui.info.yml b/web/modules/webform/modules/webform_ui/webform_ui.info.yml
index 3497327e4e..7acb38f7ba 100644
--- a/web/modules/webform/modules/webform_ui/webform_ui.info.yml
+++ b/web/modules/webform/modules/webform_ui/webform_ui.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453181
diff --git a/web/modules/webform/reports/accessiblity/text/example_accessibility_advanced.txt b/web/modules/webform/reports/accessiblity/text/example_accessibility_advanced.txt
index 271d5044fc..704c785698 100644
--- a/web/modules/webform/reports/accessiblity/text/example_accessibility_advanced.txt
+++ b/web/modules/webform/reports/accessiblity/text/example_accessibility_advanced.txt
@@ -85,15 +85,5 @@ Results for URL: http://localhost/wf/webform/example_accessibility_advanced
    ├── #edit-webform-tableselect-sort > tbody > tr:nth-child(3) > td:nth-child(2)
    └── <td>Three</td>
 
- • Error: Duplicate id attribute value "edit-actions" found on the web page.
-   ├── WCAG2AA.Principle4.Guideline4_1.4_1_1.F77
-   ├── #edit-actions
-   └── <div data-drupal-selector="edit-actions" class="form-actions js-form-wrapper form-wrapper" id="edit-actions"><input class="search-form__subm...</div>
-
- • Error: Duplicate id attribute value "edit-submit" found on the web page.
-   ├── WCAG2AA.Principle4.Guideline4_1.4_1_1.F77
-   ├── #edit-submit
-   └── <input class="search-form__submit button js-form-submit form-submit" data-drupal-selector="edit-submit" type="submit" id="edit-submit" value="Search">
-
-18 Errors
+16 Errors
 
diff --git a/web/modules/webform/reports/accessiblity/text/example_accessibility_basic.txt b/web/modules/webform/reports/accessiblity/text/example_accessibility_basic.txt
index 296af482ed..d7603d0f9e 100644
--- a/web/modules/webform/reports/accessiblity/text/example_accessibility_basic.txt
+++ b/web/modules/webform/reports/accessiblity/text/example_accessibility_basic.txt
@@ -3,17 +3,5 @@ Welcome to Pa11y
 
  > Running Pa11y on URL http://localhost/wf/webform/example_accessibility_basic
 
-Results for URL: http://localhost/wf/webform/example_accessibility_basic
-
- • Error: Duplicate id attribute value "edit-actions" found on the web page.
-   ├── WCAG2AA.Principle4.Guideline4_1.4_1_1.F77
-   ├── #edit-actions
-   └── <div data-drupal-selector="edit-actions" class="form-actions js-form-wrapper form-wrapper" id="edit-actions"><input class="search-form__subm...</div>
-
- • Error: Duplicate id attribute value "edit-submit" found on the web page.
-   ├── WCAG2AA.Principle4.Guideline4_1.4_1_1.F77
-   ├── #edit-submit
-   └── <input class="search-form__submit button js-form-submit form-submit" data-drupal-selector="edit-submit" type="submit" id="edit-submit" value="Search">
-
-2 Errors
+No issues found!
 
diff --git a/web/modules/webform/reports/accessiblity/text/example_accessibility_containers.txt b/web/modules/webform/reports/accessiblity/text/example_accessibility_containers.txt
index 6a6ee8ee2d..9473edfd12 100644
--- a/web/modules/webform/reports/accessiblity/text/example_accessibility_containers.txt
+++ b/web/modules/webform/reports/accessiblity/text/example_accessibility_containers.txt
@@ -3,17 +3,5 @@ Welcome to Pa11y
 
  > Running Pa11y on URL http://localhost/wf/webform/example_accessibility_containers
 
-Results for URL: http://localhost/wf/webform/example_accessibility_containers
-
- • Error: Duplicate id attribute value "edit-actions" found on the web page.
-   ├── WCAG2AA.Principle4.Guideline4_1.4_1_1.F77
-   ├── #edit-actions
-   └── <div data-drupal-selector="edit-actions" class="form-actions js-form-wrapper form-wrapper" id="edit-actions"><input class="search-form__subm...</div>
-
- • Error: Duplicate id attribute value "edit-submit" found on the web page.
-   ├── WCAG2AA.Principle4.Guideline4_1.4_1_1.F77
-   ├── #edit-submit
-   └── <input class="search-form__submit button js-form-submit form-submit" data-drupal-selector="edit-submit" type="submit" id="edit-submit" value="Search">
-
-2 Errors
+No issues found!
 
diff --git a/web/modules/webform/reports/accessiblity/text/example_accessibility_labels.txt b/web/modules/webform/reports/accessiblity/text/example_accessibility_labels.txt
index fc75ffc778..1e235c5e07 100644
--- a/web/modules/webform/reports/accessiblity/text/example_accessibility_labels.txt
+++ b/web/modules/webform/reports/accessiblity/text/example_accessibility_labels.txt
@@ -3,17 +3,5 @@ Welcome to Pa11y
 
  > Running Pa11y on URL http://localhost/wf/webform/example_accessibility_labels
 
-Results for URL: http://localhost/wf/webform/example_accessibility_labels
-
- • Error: Duplicate id attribute value "edit-actions" found on the web page.
-   ├── WCAG2AA.Principle4.Guideline4_1.4_1_1.F77
-   ├── #edit-actions
-   └── <div data-drupal-selector="edit-actions" class="form-actions js-form-wrapper form-wrapper" id="edit-actions"><input class="search-form__subm...</div>
-
- • Error: Duplicate id attribute value "edit-submit" found on the web page.
-   ├── WCAG2AA.Principle4.Guideline4_1.4_1_1.F77
-   ├── #edit-submit
-   └── <input class="search-form__submit button js-form-submit form-submit" data-drupal-selector="edit-submit" type="submit" id="edit-submit" value="Search">
-
-2 Errors
+No issues found!
 
diff --git a/web/modules/webform/reports/accessiblity/text/example_accessibility_wizard.txt b/web/modules/webform/reports/accessiblity/text/example_accessibility_wizard.txt
index 569329732e..8bcaefe8e4 100644
--- a/web/modules/webform/reports/accessiblity/text/example_accessibility_wizard.txt
+++ b/web/modules/webform/reports/accessiblity/text/example_accessibility_wizard.txt
@@ -50,10 +50,5 @@ Results for URL: http://localhost/wf/webform/example_accessibility_wizard
    ├── #webform-submission-example-accessibility-wizard-add-form > div:nth-child(7) > ul > li:nth-child(5) > span:nth-child(2) > span
    └── <span class="progress-title" data-webform-progress-link=""> <span class="visua...</span>
 
- • Error: Duplicate id attribute value "edit-actions" found on the web page.
-   ├── WCAG2AA.Principle4.Guideline4_1.4_1_1.F77
-   ├── #edit-actions
-   └── <div data-drupal-selector="edit-actions" class="form-actions js-form-wrapper form-wrapper" id="edit-actions"><input class="search-form__subm...</div>
-
-10 Errors
+9 Errors
 
diff --git a/web/modules/webform/src/Access/WebformAccountAccess.php b/web/modules/webform/src/Access/WebformAccountAccess.php
index 3461026853..7be10a1856 100644
--- a/web/modules/webform/src/Access/WebformAccountAccess.php
+++ b/web/modules/webform/src/Access/WebformAccountAccess.php
@@ -4,6 +4,7 @@
 
 use Drupal\Core\Access\AccessResult;
 use Drupal\Core\Session\AccountInterface;
+use Drupal\user\UserInterface;
 
 /**
  * Defines the custom access control handler for the user accounts.
@@ -69,13 +70,15 @@ public static function checkSubmissionAccess(AccountInterface $account) {
    *
    * @param \Drupal\Core\Session\AccountInterface $account
    *   Run access checks for this account.
+   * @param \Drupal\user\UserInterface $user
+   *   The access checked routes' associated user account.
    *
    * @return \Drupal\Core\Access\AccessResultInterface
    *   The access result.
    */
-  public static function checkUserSubmissionsAccess(AccountInterface $account) {
+  public static function checkUserSubmissionsAccess(AccountInterface $account, UserInterface $user) {
     $condition = ($account->hasPermission('administer webform') || $account->hasPermission('administer webform submission') || $account->hasPermission('view any webform submission'))
-      || ($account->hasPermission('access webform submission user') && \Drupal::currentUser()->id() === $account->id());
+      || ($account->hasPermission('access webform submission user') && $account->id() === $user->id());
     return AccessResult::allowedIf($condition)->cachePerPermissions();
   }
 
diff --git a/web/modules/webform/src/Commands/WebformCliService.php b/web/modules/webform/src/Commands/WebformCliService.php
index bb2d06adc7..1f4323addb 100644
--- a/web/modules/webform/src/Commands/WebformCliService.php
+++ b/web/modules/webform/src/Commands/WebformCliService.php
@@ -7,6 +7,7 @@
 use Drupal\Core\File\FileSystemInterface;
 use Drupal\Core\Mail\MailFormatHelper;
 use Drupal\Core\Serialization\Yaml;
+use Drupal\Core\Site\Settings;
 use Drupal\webform\Controller\WebformResultsExportController;
 use Drupal\webform\Entity\Webform;
 use Drupal\webform\Entity\WebformSubmission;
@@ -547,7 +548,8 @@ public function drush_webform_tidy_validate($target = NULL) {
 
     $target = $target ?: 'webform';
 
-    if (!isset($config_directories[$target])
+    if (empty(Settings::get('config_' . $target . '_directory', FALSE))
+      && !(isset($config_directories) && isset($config_directories[$target]))
       && !(\Drupal::moduleHandler()->moduleExists($target) && file_exists(drupal_get_path('module', $target) . '/config'))
       && !file_exists(realpath($target))) {
       $t_args = ['@target' => $target];
@@ -564,7 +566,15 @@ public function drush_webform_tidy($target = NULL) {
     $target = $target ?: 'webform';
     $prefix = $this->drush_get_option('prefix', 'webform');
 
-    if (isset($config_directories[$target])) {
+    // [Drupal 8.8+] The sync directory is defined in $settings
+    // and not $config_directories.
+    // @see https://www.drupal.org/node/3018145
+    $config_directory = Settings::get('config_' . $target . '_directory');
+    if ($config_directory) {
+      $file_directory_path = DRUPAL_ROOT . '/' . $config_directory;
+      $dependencies = $this->drush_get_option('dependencies');
+    }
+    elseif (isset($config_directories) && isset($config_directories[$target])) {
       $file_directory_path = DRUPAL_ROOT . '/' . $config_directories[$target];
       $dependencies = $this->drush_get_option('dependencies');
     }
diff --git a/web/modules/webform/src/Commands/WebformSanitizeSubmissionsCommands.php b/web/modules/webform/src/Commands/WebformSanitizeSubmissionsCommands.php
index 505ff8e70d..5a6792ca3e 100644
--- a/web/modules/webform/src/Commands/WebformSanitizeSubmissionsCommands.php
+++ b/web/modules/webform/src/Commands/WebformSanitizeSubmissionsCommands.php
@@ -60,7 +60,7 @@ public function __construct(Connection $database, ModuleHandlerInterface $module
    *
    * @hook post-command sql-sanitize
    *
-   * @inheritdoc
+   * {@inheritdoc}
    */
   public function sanitize($result, CommandData $command_data) {
     $options = $command_data->options();
@@ -85,7 +85,7 @@ public function options($options = ['sanitize-webform-submissions' => NULL]) {}
   /**
    * @hook on-event sql-sanitize-confirms
    *
-   * @inheritdoc
+   * {@inheritdoc}
    */
   public function messages(&$messages, InputInterface $input) {
     $options = $input->getOptions();
diff --git a/web/modules/webform/src/Controller/WebformPluginElementController.php b/web/modules/webform/src/Controller/WebformPluginElementController.php
index 58730b4455..96667dc42d 100644
--- a/web/modules/webform/src/Controller/WebformPluginElementController.php
+++ b/web/modules/webform/src/Controller/WebformPluginElementController.php
@@ -282,6 +282,7 @@ public function index() {
 
     $build = [];
 
+    // Filter.
     $build['filter'] = [
       '#type' => 'search',
       '#title' => $this->t('Filter'),
@@ -381,7 +382,6 @@ public function index() {
     ];
 
     $build['#attached']['library'][] = 'webform/webform.admin';
-    $build['#attached']['library'][] = 'webform/webform.form';
 
     return $build;
   }
diff --git a/web/modules/webform/src/Controller/WebformPluginExporterController.php b/web/modules/webform/src/Controller/WebformPluginExporterController.php
index f6920a1122..63aaba36dd 100644
--- a/web/modules/webform/src/Controller/WebformPluginExporterController.php
+++ b/web/modules/webform/src/Controller/WebformPluginExporterController.php
@@ -50,15 +50,14 @@ public function index() {
 
     $rows = [];
     foreach ($definitions as $plugin_id => $definition) {
-      $rows[$plugin_id] = [
-        'data' => [
-          $plugin_id,
-          $definition['label'],
-          $definition['description'],
-          (isset($excluded_exporters[$plugin_id])) ? $this->t('Yes') : $this->t('No'),
-          $definition['provider'],
-        ],
-      ];
+      $row = [];
+      $row[] = $plugin_id;
+      $row[] = ['data' => ['#markup' => $definition['label'], '#prefix' => '<span class="webform-form-filter-text-source">', '#suffix' => '</span>']];
+      $row[] = $definition['description'];
+      $row[] = (isset($excluded_exporters[$plugin_id])) ? $this->t('Yes') : $this->t('No');
+      $row[] = $definition['provider'];
+
+      $rows[$plugin_id] = ['data' => $row];
       if (isset($excluded_exporters[$plugin_id])) {
         $rows[$plugin_id]['class'] = ['color-warning'];
       }
@@ -67,6 +66,24 @@ public function index() {
 
     $build = [];
 
+    // Filter.
+    $build['filter'] = [
+      '#type' => 'search',
+      '#title' => $this->t('Filter'),
+      '#title_display' => 'invisible',
+      '#size' => 30,
+      '#placeholder' => $this->t('Filter by exporter label'),
+      '#attributes' => [
+        'class' => ['webform-form-filter-text'],
+        'data-element' => '.webform-exporter-plugin-table',
+        'data-summary' => '.webform-exporter-plugin-summary',
+        'data-item-singlular' => $this->t('exporter'),
+        'data-item-plural' => $this->t('exporters'),
+        'title' => $this->t('Enter a part of the exporter label to filter by.'),
+        'autofocus' => 'autofocus',
+      ],
+    ];
+
     // Settings.
     $build['settings'] = [
       '#type' => 'link',
@@ -78,7 +95,7 @@ public function index() {
     // Display info.
     $build['info'] = [
       '#markup' => $this->t('@total exporters', ['@total' => count($rows)]),
-      '#prefix' => '<p>',
+      '#prefix' => '<p class="webform-exporter-plugin-summary">',
       '#suffix' => '</p>',
     ];
 
@@ -94,8 +111,13 @@ public function index() {
       ],
       '#rows' => $rows,
       '#sticky' => TRUE,
+      '#attributes' => [
+        'class' => ['webform-exporter-plugin-table'],
+      ],
     ];
 
+    $build['#attached']['library'][] = 'webform/webform.admin';
+
     return $build;
   }
 
diff --git a/web/modules/webform/src/Controller/WebformPluginHandlerController.php b/web/modules/webform/src/Controller/WebformPluginHandlerController.php
index 538513d8c4..903719cebe 100644
--- a/web/modules/webform/src/Controller/WebformPluginHandlerController.php
+++ b/web/modules/webform/src/Controller/WebformPluginHandlerController.php
@@ -6,6 +6,7 @@
 use Drupal\Core\Controller\ControllerBase;
 use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
 use Drupal\Core\Url;
+use Drupal\webform\Entity\Webform;
 use Drupal\webform\Utility\WebformDialogHelper;
 use Drupal\webform\Plugin\WebformHandlerInterface;
 use Drupal\webform\WebformInterface;
@@ -49,25 +50,34 @@ public static function create(ContainerInterface $container) {
   public function index() {
     $excluded_handlers = $this->config('webform.settings')->get('handler.excluded_handlers');
 
+    $used_by = [];
+    /** @var \Drupal\webform\WebformInterface[] $webforms */
+    $webforms = Webform::loadMultiple();
+    foreach ($webforms as $webform) {
+      $handlers = $webform->getHandlers();
+      foreach ($handlers as $handler) {
+        $used_by[$handler->getPluginId()][$webform->id()] = $webform->toLink()->toRenderable();
+      }
+    }
+
     $definitions = $this->pluginManager->getDefinitions();
     $definitions = $this->pluginManager->getSortedDefinitions($definitions);
 
     $rows = [];
     foreach ($definitions as $plugin_id => $definition) {
-      $rows[$plugin_id] = [
-        'data' => [
-          $plugin_id,
-          $definition['label'],
-          $definition['description'],
-          $definition['category'],
-          (isset($excluded_handlers[$plugin_id])) ? $this->t('Yes') : $this->t('No'),
-          ($definition['cardinality'] === -1) ? $this->t('Unlimited') : $definition['cardinality'],
-          $definition['conditions'] ? $this->t('Yes') : $this->t('No'),
-          $definition['submission'] ? $this->t('Required') : $this->t('Optional'),
-          $definition['results'] ? $this->t('Processed') : $this->t('Ignored'),
-          $definition['provider'],
-        ],
-      ];
+      $row = [];
+      $row[] = $plugin_id;
+      $row[] = ['data' => ['#markup' => $definition['label'], '#prefix' => '<span class="webform-form-filter-text-source">', '#suffix' => '</span>']];
+      $row[] = $definition['description'];
+      $row[] = $definition['category'];
+      $row[] = (isset($excluded_handlers[$plugin_id])) ? $this->t('Yes') : $this->t('No');
+      $row[] = ($definition['cardinality'] === -1) ? $this->t('Unlimited') : $definition['cardinality'];
+      $row[] = $definition['conditions'] ? $this->t('Yes') : $this->t('No');
+      $row[] = $definition['submission'] ? $this->t('Required') : $this->t('Optional');
+      $row[] = $definition['results'] ? $this->t('Processed') : $this->t('Ignored');
+      $row[] = (isset($used_by[$plugin_id])) ? ['data' => ['#theme' => 'item_list', '#items' => $used_by[$plugin_id]]] : '';
+      $row[] = $definition['provider'];
+      $rows[$plugin_id] = ['data' => $row];
       if (isset($excluded_handlers[$plugin_id])) {
         $rows[$plugin_id]['class'] = ['color-warning'];
       }
@@ -76,6 +86,24 @@ public function index() {
 
     $build = [];
 
+    // Filter.
+    $build['filter'] = [
+      '#type' => 'search',
+      '#title' => $this->t('Filter'),
+      '#title_display' => 'invisible',
+      '#size' => 30,
+      '#placeholder' => $this->t('Filter by handler label'),
+      '#attributes' => [
+        'class' => ['webform-form-filter-text'],
+        'data-element' => '.webform-handler-plugin-table',
+        'data-summary' => '.webform-handler-plugin-summary',
+        'data-item-singlular' => $this->t('handler'),
+        'data-item-plural' => $this->t('handlers'),
+        'title' => $this->t('Enter a part of the handler label to filter by.'),
+        'autofocus' => 'autofocus',
+      ],
+    ];
+
     // Settings.
     $build['settings'] = [
       '#type' => 'link',
@@ -87,7 +115,7 @@ public function index() {
     // Display info.
     $build['info'] = [
       '#markup' => $this->t('@total handlers', ['@total' => count($rows)]),
-      '#prefix' => '<p>',
+      '#prefix' => '<p class="webform-handler-plugin-summary">',
       '#suffix' => '</p>',
     ];
 
@@ -104,12 +132,18 @@ public function index() {
         $this->t('Conditional'),
         $this->t('Database'),
         $this->t('Results'),
+        $this->t('Used by'),
         $this->t('Provided by'),
       ],
       '#rows' => $rows,
       '#sticky' => TRUE,
+      '#attributes' => [
+        'class' => ['webform-handler-plugin-table'],
+      ],
     ];
 
+    $build['#attached']['library'][] = 'webform/webform.admin';
+
     return $build;
   }
 
diff --git a/web/modules/webform/src/Controller/WebformPluginVariantController.php b/web/modules/webform/src/Controller/WebformPluginVariantController.php
index 197f743bf7..81d49d7931 100644
--- a/web/modules/webform/src/Controller/WebformPluginVariantController.php
+++ b/web/modules/webform/src/Controller/WebformPluginVariantController.php
@@ -6,6 +6,7 @@
 use Drupal\Core\Controller\ControllerBase;
 use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
 use Drupal\Core\Url;
+use Drupal\webform\Entity\Webform;
 use Drupal\webform\Utility\WebformDialogHelper;
 use Drupal\webform\WebformInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
@@ -48,21 +49,31 @@ public static function create(ContainerInterface $container) {
   public function index() {
     $excluded_variants = $this->config('webform.settings')->get('variant.excluded_variants');
 
+    $used_by = [];
+    /** @var \Drupal\webform\WebformInterface[] $webforms */
+    $webforms = Webform::loadMultiple();
+    foreach ($webforms as $webform) {
+      $variants = $webform->getVariants();
+      foreach ($variants as $variant) {
+        $used_by[$variant->getPluginId()][$webform->id()] = $webform->toLink()->toRenderable();
+      }
+    }
+
     $definitions = $this->pluginManager->getDefinitions();
     $definitions = $this->pluginManager->getSortedDefinitions($definitions);
 
     $rows = [];
     foreach ($definitions as $plugin_id => $definition) {
-      $rows[$plugin_id] = [
-        'data' => [
-          $plugin_id,
-          $definition['label'],
-          $definition['description'],
-          $definition['category'],
-          (isset($excluded_variants[$plugin_id])) ? $this->t('Yes') : $this->t('No'),
-          $definition['provider'],
-        ],
-      ];
+      $row = [];
+      $row[] = $plugin_id;
+      $row[] = ['data' => ['#markup' => $definition['label'], '#prefix' => '<span class="webform-form-filter-text-source">', '#suffix' => '</span>']];
+      $row[] = $definition['description'];
+      $row[] = $definition['category'];
+      $row[] = (isset($excluded_variants[$plugin_id])) ? $this->t('Yes') : $this->t('No');
+      $row[] = (isset($used_by[$plugin_id])) ? ['data' => ['#theme' => 'item_list', '#items' => $used_by[$plugin_id]]] : '';
+      $row[] = $definition['provider'];
+
+      $rows[$plugin_id] = ['data' => $row];
       if (isset($excluded_variants[$plugin_id])) {
         $rows[$plugin_id]['class'] = ['color-warning'];
       }
@@ -71,6 +82,24 @@ public function index() {
 
     $build = [];
 
+    // Filter.
+    $build['filter'] = [
+      '#type' => 'search',
+      '#title' => $this->t('Filter'),
+      '#title_display' => 'invisible',
+      '#size' => 30,
+      '#placeholder' => $this->t('Filter by variant label'),
+      '#attributes' => [
+        'class' => ['webform-form-filter-text'],
+        'data-element' => '.webform-variant-plugin-table',
+        'data-summary' => '.webform-variant-plugin-summary',
+        'data-item-singlular' => $this->t('variant'),
+        'data-item-plural' => $this->t('variants'),
+        'title' => $this->t('Enter a part of the variant label to filter by.'),
+        'autofocus' => 'autofocus',
+      ],
+    ];
+
     // Settings.
     $build['settings'] = [
       '#type' => 'link',
@@ -82,7 +111,7 @@ public function index() {
     // Display info.
     $build['info'] = [
       '#markup' => $this->t('@total variants', ['@total' => count($rows)]),
-      '#prefix' => '<p>',
+      '#prefix' => '<p class="webform-variant-plugin-summary">',
       '#suffix' => '</p>',
     ];
 
@@ -95,12 +124,18 @@ public function index() {
         $this->t('Description'),
         $this->t('Category'),
         $this->t('Excluded'),
+        $this->t('Used by'),
         $this->t('Provided by'),
       ],
       '#rows' => $rows,
       '#sticky' => TRUE,
+      '#attributes' => [
+        'class' => ['webform-variant-plugin-table'],
+      ],
     ];
 
+    $build['#attached']['library'][] = 'webform/webform.admin';
+
     return $build;
   }
 
diff --git a/web/modules/webform/src/Element/Webform.php b/web/modules/webform/src/Element/Webform.php
index 0aac543d46..01c09f00b5 100644
--- a/web/modules/webform/src/Element/Webform.php
+++ b/web/modules/webform/src/Element/Webform.php
@@ -98,6 +98,19 @@ public static function preRenderWebformElement($element) {
       }
     }
 
+    // Allow anonymous drafts to be restored.
+    // @see \Drupal\webform\WebformSubmissionForm::buildForm
+    if (\Drupal::currentUser()->isAnonymous()
+      && $webform->getSetting('draft') === WebformInterface::DRAFT_ALL) {
+      $element['#cache']['max-age'] = 0;
+      // @todo Remove once bubbling of element's max-age to page cache is fixed.
+      // @see https://www.drupal.org/project/webform/issues/3015760
+      // @see https://www.drupal.org/project/drupal/issues/2352009
+      if (\Drupal::moduleHandler()->moduleExists('page_cache')) {
+        \Drupal::service(('page_cache_kill_switch'))->trigger();
+      }
+    }
+
     return $element;
   }
 
diff --git a/web/modules/webform/src/Element/WebformCompositeBase.php b/web/modules/webform/src/Element/WebformCompositeBase.php
index 7994394164..cfbce98548 100644
--- a/web/modules/webform/src/Element/WebformCompositeBase.php
+++ b/web/modules/webform/src/Element/WebformCompositeBase.php
@@ -117,6 +117,9 @@ public static function processWebformCompositeElementsRecursive(&$element, array
     $composite_required_states = WebformElementHelper::getRequiredFromVisibleStates($element);
 
     foreach ($composite_elements as $composite_key => &$composite_element) {
+      // Make sure the composite key is a string.
+      $composite_key = (string) $composite_key;
+
       if (!Element::child($composite_key) || !is_array($composite_element)) {
         continue;
       }
@@ -225,7 +228,7 @@ protected static function initializeCompositeElementsRecursive(array &$element,
     $element_manager = \Drupal::service('plugin.manager.webform.element');
 
     foreach ($composite_elements as $composite_key => &$composite_element) {
-      if (Element::property($composite_key)) {
+      if (WebformElementHelper::property($composite_key)) {
         continue;
       }
 
diff --git a/web/modules/webform/src/Element/WebformComputedBase.php b/web/modules/webform/src/Element/WebformComputedBase.php
index 310345eb5c..9fceb360f2 100644
--- a/web/modules/webform/src/Element/WebformComputedBase.php
+++ b/web/modules/webform/src/Element/WebformComputedBase.php
@@ -275,19 +275,11 @@ public static function ajaxWebformComputedCallback(array $form, FormStateInterfa
       'data-webform-announce' => t('@title is @value', $t_args),
     ];
     $element['#prefix'] = '<div' . new Attribute($attributes) . '>';
-
     $element['#suffix'] = '</div>';
 
-    // Remove flexbox wrapper because it already been render outside this
-    // computed element's ajax wrapper.
-    // @see \Drupal\webform\Plugin\WebformElementBase::prepareWrapper
+    // Disable states and flexbox wrapper.
     // @see \Drupal\webform\Plugin\WebformElementBase::preRenderFixFlexboxWrapper
-    $preRenderFixFlexWrapper = ['Drupal\webform\Plugin\WebformElement\WebformComputedTwig', 'preRenderFixFlexboxWrapper'];
-    foreach ($element['#pre_render'] as $index => $pre_render) {
-      if (is_array($pre_render) && $pre_render === $preRenderFixFlexWrapper) {
-        unset($element['#pre_render'][$index]);
-      }
-    }
+    $element['#webform_wrapper'] = FALSE;
 
     return $element;
   }
diff --git a/web/modules/webform/src/Element/WebformComputedTwig.php b/web/modules/webform/src/Element/WebformComputedTwig.php
index 11c9598ee2..125bf9a6f7 100644
--- a/web/modules/webform/src/Element/WebformComputedTwig.php
+++ b/web/modules/webform/src/Element/WebformComputedTwig.php
@@ -39,6 +39,16 @@ public function getInfo() {
    * {@inheritdoc}
    */
   public static function computeValue(array $element, WebformSubmissionInterface $webform_submission) {
+    /** @var \Drupal\webform\WebformThemeManagerInterface $theme_manager */
+    $theme_manager = \Drupal::service('webform.theme_manager');
+    // Do not compute value via Twig if there is no active theme,
+    // except for CLI.
+    // Rendering a Twig template before the theme is activated can cause
+    // unexpected behaviors.
+    if (!$theme_manager->hasActiveTheme() && PHP_SAPI !== 'cli') {
+      return '';
+    }
+
     $whitespace = (!empty($element['#whitespace'])) ? $element['#whitespace'] : '';
 
     $template = ($whitespace === static::WHITESPACE_SPACELESS) ? '{% spaceless %}' . $element['#template'] . '{% endspaceless %}' : $element['#template'];
diff --git a/web/modules/webform/src/Element/WebformElementComposite.php b/web/modules/webform/src/Element/WebformElementComposite.php
index c21bfea633..c626bcc632 100644
--- a/web/modules/webform/src/Element/WebformElementComposite.php
+++ b/web/modules/webform/src/Element/WebformElementComposite.php
@@ -210,7 +210,7 @@ public static function processWebformElementComposite(&$element, FormStateInterf
           '#title' => t('Labels'),
           '#help' => '<b>' . t('Title') . ':</b> ' . t('This is used as a descriptive label when displaying this webform element.') .
             '<hr/><b>' . t('Placeholder') . ':</b> ' . t('The placeholder will be shown in the element until the user starts entering a value.') .
-            '<hr/><b>' . t('Description') . ':</b> ' . t('A short description of the element used as help for the user when he/she uses the webform.') .
+            '<hr/><b>' . t('Description') . ':</b> ' . t('A short description of the element used as help for the user when they use the webform.') .
             '<hr/><b>' . t('Help text') . ':</b> ' . t('A tooltip displayed after the title.'),
           'title' => [
             '#type' => 'textfield',
@@ -235,7 +235,7 @@ public static function processWebformElementComposite(&$element, FormStateInterf
           'description' => [
             '#type' => 'textarea',
             '#title' => t('Description'),
-            '#description' => t('A short description of the element used as help for the user when he/she uses the webform.'),
+            '#description' => t('A short description of the element used as help for the user when they use the webform.'),
             '#description_display' => 'invisible',
             '#title_display' => 'invisible',
             '#placeholder' => t('Enter description…'),
diff --git a/web/modules/webform/src/Element/WebformEntityTrait.php b/web/modules/webform/src/Element/WebformEntityTrait.php
index b2a99ef9d9..4decb37d20 100644
--- a/web/modules/webform/src/Element/WebformEntityTrait.php
+++ b/web/modules/webform/src/Element/WebformEntityTrait.php
@@ -71,7 +71,8 @@ public static function setOptions(array &$element, array $settings = []) {
 
     // If the selection handler is not using views, then translate
     // the entity reference's options.
-    if ($element['#selection_handler'] !== 'views') {
+    if (!\Drupal::moduleHandler()->moduleExists('views')
+      || !($handler instanceof \Drupal\views\Plugin\EntityReferenceSelection\ViewsSelection)) {
       $options = static::translateOptions($options, $element);
     }
 
diff --git a/web/modules/webform/src/Element/WebformHeight.php b/web/modules/webform/src/Element/WebformHeight.php
index 92fc7429be..9811fe2550 100644
--- a/web/modules/webform/src/Element/WebformHeight.php
+++ b/web/modules/webform/src/Element/WebformHeight.php
@@ -158,13 +158,13 @@ public static function processWebformHeight(&$element, FormStateInterface $form_
     switch ($element['#height_type']) {
       case 'select':
         $element['container']['feet'] += $select_element_defaults + [
-          '#field_suffix' => $feet_plural,
-          '#options' => $feet_options,
-        ];
+            '#field_suffix' => $feet_plural,
+            '#options' => $feet_options,
+          ];
         $element['container']['inches'] += $select_element_defaults + [
-          '#field_suffix' => $inches_plural,
-          '#options' => $inches_options,
-        ];
+            '#field_suffix' => $inches_plural,
+            '#options' => $inches_options,
+          ];
         break;
 
       case 'select_suffix':
@@ -175,11 +175,11 @@ public static function processWebformHeight(&$element, FormStateInterface $form_
           $inches_options[$option_value] .= ' ' . ($option_value === 1 ? $inches_singular : $inches_plural);
         }
         $element['container']['feet'] += $select_element_defaults + [
-          '#options' => $feet_options,
-        ];
+            '#options' => $feet_options,
+          ];
         $element['container']['inches'] += $select_element_defaults + [
-          '#options' => $inches_options,
-        ];
+            '#options' => $inches_options,
+          ];
         break;
 
       default:
@@ -219,7 +219,10 @@ public static function processWebformHeight(&$element, FormStateInterface $form_
 
     // Add validate callback.
     $element += ['#element_validate' => []];
-    array_unshift($element['#element_validate'], [get_called_class(), 'validateWebformHeight']);
+    array_unshift($element['#element_validate'], [
+      get_called_class(),
+      'validateWebformHeight',
+    ]);
 
     return $element;
   }
@@ -230,7 +233,7 @@ public static function processWebformHeight(&$element, FormStateInterface $form_
   public static function validateWebformHeight(&$element, FormStateInterface $form_state, &$complete_form) {
     $height_element =& $element['container'];
 
-   if ($height_element['feet']['#value'] === '' && $height_element['inches']['#value'] === '') {
+    if ($height_element['feet']['#value'] === '' && $height_element['inches']['#value'] === '') {
       $value = '';
     }
     else {
diff --git a/web/modules/webform/src/Element/WebformHtmlEditor.php b/web/modules/webform/src/Element/WebformHtmlEditor.php
index 8708093087..f72ceb61e8 100644
--- a/web/modules/webform/src/Element/WebformHtmlEditor.php
+++ b/web/modules/webform/src/Element/WebformHtmlEditor.php
@@ -103,6 +103,13 @@ public static function processWebformHtmlEditor(array $element) {
         '#type' => 'text_format',
         '#format' => $format,
         '#allowed_formats' => [$format],
+        // Do not allow the text format value to be cleared when the text format
+        // is hidden via #states. We must use a wrapper <div> because
+        // The TextFormat element does not support #attributes.
+        // @see \Drupal\webform\Plugin\WebformElement\TextFormat::preRenderFixTextFormatStates
+        // @see \Drupal\filter\Element\TextFormat
+        '#prefix' => '<div data-webform-states-no-clear>',
+        '#suffix' => '</div>',
       ];
       WebformElementHelper::fixStatesWrapper($element);
       return $element;
diff --git a/web/modules/webform/src/Element/WebformLikert.php b/web/modules/webform/src/Element/WebformLikert.php
index 8b44dd9a26..07bdb2703b 100644
--- a/web/modules/webform/src/Element/WebformLikert.php
+++ b/web/modules/webform/src/Element/WebformLikert.php
@@ -30,6 +30,7 @@ public function getInfo() {
       ],
       '#theme_wrappers' => ['form_element'],
       '#required' => FALSE,
+      '#required_error' => '',
       '#sticky' => TRUE,
       '#questions' => [],
       '#questions_description_display' => 'description',
@@ -57,14 +58,14 @@ public static function processWebformLikert(&$element, FormStateInterface $form_
     $answers = [];
     foreach ($element['#answers'] as $answer_key => $answer) {
       $answer = (string) $answer;
-      if (strpos($answer, WebformOptionsHelper::DESCRIPTION_DELIMITER) === FALSE) {
+      if (!WebformOptionsHelper::hasOptionDescription($answer)) {
         $answer_description_property_name = NULL;
         $answer_title = $answer;
         $answer_description = '';
       }
       else {
         $answer_description_property_name = ($element['#answers_description_display'] === 'help') ? 'help' : 'description';
-        list($answer_title, $answer_description) = explode(WebformOptionsHelper::DESCRIPTION_DELIMITER, $answer);
+        list($answer_title, $answer_description) = WebformOptionsHelper::splitOption($answer);
       }
       $answers[$answer_key] = [
         'description_property_name' => $answer_description_property_name,
@@ -115,14 +116,14 @@ public static function processWebformLikert(&$element, FormStateInterface $form_
     $rows = [];
     foreach ($element['#questions'] as $question_key => $question) {
       $question = (string) $question;
-      if (strpos($question, WebformOptionsHelper::DESCRIPTION_DELIMITER) === FALSE) {
+      if (!WebformOptionsHelper::hasOptionDescription($question)) {
         $question_description_property_name = NULL;
         $question_title = $question;
         $question_description = '';
       }
       else {
         $question_description_property_name = ($element['#questions_description_display'] === 'help') ? '#help' : '#description';
-        list($question_title, $question_description) = explode(WebformOptionsHelper::DESCRIPTION_DELIMITER, $question);
+        list($question_title, $question_description) = WebformOptionsHelper::splitOption($question);
       }
 
       $value = (isset($element['#value'][$question_key])) ? $element['#value'][$question_key] : NULL;
@@ -318,7 +319,14 @@ public static function setRequiredError(array &$element, FormStateInterface $for
     $value = $element['#value'];
     foreach ($element['#questions'] as $question_key => $question_title) {
       if (is_null($value[$question_key])) {
-        $form_state->setError($element['table'][$question_key]['likert_question'], t('@name field is required.', ['@name' => $question_title]));
+        $question_element =& $element['table'][$question_key]['likert_question'];
+        $t_args = ['@name' => $question_title];
+        if (!empty($element['#required_error'])) {
+          $form_state->setError($question_element, new FormattableMarkup($element['#required_error'], $t_args));
+        }
+        else {
+          $form_state->setError($question_element, t('@name field is required.', $t_args));
+        }
       }
     }
   }
diff --git a/web/modules/webform/src/Element/WebformMapping.php b/web/modules/webform/src/Element/WebformMapping.php
index 39467b15e3..7e38ccbf4c 100644
--- a/web/modules/webform/src/Element/WebformMapping.php
+++ b/web/modules/webform/src/Element/WebformMapping.php
@@ -33,6 +33,7 @@ public function getInfo() {
         [$class, 'processAjaxForm'],
       ],
       '#theme_wrappers' => ['form_element'],
+      '#filter' => TRUE,
       '#required' => FALSE,
       '#source' => [],
       '#source__description_display' => 'description',
@@ -58,14 +59,14 @@ public static function processWebformMapping(&$element, FormStateInterface $form
     $sources = [];
     foreach ($element['#source'] as $source_key => $source) {
       $source = (string) $source;
-      if (strpos($source, WebformOptionsHelper::DESCRIPTION_DELIMITER) === FALSE) {
+      if (!WebformOptionsHelper::hasOptionDescription($source)) {
         $source_description_property_name = NULL;
         $source_title = $source;
         $source_description = '';
       }
       else {
         $source_description_property_name = ($element['#source__description_display'] === 'help') ? 'help' : 'description';
-        list($source_title, $source_description) = explode(WebformOptionsHelper::DESCRIPTION_DELIMITER, $source);
+        list($source_title, $source_description) = WebformOptionsHelper::splitOption($source);
       }
       $sources[$source_key] = [
         'description_property_name' => $source_description_property_name,
@@ -186,7 +187,11 @@ public static function processWebformMapping(&$element, FormStateInterface $form
    */
   public static function validateWebformMapping(&$element, FormStateInterface $form_state, &$complete_form) {
     $value = NestedArray::getValue($form_state->getValues(), $element['#parents']);
-    $value = array_filter($value);
+
+    // Filter values.
+    if ($element['#filter']) {
+      $value = array_filter($value);
+    }
 
     // Note: Not validating REQUIRED_ALL because each destination element is
     // already required.
diff --git a/web/modules/webform/src/Element/WebformMultiple.php b/web/modules/webform/src/Element/WebformMultiple.php
index dc6923adbf..17da33669b 100644
--- a/web/modules/webform/src/Element/WebformMultiple.php
+++ b/web/modules/webform/src/Element/WebformMultiple.php
@@ -898,9 +898,15 @@ public static function ajaxCallback(array &$form, FormStateInterface $form_state
     $button = $form_state->getTriggeringElement();
     $parent_length = (isset($button['#row_index'])) ? -4 : -2;
     $element = NestedArray::getValue($form, array_slice($button['#array_parents'], 0, $parent_length));
+
     // Make sure only the ajax prefix and suffix is used.
     $element['#prefix'] = $element['#ajax_prefix'];
     $element['#suffix'] = $element['#ajax_suffix'];
+
+    // Disable states and flexbox wrapper.
+    // @see \Drupal\webform\Plugin\WebformElementBase::preRenderFixFlexboxWrapper
+    $element['#webform_wrapper'] = FALSE;
+
     return $element;
   }
 
diff --git a/web/modules/webform/src/Element/WebformOptions.php b/web/modules/webform/src/Element/WebformOptions.php
index 6aa6bf46aa..73bc5ffce4 100644
--- a/web/modules/webform/src/Element/WebformOptions.php
+++ b/web/modules/webform/src/Element/WebformOptions.php
@@ -262,8 +262,8 @@ public static function convertValuesToOptions(array $values = NULL, $options_des
   public static function convertOptionsToValues(array $options = [], $options_description = FALSE) {
     $values = [];
     foreach ($options as $value => $text) {
-      if ($options_description && strpos($text, WebformOptionsHelper::DESCRIPTION_DELIMITER) !== FALSE) {
-        list($text, $description) = explode(WebformOptionsHelper::DESCRIPTION_DELIMITER, $text);
+      if ($options_description && WebformOptionsHelper::hasOptionDescription($text)) {
+        list($text, $description) = WebformOptionsHelper::splitOption($text);
         $values[$value] = ['text' => $text, 'description' => $description];
       }
       else {
diff --git a/web/modules/webform/src/Element/WebformOtherBase.php b/web/modules/webform/src/Element/WebformOtherBase.php
index 4a3a083800..531b33b235 100644
--- a/web/modules/webform/src/Element/WebformOtherBase.php
+++ b/web/modules/webform/src/Element/WebformOtherBase.php
@@ -328,7 +328,7 @@ protected static function isMultiple(array $element) {
   protected static function convertDefaultValueToElementValue(array $element) {
     $type = str_replace('webform_', '', static::$type);
 
-    $default_value = isset($element['#default_value']) ? $element['#default_value'] : NULL;
+    $default_value = isset($element['#default_value']) && $element['#default_value'] !== '' ? $element['#default_value'] : NULL;
     if (static::isMultiple($element)) {
       // Handle edge case where $default_value is not an array.
       if (!is_array($default_value)) {
@@ -347,7 +347,7 @@ protected static function convertDefaultValueToElementValue(array $element) {
       return [$type => $default_options, 'other' => NULL];
     }
     else {
-      if (!empty($default_value) && !WebformOptionsHelper::hasOption($default_value, $element['#options'])) {
+      if ($default_value !== NULL && !WebformOptionsHelper::hasOption($default_value, $element['#options'])) {
         return [$type => static::OTHER_OPTION, 'other' => $default_value];
       }
 
diff --git a/web/modules/webform/src/Element/WebformTermCheckboxes.php b/web/modules/webform/src/Element/WebformTermCheckboxes.php
index c4f040c71f..74eca58210 100644
--- a/web/modules/webform/src/Element/WebformTermCheckboxes.php
+++ b/web/modules/webform/src/Element/WebformTermCheckboxes.php
@@ -24,6 +24,7 @@ public function getInfo() {
       '#breadcrumb' => FALSE,
       '#breadcrumb_delimiter' => ' › ',
       '#scroll' => TRUE,
+      '#depth' => NULL,
     ] + parent::getInfo();
   }
 
@@ -80,6 +81,11 @@ protected static function getOptionsTree(array $element, $language) {
         continue;
       }
 
+      // Check depth.
+      if (!empty($element['#depth']) && $item->depth >= $element['#depth']) {
+        continue;
+      }
+
       $options[$item->id()] = $item->getName();
     }
     return $options;
diff --git a/web/modules/webform/src/Element/WebformTermReferenceTrait.php b/web/modules/webform/src/Element/WebformTermReferenceTrait.php
index ea80a2a3fb..cab5fad5b9 100644
--- a/web/modules/webform/src/Element/WebformTermReferenceTrait.php
+++ b/web/modules/webform/src/Element/WebformTermReferenceTrait.php
@@ -66,6 +66,11 @@ protected static function getOptionsBreadcrumb(array $element, $language) {
         continue;
       }
 
+      // Check depth.
+      if (!empty($element['#depth']) && $item->depth >= $element['#depth']) {
+        continue;
+      }
+
       $breadcrumb[$item->depth] = $item->getName();
       $breadcrumb = array_slice($breadcrumb, 0, $item->depth + 1);
       $options[$item->id()] = implode($element['#breadcrumb_delimiter'], $breadcrumb);
@@ -100,6 +105,11 @@ protected static function getOptionsTree(array $element, $language) {
         continue;
       }
 
+      // Check depth.
+      if (!empty($element['#depth']) && $item->depth >= $element['#depth']) {
+        continue;
+      }
+
       $options[$item->id()] = str_repeat($element['#tree_delimiter'], $item->depth) . $item->getName();
     }
     return $options;
diff --git a/web/modules/webform/src/Element/WebformTermSelect.php b/web/modules/webform/src/Element/WebformTermSelect.php
index 8d5562b1dc..0747a36ee2 100644
--- a/web/modules/webform/src/Element/WebformTermSelect.php
+++ b/web/modules/webform/src/Element/WebformTermSelect.php
@@ -23,6 +23,7 @@ public function getInfo() {
       '#tree_delimiter' => '-',
       '#breadcrumb' => FALSE,
       '#breadcrumb_delimiter' => ' › ',
+      '#depth' => NULL,
     ] + parent::getInfo();
   }
 
diff --git a/web/modules/webform/src/Entity/Webform.php b/web/modules/webform/src/Entity/Webform.php
index c45948c73c..e4094693d5 100644
--- a/web/modules/webform/src/Entity/Webform.php
+++ b/web/modules/webform/src/Entity/Webform.php
@@ -161,6 +161,15 @@ class Webform extends ConfigEntityBundleBase implements WebformInterface {
    */
   protected $override = FALSE;
 
+  /**
+   * The webform translated elements state.
+   *
+   * When set to TRUE the webform can't not be saved.
+   *
+   * @var bool
+   */
+  protected $elementsTranslated = FALSE;
+
   /**
    * The webform status.
    *
@@ -559,7 +568,7 @@ public function setOverride($override = TRUE) {
    * {@inheritdoc}
    */
   public function isOverridden() {
-    return $this->override;
+    return $this->override || $this->elementsTranslated;
   }
 
   /**
@@ -1151,6 +1160,7 @@ public static function getDefaultSettings() {
       'results_customize' => FALSE,
       'token_view' => FALSE,
       'token_update' => FALSE,
+      'token_delete' => FALSE,
       'serial_disabled' => FALSE,
     ];
   }
@@ -1305,7 +1315,7 @@ public function getElementsVariant() {
    *   An associative array of flattened form elements with each element's
    *   operation access checked.
    */
-  protected function checkElementsFlattenedAccess($operation = NULL, array $elements) {
+  protected function checkElementsFlattenedAccess($operation = NULL, array $elements = []) {
     if ($operation === NULL) {
       return $elements;
     }
@@ -1406,13 +1416,15 @@ public function setElements(array $elements) {
   }
 
   /**
-   * Initialize parse webform elements.
+   * Initialize and parse webform elements.
    */
   protected function initElements() {
     if (isset($this->elementsInitialized)) {
       return;
     }
 
+    // Reset everything excepts pages.
+    // @todo Figure out how we can call ::resetElements.
     // @see \Drupal\webform\Entity\Webform::resetElements
     $this->hasFlexboxLayout = FALSE;
     $this->hasContainer = FALSE;
@@ -1434,28 +1446,11 @@ protected function initElements() {
     $this->elementsDefaultData = [];
 
     try {
-      $config_translation = \Drupal::moduleHandler()->moduleExists('config_translation');
-      /** @var \Drupal\webform\WebformTranslationManagerInterface $translation_manager */
-      $translation_manager = \Drupal::service('webform.translation_manager');
-      /** @var \Drupal\Core\Language\LanguageManagerInterface $language_manager */
-      $language_manager = \Drupal::service('language_manager');
-
-      // If current webform is translated, load the base (default) webform and
-      // apply the translation to the elements.
-      if ($config_translation
-        && ($this->langcode !== $language_manager->getCurrentLanguage()->getId())) {
-        // Always get the elements in the original language.
-        $elements = $translation_manager->getElements($this);
-        // For none admin routes get the element (label) translations.
-        if (!$translation_manager->isAdminRoute()) {
-          $this->elementsTranslations = $translation_manager->getElements($this, $language_manager->getCurrentLanguage()->getId());
-        }
-      }
-      else {
-        $elements = WebformYaml::decode($this->elements);
-      }
+      // Init element translations.
+      $this->initElementsTranslation();
 
       // Since YAML supports simple values.
+      $elements = WebformYaml::decode($this->elements);
       $elements = (is_array($elements)) ? $elements : [];
       $this->elementsDecoded = $elements;
     }
@@ -1479,6 +1474,101 @@ protected function initElements() {
     $this->elementsInitialized = $elements;
   }
 
+  /**
+   * Initialize elements translation.
+   *
+   * @param bool $elements_translated
+   *   Set elements translated flag so that translated elements can be alter
+   *   by variants. This parameter is only used before applying variants.
+   *
+   * @see \Drupal\webform\Entity\Webform::applyVariants
+   */
+  protected function initElementsTranslation($elements_translated = FALSE) {
+    // If config translation is not enabled then return.
+    if (!\Drupal::moduleHandler()->moduleExists('config_translation')) {
+      return;
+    }
+
+    // If the webform elements have been translated, then we no longer want
+    // to get and apply element translations.
+    // This allows variants to alter translated elements.
+    // @see \Drupal\webform\Entity\Webform::applyVariants
+    if ($this->elementsTranslated) {
+      return;
+    }
+
+    // Get the current langcode.
+    $current_langcode = \Drupal::languageManager()->getCurrentLanguage()->getId();
+
+    // If the current langcode is the same as this webform's langcode
+    // then return.
+    if ($this->langcode === $current_langcode) {
+      return;
+    }
+
+    /** @var \Drupal\webform\WebformTranslationManagerInterface $translation_manager */
+    $translation_manager = \Drupal::service('webform.translation_manager');
+
+    // For admin routes we need to get the original untranslated elements.
+    if ($translation_manager->isAdminRoute()) {
+      $this->elements = WebformYaml::encode($translation_manager->getElements($this));
+      return;
+    }
+
+    // Get the webform's decoded elements and translations.
+    $elements = Yaml::decode($this->elements);
+    $elementsTranslations = $translation_manager->getElements($this, $current_langcode);
+
+    // If the elements are empty or they are equal to the translated elements
+    // then, we need to load the elements in the original language.
+    if (empty($elementsTranslations) || ($elementsTranslations === $elements)) {
+      $elements = $translation_manager->getElements($this);
+      $this->elements = WebformYaml::encode($elements);
+    }
+
+    // Set the element's translations.
+    $this->elementsTranslations = $elementsTranslations;
+
+    // Ensure that translated webform elements are set and can be altered
+    // by a variant.
+    if ($elements_translated && $this->elementsTranslations) {
+      // Init elements and reset them with the translations.
+      $this->initElementsTranslationsRecursive($elements);
+      $this->setElements($elements);
+
+      // Clear the elements translations and stop the elements from
+      // being translated.
+      $this->elementsTranslations = [];
+      $this->elementsTranslated = TRUE;
+    }
+  }
+
+  /**
+   * Init elements translations before variants are applied.
+   *
+   * This method applies translations to raw elements, while
+   * Webform::initElementsRecursive applies translations to elements before
+   * they are initialized.
+   *
+   * @param array $elements
+   *   The webform elements.
+   *
+   * @see \Drupal\webform\Entity\Webform::initElementsRecursive
+   */
+  protected function initElementsTranslationsRecursive(array &$elements) {
+    foreach ($elements as $key => &$element) {
+      if (!WebformElementHelper::isElement($element, $key)) {
+        continue;
+      }
+
+      if (isset($this->elementsTranslations[$key])) {
+        WebformElementHelper::applyTranslation($element, $this->elementsTranslations[$key]);
+      }
+
+      $this->initElementsTranslationsRecursive($element);
+    }
+  }
+
   /**
    * Reset parsed and cached webform elements.
    */
@@ -1526,6 +1616,7 @@ protected function initElementsRecursive(array &$elements, $parent = '', $depth
       }
 
       // Apply translation to element.
+      // @see \Drupal\webform\Entity\Webform::initElementsTranslationsRecursive
       if (isset($this->elementsTranslations[$key])) {
         WebformElementHelper::applyTranslation($element, $this->elementsTranslations[$key]);
       }
@@ -2285,12 +2376,12 @@ public function updatePaths() {
 
     // If 'Allow users to post submission from a dedicated URL' is disabled,
     // delete all existing paths.
-    if (empty($this->settings['page'])) {
+    if (empty($this->getSetting('page'))) {
       $this->deletePaths();
       return;
     }
 
-    $page_submit_path = trim($this->settings['page_submit_path'], '/');
+    $page_submit_path = trim($this->getSetting('page_submit_path'), '/');
     $default_page_base_path = trim(\Drupal::config('webform.settings')->get('settings.default_page_base_path'), '/');
 
     // Skip generating paths if submit path and base path are empty.
@@ -2304,8 +2395,8 @@ public function updatePaths() {
     foreach ($path_suffixes as $path_suffix) {
       $path_source = '/webform/' . $this->id() . $path_suffix;
       $path_alias = $path_base_alias . $path_suffix;
-      if ($path_suffix === '/confirmation' && $this->settings['page_confirm_path']) {
-        $path_alias = '/' . trim($this->settings['page_confirm_path'], '/');
+      if ($path_suffix === '/confirmation' && $this->getSetting('page_confirm_path')) {
+        $path_alias = '/' . trim($this->getSetting('page_confirm_path'), '/');
       }
       $this->updatePath($path_source, $path_alias, $this->langcode);
       $this->updatePath($path_source, $path_alias, LanguageInterface::LANGCODE_NOT_SPECIFIED);
@@ -2815,13 +2906,22 @@ public function applyVariants(WebformSubmissionInterface $webform_submission = N
       $variants += $this->getVariantsData($webform_submission);
     }
 
+    // Skip if there are no variants that need to be applied.
+    if (empty($variants)) {
+      return;
+    }
+
+    // Ensure that translated webform elements are set and can be altered
+    // by a variant.
+    $this->initElementsTranslation(TRUE);
+
     // Apply variants.
     $is_applied = FALSE;
     $variant_element_keys = $this->getElementsVariant();
-    foreach ($variant_element_keys as $varient_element_key) {
-      if (!empty($variants[$varient_element_key])) {
-        $instance_id = $variants[$varient_element_key];
-        if ($this->applyVariant($varient_element_key, $instance_id, $force)) {
+    foreach ($variant_element_keys as $variant_element_key) {
+      if (!empty($variants[$variant_element_key])) {
+        $instance_id = $variants[$variant_element_key];
+        if ($this->applyVariant($variant_element_key, $instance_id, $force)) {
           $is_applied = TRUE;
         }
       }
@@ -2889,7 +2989,7 @@ public function applyVariant($element_key, $instance_id, $force = FALSE) {
     }
 
     // Apply the variant.
-    $variant_plugin->applyVariant();
+    return $variant_plugin->applyVariant();
   }
 
   /****************************************************************************/
@@ -3077,7 +3177,8 @@ public function onDependencyRemoval(array $dependencies) {
         $plugin_definition = $handler->getPluginDefinition();
         $provider = $plugin_definition['provider'];
         if (in_array($provider, $dependencies['module'])) {
-          $this->deleteWebformHandler($handler);
+          $handler->setWebform($this);
+          $this->getHandlers()->removeInstanceId($handler->getHandlerId());
           $changed = TRUE;
         }
       }
@@ -3089,7 +3190,8 @@ public function onDependencyRemoval(array $dependencies) {
         $plugin_definition = $variant->getPluginDefinition();
         $provider = $plugin_definition['provider'];
         if (in_array($provider, $dependencies['module'])) {
-          $this->deleteWebformVariant($variant);
+          $variant->setWebform($this);
+          $this->getVariants()->removeInstanceId($variant->getVariantId());
           $changed = TRUE;
         }
       }
diff --git a/web/modules/webform/src/Entity/WebformSubmission.php b/web/modules/webform/src/Entity/WebformSubmission.php
index 74b1395fec..1583279792 100644
--- a/web/modules/webform/src/Entity/WebformSubmission.php
+++ b/web/modules/webform/src/Entity/WebformSubmission.php
@@ -571,6 +571,12 @@ public function getTokenUrl($operation = 'update') {
         $url = $this->getSourceUrl();
         break;
 
+      case 'delete':
+        /** @var \Drupal\webform\WebformRequestInterface $request_handler */
+        $request_handler = \Drupal::service('webform.request');
+        $url = $request_handler->getUrl($this, $this->getSourceEntity(), 'webform.user.submission.delete');
+        break;
+
       default:
         throw new \Exception("Token URL operation $operation is not supported");
     }
diff --git a/web/modules/webform/src/EntitySettings/WebformEntitySettingsFormForm.php b/web/modules/webform/src/EntitySettings/WebformEntitySettingsFormForm.php
index 3ebb1c74fb..8afd096b3c 100644
--- a/web/modules/webform/src/EntitySettings/WebformEntitySettingsFormForm.php
+++ b/web/modules/webform/src/EntitySettings/WebformEntitySettingsFormForm.php
@@ -373,7 +373,7 @@ public function form(array $form, FormStateInterface $form_state) {
       '#access' => FALSE,
       '#states' => [
         'visible' => [
-          ':input[name="wizard_auto_forward]' => ['checked' => TRUE],
+          ':input[name="wizard_auto_forward"]' => ['checked' => TRUE],
         ],
       ],
     ];
diff --git a/web/modules/webform/src/EntitySettings/WebformEntitySettingsGeneralForm.php b/web/modules/webform/src/EntitySettings/WebformEntitySettingsGeneralForm.php
index 12850b01b0..6b67fe76a7 100644
--- a/web/modules/webform/src/EntitySettings/WebformEntitySettingsGeneralForm.php
+++ b/web/modules/webform/src/EntitySettings/WebformEntitySettingsGeneralForm.php
@@ -294,18 +294,6 @@ public function form(array $form, FormStateInterface $form_state) {
         ],
       ],
     ];
-    $form['ajax_settings']['ajax_container']['ajax_scroll_top'] = [
-      '#type' => 'select',
-      '#title' => $this->t('On Ajax load, scroll to the top of the…'),
-      '#description' => $this->t("Select where the page should be scrolled to when paging, saving of drafts, previews, submissions, and confirmations. Select 'None' to disable scrolling."),
-      '#options' => [
-        '' => $this->t('None'),
-        'form' => $this->t('Form'),
-        'page' => $this->t('Page'),
-      ],
-      '#default_value' => $settings['ajax_scroll_top'],
-      '#attributes' => ['data-webform-states-no-clear' => TRUE],
-    ];
     $form['ajax_settings']['ajax_container']['ajax_progress_type'] = [
       '#type' => 'select',
       '#title' => $this->t('Ajax progress type'),
@@ -318,6 +306,18 @@ public function form(array $form, FormStateInterface $form_state) {
       ],
       '#default_value' => $settings['ajax_progress_type'],
     ];
+    $form['ajax_settings']['ajax_container']['ajax_scroll_top'] = [
+      '#type' => 'select',
+      '#title' => $this->t('On Ajax load, scroll to the top of the…'),
+      '#description' => $this->t("Select where the page should be scrolled to when paging, saving of drafts, previews, submissions, and confirmations. Select 'None' to disable scrolling."),
+      '#options' => [
+        '' => $this->t('None'),
+        'form' => $this->t('Form'),
+        'page' => $this->t('Page'),
+      ],
+      '#default_value' => $settings['ajax_scroll_top'],
+      '#attributes' => ['data-webform-states-no-clear' => TRUE],
+    ];
     $form['ajax_settings']['ajax_container']['ajax_effect'] = [
       '#type' => 'select',
       '#title' => $this->t('Ajax effect'),
diff --git a/web/modules/webform/src/EntitySettings/WebformEntitySettingsSubmissionsForm.php b/web/modules/webform/src/EntitySettings/WebformEntitySettingsSubmissionsForm.php
index 6b041b0d29..5e3a5fdd9e 100644
--- a/web/modules/webform/src/EntitySettings/WebformEntitySettingsSubmissionsForm.php
+++ b/web/modules/webform/src/EntitySettings/WebformEntitySettingsSubmissionsForm.php
@@ -120,7 +120,7 @@ public function form(array $form, FormStateInterface $form_state) {
       '#states' => [
         'visible' => [
           ':input[name="serial_disabled"]' => ['checked' => FALSE],
-        ]
+        ],
       ],
     ];
     $form['submission_settings']['serial_disabled'] = [
@@ -213,17 +213,6 @@ public function form(array $form, FormStateInterface $form_state) {
         'title' => $this->t('Show the notification about previous submissions'),
         'form_description' => $this->t('Show the previous submissions notification that appears when users have previously submitted this form.'),
       ],
-      'token_view' => [
-        'title' => $this->t('Allow users to view a submission using a secure token'),
-        'form_description' => $this->t("If checked users will be able to view a submission using the webform submission's URL appended with the submission's (secure) token.") . ' ' .
-          $this->t("The 'tokenized' URL to view a submission will be available when viewing a submission's information and can be inserted into an email using the [webform_submission:view-url] token."),
-      ],
-      'token_update' => [
-        'title' => $this->t('Allow users to update a submission using a secure token'),
-        'form_description' => $this->t("If checked users will be able to update a submission using the webform's URL appended with the submission's (secure) token.") . ' ' .
-          $this->t("The 'tokenized' URL to update a submission will be available when viewing a submission's information and can be inserted into an email using the [webform_submission:update-url] token.") . ' ' .
-          $this->t('Only webforms that are open to new submissions can be updated using the secure token.'),
-      ],
       // Global behaviors.
       // @see \Drupal\webform\Form\WebformAdminSettingsForm
       'submission_log' => [
@@ -238,19 +227,6 @@ public function form(array $form, FormStateInterface $form_state) {
       ],
     ];
     $this->appendBehaviors($form['submission_behaviors'], $behavior_elements, $settings, $default_settings);
-    $form['submission_behaviors']['token_update_warning'] = [
-      '#type' => 'webform_message',
-      '#message_type' => 'warning',
-      '#message_message' => $this->t("Submissions accessed using the (secure) token will by-pass all webform submission access rules."),
-      '#states' => [
-        'visible' => [
-          [':input[name="token_view"]' => ['checked' => TRUE]],
-          'or',
-          [':input[name="token_update"]' => ['checked' => TRUE]],
-        ],
-      ],
-      '#weight' => $form['submission_behaviors']['token_update']['#weight'] + 1,
-    ];
 
     // User settings.
     $form['submission_user_settings'] = [
@@ -302,6 +278,49 @@ public function form(array $form, FormStateInterface $form_state) {
       '#default_value' => $columns_default_value,
     ];
 
+    // Submission access.
+    $form['submission_access'] = [
+      '#type' => 'details',
+      '#title' => $this->t('Submission access token settings'),
+      '#open' => TRUE,
+    ];
+    $form['submission_access']['token_update_warning'] = [
+      '#type' => 'webform_message',
+      '#message_type' => 'warning',
+      '#message_message' => $this->t("Submissions accessed using the (secure) token will by-pass all webform submission access rules."),
+      '#message_close' => TRUE,
+      '#message_storage' => WebformMessage::STORAGE_SESSION,
+      '#states' => [
+        'visible' => [
+          [':input[name="token_view"]' => ['checked' => TRUE]],
+          'or',
+          [':input[name="token_update"]' => ['checked' => TRUE]],
+          'or',
+          [':input[name="token_delete"]' => ['checked' => TRUE]],
+        ],
+      ],
+    ];
+    $behavior_elements = [
+      'token_view' => [
+        'title' => $this->t('Allow users to view a submission using a secure token'),
+        'form_description' => $this->t("If checked users will be able to view a submission using the webform submission's URL appended with the submission's (secure) token.") . ' ' .
+          $this->t("The 'tokenized' URL to view a submission will be available when viewing a submission's information and can be inserted into an email using the [webform_submission:view-url] token."),
+      ],
+      'token_update' => [
+        'title' => $this->t('Allow users to update a submission using a secure token'),
+        'form_description' => $this->t("If checked users will be able to update a submission using the webform's URL appended with the submission's (secure) token.") . ' ' .
+          $this->t("The 'tokenized' URL to update a submission will be available when viewing a submission's information and can be inserted into an email using the [webform_submission:update-url] token.") . ' ' .
+          $this->t('Only webforms that are open to new submissions can be updated using the secure token.'),
+      ],
+      'token_delete' => [
+        'title' => $this->t('Allow users to delete a submission using a secure token'),
+        'form_description' => $this->t("If checked users will be able to delete a submission using the webform's URL appended with the submission's (secure) token.") . ' ' .
+          $this->t("The 'tokenized' URL to update a submission will be available when viewing a submission's information and can be inserted into an email using the [webform_submission:delete-url] token.") . ' ' .
+          $this->t('Only webforms that are open to new submissions can be deleted using the secure token.'),
+      ],
+    ];
+    $this->appendBehaviors($form['submission_access'], $behavior_elements, $settings, $default_settings);
+
     // Access denied.
     $form['access_denied'] = [
       '#type' => 'details',
diff --git a/web/modules/webform/src/Form/WebformAjaxFormTrait.php b/web/modules/webform/src/Form/WebformAjaxFormTrait.php
index f865fa129b..17ccc29749 100644
--- a/web/modules/webform/src/Form/WebformAjaxFormTrait.php
+++ b/web/modules/webform/src/Form/WebformAjaxFormTrait.php
@@ -408,12 +408,11 @@ protected function getFormStateRedirectUrl(FormStateInterface $form_state) {
    * @see \Drupal\webform\Form\WebformAjaxFormTrait::submitAjaxForm
    */
   protected function announce($text, $priority = 'polite') {
-    $announcements = $this->getAnnouncements();
+    $announcements =& drupal_static('webform_announcements', []);
     $announcements[] = [
       'text' => $text,
       'priority' => $priority,
     ];
-    $this->setAnnouncements($announcements);
   }
 
   /**
@@ -423,8 +422,7 @@ protected function announce($text, $priority = 'polite') {
    *   An associative array of announcements.
    */
   protected function getAnnouncements() {
-    $session = $this->getRequest()->getSession();
-    return $session->get('announcements') ?: [];
+    return drupal_static('webform_announcements', []);
   }
 
   /**
@@ -434,18 +432,15 @@ protected function getAnnouncements() {
    *   An associative array of announcements.
    */
   protected function setAnnouncements(array $announcements) {
-    $session = $this->getRequest()->getSession();
-    $session->set('announcements', $announcements);
-    $session->save();
+    $this->resetAnnouncements();
+    drupal_static('webform_announcements', $announcements);
   }
 
   /**
    * Reset announcements.
    */
   protected function resetAnnouncements() {
-    $session = $this->getRequest()->getSession();
-    $session->remove('announcements');
-    $session->save();
+    drupal_static_reset('webform_announcements');
   }
 
 }
diff --git a/web/modules/webform/src/Form/WebformSubmissionDeleteForm.php b/web/modules/webform/src/Form/WebformSubmissionDeleteForm.php
index 53b671536e..2048a0302c 100644
--- a/web/modules/webform/src/Form/WebformSubmissionDeleteForm.php
+++ b/web/modules/webform/src/Form/WebformSubmissionDeleteForm.php
@@ -5,6 +5,7 @@
 use Drupal\Core\Entity\ContentEntityDeleteForm;
 use Drupal\Core\Entity\EntityRepositoryInterface;
 use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Url;
 use Drupal\webform\WebformRequestInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
@@ -174,8 +175,19 @@ protected function getDeletionMessage() {
    * {@inheritdoc}
    */
   public function getCancelUrl() {
-    $base_route_name = (strpos(\Drupal::routeMatch()->getRouteName(), 'webform.user.submission.delete') !== FALSE) ? 'webform.user.submissions' : 'webform.results_submissions';
-    return $this->requestHandler->getUrl($this->webform, $this->sourceEntity, $base_route_name);
+    if ($this->webform->access('submission_view_own') || $this->webform->access('submission_view_any')) {
+      $base_route_name = (strpos(\Drupal::routeMatch()->getRouteName(), 'webform.user.submission.delete') !== FALSE) ? 'webform.user.submissions' : 'webform.results_submissions';
+      return $this->requestHandler->getUrl($this->webform, $this->sourceEntity, $base_route_name);
+    }
+    elseif ($this->sourceEntity && $this->sourceEntity->hasLinkTemplate('canonical') && $this->sourceEntity->access('view')) {
+      return $this->sourceEntity->toUrl();
+    }
+    elseif ($this->webform->access('view')) {
+      return $this->webform->toUrl();
+    }
+    else {
+      return Url::fromRoute('<front>');
+    }
   }
 
   /**
diff --git a/web/modules/webform/src/Form/WebformSubmissionsDeleteFormBase.php b/web/modules/webform/src/Form/WebformSubmissionsDeleteFormBase.php
index b12f40ed55..7d345bc543 100644
--- a/web/modules/webform/src/Form/WebformSubmissionsDeleteFormBase.php
+++ b/web/modules/webform/src/Form/WebformSubmissionsDeleteFormBase.php
@@ -228,7 +228,7 @@ public function batchProcess(WebformInterface $webform = NULL, EntityInterface $
    * @param array $operations
    *   An array of function calls (not used in this function).
    */
-  public function batchFinish($success = FALSE, array $results, array $operations) {
+  public function batchFinish($success = FALSE, array $results = [], array $operations = []) {
     if (!$success) {
       $this->messenger()->addStatus($this->t('Finished with an error.'));
     }
diff --git a/web/modules/webform/src/Plugin/Block/WebformBlock.php b/web/modules/webform/src/Plugin/Block/WebformBlock.php
index 69fcaa0525..9169f70ff1 100644
--- a/web/modules/webform/src/Plugin/Block/WebformBlock.php
+++ b/web/modules/webform/src/Plugin/Block/WebformBlock.php
@@ -8,6 +8,7 @@
 use Drupal\Core\EventSubscriber\MainContentViewSubscriber;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\Core\Routing\RouteMatchInterface;
 use Drupal\Core\Session\AccountInterface;
 use Drupal\webform\Utility\WebformYaml;
 use Drupal\webform\WebformInterface;
@@ -47,6 +48,13 @@ class WebformBlock extends BlockBase implements ContainerFactoryPluginInterface
    */
   protected $tokenManager;
 
+  /**
+   * The route match.
+   *
+   * @var \Drupal\Core\Routing\RouteMatchInterface
+   */
+  protected $routeMatch;
+
   /**
    * Creates a WebformBlock instance.
    *
@@ -62,12 +70,15 @@ class WebformBlock extends BlockBase implements ContainerFactoryPluginInterface
    *   The entity type manager.
    * @param \Drupal\webform\WebformTokenManagerInterface $token_manager
    *   The webform token manager.
+   * @param \Drupal\Core\Routing\RouteMatchInterface $route_match
+   *   The current route match.
    */
-  public function __construct(array $configuration, $plugin_id, $plugin_definition, RequestStack $request_stack, EntityTypeManagerInterface $entity_type_manager, WebformTokenManagerInterface $token_manager) {
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, RequestStack $request_stack, EntityTypeManagerInterface $entity_type_manager, WebformTokenManagerInterface $token_manager, RouteMatchInterface $route_match = NULL) {
     parent::__construct($configuration, $plugin_id, $plugin_definition);
     $this->requestStack = $request_stack;
     $this->entityTypeManager = $entity_type_manager;
     $this->tokenManager = $token_manager;
+    $this->routeMatch = $route_match ?: \Drupal::routeMatch();
   }
 
   /**
@@ -80,7 +91,8 @@ public static function create(ContainerInterface $container, array $configuratio
       $plugin_definition,
       $container->get('request_stack'),
       $container->get('entity_type.manager'),
-      $container->get('webform.token_manager')
+      $container->get('webform.token_manager'),
+      $container->get('current_route_match')
     );
   }
 
@@ -192,9 +204,19 @@ public function blockSubmit($form, FormStateInterface $form_state) {
    * {@inheritdoc}
    */
   public function build() {
+    $webform = $this->getWebform();
+    if (!$webform) {
+      if (strpos($this->routeMatch->getRouteName(), 'layout_builder.') === 0) {
+        return ['#markup' => $this->t('The webform (@webform) is broken or missing.', ['@webform' => $this->configuration['webform_id']])];
+      }
+      else {
+        return NULL;
+      }
+    }
+
     $build = [
       '#type' => 'webform',
-      '#webform' => $this->getWebform(),
+      '#webform' => $webform,
       '#default_data' => WebformYaml::decode($this->configuration['default_data']),
     ];
 
diff --git a/web/modules/webform/src/Plugin/DevelGenerate/WebformSubmissionDevelGenerate.php b/web/modules/webform/src/Plugin/DevelGenerate/WebformSubmissionDevelGenerate.php
index 9ddb6112a6..1eb2c5b6c3 100644
--- a/web/modules/webform/src/Plugin/DevelGenerate/WebformSubmissionDevelGenerate.php
+++ b/web/modules/webform/src/Plugin/DevelGenerate/WebformSubmissionDevelGenerate.php
@@ -29,7 +29,7 @@ class WebformSubmissionDevelGenerate extends DevelGenerateBase implements Contai
   /**
    * {@inheritdoc}
    */
-  public function validateDrushParams(array $args, array $options = []) {
+  public function validateDrushParams($args) {
     return $this->_validateDrushParams($args);
   }
 
diff --git a/web/modules/webform/src/Plugin/DevelGenerate/WebformSubmissionDevelGenerateTrait.php b/web/modules/webform/src/Plugin/DevelGenerate/WebformSubmissionDevelGenerateTrait.php
index 978bada6e9..5ab2e04113 100644
--- a/web/modules/webform/src/Plugin/DevelGenerate/WebformSubmissionDevelGenerateTrait.php
+++ b/web/modules/webform/src/Plugin/DevelGenerate/WebformSubmissionDevelGenerateTrait.php
@@ -12,6 +12,7 @@
 use Drupal\webform\WebformSubmissionGenerateInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 use Symfony\Component\HttpFoundation\RequestStack;
+use Drupal\Component\Datetime\TimeInterface;
 
 /**
  * Provides a WebformSubmissionDevelGenerate trait.
@@ -83,6 +84,13 @@ trait WebformSubmissionDevelGenerateTrait {
    */
   protected $messenger;
 
+  /**
+   * The time service.
+   *
+   * @var \Drupal\Component\Datetime\TimeInterface
+   */
+  protected $time;
+
   /**
    * Constructs a WebformSubmissionDevelGenerate object.
    *
@@ -104,8 +112,10 @@ trait WebformSubmissionDevelGenerateTrait {
    *   The webform submission generator.
    * @param \Drupal\webform\WebformEntityReferenceManagerInterface $webform_entity_reference_manager
    *   The webform entity reference manager.
+   * @param \Drupal\Component\Datetime\TimeInterface $time
+   *   The time service.
    */
-  public function __construct(array $configuration, $plugin_id, $plugin_definition, RequestStack $request_stack, Connection $database, EntityTypeManagerInterface $entity_type_manager, MessengerInterface $messenger, WebformSubmissionGenerateInterface $webform_submission_generate, WebformEntityReferenceManagerInterface $webform_entity_reference_manager) {
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, RequestStack $request_stack, Connection $database, EntityTypeManagerInterface $entity_type_manager, MessengerInterface $messenger, WebformSubmissionGenerateInterface $webform_submission_generate, WebformEntityReferenceManagerInterface $webform_entity_reference_manager, TimeInterface $time) {
     parent::__construct($configuration, $plugin_id, $plugin_definition);
 
     $this->request = $request_stack->getCurrentRequest();
@@ -116,6 +126,7 @@ public function __construct(array $configuration, $plugin_id, $plugin_definition
     $this->webformEntityReferenceManager = $webform_entity_reference_manager;
     $this->webformStorage = $entity_type_manager->getStorage('webform');
     $this->webformSubmissionStorage = $entity_type_manager->getStorage('webform_submission');
+    $this->time = $time;
   }
 
   /**
@@ -131,7 +142,8 @@ public static function create(ContainerInterface $container, array $configuratio
       $container->get('entity_type.manager'),
       $container->get('messenger'),
       $container->get('webform_submission.generate'),
-      $container->get('webform.entity_reference_manager')
+      $container->get('webform.entity_reference_manager'),
+      $container->get('datetime.time')
     );
   }
 
@@ -281,11 +293,11 @@ protected function generateSubmissions(array $values) {
     }
     if (!empty($values['webform_ids'])) {
       $this->initializeGenerate($values);
-      $start = time();
+      $start = $this->time->getRequestTime();
       for ($i = 1; $i <= $values['num']; $i++) {
         $this->generateSubmission($values);
         if (function_exists('drush_log') && $i % drush_get_option('feedback', 1000) === 0) {
-          $now = time();
+          $now = $this->time->getRequestTime();
           $dt_args = [
             '@feedback' => drush_get_option('feedback', 1000),
             '@rate' => (drush_get_option('feedback', 1000) * 60) / ($now - $start),
@@ -331,7 +343,7 @@ protected function initializeGenerate(array &$values) {
 
     // Set created min and max.
     $values['created_min'] = strtotime('-1 month');
-    $values['created_max'] = time();
+    $values['created_max'] = $this->time->getRequestTime();
 
     // Set entity type and id default value.
     $values += [
diff --git a/web/modules/webform/src/Plugin/Field/FieldFormatter/WebformEntityReferenceFormatterBase.php b/web/modules/webform/src/Plugin/Field/FieldFormatter/WebformEntityReferenceFormatterBase.php
index fbf6bd8600..c0354b5417 100644
--- a/web/modules/webform/src/Plugin/Field/FieldFormatter/WebformEntityReferenceFormatterBase.php
+++ b/web/modules/webform/src/Plugin/Field/FieldFormatter/WebformEntityReferenceFormatterBase.php
@@ -32,7 +32,14 @@ abstract class WebformEntityReferenceFormatterBase extends EntityReferenceFormat
   protected $configFactory;
 
   /**
-   * WebformEntityReferenceLinkFormatter constructor.
+   * The time service.
+   *
+   * @var \Drupal\Component\Datetime\TimeInterface
+   */
+  protected $time;
+
+  /**
+   * WebformEntityReferenceFormatterBase constructor.
    *
    * @param string $plugin_id
    *   The plugin_id for the formatter.
@@ -58,6 +65,12 @@ public function __construct($plugin_id, $plugin_definition, FieldDefinitionInter
 
     $this->configFactory = $config_factory;
     $this->renderer = $renderer;
+
+    // Make sure the time object is defined because the create method maybe
+    // overridden and we can't alter the constructor without breaking classes
+    // which extend the WebformEntityReferenceFormatterBase class.
+    // @todo Remove in Webform 6.x.
+    $this->time = \Drupal::service('datetime.time');
   }
 
   /**
@@ -125,8 +138,8 @@ protected function setCacheContext(array &$elements, WebformInterface $webform,
     foreach ($states as $state) {
       if ($item->status === WebformInterface::STATUS_SCHEDULED) {
         $item_state = $item->$state;
-        if ($item_state && strtotime($item_state) > time()) {
-          $item_seconds = strtotime($item_state) - time();
+        if ($item_state && strtotime($item_state) > $this->time->getRequestTime()) {
+          $item_seconds = strtotime($item_state) - $this->time->getRequestTime();
           if (!$max_age && $item_seconds > $max_age) {
             $max_age = $item_seconds;
           }
@@ -134,8 +147,8 @@ protected function setCacheContext(array &$elements, WebformInterface $webform,
       }
       if ($webform->status() === WebformInterface::STATUS_SCHEDULED) {
         $webform_state = $webform->get($state);
-        if ($webform_state && strtotime($webform_state) > time()) {
-          $webform_seconds = strtotime($webform_state) - time();
+        if ($webform_state && strtotime($webform_state) > $this->time->getRequestTime()) {
+          $webform_seconds = strtotime($webform_state) - $this->time->getRequestTime();
           if (!$max_age && $webform_seconds > $max_age) {
             $max_age = $webform_seconds;
           }
diff --git a/web/modules/webform/src/Plugin/Field/FieldFormatter/WebformEntityReferenceLinkFormatter.php b/web/modules/webform/src/Plugin/Field/FieldFormatter/WebformEntityReferenceLinkFormatter.php
index a4db034597..49bf240e80 100644
--- a/web/modules/webform/src/Plugin/Field/FieldFormatter/WebformEntityReferenceLinkFormatter.php
+++ b/web/modules/webform/src/Plugin/Field/FieldFormatter/WebformEntityReferenceLinkFormatter.php
@@ -157,7 +157,7 @@ public function settingsForm(array $form, FormStateInterface $form_state) {
       $form['dialog'] = [
         '#title' => $this->t('Dialog'),
         '#type' => 'select',
-        '#empty_option' => t('- Select dialog -'),
+        '#empty_option' => $this->t('- Select dialog -'),
         '#default_value' => $this->getSetting('dialog'),
         '#options' => $options,
       ];
diff --git a/web/modules/webform/src/Plugin/Field/FieldWidget/WebformEntityReferenceSelectWidget.php b/web/modules/webform/src/Plugin/Field/FieldWidget/WebformEntityReferenceSelectWidget.php
index 0e7ea5369f..022eca9811 100644
--- a/web/modules/webform/src/Plugin/Field/FieldWidget/WebformEntityReferenceSelectWidget.php
+++ b/web/modules/webform/src/Plugin/Field/FieldWidget/WebformEntityReferenceSelectWidget.php
@@ -55,7 +55,7 @@ public function getTargetIdElement(FieldItemListInterface $items, $delta, array
     // it as an option.
     if ($default_value && $webform = Webform::load($default_value)) {
       if ($webform->isArchived()) {
-        $options[(string) t('Archived')][$webform->id()] = $webform->label();
+        $options[(string) $this->t('Archived')][$webform->id()] = $webform->label();
       }
     }
 
diff --git a/web/modules/webform/src/Plugin/Field/FieldWidget/WebformEntityReferenceWidgetTrait.php b/web/modules/webform/src/Plugin/Field/FieldWidget/WebformEntityReferenceWidgetTrait.php
index 9b862b8c99..00cefab3dc 100644
--- a/web/modules/webform/src/Plugin/Field/FieldWidget/WebformEntityReferenceWidgetTrait.php
+++ b/web/modules/webform/src/Plugin/Field/FieldWidget/WebformEntityReferenceWidgetTrait.php
@@ -51,15 +51,15 @@ public function settingsForm(array $form, FormStateInterface $form_state) {
     $element = parent::settingsForm($form, $form_state);
     $element['default_data'] = [
       '#type' => 'checkbox',
-      '#title' => t('Enable default submission data (YAML)'),
-      '#description' => t('If checked, site builders will be able to define default submission data (YAML)'),
+      '#title' => $this->t('Enable default submission data (YAML)'),
+      '#description' => $this->t('If checked, site builders will be able to define default submission data (YAML)'),
       '#default_value' => $this->getSetting('default_data'),
     ];
     if ($this->getSetting('webforms') !== NULL) {
       $element['webforms'] = [
         '#type' => 'webform_entity_select',
-        '#title' => t('Select webform'),
-        '#description' => t('If left blank all webforms will be listed in the select menu.'),
+        '#title' => $this->t('Select webform'),
+        '#description' => $this->t('If left blank all webforms will be listed in the select menu.'),
         '#select2' => TRUE,
         '#multiple' => TRUE,
         '#target_type' => 'webform',
@@ -76,7 +76,7 @@ public function settingsForm(array $form, FormStateInterface $form_state) {
    */
   public function settingsSummary() {
     $summary = parent::settingsSummary();
-    $summary[] = t('Default submission data: @default_data', ['@default_data' => $this->getSetting('default_data') ? $this->t('Yes') : $this->t('No')]);
+    $summary[] = $this->t('Default submission data: @default_data', ['@default_data' => $this->getSetting('default_data') ? $this->t('Yes') : $this->t('No')]);
     $webform_ids = $this->getSetting('webforms');
     if ($webform_ids) {
       $webforms = Webform::loadMultiple($webform_ids);
@@ -84,7 +84,7 @@ public function settingsSummary() {
       foreach ($webforms as $webform) {
         $webform_labels[] = $webform->label();
       }
-      $summary[] = t('Webforms: @webforms', ['@webforms' => implode('; ', $webform_labels)]);
+      $summary[] = $this->t('Webforms: @webforms', ['@webforms' => implode('; ', $webform_labels)]);
     }
     return $summary;
   }
diff --git a/web/modules/webform/src/Plugin/WebformElement/Checkboxes.php b/web/modules/webform/src/Plugin/WebformElement/Checkboxes.php
index 96e0120a43..89489c3483 100644
--- a/web/modules/webform/src/Plugin/WebformElement/Checkboxes.php
+++ b/web/modules/webform/src/Plugin/WebformElement/Checkboxes.php
@@ -137,7 +137,7 @@ protected function getElementSelectorInputsOptions(array $element) {
     $selectors = $element['#options'];
     foreach ($selectors as $index => $text) {
       // Remove description from text.
-      list($text) = explode(WebformOptionsHelper::DESCRIPTION_DELIMITER, $text);
+      list($text) = WebformOptionsHelper::splitOption($text);
       // Append element type to text.
       $text .= ' [' . $this->t('Checkbox') . ']';
       $selectors[$index] = $text;
diff --git a/web/modules/webform/src/Plugin/WebformElement/DateBase.php b/web/modules/webform/src/Plugin/WebformElement/DateBase.php
index 16dc75d28d..97e97143db 100644
--- a/web/modules/webform/src/Plugin/WebformElement/DateBase.php
+++ b/web/modules/webform/src/Plugin/WebformElement/DateBase.php
@@ -666,7 +666,7 @@ protected static function datetimeRangeYears($string, $date = NULL) {
   protected static function formatDate($custom_format, $timestamp = NULL) {
     /** @var \Drupal\Core\Datetime\DateFormatterInterface $date_formatter */
     $date_formatter = \Drupal::service('date.formatter');
-    return $date_formatter->format($timestamp ?: time(), 'custom', $custom_format);
+    return $date_formatter->format($timestamp ?: \Drupal::time()->getRequestTime(), 'custom', $custom_format);
   }
 
 }
diff --git a/web/modules/webform/src/Plugin/WebformElement/NumericBase.php b/web/modules/webform/src/Plugin/WebformElement/NumericBase.php
index f23f0da511..a098ab649e 100644
--- a/web/modules/webform/src/Plugin/WebformElement/NumericBase.php
+++ b/web/modules/webform/src/Plugin/WebformElement/NumericBase.php
@@ -42,6 +42,12 @@ public function prepare(array &$element, WebformSubmissionInterface $webform_sub
    */
   public function getTestValues(array $element, WebformInterface $webform, array $options = []) {
     $element += ['#min' => 1, '#max' => 10];
+    if (is_string($element['#min'])) {
+      $element['#min'] = $this->tokenManager->replace($element['#min'], $webform);
+    }
+    if (is_string($element['#max'])) {
+      $element['#max'] = $this->tokenManager->replace($element['#max'], $webform);
+    }
     return [
       $element['#min'],
       floor((($element['#max'] - $element['#min']) / 2) + $element['#min']),
diff --git a/web/modules/webform/src/Plugin/WebformElement/OptionsBase.php b/web/modules/webform/src/Plugin/WebformElement/OptionsBase.php
index adb7275846..3f8fc54bee 100644
--- a/web/modules/webform/src/Plugin/WebformElement/OptionsBase.php
+++ b/web/modules/webform/src/Plugin/WebformElement/OptionsBase.php
@@ -457,9 +457,10 @@ protected function formatHtmlItems(array &$element, WebformSubmissionInterface $
       // Build list of checked and unchecked options.
       $build = [];
       $options_description = $this->hasProperty('options_description_display');
-      foreach ($element['#options'] as $option_value => $option_text) {
-        if ($options_description && strpos($option_text, WebformOptionsHelper::DESCRIPTION_DELIMITER) !== FALSE) {
-          list($option_text) = explode(WebformOptionsHelper::DESCRIPTION_DELIMITER, $option_text);
+      $options = OptGroup::flattenOptions($element['#options']);
+      foreach ($options as $option_value => $option_text) {
+        if ($options_description && WebformOptionsHelper::hasOptionDescription($option_text)) {
+          list($option_text) = WebformOptionsHelper::splitOption($option_text);
         }
         $build[$option_value] = [
           '#prefix' => isset($values[$option_value]) ? $checked : $unchecked,
@@ -511,8 +512,8 @@ protected function formatTextItems(array &$element, WebformSubmissionInterface $
       $list = [];
       $options_description = $this->hasProperty('options_description_display');
       foreach ($element['#options'] as $option_value => $option_text) {
-        if ($options_description && strpos($option_text, WebformOptionsHelper::DESCRIPTION_DELIMITER) !== FALSE) {
-          list($option_text) = explode(WebformOptionsHelper::DESCRIPTION_DELIMITER, $option_text);
+        if ($options_description && WebformOptionsHelper::hasOptionDescription($option_text)) {
+          list($option_text) = WebformOptionsHelper::splitOption($option_text);
         }
         $list[] = ((isset($values[$option_value])) ? $checked : $unchecked) . ' ' . $option_text;
         unset($values[$option_value]);
diff --git a/web/modules/webform/src/Plugin/WebformElement/Table.php b/web/modules/webform/src/Plugin/WebformElement/Table.php
index abdc468fb6..2b09e1e8be 100644
--- a/web/modules/webform/src/Plugin/WebformElement/Table.php
+++ b/web/modules/webform/src/Plugin/WebformElement/Table.php
@@ -3,8 +3,8 @@
 namespace Drupal\webform\Plugin\WebformElement;
 
 use Drupal\Core\Form\FormStateInterface;
-use Drupal\Core\Render\Element;
 use Drupal\webform\Plugin\WebformElementBase;
+use Drupal\webform\Utility\WebformElementHelper;
 use Drupal\webform\WebformInterface;
 use Drupal\webform\WebformSubmissionInterface;
 
@@ -106,13 +106,13 @@ protected function format($type, array &$element, WebformSubmissionInterface $we
   protected function formatHtmlItem(array $element, WebformSubmissionInterface $webform_submission, array $options = []) {
     $rows = [];
     foreach ($element as $row_key => $row_element) {
-      if (Element::property($row_key)) {
+      if (WebformElementHelper::property($row_key)) {
         continue;
       }
 
       $element[$row_key] = [];
       foreach ($row_element as $column_key => $column_element) {
-        if (Element::property($column_key)) {
+        if (WebformElementHelper::property($column_key)) {
           continue;
         }
 
diff --git a/web/modules/webform/src/Plugin/WebformElement/Telephone.php b/web/modules/webform/src/Plugin/WebformElement/Telephone.php
index 0111237467..aa992b9419 100644
--- a/web/modules/webform/src/Plugin/WebformElement/Telephone.php
+++ b/web/modules/webform/src/Plugin/WebformElement/Telephone.php
@@ -84,6 +84,9 @@ public function prepare(array &$element, WebformSubmissionInterface $webform_sub
         $cdn = reset($intl_tel_input_library['cdn']);
         $utils_script = $cdn . 'build/js/utils.js';
       }
+      else {
+        $utils_script = base_path() . 'libraries/jquery.intl-tel-input/build/js/utils.js';
+      }
       $element['#attached']['drupalSettings']['webform']['intlTelInput']['utilsScript'] = $utils_script;
     }
 
diff --git a/web/modules/webform/src/Plugin/WebformElement/TextBase.php b/web/modules/webform/src/Plugin/WebformElement/TextBase.php
index 6de4c85efc..fedee8ed06 100644
--- a/web/modules/webform/src/Plugin/WebformElement/TextBase.php
+++ b/web/modules/webform/src/Plugin/WebformElement/TextBase.php
@@ -178,7 +178,7 @@ public function form(array $form, FormStateInterface $form_state) {
     $form['validation']['pattern_error'] = [
       '#type' => 'textfield',
       '#title' => $this->t('Pattern message'),
-      '#description' => $this->t('If set, this message will be used when a pattern is not matched, instead of the default "@message" message.', ['@message' => t('%name field is not in the right format.')]),
+      '#description' => $this->t('If set, this message will be used when a pattern is not matched, instead of the default "@message" message.', ['@message' => $this->t('%name field is not in the right format.')]),
       '#states' => [
         'visible' => [
           ':input[name="properties[pattern][checkbox]"]' => ['checked' => TRUE],
@@ -324,7 +324,7 @@ public function validateConfigurationForm(array &$form, FormStateInterface $form
       $pcre_pattern = preg_replace('/\\\\u([a-fA-F0-9]{4})/', '\\x{\\1}', $properties['#pattern']);
 
       if (preg_match('{^(?:' . $pcre_pattern . ')$}u', NULL) === FALSE) {
-        $form_state->setErrorByName('pattern', t('Pattern %pattern is not a valid regular expression.', ['%pattern' => $properties['#pattern']]));
+        $form_state->setErrorByName('pattern', $this->t('Pattern %pattern is not a valid regular expression.', ['%pattern' => $properties['#pattern']]));
       }
 
       set_error_handler('_drupal_error_handler');
@@ -332,8 +332,8 @@ public function validateConfigurationForm(array &$form, FormStateInterface $form
 
     // Validate #counter_maximum.
     if (!empty($properties['#counter_type']) && empty($properties['#counter_maximum']) && empty($properties['#counter_minimum'])) {
-      $form_state->setErrorByName('counter_minimum', t('Counter minimum or maximum is required.'));
-      $form_state->setErrorByName('counter_maximum', t('Counter minimum or maximum is required.'));
+      $form_state->setErrorByName('counter_minimum', $this->t('Counter minimum or maximum is required.'));
+      $form_state->setErrorByName('counter_maximum', $this->t('Counter minimum or maximum is required.'));
     }
   }
 
diff --git a/web/modules/webform/src/Plugin/WebformElement/TextBaseTrait.php b/web/modules/webform/src/Plugin/WebformElement/TextBaseTrait.php
index 3e8b093b61..e46f1bcdf7 100644
--- a/web/modules/webform/src/Plugin/WebformElement/TextBaseTrait.php
+++ b/web/modules/webform/src/Plugin/WebformElement/TextBaseTrait.php
@@ -23,7 +23,7 @@ trait TextBaseTrait {
    */
   public function buildCounterForm($name = '', $title = NULL) {
     if ($title === NULL) {
-      $title = t('Counter');
+      $title = $this->t('Counter');
     }
     $t_args = ['@title' => $title];
 
diff --git a/web/modules/webform/src/Plugin/WebformElement/TextFormat.php b/web/modules/webform/src/Plugin/WebformElement/TextFormat.php
index 9d8ebe54b7..42d8be9468 100644
--- a/web/modules/webform/src/Plugin/WebformElement/TextFormat.php
+++ b/web/modules/webform/src/Plugin/WebformElement/TextFormat.php
@@ -186,11 +186,15 @@ public static function preRenderFixTextFormatStates(array $element) {
         $element['#suffix'] = $element['#suffix'] . '</div>';
       }
     }
+    // Do not allow format value to be cleared when the text form is hidden
+    // via #states.
+    // @see \Drupal\webform\Element\WebformHtmlEditor::processWebformHtmlEditor
+    $element['format']['#attributes']['data-webform-states-no-clear'] = TRUE;
     return $element;
   }
 
   /**
-   * @inheritDoc
+   * {@inheritDoc}
    */
   public static function trustedCallbacks() {
     return array_merge(parent::trustedCallbacks(), ['preRenderFixTextFormatStates']);
diff --git a/web/modules/webform/src/Plugin/WebformElement/VerticalTabs.php b/web/modules/webform/src/Plugin/WebformElement/VerticalTabs.php
new file mode 100644
index 0000000000..ccd6f59aeb
--- /dev/null
+++ b/web/modules/webform/src/Plugin/WebformElement/VerticalTabs.php
@@ -0,0 +1,154 @@
+<?php
+
+namespace Drupal\webform\Plugin\WebformElement;
+
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\webform\Element\WebformMessage as WebformMessageElement;
+use Drupal\webform\Plugin\WebformElementBase;
+use Drupal\webform\WebformSubmissionInterface;
+
+/**
+ * Provides a hidden 'vertical_tabs' element.
+ *
+ * @WebformElement(
+ *   id = "vertical_tabs",
+ *   label = @Translation("Vertical tabs"),
+ *   description = @Translation("Provides a vertical tabs element."),
+ *   category = @Translation("Markup elements"),
+ *   hidden = TRUE
+ * )
+ */
+class VerticalTabs extends WebformElementBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function defineDefaultProperties() {
+    return [
+      // Element settings.
+      'title' => $this->t('Vertical Tabs'),
+      // Description/Help.
+      'help' => '',
+      'help_title' => '',
+      'description' => '',
+      'more' => '',
+      'more_title' => '',
+      // Form display.
+      'title_display' => 'invisible',
+      'description_display' => '',
+      'help_display' => '',
+      // Form validation.
+      'required' => FALSE,
+      // Attributes.
+      'wrapper_attributes' => [],
+      'label_attributes' => [],
+      // Vertical tabs.
+      'default_tab' => '',
+    ] + $this->defineDefaultBaseProperties();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function defineDefaultBaseProperties() {
+    $properties = parent::defineDefaultBaseProperties();
+    unset(
+      $properties['prepopulate'],
+      $properties['states_clear']
+    );
+    return $properties;
+  }
+
+  /****************************************************************************/
+
+  /**
+   * {@inheritdoc}
+   */
+  public function isInput(array $element) {
+    return FALSE;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function isContainer(array $element) {
+    return FALSE;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function prepare(array &$element, WebformSubmissionInterface $webform_submission = NULL) {
+    parent::prepare($element, $webform_submission);
+
+    $element += ['#title_display' => 'invisible'];
+
+    return $element;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildHtml(array $element, WebformSubmissionInterface $webform_submission, array $options = []) {
+    // Vertical tab are not rendered when a submission is viewed.
+    return [];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildText(array $element, WebformSubmissionInterface $webform_submission, array $options = []) {
+    // Vertical tab are not rendered when a submission is viewed.
+    return [];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getRelatedTypes(array $element) {
+    return [];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getElementSelectorOptions(array $element) {
+    return [];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function form(array $form, FormStateInterface $form_state) {
+    $form = parent::form($form, $form_state);
+    unset($form['element']['title']['#required']);
+
+    $form['vertical_tabs'] = [
+      '#type' => 'fieldset',
+      '#title' => $this->t('Vertical tabs settings'),
+      '#open' => TRUE,
+    ];
+    $form['vertical_tabs']['vertical_tabs_message'] = [
+      '#type' => 'webform_message',
+      '#message_type' => 'info',
+      '#access' => TRUE,
+      '#message_message' => $this->t("To add details and fieldsets this vertical tabs element, you must defined a custom <code>'#group': vertical_tab_key</code> property in the details or fieldset element with this vertical tabs' element key."),
+      '#message_close' => TRUE,
+      '#message_storage' => WebformMessageElement::STORAGE_SESSION,
+    ];
+    $form['vertical_tabs']['default_tab'] = [
+      '#type' => 'textfield',
+      '#title' => $this->t('Default tab'),
+      '#description' => $this->t('The default tab must be the [id] attributes of the details or fieldset element.'),
+    ];
+    return $form;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function preview() {
+    return [];
+  }
+
+}
diff --git a/web/modules/webform/src/Plugin/WebformElement/View.php b/web/modules/webform/src/Plugin/WebformElement/View.php
index d57d270d8d..be2634500e 100644
--- a/web/modules/webform/src/Plugin/WebformElement/View.php
+++ b/web/modules/webform/src/Plugin/WebformElement/View.php
@@ -143,14 +143,14 @@ public function validateConfigurationForm(array &$form, FormStateInterface $form
     /** @var \Drupal\views\ViewEntityInterface $view */
     $view = ViewEntity::load($properties['#name']);
     if (!$view) {
-      $form_state->setErrorByName('name', t('View %name does not exist.', ['%name' => $properties['#name']]));
+      $form_state->setErrorByName('name', $this->t('View %name does not exist.', ['%name' => $properties['#name']]));
       return;
     }
 
     // Check display id.
     $display = $view->getDisplay($properties['#display_id']);
     if (!$display) {
-      $form_state->setErrorByName('display_id', t('View display %display_id does not exist.', ['%display_id' => $properties['#display_id']]));
+      $form_state->setErrorByName('display_id', $this->t('View display %display_id does not exist.', ['%display_id' => $properties['#display_id']]));
       return;
     }
 
@@ -168,7 +168,7 @@ public function validateConfigurationForm(array &$form, FormStateInterface $form
       }
       foreach ($filters as $filter) {
         if (!empty($filter['exposed'])) {
-          $form_state->setErrorByName('display_id', t('View display %display_id has exposed filters which will break the webform.', ['%display_id' => $properties['#display_id']]));
+          $form_state->setErrorByName('display_id', $this->t('View display %display_id has exposed filters which will break the webform.', ['%display_id' => $properties['#display_id']]));
           break;
         }
       }
diff --git a/web/modules/webform/src/Plugin/WebformElement/WebformCompositeBase.php b/web/modules/webform/src/Plugin/WebformElement/WebformCompositeBase.php
index 6dee9b7e36..6cc81fd815 100644
--- a/web/modules/webform/src/Plugin/WebformElement/WebformCompositeBase.php
+++ b/web/modules/webform/src/Plugin/WebformElement/WebformCompositeBase.php
@@ -945,7 +945,7 @@ protected function buildCompositeElementsTable(array $form, FormStateInterface $
         '#help' => '<b>' . $this->t('Key') . ':</b> ' . $this->t('The machine-readable name.') .
           '<hr/><b>' . $this->t('Title') . ':</b> ' . $this->t('This is used as a descriptive label when displaying this webform element.') .
           '<hr/><b>' . $this->t('Placeholder') . ':</b> ' . $this->t('The placeholder will be shown in the element until the user starts entering a value.') .
-          '<hr/><b>' . $this->t('Description') . ':</b> ' . $this->t('A short description of the element used as help for the user when he/she uses the webform.') .
+          '<hr/><b>' . $this->t('Description') . ':</b> ' . $this->t('A short description of the element used as help for the user when they use the webform.') .
           '<hr/><b>' . $this->t('Help text') . ':</b> ' . $this->t('A tooltip displayed after the title.') .
           '<hr/><b>' . $this->t('Title display') . ':</b> ' . $this->t('A tooltip displayed after the title.'),
         '#help_title' => $this->t('Labels'),
@@ -1033,7 +1033,7 @@ protected function buildCompositeElementsTable(array $form, FormStateInterface $
               '#type' => 'textarea',
               '#title' => $this->t('@title help text', $t_args),
               '#title_display' => 'invisible',
-              '#description' => $this->t('A short description of the element used as help for the user when he/she uses the webform.'),
+              '#description' => $this->t('A short description of the element used as help for the user when they use the webform.'),
               '#description_display' => 'invisible',
               '#rows' => 2,
               '#placeholder' => $this->t('Enter help text…'),
@@ -1249,7 +1249,7 @@ public function initializeCompositeElements(array &$element) {
    */
   protected function initializeCompositeElementsRecursive(array &$element, array &$composite_elements) {
     foreach ($composite_elements as $composite_key => &$composite_element) {
-      if (Element::property($composite_key)) {
+      if (WebformElementHelper::property($composite_key)) {
         continue;
       }
 
diff --git a/web/modules/webform/src/Plugin/WebformElement/WebformComputedBase.php b/web/modules/webform/src/Plugin/WebformElement/WebformComputedBase.php
index fa45fd43d7..4ffea5258f 100644
--- a/web/modules/webform/src/Plugin/WebformElement/WebformComputedBase.php
+++ b/web/modules/webform/src/Plugin/WebformElement/WebformComputedBase.php
@@ -286,7 +286,8 @@ public function postSave(array &$element, WebformSubmissionInterface $webform_su
    *   The type of markup, HTML or plain-text.
    */
   protected function getMode(array $element) {
-    return WebformComputedBaseElement::getMode($element);
+    $class = $this->getFormElementClassDefinition();
+    return $class::getMode($element);
   }
 
   /**
diff --git a/web/modules/webform/src/Plugin/WebformElement/WebformElement.php b/web/modules/webform/src/Plugin/WebformElement/WebformElement.php
index 96ea617ae2..543142bf6a 100644
--- a/web/modules/webform/src/Plugin/WebformElement/WebformElement.php
+++ b/web/modules/webform/src/Plugin/WebformElement/WebformElement.php
@@ -12,6 +12,7 @@
  *   id = "webform_element",
  *   label = @Translation("Generic element"),
  *   description = @Translation("Provides a generic form element."),
+ *   hidden = TRUE,
  * )
  */
 class WebformElement extends WebformElementBase {
diff --git a/web/modules/webform/src/Plugin/WebformElement/WebformLikert.php b/web/modules/webform/src/Plugin/WebformElement/WebformLikert.php
index 99d2942967..7e92529e62 100644
--- a/web/modules/webform/src/Plugin/WebformElement/WebformLikert.php
+++ b/web/modules/webform/src/Plugin/WebformElement/WebformLikert.php
@@ -121,7 +121,7 @@ protected function formatHtmlItem(array $element, WebformSubmissionInterface $we
           'width' => '40%',
         ];
         foreach ($element['#answers'] as $answer_value => $answer_text) {
-          list($answer_title) = explode(WebformOptionsHelper::DESCRIPTION_DELIMITER, $answer_text);
+          list($answer_title) = WebformOptionsHelper::splitOption($answer_text);
           $header[$answer_value] = [
             'data' => $answer_title,
             'align' => 'center',
@@ -133,7 +133,7 @@ protected function formatHtmlItem(array $element, WebformSubmissionInterface $we
 
         $rows = [];
         foreach ($element['#questions'] as $question_key => $question_text) {
-          list($question_title) = explode(WebformOptionsHelper::DESCRIPTION_DELIMITER, $question_text);
+          list($question_title) = WebformOptionsHelper::splitOption($question_text);
 
           $question_value = (isset($value[$question_key])) ? $value[$question_key] : NULL;
           $row = [];
@@ -167,7 +167,7 @@ protected function formatHtmlItem(array $element, WebformSubmissionInterface $we
       case 'list':
         $items = [];
         foreach ($element['#questions'] as $question_key => $question_text) {
-          list($question_title) = explode(WebformOptionsHelper::DESCRIPTION_DELIMITER, $question_text);
+          list($question_title) = WebformOptionsHelper::splitOption($question_text);
           $answer_value = (isset($value[$question_key])) ? $value[$question_key] : NULL;
           $answer_text = ($answer_value !== NULL) ? WebformOptionsHelper::getOptionText($answer_value, $element['#answers'], TRUE) : $this->t('[blank]');
           $items[$question_key] = [
@@ -406,6 +406,9 @@ public function getElementSelectorSourceValues(array $element) {
    */
   public function form(array $form, FormStateInterface $form_state) {
     $form = parent::form($form, $form_state);
+
+    $form['validation']['required_container']['required_error']['#description'] = $this->t('If set, this message will be used when a required likert question is empty, instead of the default "X field is required." message. To include the question title in the required message, please include the @name placeholder in the required message.');
+
     $form['likert'] = [
       '#type' => 'fieldset',
       '#title' => $this->t('Likert settings'),
diff --git a/web/modules/webform/src/Plugin/WebformElement/WebformManagedFileBase.php b/web/modules/webform/src/Plugin/WebformElement/WebformManagedFileBase.php
index 2e1e1e1849..99809ad2af 100644
--- a/web/modules/webform/src/Plugin/WebformElement/WebformManagedFileBase.php
+++ b/web/modules/webform/src/Plugin/WebformElement/WebformManagedFileBase.php
@@ -512,7 +512,7 @@ protected function getFile(array $element, $value, array $options) {
       return $value;
     }
 
-    return $this->entityTypeManager->getStorage('file')->load($value);
+    return $this->entityTypeManager->getStorage('file')->loadUnchanged($value);
   }
 
   /**
@@ -532,7 +532,9 @@ protected function getFiles(array $element, $value, array $options = []) {
     if (empty($value)) {
       return [];
     }
-    return $this->entityTypeManager->getStorage('file')->loadMultiple((array) $value);
+    $fids = (array) $value;
+    $this->entityTypeManager->getStorage('file')->resetCache($fids);
+    return $this->entityTypeManager->getStorage('file')->loadMultiple($fids);
   }
 
   /**
@@ -1270,6 +1272,7 @@ public function addFiles(array $element, WebformSubmissionInterface $webform_sub
         $file->setFileUri($destination_uri);
         $file->setFileName($this->fileSystem->basename($destination_uri));
         $file->save();
+        $this->entityTypeManager->getStorage('file')->resetCache([$file->id()]);
       }
 
       // Update file usage table.
@@ -1353,6 +1356,50 @@ protected function getFileDestinationUri(array $element, FileInterface $file, We
     return $destination_folder . '/' . $destination_basename . '.' . $destination_extension;
   }
 
+  /**
+   * Check access for a file associated with a webform submission.
+   *
+   * @param \Drupal\file\FileInterface $file
+   *   A file.
+   * @param \Drupal\Core\Session\AccountInterface|null $account
+   *   A user account.
+   *
+   * @return bool|null
+   *   Returns NULL if the file is not attached to a webform submission.
+   *   Returns FALSE if the user can't access the file.
+   *   Returns TRUE if the user can access the file.
+   */
+  public static function accessFile(FileInterface $file, AccountInterface $account = NULL) {
+    if (empty($file)) {
+      return NULL;
+    }
+
+    /** @var \Drupal\file\FileUsage\FileUsageInterface $file_usage */
+    $file_usage = \Drupal::service('file.usage');
+    $usage = $file_usage->listUsage($file);
+
+    // Check for webform submission usage.
+    if (!isset($usage['webform']) || !isset($usage['webform']['webform_submission'])) {
+      return NULL;
+    }
+
+    // Check entity ids.
+    $entity_ids = array_keys($usage['webform']['webform_submission']);
+    if (empty($entity_ids)) {
+      return NULL;
+    }
+
+    // Check the first webform submission since files are can only applied to
+    // one submission.
+    $entity_id = reset($entity_ids);
+    $webform_submission = WebformSubmission::load($entity_id);
+    if (!$webform_submission) {
+      return NULL;
+    }
+
+    return $webform_submission->access('view', $account);
+  }
+
   /**
    * Control access to webform submission private file downloads.
    *
@@ -1377,56 +1424,30 @@ public static function accessFileDownload($uri) {
 
     /** @var \Drupal\file\FileInterface $file */
     $file = reset($files);
-    if (empty($file)) {
-      return NULL;
-    }
 
-    /** @var \Drupal\file\FileUsage\FileUsageInterface $file_usage */
-    $file_usage = \Drupal::service('file.usage');
-    $usage = $file_usage->listUsage($file);
-    foreach ($usage as $module => $entity_types) {
-      // Check for Webform module.
-      if ($module !== 'webform') {
-        continue;
+    $access = static::accessFile($file);
+    if ($access === TRUE) {
+      // Return file content headers.
+      $headers = file_get_content_headers($file);
+
+      /** @var \Drupal\Core\File\FileSystemInterface $file_system */
+      $file_system = \Drupal::service('file_system');
+      $filename = $file_system->basename($uri);
+      // Force blacklisted files to be downloaded instead of opening in the browser.
+      if (in_array($headers['Content-Type'], static::$blacklistedMimeTypes)) {
+        $headers['Content-Disposition'] = 'attachment; filename="' . Unicode::mimeHeaderEncode($filename) . '"';
       }
-
-      foreach ($entity_types as $entity_type => $counts) {
-        $entity_ids = array_keys($counts);
-
-        // Check for webform submission entity type.
-        if ($entity_type !== 'webform_submission' || empty($entity_ids)) {
-          continue;
-        }
-
-        // Get webform submission.
-        $webform_submission = WebformSubmission::load(reset($entity_ids));
-        if (!$webform_submission) {
-          continue;
-        }
-
-        // Check webform submission view access.
-        if (!$webform_submission->access('view')) {
-          return -1;
-        }
-
-        // Return file content headers.
-        $headers = file_get_content_headers($file);
-
-        /** @var \Drupal\Core\File\FileSystemInterface $file_system */
-        $file_system = \Drupal::service('file_system');
-        $filename = $file_system->basename($uri);
-        // Force blacklisted files to be downloaded instead of opening in the browser.
-        if (in_array($headers['Content-Type'], static::$blacklistedMimeTypes)) {
-          $headers['Content-Disposition'] = 'attachment; filename="' . Unicode::mimeHeaderEncode($filename) . '"';
-        }
-        else {
-          $headers['Content-Disposition'] = 'inline; filename="' . Unicode::mimeHeaderEncode($filename) . '"';
-        }
-
-        return $headers;
+      else {
+        $headers['Content-Disposition'] = 'inline; filename="' . Unicode::mimeHeaderEncode($filename) . '"';
       }
+      return $headers;
+    }
+    elseif ($access === FALSE) {
+      return -1;
+    }
+    else {
+      return NULL;
     }
-    return NULL;
   }
 
   /**
diff --git a/web/modules/webform/src/Plugin/WebformElement/WebformMapping.php b/web/modules/webform/src/Plugin/WebformElement/WebformMapping.php
index 0c242ee824..7d7bb47b6f 100644
--- a/web/modules/webform/src/Plugin/WebformElement/WebformMapping.php
+++ b/web/modules/webform/src/Plugin/WebformElement/WebformMapping.php
@@ -142,7 +142,7 @@ protected function formatHtmlItem(array $element, WebformSubmissionInterface $we
 
         $rows = [];
         foreach ($element['#source'] as $source_key => $source_text) {
-          list($source_title) = explode(WebformOptionsHelper::DESCRIPTION_DELIMITER, $source_text);
+          list($source_title) = WebformOptionsHelper::splitOption($source_text);
           $destination_value = (isset($value[$source_key])) ? $value[$source_key] : NULL;
           $destination_title = ($destination_value) ? WebformOptionsHelper::getOptionText($destination_value, $element['#destination']) : $this->t('[blank]');
           $rows[$source_key] = [
@@ -165,7 +165,7 @@ protected function formatHtmlItem(array $element, WebformSubmissionInterface $we
       case 'list':
         $items = [];
         foreach ($element['#source'] as $source_key => $source_text) {
-          list($source_title) = explode(WebformOptionsHelper::DESCRIPTION_DELIMITER, $source_text);
+          list($source_title) = WebformOptionsHelper::splitOption($source_text);
           $destination_value = (isset($value[$source_key])) ? $value[$source_key] : NULL;
           $destination_title = ($destination_value) ? WebformOptionsHelper::getOptionText($destination_value, $element['#destination']) : $this->t('[blank]');
           $items[$source_key] = ['#markup' => "$source_title $arrow $destination_title"];
@@ -210,7 +210,7 @@ protected function formatTextItem(array $element, WebformSubmissionInterface $we
       case 'list':
         $list = [];
         foreach ($element['#source'] as $source_key => $source_text) {
-          list($source_title) = explode(WebformOptionsHelper::DESCRIPTION_DELIMITER, $source_text);
+          list($source_title) = WebformOptionsHelper::splitOption($source_text);
           $destination_value = (isset($value[$source_key])) ? $value[$source_key] : NULL;
           $destination_title = ($destination_value) ? WebformOptionsHelper::getOptionText($destination_value, $element['#destination']) : $this->t('[blank]');
           $list[] = "$source_title $arrow $destination_title";
diff --git a/web/modules/webform/src/Plugin/WebformElement/WebformTableRow.php b/web/modules/webform/src/Plugin/WebformElement/WebformTableRow.php
index e2d4e61335..f307f25e6b 100644
--- a/web/modules/webform/src/Plugin/WebformElement/WebformTableRow.php
+++ b/web/modules/webform/src/Plugin/WebformElement/WebformTableRow.php
@@ -3,9 +3,9 @@
 namespace Drupal\webform\Plugin\WebformElement;
 
 use Drupal\Core\Form\FormStateInterface;
-use Drupal\Core\Render\Element;
 use Drupal\webform\Plugin\WebformElementBase;
 use Drupal\webform\Element\WebformMessage as WebformMessageElement;
+use Drupal\webform\Utility\WebformElementHelper;
 use Drupal\webform\WebformInterface;
 use Drupal\webform\WebformSubmissionInterface;
 use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
@@ -101,7 +101,7 @@ public function buildHtml(array $element, WebformSubmissionInterface $webform_su
       case 'table':
       default:
         foreach ($element as $column_key => $column_element) {
-          if (Element::property($column_key)) {
+          if (WebformElementHelper::property($column_key)) {
             continue;
           }
 
diff --git a/web/modules/webform/src/Plugin/WebformElement/WebformTermCheckboxes.php b/web/modules/webform/src/Plugin/WebformElement/WebformTermCheckboxes.php
index 6bbb7a4abb..1b053f989d 100644
--- a/web/modules/webform/src/Plugin/WebformElement/WebformTermCheckboxes.php
+++ b/web/modules/webform/src/Plugin/WebformElement/WebformTermCheckboxes.php
@@ -32,6 +32,7 @@ protected function defineDefaultProperties() {
       'breadcrumb_delimiter' => ' › ',
       'tree_delimiter' => '&nbsp;&nbsp;&nbsp;',
       'scroll' => TRUE,
+      'depth' => NULL,
     ] + parent::defineDefaultProperties();
 
     unset(
diff --git a/web/modules/webform/src/Plugin/WebformElement/WebformTermReferenceTrait.php b/web/modules/webform/src/Plugin/WebformElement/WebformTermReferenceTrait.php
index 7238e582a1..be047eaf87 100644
--- a/web/modules/webform/src/Plugin/WebformElement/WebformTermReferenceTrait.php
+++ b/web/modules/webform/src/Plugin/WebformElement/WebformTermReferenceTrait.php
@@ -103,6 +103,11 @@ public function form(array $form, FormStateInterface $form_state) {
         ],
       ],
     ];
+    $form['term_reference']['depth'] = [
+      '#type' => 'number',
+      '#title' => $this->t('Limit term depth'),
+      '#field_suffix' => $this->t('level(s)'),
+    ];
     $form['term_reference']['scroll'] = [
       '#type' => 'checkbox',
       '#title' => $this->t('Allow terms to be scrollable'),
diff --git a/web/modules/webform/src/Plugin/WebformElement/WebformTermSelect.php b/web/modules/webform/src/Plugin/WebformElement/WebformTermSelect.php
index 8a2f6c5afa..f1f50a7ed3 100644
--- a/web/modules/webform/src/Plugin/WebformElement/WebformTermSelect.php
+++ b/web/modules/webform/src/Plugin/WebformElement/WebformTermSelect.php
@@ -31,6 +31,7 @@ protected function defineDefaultProperties() {
       'breadcrumb' => FALSE,
       'breadcrumb_delimiter' => ' › ',
       'tree_delimiter' => '-',
+      'depth' => NULL,
     ] + parent::defineDefaultProperties();
     unset(
       $properties['options'],
diff --git a/web/modules/webform/src/Plugin/WebformElement/WebformTime.php b/web/modules/webform/src/Plugin/WebformElement/WebformTime.php
index f5d6076b8f..3e4dc75747 100644
--- a/web/modules/webform/src/Plugin/WebformElement/WebformTime.php
+++ b/web/modules/webform/src/Plugin/WebformElement/WebformTime.php
@@ -156,7 +156,7 @@ public function form(array $form, FormStateInterface $form_state) {
   protected static function formatTime($custom_format, $timestamp = NULL) {
     /** @var \Drupal\Core\Datetime\DateFormatterInterface $date_formatter */
     $date_formatter = \Drupal::service('date.formatter');
-    return $date_formatter->format($timestamp ?: time(), 'custom', $custom_format);
+    return $date_formatter->format($timestamp ?: \Drupal::time()->getRequestTime(), 'custom', $custom_format);
   }
 
 }
diff --git a/web/modules/webform/src/Plugin/WebformElement/WebformVariant.php b/web/modules/webform/src/Plugin/WebformElement/WebformVariant.php
index 8575b89987..fc96553805 100644
--- a/web/modules/webform/src/Plugin/WebformElement/WebformVariant.php
+++ b/web/modules/webform/src/Plugin/WebformElement/WebformVariant.php
@@ -14,7 +14,7 @@
  *
  * @WebformElement(
  *   id = "webform_variant",
- *   label = @Translation("Variant [EXPERIMENTAL]"),
+ *   label = @Translation("Variant"),
  *   description = @Translation("Provides a form element for enabling and tracking webform variants."),
  *   category = @Translation("Advanced elements"),
  * )
diff --git a/web/modules/webform/src/Plugin/WebformElementBase.php b/web/modules/webform/src/Plugin/WebformElementBase.php
index 36bb9b954d..c42752b1db 100644
--- a/web/modules/webform/src/Plugin/WebformElementBase.php
+++ b/web/modules/webform/src/Plugin/WebformElementBase.php
@@ -1147,6 +1147,13 @@ protected function prepareWrapper(array &$element) {
    *   An element with #states added to the #prefix and #suffix.
    */
   public static function preRenderFixStatesWrapper(array $element) {
+    // Allow Ajax callbacks to disable states wrapper.
+    // @see \Drupal\webform\Element\WebformComputedBase::ajaxWebformComputedCallback
+    // @see \Drupal\webform\Element\WebformMultiple::ajaxCallback
+    if (isset($element['#webform_wrapper']) && $element['#webform_wrapper'] === FALSE) {
+      return $element;
+    }
+
     WebformElementHelper::fixStatesWrapper($element);
     return $element;
   }
@@ -1161,6 +1168,13 @@ public static function preRenderFixStatesWrapper(array $element) {
    *   An element with flexbox wrapper added to the #prefix and #suffix.
    */
   public static function preRenderFixFlexboxWrapper(array $element) {
+    // Allow Ajax callbacks to disable flexbox wrapper.
+    // @see \Drupal\webform\Element\WebformComputedBase::ajaxWebformComputedCallback
+    // @see \Drupal\webform\Element\WebformMultiple::ajaxCallback
+    if (isset($element['#webform_wrapper']) && $element['#webform_wrapper'] === FALSE) {
+      return $element;
+    }
+
     $flex = (isset($element['#flex'])) ? $element['#flex'] : 1;
     $element += ['#prefix' => '', '#suffix' => ''];
     $element['#prefix'] = '<div class="webform-flex webform-flex--' . $flex . '"><div class="webform-flex--container">' . $element['#prefix'];
@@ -1501,11 +1515,11 @@ protected function formatHtmlItems(array &$element, WebformSubmissionInterface $
         foreach ($items as $index => &$item) {
           $build[] = (is_array($item)) ? $item : ['#markup' => $item];
           if ($total === 2 && $index === 0) {
-            $build[] = ['#markup' => ' ' . t('and') . ' '];
+            $build[] = ['#markup' => ' ' . $this->t('and') . ' '];
           }
           elseif ($index !== ($total - 1)) {
             if ($index === ($total - 2)) {
-              $build[] = ['#markup' => ', ' . t('and') . ' '];
+              $build[] = ['#markup' => ', ' . $this->t('and') . ' '];
             }
             else {
               $build[] = ['#markup' => ', '];
@@ -2388,7 +2402,7 @@ public function form(array $form, FormStateInterface $form_state) {
     $form['element_description']['description'] = [
       '#type' => 'webform_html_editor',
       '#title' => $this->t('Description'),
-      '#description' => $this->t('A short description of the element used as help for the user when he/she uses the webform.'),
+      '#description' => $this->t('A short description of the element used as help for the user when they use the webform.'),
     ];
     $form['element_description']['help'] = [
       '#type' => 'details',
@@ -3007,9 +3021,9 @@ public function form(array $form, FormStateInterface $form_state) {
         'form_element' => $this->t('Form element'),
         'container' => $this->t('Container'),
       ],
-      '#description' => '<b>' . t('Fieldset') . ':</b> ' . t('Wraps inputs in a fieldset.') . ' <strong>' . t('Recommended') . '</strong>' .
-        '<br/><br/><b>' . t('Form element') . ':</b> ' . t('Wraps inputs in a basic form element with title and description.') .
-        '<br/><br/><b>' . t('Container') . ':</b> ' . t('Wraps inputs in a basic div with no title or description.'),
+      '#description' => '<b>' . $this->t('Fieldset') . ':</b> ' . $this->t('Wraps inputs in a fieldset.') . ' <strong>' . $this->t('Recommended') . '</strong>' .
+        '<br/><br/><b>' . $this->t('Form element') . ':</b> ' . $this->t('Wraps inputs in a basic form element with title and description.') .
+        '<br/><br/><b>' . $this->t('Container') . ':</b> ' . $this->t('Wraps inputs in a basic div with no title or description.'),
     ];
     // Hide element description and display when using a container wrapper.
     if ($this->hasProperty('wrapper_type')) {
@@ -3533,7 +3547,7 @@ protected function setConfigurationFormDefaultValueRecursive(array &$form, array
 
     foreach ($form as $property_name => &$property_element) {
       // Skip all properties.
-      if (is_string($property_name) && Element::property($property_name)) {
+      if (WebformElementHelper::property($property_name)) {
         continue;
       }
 
@@ -3788,7 +3802,7 @@ protected function hasCompositeFormElementWrapper() {
   }
 
   /**
-   * @inheritDoc
+   * {@inheritdoc}
    */
   public static function trustedCallbacks() {
     return ['preRenderFixStatesWrapper', 'preRenderFixFlexboxWrapper', 'preRenderWebformCompositeFormElement'];
diff --git a/web/modules/webform/src/Plugin/WebformExporter/DelimitedWebformExporter.php b/web/modules/webform/src/Plugin/WebformExporter/DelimitedWebformExporter.php
index 748799b125..4568945213 100644
--- a/web/modules/webform/src/Plugin/WebformExporter/DelimitedWebformExporter.php
+++ b/web/modules/webform/src/Plugin/WebformExporter/DelimitedWebformExporter.php
@@ -31,9 +31,7 @@ public function defaultConfiguration() {
    */
   public function setConfiguration(array $configuration) {
     parent::setConfiguration($configuration);
-    if ($this->configuration['delimiter'] === '\t') {
-      $this->configuration['delimiter'] = "\t";
-    }
+    $this->configuration['delimiter'] = ($this->configuration['delimiter'] === '\t') ? "\t" : $this->configuration['delimiter'];
     return $this;
   }
 
@@ -61,12 +59,12 @@ public function buildConfigurationForm(array $form, FormStateInterface $form_sta
         '.'  => $this->t('Period (.)'),
         ' '  => $this->t('Space ( )'),
       ],
-      '#default_value' => $this->configuration['delimiter'],
+      '#default_value' => ($this->configuration['delimiter'] === "\t") ? '\t' : $this->configuration['delimiter'],
     ];
     $form['excel'] = [
       '#type' => 'checkbox',
       '#title' => $this->t('Generate Excel compatible file'),
-      '#description' => $this->t("If checked, the generated file's carriage returns will be compatible with Excel."),
+      '#description' => $this->t("If checked, the generated file's carriage returns will be compatible with Excel and a marker flagging the data as UTF-8 will be added at the beginning."),
       '#return_value' => TRUE,
       '#default_value' => $this->configuration['excel'],
     ];
@@ -90,6 +88,9 @@ public function getFileExtension() {
    * {@inheritdoc}
    */
   public function writeHeader() {
+    if ($this->configuration['excel']) {
+      fwrite($this->fileHandle, "\xEF\xBB\xBF");
+    }
     $header = $this->buildHeader();
     fputcsv($this->fileHandle, $header, $this->configuration['delimiter']);
   }
diff --git a/web/modules/webform/src/Plugin/WebformHandler/EmailWebformHandler.php b/web/modules/webform/src/Plugin/WebformHandler/EmailWebformHandler.php
index 343f9640a7..4ff9b5d310 100644
--- a/web/modules/webform/src/Plugin/WebformHandler/EmailWebformHandler.php
+++ b/web/modules/webform/src/Plugin/WebformHandler/EmailWebformHandler.php
@@ -511,6 +511,12 @@ public function buildConfigurationForm(array $form, FormStateInterface $form_sta
     $form['from']['from_mail'] = $this->buildElement('from_mail', $this->t('From email'), $this->t('From email address'), TRUE, $mail_element_options, $options_element_options, NULL, $other_element_email_options);
     $form['from']['from_name'] = $this->buildElement('from_name', $this->t('From name'), $this->t('From name'), FALSE, $name_element_options, NULL, NULL, $other_element_name_options);
     $form['from']['token_tree_link'] = $this->buildTokenTreeElement();
+    // 'From name' is not used if it contains multiple email addresses.
+    $form['from']['from_name']['from_name']['#states'] = [
+      '!visible' => [
+        ':input[name="settings[from_mail][other]"]' => ['value' => ['pattern' => ',']],
+      ],
+    ];
 
     // Message.
     $form['message'] = [
@@ -1501,7 +1507,7 @@ protected function getBodyDefaultValues($format = NULL) {
    * @return array
    *   A select other element.
    */
-  protected function buildElement($name, $title, $label, $required = FALSE, array $element_options, array $options_options = NULL, array $role_options = NULL, array $other_options = NULL) {
+  protected function buildElement($name, $title, $label, $required = FALSE, array $element_options = [], array $options_options = NULL, array $role_options = NULL, array $other_options = NULL) {
     list($element_name, $element_type) = (strpos($name, '_') !== FALSE) ? explode('_', $name) : [$name, 'text'];
 
     $default_option = $this->getDefaultConfigurationValue($name);
@@ -1511,7 +1517,7 @@ protected function buildElement($name, $title, $label, $required = FALSE, array
     if ($default_option) {
       $options[(string) $this->t('Default')] = [static::DEFAULT_VALUE => $default_option];
     }
-    if ($element_options) {
+    if (!empty($element_options)) {
       $options[(string) $this->t('Elements')] = $element_options;
     }
     if ($options_options) {
@@ -1550,25 +1556,33 @@ protected function buildElement($name, $title, $label, $required = FALSE, array
       $element[$name]['#other__maxlength'] = NULL;
     }
 
+    // Tweak elements.
+    switch ($name) {
+      case 'from_mail':
+        $element[$name]['#other__description'] = $this->t('Multiple email addresses may be separated by commas.')
+          . ' '
+          . $this->t("If multiple email addresses are entered the '@name' will be not included in the email.", ['@name' => $this->t('From name')]);
+        break;
+
+      case 'reply_to':
+        $element[$name]['#description'] = $this->t('The email address that a recipient will see when they replying to an email.');
+        break;
+
+      case 'return_path':
+        $element[$name]['#description'] = $this->t('The email address to which bounce messages are delivered.');
+        break;
+
+      case 'sender_mail':
+        $element[$name]['#description'] = $this->t('The email address submitting the message, if other than shown by the From header');
+        break;
+    }
+
     // Use multiple email for reply_to, return_path, and sender_mail because
     // it supports tokens.
     if (in_array($name, ['reply_to', 'return_path', 'sender_mail'])) {
       $element[$name]['#other__type'] = 'webform_email_multiple';
       $element[$name]['#other__cardinality'] = 1;
       $element[$name]['#other__description'] = '';
-      switch ($name) {
-        case 'reply_to':
-          $element[$name]['#description'] = $this->t('The email address that a recipient will see when they replying to an email.');
-          break;
-
-        case 'return_path':
-          $element[$name]['#description'] = $this->t('The email address to which bounce messages are delivered.');
-          break;
-
-        case 'sender_mail':
-          $element[$name]['#description'] = $this->t('The email address submitting the message, if other than shown by the From header');
-          break;
-      }
       $t_args = ['@title' => $title];
       if ($default_email = $this->getDefaultConfigurationValue($name)) {
         $t_args['%email'] = $default_email;
diff --git a/web/modules/webform/src/Plugin/WebformHandler/RemotePostWebformHandler.php b/web/modules/webform/src/Plugin/WebformHandler/RemotePostWebformHandler.php
index b4928642b7..68c600d86e 100644
--- a/web/modules/webform/src/Plugin/WebformHandler/RemotePostWebformHandler.php
+++ b/web/modules/webform/src/Plugin/WebformHandler/RemotePostWebformHandler.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\webform\Plugin\WebformHandler;
 
+use Drupal\Component\Render\MarkupInterface;
 use Drupal\Core\Config\ConfigFactoryInterface;
 use Drupal\Core\Logger\LoggerChannelFactoryInterface;
 use Drupal\Core\Messenger\MessengerInterface;
@@ -82,11 +83,11 @@ class RemotePostWebformHandler extends WebformHandlerBase {
   protected $elementManager;
 
   /**
-   * The current request.
+   * The request stack.
    *
-   * @var \Symfony\Component\HttpFoundation\Request
+   * @var \Symfony\Component\HttpFoundation\RequestStack
    */
-  protected $request;
+  protected $requestStack;
 
   /**
    * The DrupalKernel instance used in the test.
@@ -137,7 +138,7 @@ public static function create(ContainerInterface $container, array $configuratio
       $container->get('plugin.manager.webform.element')
     );
 
-    $instance->request = $container->get('request_stack')->getCurrentRequest();
+    $instance->requestStack = $container->get('request_stack');
     $instance->kernel = $container->get('kernel');
 
     return $instance;
@@ -395,7 +396,7 @@ public function buildConfigurationForm(array $form, FormStateInterface $form_sta
     $form['additional']['error_url'] = [
       '#type' => 'textfield',
       '#title' => $this->t('Custom error response redirect URL'),
-      '#description' => $this->t('The URL or path to redirect to when a remote fails.', $t_args),
+      '#description' => $this->t('The URL or path to redirect to when a remote fails.'),
       '#default_value' => $this->configuration['error_url'],
       '#pattern' => '(https?:\/\/|\/).+',
     ];
@@ -595,6 +596,12 @@ protected function getRequestData($state, WebformSubmissionInterface $webform_su
         continue;
       }
 
+      // Cast markup to string. This only applies to computed Twig values.
+      // @see \Drupal\webform\Element\WebformComputedTwig::computeValue
+      if ($element_value instanceof MarkupInterface) {
+        $data[$element_key] = $element_value = (string) $element_value;
+      }
+
       $element_plugin = $this->elementManager->getElementInstance($element);
 
       if ($element_plugin instanceof WebformManagedFileBase) {
@@ -962,7 +969,6 @@ protected function debug($message, $state, $request_url, $request_method, $reque
             '#suffix' => '</pre>',
           ],
         ];
-
       }
       if ($tokens = $this->getResponseTokens($response_data, ['webform', 'handler', $this->getHandlerId(), $state])) {
         asort($tokens);
@@ -1056,11 +1062,12 @@ protected function handleError($state, $message, $request_url, $request_method,
         $error_url = $base_url . preg_replace('#^' . $base_path . '#', '/', $error_url);
       }
       $response = new TrustedRedirectResponse($error_url);
+      $request = $this->requestStack->getCurrentRequest();
       // Save the session so things like messages get saved.
-      $this->request->getSession()->save();
-      $response->prepare($this->request);
+      $request->getSession()->save();
+      $response->prepare($request);
       // Make sure to trigger kernel events.
-      $this->kernel->terminate($this->request, $response);
+      $this->kernel->terminate($request, $response);
       $response->send();
     }
   }
diff --git a/web/modules/webform/src/Plugin/WebformHandlerBase.php b/web/modules/webform/src/Plugin/WebformHandlerBase.php
index 1ab9fd3ee0..19ffbf0556 100644
--- a/web/modules/webform/src/Plugin/WebformHandlerBase.php
+++ b/web/modules/webform/src/Plugin/WebformHandlerBase.php
@@ -615,6 +615,16 @@ public function postCreate(WebformSubmissionInterface $webform_submission) {}
    */
   public function postLoad(WebformSubmissionInterface $webform_submission) {}
 
+  /**
+   * {@inheritdoc}
+   */
+  public function prePurge(array $webform_submissions) {}
+
+  /**
+   * {@inheritdoc}
+   */
+  public function postPurge(array $webform_submissions) {}
+
   /**
    * {@inheritdoc}
    */
diff --git a/web/modules/webform/src/Plugin/WebformHandlerInterface.php b/web/modules/webform/src/Plugin/WebformHandlerInterface.php
index 1cbc55f475..b721a2f12d 100644
--- a/web/modules/webform/src/Plugin/WebformHandlerInterface.php
+++ b/web/modules/webform/src/Plugin/WebformHandlerInterface.php
@@ -512,6 +512,26 @@ public function preSave(WebformSubmissionInterface $webform_submission);
    */
   public function postSave(WebformSubmissionInterface $webform_submission, $update = TRUE);
 
+  /**
+   * Acts on webform submissions before they are purged.
+   *
+   * Used before the entities are purged and before they are deleted.
+   *
+   * @param \Drupal\webform\WebformSubmissionInterface[] $webform_submissions
+   *   The webform submissions to be purged.
+   */
+  public function prePurge(array $webform_submissions);
+
+  /**
+   * Acts on webform submissions after they are purged.
+   *
+   * Used after the entities are purged and after they are deleted..
+   *
+   * @param \Drupal\webform\WebformSubmissionInterface[] $webform_submissions
+   *   The webform submissions that were purged.
+   */
+  public function postPurge(array $webform_submissions);
+
   /**
    * Acts on a webform submission before they are deleted and before hooks are invoked.
    *
diff --git a/web/modules/webform/src/Plugin/WebformVariant/OverrideWebformVariant.php b/web/modules/webform/src/Plugin/WebformVariant/OverrideWebformVariant.php
index c9d7591fb5..cbe19f682d 100644
--- a/web/modules/webform/src/Plugin/WebformVariant/OverrideWebformVariant.php
+++ b/web/modules/webform/src/Plugin/WebformVariant/OverrideWebformVariant.php
@@ -4,11 +4,11 @@
 
 use Drupal\Core\Config\ConfigFactoryInterface;
 use Drupal\Core\Form\FormStateInterface;
-use Drupal\Core\Render\Element;
 use Drupal\Core\Serialization\Yaml;
 use Drupal\Core\Session\AccountInterface;
 use Drupal\webform\Element\WebformHtmlEditor;
 use Drupal\webform\Plugin\WebformVariantBase;
+use Drupal\webform\Utility\WebformElementHelper;
 use Drupal\webform\Utility\WebformYaml;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
@@ -176,7 +176,7 @@ public function validateConfigurationForm(array &$form, FormStateInterface $form
     if ($elements) {
       foreach ($elements as $element_key => $element_properties) {
         // Skip custom form property.
-        if (Element::property($element_key)) {
+        if (WebformElementHelper::property($element_key)) {
           continue;
         }
 
@@ -224,7 +224,7 @@ public function applyVariant() {
     $elements = Yaml::decode($this->configuration['elements']) ?: [];
     if ($elements) {
       foreach ($elements as $element_key => $element_properties) {
-        if (Element::property($element_key)) {
+        if (WebformElementHelper::property($element_key)) {
           // Set custom form property.
           $webform->setElements([$element_key => $element_properties] + $webform->getElementsDecoded());
         }
diff --git a/web/modules/webform/src/Twig/WebformTwigExtension.php b/web/modules/webform/src/Twig/WebformTwigExtension.php
index d265f01fda..c797fa01c3 100644
--- a/web/modules/webform/src/Twig/WebformTwigExtension.php
+++ b/web/modules/webform/src/Twig/WebformTwigExtension.php
@@ -8,6 +8,7 @@
 use Drupal\webform\Utility\WebformElementHelper;
 use Drupal\webform\Utility\WebformHtmlHelper;
 use Drupal\webform\Utility\WebformLogicHelper;
+use Drupal\webform\Utility\WebformXss;
 use Drupal\webform\Utility\WebformYaml;
 use Drupal\webform\WebformSubmissionInterface;
 
@@ -132,7 +133,7 @@ public function webformToken($token, EntityInterface $entity = NULL, array $data
       return '';
     }
 
-    return (WebformHtmlHelper::containsHtml($value)) ? ['#markup' => $value] : $value;
+    return (WebformHtmlHelper::containsHtml($value)) ? ['#markup' => $value, '#allowed_tags' => WebformXss::getAdminTagList()] : $value;
   }
 
   /****************************************************************************/
diff --git a/web/modules/webform/src/Utility/WebformDialogHelper.php b/web/modules/webform/src/Utility/WebformDialogHelper.php
index 78a663352f..40a5ae1257 100644
--- a/web/modules/webform/src/Utility/WebformDialogHelper.php
+++ b/web/modules/webform/src/Utility/WebformDialogHelper.php
@@ -37,7 +37,7 @@ class WebformDialogHelper {
   const DIALOG_NARROW = 'narrow';
 
   /**
-   * Prevent dialog from being displayed
+   * Prevent dialog from being displayed.
    *
    * @var string
    */
diff --git a/web/modules/webform/src/Utility/WebformElementHelper.php b/web/modules/webform/src/Utility/WebformElementHelper.php
index 1444eae757..f196afe52c 100644
--- a/web/modules/webform/src/Utility/WebformElementHelper.php
+++ b/web/modules/webform/src/Utility/WebformElementHelper.php
@@ -4,9 +4,7 @@
 
 use Drupal\Component\Render\MarkupInterface;
 use Drupal\Component\Serialization\Json;
-use Drupal\Component\Utility\Xss;
 use Drupal\Core\Form\FormStateInterface;
-use Drupal\Core\Render\Markup;
 use Drupal\Core\Render\Element;
 use Drupal\Core\Template\Attribute;
 use Drupal\webform\Plugin\WebformElement\WebformCompositeBase;
@@ -73,6 +71,19 @@ class WebformElementHelper {
    */
   protected static $allowedSubPropertiesRegExp;
 
+  /**
+   * Checks if the key is string and a property.
+   *
+   * @param string $key
+   *   The key to check.
+   *
+   * @return bool
+   *   TRUE of the key is string and a property., FALSE otherwise.
+   */
+  public static function property($key) {
+    return ($key && is_string($key) && $key[0] == '#');
+  }
+
   /**
    * Determine if an element and its key is a renderable array.
    *
@@ -88,6 +99,21 @@ public static function isElement($element, $key) {
     return (Element::child($key) && is_array($element));
   }
 
+  /**
+   * Determine if an element is accessible.
+   *
+   * @param array|mixed $element
+   *   An element.
+   *
+   * @return bool
+   *   TRUE if an element is accessible.
+   *
+   * @see \Drupal\Core\Render\Element::isVisibleElement
+   */
+  public static function isAccessibleElement($element) {
+    return (isset($element['#access']) && $element['#access'] === FALSE) ? FALSE : TRUE;
+  }
+
   /**
    * Determine if an element has children.
    *
@@ -246,7 +272,7 @@ public static function hasProperty(array $elements, $property, $value = NULL) {
   public static function getProperties(array $element) {
     $properties = [];
     foreach ($element as $key => $value) {
-      if (Element::property($key)) {
+      if (static::property($key)) {
         $properties[$key] = $value;
       }
     }
@@ -264,7 +290,7 @@ public static function getProperties(array $element) {
    */
   public static function removeProperties(array $element) {
     foreach ($element as $key => $value) {
-      if (Element::property($key)) {
+      if (static::property($key)) {
         unset($element[$key]);
       }
     }
@@ -376,7 +402,7 @@ public static function fixStatesWrapper(array &$element) {
   public static function getIgnoredProperties(array $element) {
     $ignored_properties = [];
     foreach ($element as $key => $value) {
-      if (Element::property($key)) {
+      if (static::property($key)) {
         if (self::isIgnoredProperty($key)) {
           // Computed elements use #ajax as boolean and should not be ignored.
           // @see \Drupal\webform\Element\WebformComputedBase
@@ -421,7 +447,7 @@ public static function getIgnoredProperties(array $element) {
    */
   public static function removeIgnoredProperties(array $element) {
     foreach ($element as $key => $value) {
-      if ($key && is_string($key) && Element::property($key) && self::isIgnoredProperty($key)) {
+      if (static::property($key) && self::isIgnoredProperty($key)) {
         // Computed elements use #ajax as boolean and should not be ignored.
         // @see \Drupal\webform\Element\WebformComputedBase
         $is_ajax_computed = ($key === '#ajax' && is_bool($value));
@@ -530,7 +556,7 @@ public static function applyTranslation(array &$element, array $translation) {
 
     foreach ($element as $key => &$value) {
       // Make sure to only merge properties.
-      if (!Element::property($key) || empty($translation[$key])) {
+      if (!static::property($key) || empty($translation[$key])) {
         continue;
       }
 
diff --git a/web/modules/webform/src/Utility/WebformOptionsHelper.php b/web/modules/webform/src/Utility/WebformOptionsHelper.php
index 9694ad8e10..a8244fd73a 100644
--- a/web/modules/webform/src/Utility/WebformOptionsHelper.php
+++ b/web/modules/webform/src/Utility/WebformOptionsHelper.php
@@ -81,6 +81,32 @@ public static function getOptionsText(array $values, array $options) {
     return $values;
   }
 
+  /**
+   * Determine if option text includes a description.
+   *
+   * @param string $text
+   *   Option text.
+   *
+   * @return bool
+   *   TRUE option text includes a description.
+   */
+  public static function hasOptionDescription($text) {
+    return (strpos($text, WebformOptionsHelper::DESCRIPTION_DELIMITER) !== FALSE) ? TRUE : FALSE;
+  }
+
+  /**
+   * Split option text into an array containing an option's text and description.
+   *
+   * @param string $text
+   *   Option text.
+   *
+   * @return array
+   *   An array containing an option's text and description.
+   */
+  public static function splitOption($text) {
+    return explode(static::DESCRIPTION_DELIMITER, $text);
+  }
+
   /**
    * Get the text string for an option value.
    *
@@ -104,7 +130,7 @@ public static function getOptionText($value, array $options, $options_descriptio
       }
       elseif ($value !== NULL && (string) $value === (string) $option_value) {
         if ($options_description && strpos($option_text, static::DESCRIPTION_DELIMITER) !== FALSE) {
-          list($option_text) = explode(static::DESCRIPTION_DELIMITER, $option_text);
+          list($option_text) = static::splitOption($option_text);
           return $option_text;
         }
         else {
@@ -137,7 +163,7 @@ public static function getOptionDescription($value, array $options, $options_des
       }
       elseif ($value !== NULL && (string) $value === (string) $option_value) {
         if ($options_description && strpos($option_text, static::DESCRIPTION_DELIMITER) !== FALSE) {
-          list($option_text, $option_description) = explode(static::DESCRIPTION_DELIMITER, $option_text);
+          list($option_text, $option_description) = static::splitOption($option_text);
           return $option_description;
         }
         else {
diff --git a/web/modules/webform/src/WebformAddonsManager.php b/web/modules/webform/src/WebformAddonsManager.php
index d201e61ecc..7bfa7ea239 100644
--- a/web/modules/webform/src/WebformAddonsManager.php
+++ b/web/modules/webform/src/WebformAddonsManager.php
@@ -61,6 +61,9 @@ public function getThirdPartySettings() {
    */
   public function getCategories() {
     $categories = [];
+    $categories['applications'] = [
+      'title' => $this->t('Applications'),
+    ];
     $categories['element'] = [
       'title' => $this->t('Elements'),
     ];
@@ -113,6 +116,18 @@ protected function initProjects() {
 
     $projects = [];
 
+    /**************************************************************************/
+    // Applications.
+    /**************************************************************************/
+
+    // Applications: Academic Applications.
+    $projects['academic_applications'] = [
+      'title' => $this->t('Academic Applications'),
+      'description' => $this->t('Provides a simple Webform-based system for applying to academic programs.'),
+      'url' => Url::fromUri('https://www.drupal.org/project/academic_applications'),
+      'category' => 'applications',
+    ];
+
     /**************************************************************************/
     // Element.
     /**************************************************************************/
@@ -206,6 +221,14 @@ protected function initProjects() {
       'category' => 'element',
     ];
 
+    // Element: Webform Entity View.
+    $projects['webform_entity_view'] = [
+      'title' => $this->t('Webform Entity View'),
+      'description' => $this->t('Provides an Entity Reference Webform element that can be picked in the build of a webform and will be rendered in the view.'),
+      'url' => Url::fromUri('https://www.drupal.org/project/webform_entity_view'),
+      'category' => 'element',
+    ];
+
     // Element: Webform Handsontable.
     $projects['handsontable_yml_webform'] = [
       'title' => $this->t('Webform Handsontable'),
@@ -314,6 +337,14 @@ protected function initProjects() {
     // Enhancement.
     /**************************************************************************/
 
+    // Enhancement: Dopup.
+    $projects['dopup'] = [
+      'title' => $this->t('Dopup'),
+      'description' => $this->t('Simple webform popups for lead generation and other marketing needs.'),
+      'url' => Url::fromUri('https://www.drupal.org/project/dopup'),
+      'category' => 'enhancement',
+    ];
+
     // Enhancement: Formset.
     $projects['formset'] = [
       'title' => $this->t('Formset'),
@@ -338,6 +369,14 @@ protected function initProjects() {
       'category' => 'enhancement',
     ];
 
+    // Enhancement: Webform Cookie.
+    $projects['webform_cookie'] = [
+      'title' => $this->t('Webform Cookie'),
+      'description' => $this->t('Provides a Webform submission handler that sets an arbitrary cookie after submission.'),
+      'url' => Url::fromUri('https://github.com/r0nn1ef/webform_cookie'),
+      'category' => 'enhancement',
+    ];
+
     // Enhancement: Webform Confirmation File.
     $projects['webform_confirmation_file'] = [
       'title' => $this->t('Webform Confirmation File'),
@@ -426,6 +465,14 @@ protected function initProjects() {
       'category' => 'enhancement',
     ];
 
+    // Enhancement: Webform Paragraphs.
+    $projects['webform_paragraphs'] = [
+      'title' => $this->t('Webform Paragraphs'),
+      'description' => $this->t('Adds a paragraph reference to the webforms when they are submitted from a paragraph context.'),
+      'url' => Url::fromUri('https://www.drupal.org/project/webform_paragraphs'),
+      'category' => 'enhancement',
+    ];
+
     // Enhancement: Webform Pre-populate.
     $projects['webform_prepopulate'] = [
       'title' => $this->t('Webform Pre-populate'),
@@ -442,6 +489,14 @@ protected function initProjects() {
       'category' => 'enhancement',
     ];
 
+    // Enhancement: Webform Unsubscribe.
+    $projects['webform_unsubscribe'] = [
+      'title' => $this->t('Webform Unsubscribe'),
+      'description' => $this->t('Provides the token for creation of the link for removing a webform submission by an anonymous user.'),
+      'url' => Url::fromUri('https://www.drupal.org/project/webform_unsubscribe'),
+      'category' => 'enhancement',
+    ];
+
     // Enhancement: Webform Timeout.
     $projects['webform_timeout'] = [
       'title' => $this->t('Webform Timeout'),
@@ -499,14 +554,6 @@ protected function initProjects() {
 
     /**************************************************************************/
 
-    // Integrations: Webform AddressFinder.
-    $projects['academic_applications'] = [
-      'title' => $this->t('Academic Applications'),
-      'description' => $this->t('Provides a simple Webform-based system for applying to academic programs.'),
-      'url' => Url::fromUri('https://www.drupal.org/project/academic_applications'),
-      'category' => 'integration',
-    ];
-
     // Integrations: Ansible.
     $projects['ansible'] = [
       'title' => $this->t('Ansible'),
@@ -531,6 +578,14 @@ protected function initProjects() {
       'category' => 'integration',
     ];
 
+    // Integration: Drip Webform Handler.
+    $projects['drip_webform_handler'] = [
+      'title' => $this->t('Drip Webform Handler'),
+      'description' => $this->t('Allows you to post submissions to Drip.com.'),
+      'url' => Url::fromUri('https://www.drupal.org/project/drip_webform_handler'),
+      'category' => 'integration',
+    ];
+
     // Integrations: Druminate Webforms.
     $projects['druminate'] = [
       'title' => $this->t('Druminate Webforms'),
@@ -595,6 +650,22 @@ protected function initProjects() {
       'category' => 'integration',
     ];
 
+    // Integrations: Mailchimp Webform Handler.
+    $projects['mailchimp_webform_handler'] = [
+      'title' => $this->t('Mailchimp Webform Handler'),
+      'description' => $this->t('Allows you to add a new contact from a webform to a Mailchimp list without enabling a dependent Mailchimp-module.'),
+      'url' => Url::fromUri('https://www.drupal.org/project/mailchimp_webform_handler'),
+      'category' => 'integration',
+    ];
+
+    // Integrations: Marketo MA.
+    $projects['marketo_ma'] = [
+      'title' => $this->t('Marketo MA Webform'),
+      'description' => $this->t('Integrates Marketo MA with Webform module forms.'),
+      'url' => Url::fromUri('https://www.drupal.org/project/marketo_ma'),
+      'category' => 'integration',
+    ];
+
     // Integrations: Micro Webform.
     $projects['micro_webform'] = [
       'title' => $this->t('Micro Webform'),
@@ -611,6 +682,14 @@ protected function initProjects() {
       'category' => 'integration',
     ];
 
+    // Integrations: Webform Postcode API.
+    $projects['webform_postcodeapi'] = [
+      'title' => $this->t('Webform Postcode API'),
+      'description' => $this->t('Provides a composite Webform address element with autocompletion based on PostcodeAPI.nu data.'),
+      'url' => Url::fromUri('https://www.drupal.org/project/webform_postcodeapi'),
+      'category' => 'integration',
+    ];
+
     // Integrations: Rules Webform.
     $projects['rules_webform'] = [
       'title' => $this->t('Rules Webform'),
@@ -619,7 +698,15 @@ protected function initProjects() {
       'category' => 'integration',
     ];
 
-    // Integrations: Sherpa Webform .
+    // Integrations: Sharpspring Webforms.
+    $projects['sharpspring_webforms'] = [
+      'title' => $this->t('Sharpspring Webforms'),
+      'description' => $this->t("Extends the SharpSpring module's functionality to add SharpSpring lead tracking to Webforms."),
+      'url' => Url::fromUri('https://www.drupal.org/project/sharpspring_webforms'),
+      'category' => 'integration',
+    ];
+
+    // Integrations: Sherpa Webform.
     $projects['sherpa_webform'] = [
       'title' => $this->t('Sherpa Webform'),
       'description' => $this->t('Captures Webform submissions, convert them to JSON, and send them to Sherpa.'),
@@ -627,6 +714,14 @@ protected function initProjects() {
       'category' => 'integration',
     ];
 
+    // Integrations: Vipps Recurring Payments.
+    $projects['vipps_recurring_payments'] = [
+      'title' => $this->t('Vipps Recurring Payments'),
+      'description' => $this->t('Use Webform with Vipps Recurring Payments.'),
+      'url' => Url::fromUri('https://www.drupal.org/project/vipps_recurring_payments'),
+      'category' => 'integration',
+    ];
+
     // Integrations: Watson/Silverpop Webform Parser.
     $projects['watson_form_parser'] = [
       'title' => $this->t('Watson/Silverpop Webform Parser'),
@@ -1079,6 +1174,14 @@ protected function initProjects() {
       'recommended' => TRUE,
     ];
 
+    // Spam: SpamAway.
+    $projects['spamaway'] = [
+      'title' => $this->t('SpamAway'),
+      'description' => $this->t('Provides a webform handler which will mark submissions as SPAM'),
+      'url' => Url::fromUri('https://www.drupal.org/project/spamaway'),
+      'category' => 'spam',
+    ];
+
     /**************************************************************************/
 
     // Spam: CleanTalk.
@@ -1454,6 +1557,15 @@ protected function initProjects() {
       'recommended' => TRUE,
     ];
 
+    // Workflow: Workflows Field.
+    $projects['workflows_field'] = [
+      'title' => $this->t('Workflows Field'),
+      'description' => $this->t('A business process workflow solution that allows you to create and automate a sequence of tasks representing any business, document approval or collaboration process.'),
+      'url' => Url::fromUri('https://www.drupal.org/project/workflows_field'),
+      'category' => 'workflow',
+      'recommended' => TRUE,
+    ];
+
     /**************************************************************************/
     // Development.
     /**************************************************************************/
diff --git a/web/modules/webform/src/WebformEmailProvider.php b/web/modules/webform/src/WebformEmailProvider.php
index 37b9dd43f5..e9a52cfa3c 100644
--- a/web/modules/webform/src/WebformEmailProvider.php
+++ b/web/modules/webform/src/WebformEmailProvider.php
@@ -175,7 +175,7 @@ public function getMailPluginId() {
    */
   public function getMailPluginDefinition() {
     $plugin_id = $this->getMailPluginId();
-    return ($plugin_id) ? $this->mailManager->getDefinition($plugin_id) : NULL;
+    return ($plugin_id && $this->mailManager->hasDefinition($plugin_id)) ? $this->mailManager->getDefinition($plugin_id) : NULL;
   }
 
 }
diff --git a/web/modules/webform/src/WebformEntityAddForm.php b/web/modules/webform/src/WebformEntityAddForm.php
index 3a1a106e95..5a09723eaf 100644
--- a/web/modules/webform/src/WebformEntityAddForm.php
+++ b/web/modules/webform/src/WebformEntityAddForm.php
@@ -3,9 +3,12 @@
 namespace Drupal\webform;
 
 use Drupal\Core\Entity\BundleEntityFormBase;
+use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Url;
 use Drupal\webform\Form\WebformDialogFormTrait;
+use Drupal\Core\Language\LanguageManagerInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
  * Provides a webform add form.
@@ -14,6 +17,43 @@ class WebformEntityAddForm extends BundleEntityFormBase {
 
   use WebformDialogFormTrait;
 
+  /**
+   * The module handler.
+   *
+   * @var \Drupal\Core\Extension\ModuleHandlerInterface
+   */
+  protected $moduleHandler;
+
+  /**
+   * The language manager.
+   *
+   * @var \Drupal\Core\Language\LanguageManagerInterface
+   */
+  protected $languageManager;
+
+  /**
+   * Constructs a WebformEntityAddForm.
+   *
+   * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
+   *   The module handler.
+   * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
+   *   The language manager.
+   */
+  public function __construct(ModuleHandlerInterface $module_handler, LanguageManagerInterface $language_manager) {
+    $this->moduleHandler = $module_handler;
+    $this->languageManager = $language_manager;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container) {
+    return new static(
+      $container->get('module_handler'),
+      $container->get('language_manager')
+    );
+  }
+
   /**
    * {@inheritdoc}
    */
@@ -114,20 +154,23 @@ public function submitForm(array &$form, FormStateInterface $form_state) {
       $original_id = \Drupal::routeMatch()->getRawParameter('webform');
       $duplicate_id = $this->getEntity()->id();
 
-      // Poormans duplication of translated webform configuration.
-      // This completely bypasses the config translation system and just
-      // duplicates any translated webform config stored in the database.
-      $result = \Drupal::database()->select('config', 'c')
-        ->fields('c', ['collection', 'name', 'data'])
-        ->condition('c.name', 'webform.webform.' . $original_id)
-        ->condition('c.collection', 'language.%', 'LIKE')
-        ->execute();
-      while ($record = $result->fetchAssoc()) {
-        $record['name'] = 'webform.webform.' . $duplicate_id;
-        \Drupal::database()->insert('config')
-          ->fields(['collection', 'name', 'data'])
-          ->values($record)
-          ->execute();
+      // Copy translations.
+      if ($this->moduleHandler->moduleExists('config_translation')) {
+        $original_name = 'webform.webform.' . $original_id;
+        $duplicate_name = 'webform.webform.' . $duplicate_id;
+        $current_langcode = $this->languageManager->getConfigOverrideLanguage()->getId();
+        $languages = $this->languageManager->getLanguages();
+        foreach ($languages as $language) {
+          $langcode = $language->getId();
+          if ($langcode !== $current_langcode) {
+            $original_translation = $this->languageManager->getLanguageConfigOverride($langcode, $original_name)->get();
+            if ($original_translation) {
+              $duplicate_translation = $this->languageManager->getLanguageConfigOverride($langcode, $duplicate_name);
+              $duplicate_translation->setData($original_translation);
+              $duplicate_translation->save();
+            }
+          }
+        }
       }
 
       // Copy webform export and results from state.
diff --git a/web/modules/webform/src/WebformEntityConditionsManager.php b/web/modules/webform/src/WebformEntityConditionsManager.php
index acd9443a8f..773818d452 100644
--- a/web/modules/webform/src/WebformEntityConditionsManager.php
+++ b/web/modules/webform/src/WebformEntityConditionsManager.php
@@ -67,7 +67,7 @@ public function toText(WebformInterface $webform, array $states, array $options
       'empty' => $this->t('is empty'),
       'filled' => $this->t('is filled'),
       'checked' => $this->t('is checked'),
-      'unchecked' => $this->t('is unchecked'),
+      'unchecked' => $this->t('is not checked'),
       'value' => '=',
       '!value' => '!=',
       'pattern' => $this->t('matches'),
@@ -246,6 +246,16 @@ protected function buildConditionItem(WebformInterface $webform, $selector, arra
       $element_title .= ': ' . WebformOptionsHelper::getOptionText($element_option_key, $element_options, TRUE);
     }
 
+    // Checked 'checked: false' to 'unchecked: true' and vice-versa.
+    if ($trigger_state === 'checked' && $trigger_value === FALSE) {
+      $trigger_state = 'unchecked';
+      $trigger_value = TRUE;
+    }
+    elseif ($trigger_state === 'unchecked' && $trigger_value === FALSE) {
+      $trigger_state = 'checked';
+      $trigger_value = TRUE;
+    }
+
     // Build the condition.
     $t_args = [
       '@name' => $element_title,
diff --git a/web/modules/webform/src/WebformEntityReferenceManager.php b/web/modules/webform/src/WebformEntityReferenceManager.php
index 5ff83aa437..0d6ddd4eb0 100644
--- a/web/modules/webform/src/WebformEntityReferenceManager.php
+++ b/web/modules/webform/src/WebformEntityReferenceManager.php
@@ -2,10 +2,13 @@
 
 namespace Drupal\webform;
 
-use Drupal\Core\Session\AccountInterface;
 use Drupal\Core\Entity\ContentEntityInterface;
 use Drupal\Core\Entity\EntityInterface;
+use Drupal\Core\Entity\EntityTypeManagerInterface;
+use Drupal\Core\Entity\FieldableEntityInterface;
+use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\Core\Routing\RouteMatchInterface;
+use Drupal\Core\Session\AccountInterface;
 use Drupal\field\Entity\FieldStorageConfig;
 use Drupal\user\UserDataInterface;
 use Drupal\webform\Entity\Webform;
@@ -42,6 +45,20 @@ class WebformEntityReferenceManager implements WebformEntityReferenceManagerInte
    */
   protected $userData;
 
+  /**
+   * The module handler service.
+   *
+   * @var \Drupal\Core\Extension\ModuleHandlerInterface
+   */
+  protected $moduleHandler;
+
+  /**
+   * The entity type manager.
+   *
+   * @var \Drupal\Core\Entity\EntityTypeManagerInterface
+   */
+  protected $entityTypeManager;
+
   /**
    * Cache of source entity webforms.
    *
@@ -65,11 +82,17 @@ class WebformEntityReferenceManager implements WebformEntityReferenceManagerInte
    *   The current user.
    * @param \Drupal\user\UserDataInterface $user_data
    *   The user data service.
+   * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
+   *   The module handler class to use for loading includes.
+   * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
+   *   The entity type manager.
    */
-  public function __construct(RouteMatchInterface $route_match, AccountInterface $current_user, UserDataInterface $user_data) {
+  public function __construct(RouteMatchInterface $route_match, AccountInterface $current_user, UserDataInterface $user_data, ModuleHandlerInterface $module_handler = NULL, EntityTypeManagerInterface $entity_type_manager = NULL) {
     $this->routeMatch = $route_match;
     $this->currentUser = $current_user;
     $this->userData = $user_data;
+    $this->moduleHandler = $module_handler ?: \Drupal::moduleHandler();
+    $this->entityTypeManager = $entity_type_manager ?: \Drupal::entityTypeManager();
   }
 
   /****************************************************************************/
@@ -159,7 +182,7 @@ public function getFieldName(EntityInterface $entity = NULL) {
    * {@inheritdoc}
    */
   public function getFieldNames(EntityInterface $entity = NULL) {
-    if ($entity === NULL || !method_exists($entity, 'hasField')) {
+    if ($entity === NULL || !$entity instanceof FieldableEntityInterface) {
       return [];
     }
 
@@ -211,15 +234,20 @@ public function getWebforms(EntityInterface $entity = NULL) {
       return $this->webforms[$entity_id];
     }
 
-    $field_names = $this->getFieldNames($entity);
     $target_entities = [];
     $sorted_entities = [];
+
+    $field_names = $this->getFieldNames($entity);
     foreach ($field_names as $field_name) {
       foreach ($entity->$field_name as $item) {
         $sorted_entities[$item->target_id] = (method_exists($item->entity, 'getWeight')) ? $item->entity->getWeight() : 0;
         $target_entities[$item->target_id] = $item->entity;
       }
     }
+
+    // Add paragraphs check.
+    $this->getParagraphWebformsRecursive($entity, $target_entities, $sorted_entities);
+
     // Sort the webforms by key and then weight.
     ksort($sorted_entities);
     asort($sorted_entities, SORT_NUMERIC);
@@ -231,9 +259,83 @@ public function getWebforms(EntityInterface $entity = NULL) {
     }
 
     $this->webforms[$entity_id] = $webforms;
+
     return $webforms;
   }
 
+  /****************************************************************************/
+  // Paragraph methods.
+  /****************************************************************************/
+
+  /**
+   * Get webform associate with a paragraph field from entity.
+   *
+   * @param \Drupal\Core\Entity\EntityInterface $entity
+   *   An entity.
+   * @param array $target_entities
+   *   An associate array of targeted webfrom entities.
+   * @param array $sorted_entities
+   *   An associate array of sorted webfrom entities by weight.
+   */
+  protected function getParagraphWebformsRecursive(EntityInterface $entity, array &$target_entities, array &$sorted_entities) {
+    // Add paragraphs check.
+    if (!$this->moduleHandler->moduleExists('paragraphs')) {
+      return;
+    }
+    // Make sure the entity exists and is fieldable.
+    if ($entity === NULL || !$entity instanceof FieldableEntityInterface) {
+      return;
+    }
+
+    $paragraph_fields = $this->getParagraphFieldNames($entity);
+    foreach ($paragraph_fields as $paragraph_field) {
+      if (!$entity->hasField($paragraph_field)) {
+        continue;
+      }
+
+      foreach ($entity->get($paragraph_field) as $paragraph_item) {
+        $paragraph = $paragraph_item->entity;
+        if ($paragraph) {
+          $webform_field_names = $this->getFieldNames($paragraph);
+          foreach ($webform_field_names as $webform_field_name) {
+            foreach ($paragraph->$webform_field_name as $webform_field_item) {
+              if ($webform_field_item->entity) {
+                $sorted_entities[$webform_field_item->target_id] = (method_exists($webform_field_item->entity, 'getWeight')) ? $webform_field_item->entity->getWeight() : 0;
+                $target_entities[$webform_field_item->target_id] = $webform_field_item->entity;
+              }
+            }
+          }
+          $this->getParagraphWebformsRecursive($paragraph, $target_entities, $sorted_entities);
+        }
+      }
+    }
+  }
+
+  /**
+   * Get paragraph field names.
+   *
+   * @param \Drupal\Core\Entity\EntityInterface|null $entity
+   *   A fieldable content entity.
+   *
+   * @return array
+   *   An array of paragraph field names.
+   */
+  protected function getParagraphFieldNames(EntityInterface $entity) {
+    $fields = $this->entityTypeManager->getStorage('field_storage_config')->loadByProperties([
+      'entity_type' => $entity->getEntityTypeId(),
+      'type' => 'entity_reference_revisions',
+    ]);
+
+    $field_names = [];
+    foreach ($fields as $field) {
+      if ($field->getSetting('target_type') === 'paragraph') {
+        $field_name = $field->get('field_name');
+        $field_names[$field_name] = $field_name;
+      }
+    }
+    return $field_names;
+  }
+
   /****************************************************************************/
   // Table methods.
   /****************************************************************************/
diff --git a/web/modules/webform/src/WebformHelpManager.php b/web/modules/webform/src/WebformHelpManager.php
index af3e5b8f23..7f007c21b6 100644
--- a/web/modules/webform/src/WebformHelpManager.php
+++ b/web/modules/webform/src/WebformHelpManager.php
@@ -1775,7 +1775,7 @@ protected function initHelp() {
       'group' => 'configuration',
       'title' => $this->t('Configuration: Libraries: Help'),
       'content' => '<p>' . $this->t('The Webform module utilizes third-party Open Source libraries to enhance webform elements and to provide additional functionality.') . ' ' .
-        $this->t('It is recommended that these libraries are installed in your Drupal installations /libraries or /web/libraries directory.') . ' ' .
+        $this->t("It is recommended that these libraries are installed in your Drupal installation's /libraries or /web/libraries directory.") . ' ' .
         $this->t('If these libraries are not installed, they will be automatically loaded from a CDN.') . ' ' .
         $this->t('All libraries are optional and can be excluded via the admin settings form.') .
         '</p>' .
diff --git a/web/modules/webform/src/WebformLibrariesManager.php b/web/modules/webform/src/WebformLibrariesManager.php
index 3253b9a755..babf453e33 100644
--- a/web/modules/webform/src/WebformLibrariesManager.php
+++ b/web/modules/webform/src/WebformLibrariesManager.php
@@ -158,17 +158,26 @@ public function requirements($cli = FALSE) {
         '#suffix' => '</dt>',
       ];
       $info[$library_name]['description'] = [
-        'content' => [
-          '#markup' => $description,
-        ],
-        'status' => (!empty($library['deprecated'])) ? [
-          '#markup' => $library['deprecated'],
-          '#prefix' => '<div class="color-warning"><strong>',
-          '#suffix' => '</strong></div>',
-        ] : [],
         '#prefix' => '<dd>',
         '#suffix' => '</dd>',
       ];
+      $info[$library_name]['description']['content'] = [
+        '#markup' => $description,
+      ];
+      if (!empty($library['notes'])) {
+        $info[$library_name]['description']['notes'] = [
+          '#markup' => $library['notes'],
+          '#prefix' => '<div><em>(',
+          '#suffix' => '}</em></div>',
+        ];
+      }
+      if (!empty($library['deprecated'])) {
+        $info[$library_name]['description']['status'] = [
+          '#markup' => $library['deprecated'],
+          '#prefix' => '<div class="color-warning"><strong>',
+          '#suffix' => '</strong></div>',
+        ];
+      }
     }
 
     // Description.
@@ -329,9 +338,10 @@ protected function initLibraries() {
       'description' => $this->t('Code Mirror is a versatile text editor implemented in JavaScript for the browser.'),
       'notes' => $this->t('Code Mirror is used to provide a text editor for YAML, HTML, CSS, and JavaScript configuration settings and messages.'),
       'homepage_url' => Url::fromUri('http://codemirror.net/'),
-      'download_url' => Url::fromUri('https://github.com/components/codemirror/archive/5.57.0.zip'),
+      // Issue #3177233: CodeMirror 5.70.0 is displaying vertical scrollbar.
+      'download_url' => Url::fromUri('https://github.com/components/codemirror/archive/5.53.2.zip'),
       'issues_url' => Url::fromUri('https://github.com/codemirror/codemirror/issues'),
-      'version' => '5.57.0',
+      'version' => '5.53.2',
     ];
     $libraries['algolia.places'] = [
       'title' => $this->t('Algolia Places'),
diff --git a/web/modules/webform/src/WebformSubmissionAccessControlHandler.php b/web/modules/webform/src/WebformSubmissionAccessControlHandler.php
index 68c8428180..8027159a99 100644
--- a/web/modules/webform/src/WebformSubmissionAccessControlHandler.php
+++ b/web/modules/webform/src/WebformSubmissionAccessControlHandler.php
@@ -81,15 +81,14 @@ public function checkAccess(EntityInterface $entity, $operation, AccountInterfac
       return WebformAccessResult::allowed($entity, TRUE);
     }
 
-    // Check view operation token access.
-    if ($operation === 'view'
-      && $entity->getWebform()->getSetting('token_view')) {
+    // Check view and delete operations token access.
+    if (($operation === 'view' || $operation === 'delete')
+      && $entity->getWebform()->getSetting('token_' . $operation)) {
       $token = $this->request->query->get('token');
       if ($token === $entity->getToken()) {
         return WebformAccessResult::allowed($entity)
           ->addCacheContexts(['url.query_args:token']);
       }
-
     }
 
     // Check 'any' or 'own' webform submission permissions.
diff --git a/web/modules/webform/src/WebformSubmissionConditionsValidator.php b/web/modules/webform/src/WebformSubmissionConditionsValidator.php
index 2f5fd0119a..f17ecf6279 100644
--- a/web/modules/webform/src/WebformSubmissionConditionsValidator.php
+++ b/web/modules/webform/src/WebformSubmissionConditionsValidator.php
@@ -4,7 +4,6 @@
 
 use Drupal\Component\Utility\Crypt;
 use Drupal\Core\Form\FormStateInterface;
-use Drupal\Core\Render\Element;
 use Drupal\Core\StringTranslation\StringTranslationTrait;
 use Drupal\webform\Plugin\WebformElement\TextBase;
 use Drupal\webform\Plugin\WebformElement\WebformCompositeBase;
@@ -222,7 +221,7 @@ public function replaceCrossPageTargets(array $conditions, WebformSubmissionInte
     $cross_page_conditions = [];
     foreach ($conditions as $index => $value) {
       if (is_int($index) && is_array($value) && WebformArrayHelper::isSequential($value)) {
-        $cross_page_conditions[$index] = $this->replaceCrossPageTargets($conditions, $webform_submission, $targets, $form);
+        $cross_page_conditions[$index] = $this->replaceCrossPageTargets($value, $webform_submission, $targets, $form);
       }
       else {
         $cross_page_conditions[$index] = $value;
@@ -303,7 +302,7 @@ public function validateForm(array &$form, FormStateInterface $form_state) {
   protected function validateFormRecursive(array $form, FormStateInterface $form_state) {
     foreach ($form as $key => $element) {
       if (!WebformElementHelper::isElement($element, $key)
-        || !Element::isVisibleElement($element)) {
+        || !WebformElementHelper::isAccessibleElement($element)) {
         continue;
       }
       $this->validateFormElement($element, $form_state);
@@ -675,7 +674,7 @@ protected function validateCondition($selector, array $condition, WebformSubmiss
     // If no element is found try checking file uploads which use
     // :input[name="files[ELEMENT_KEY].
     // @see \Drupal\webform\Plugin\WebformElement\WebformManagedFileBase::getElementSelectorOptions
-    if (!$element && strpos($selector, ':input[name="files[') === 0) {
+    if (!$element && strpos($selector, ':input[name="files[') !== FALSE) {
       $element_key = static::getInputNameAsArray($input_name, 1);
       $element = $webform_submission->getWebform()->getElement($element_key);
     }
@@ -960,8 +959,8 @@ protected function getBuildElementsRecursive(array &$elements, array &$form, arr
         $element['#_webform_access'] = $element['#access'];
       }
 
-      // Skip if element is not visible.
-      if (!Element::isVisibleElement($element)) {
+      // Skip if element is not accessible.
+      if (!WebformElementHelper::isAccessibleElement($element)) {
         continue;
       }
 
@@ -1060,12 +1059,12 @@ protected function getConditionTargetsVisibilityRecursive(array $conditions, arr
       }
       elseif (is_int($index)) {
         $selector = key($value);
+        $targets[$selector] = $selector;
       }
       else {
         $selector = $index;
+        $targets[$selector] = $selector;
       }
-
-      $targets[$selector] = $selector;
     }
   }
 
diff --git a/web/modules/webform/src/WebformSubmissionForm.php b/web/modules/webform/src/WebformSubmissionForm.php
index 672ff09744..a6e72b95d9 100644
--- a/web/modules/webform/src/WebformSubmissionForm.php
+++ b/web/modules/webform/src/WebformSubmissionForm.php
@@ -469,7 +469,7 @@ public function setEntity(EntityInterface $entity) {
     if ($this->operation === 'add'
       && $entity->isNew()
       && $webform->getSetting('autofill')) {
-      if ($last_submission = $this->getLastSubmission()) {
+      if ($last_submission = $this->getStorage()->getLastSubmission($webform, $source_entity, $account, ['in_draft' => FALSE, 'access_check' => FALSE])) {
         $excluded_elements = $webform->getSetting('autofill_excluded_elements') ?: [];
         $last_submission_data = array_diff_key($last_submission->getRawData(), $excluded_elements);
         $data = $last_submission_data + $data;
@@ -622,6 +622,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
     // @todo Remove once bubbling of element's max-age to page cache is fixed.
     // @see https://www.drupal.org/project/webform/issues/3015760
     // @see https://www.drupal.org/project/drupal/issues/2352009
+    // @see \Drupal\webform\Element\Webform::preRenderWebformElement
     if ($webform->isScheduled()
       && $this->currentUser()->isAnonymous()
       && $this->moduleHandler->moduleExists('page_cache')) {
@@ -1014,6 +1015,7 @@ protected function displayMessages(array $form, FormStateInterface $form_state)
     $webform_submission = $this->getEntity();
     $webform = $this->getWebform();
     $source_entity = $this->getSourceEntity();
+    $account = $this->currentUser();
 
     // Display test message, except on share page.
     if ($this->isGet() && $this->operation === 'test' && !$this->isSharePage()) {
@@ -1065,9 +1067,9 @@ protected function displayMessages(array $form, FormStateInterface $form_state)
     // Display link to multiple drafts message when user is adding a new
     // submission.
     if ($this->isGet()
+      && $this->operation === 'add'
       && $this->getWebformSetting('draft') !== WebformInterface::DRAFT_NONE
       && $this->getWebformSetting('draft_multiple', FALSE)
-      && ($this->isRoute('webform.canonical') || $this->isWebformEntityReferenceFromSourceEntity())
       && ($previous_draft_total = $this->getStorage()->getTotal($webform, $this->sourceEntity, $this->currentUser(), ['in_draft' => TRUE]))
     ) {
       if ($previous_draft_total > 1) {
@@ -1084,8 +1086,8 @@ protected function displayMessages(array $form, FormStateInterface $form_state)
     // Display link to previous submissions message when user is adding a new
     // submission.
     if ($this->isGet()
+      && $this->operation === 'add'
       && $this->getWebformSetting('form_previous_submissions', FALSE)
-      && ($this->isRoute('webform.canonical') || $this->isWebformEntityReferenceFromSourceEntity())
       && ($webform->access('submission_view_own') || $this->currentUser()->hasPermission('view own webform submission'))
       && ($previous_submission_total = $this->getStorage()->getTotal($webform, $this->sourceEntity, $this->currentUser()))
     ) {
@@ -1093,7 +1095,7 @@ protected function displayMessages(array $form, FormStateInterface $form_state)
         $this->getMessageManager()->display(WebformMessageManagerInterface::PREVIOUS_SUBMISSIONS);
       }
       else {
-        $last_submission = $this->getLastSubmission(FALSE);
+        $last_submission = $this->getStorage()->getLastSubmission($webform, $source_entity, $account);
         if ($last_submission && $webform_submission->id() !== $last_submission->id()) {
           $this->getMessageManager()->display(WebformMessageManagerInterface::PREVIOUS_SUBMISSION);
         }
@@ -1105,7 +1107,7 @@ protected function displayMessages(array $form, FormStateInterface $form_state)
       && $this->operation === 'add'
       && $webform_submission->isNew()
       && $webform->getSetting('autofill')
-      && $this->getLastSubmission()) {
+      && $this->getStorage()->getLastSubmission($webform, $source_entity, $account, ['in_draft' => FALSE, 'access_check' => FALSE])) {
       $this->getMessageManager()->display(WebformMessageManagerInterface::AUTOFILL_MESSAGE);
     }
   }
@@ -2975,6 +2977,9 @@ protected function getLimitSourceEntity() {
    *
    * @return \Drupal\webform\WebformSubmissionInterface|null
    *   The last completed webform submission for the current user.
+   *
+   * @deprecated Scheduled for removal in Webform 8.x-6.x
+   *   Use $this->getStorage()->getLastSubmission instead.
    */
   protected function getLastSubmission($completed = TRUE) {
     $webform = $this->getWebform();
@@ -3034,6 +3039,13 @@ protected function isAjax() {
     if ($this->operation === 'api') {
       return FALSE;
     }
+
+    // Disable Ajax if the form has its #method set to 'get'.
+    $elements = $this->getWebform()->getElementsInitialized();
+    if (isset($elements['#method']) && $elements['#method'] === 'get') {
+      return FALSE;
+    }
+
     return $this->getWebformSetting('ajax', FALSE);
   }
 
diff --git a/web/modules/webform/src/WebformSubmissionGenerate.php b/web/modules/webform/src/WebformSubmissionGenerate.php
index 265c787c9b..3f8d37d529 100644
--- a/web/modules/webform/src/WebformSubmissionGenerate.php
+++ b/web/modules/webform/src/WebformSubmissionGenerate.php
@@ -65,8 +65,8 @@ public function __construct(ConfigFactoryInterface $config_factory, WebformToken
     $this->tokenManager = $token_manager;
     $this->elementManager = $element_manager;
 
-    $this->types = Yaml::decode($this->configFactory->get('webform.settings')->get('test.types') ?: '');
-    $this->names = Yaml::decode($this->configFactory->get('webform.settings')->get('test.names') ?: '');
+    $this->types = Yaml::decode($this->configFactory->get('webform.settings')->get('test.types') ?: '') ?: [];
+    $this->names = Yaml::decode($this->configFactory->get('webform.settings')->get('test.names') ?: '') ?: [];
   }
 
   /**
diff --git a/web/modules/webform/src/WebformSubmissionStorage.php b/web/modules/webform/src/WebformSubmissionStorage.php
index 8f58dcc29d..73016cff30 100644
--- a/web/modules/webform/src/WebformSubmissionStorage.php
+++ b/web/modules/webform/src/WebformSubmissionStorage.php
@@ -407,6 +407,7 @@ public function addQueryConditions(AlterableInterface $query, WebformInterface $
    *     Defaults to NULL
    *   - check_source_entity (boolean): Check that a source entity is defined.
    *   - interval (int): Limit total within an seconds interval.
+   *   - check_access (boolean): Check access to the submission.
    *
    * @todo Webform 8.x-6.x: Remove and move code to ::addQueryConditions.
    */
@@ -1234,13 +1235,12 @@ public function purge($count) {
     $query->accessCheck(FALSE);
     $query->condition('settings.purge', [WebformSubmissionStorageInterface::PURGE_DRAFT, WebformSubmissionStorageInterface::PURGE_COMPLETED, WebformSubmissionStorageInterface::PURGE_ALL], 'IN');
     $query->condition('settings.purge_days', 0, '>');
-    $webforms_to_purge = array_values($query->execute());
+    $webform_ids = array_values($query->execute());
 
-    $webform_submissions_to_purge = [];
-
-    if (!empty($webforms_to_purge)) {
-      $webforms_to_purge = $this->entityManager->getStorage('webform')->loadMultiple($webforms_to_purge);
-      foreach ($webforms_to_purge as $webform) {
+    $remaining = $count;
+    if (!empty($webform_ids)) {
+      $webforms = $this->entityManager->getStorage('webform')->loadMultiple($webform_ids);
+      foreach ($webforms as $webform) {
         $query = $this->getQuery();
         // Since results of this query are never displayed to the user and we
         // actually need to query the entire dataset of webform submissions, we
@@ -1257,22 +1257,27 @@ public function purge($count) {
             $query->condition('in_draft', 0);
             break;
         }
-        $query->range(0, $count - count($webform_submissions_to_purge));
-        $result = array_values($query->execute());
-        if (!empty($result)) {
-          $webform_submissions_to_purge = array_merge($webform_submissions_to_purge, $result);
+        $query->range(0, $remaining);
+        $sids = array_values($query->execute());
+        if (empty($sids)) {
+          continue;
         }
-        if (count($webform_submissions_to_purge) === $count) {
+        $remaining -= count($sids);
+        $webform_submissions = $this->loadMultiple($sids);
+
+        $webform->invokeHandlers('prePurge', $webform_submissions);
+        $this->moduleHandler()->invokeAll('webform_submissions_pre_purge', [$webform_submissions]);
+
+        $this->delete($webform_submissions);
+
+        $webform->invokeHandlers('postPurge', $webform_submissions);
+        $this->moduleHandler()->invokeAll('webform_submissions_post_purge', [$webform_submissions]);
+        if ($remaining === 0) {
           // We've collected enough webform submissions for purging in this run.
           break;
         }
       }
     }
-
-    if (!empty($webform_submissions_to_purge)) {
-      $webform_submissions_to_purge = $this->loadMultiple($webform_submissions_to_purge);
-      $this->delete($webform_submissions_to_purge);
-    }
   }
 
   /****************************************************************************/
diff --git a/web/modules/webform/templates/webform-submission-information.html.twig b/web/modules/webform/templates/webform-submission-information.html.twig
index 7f036913e1..62f480ceb2 100644
--- a/web/modules/webform/templates/webform-submission-information.html.twig
+++ b/web/modules/webform/templates/webform-submission-information.html.twig
@@ -43,6 +43,9 @@
   {% if token_update %}
     <div><b>{{ 'Submission Update'|t }}:</b> {{ token_update }}</div>
   {% endif %}
+  {% if token_delete %}
+    <div><b>{{ 'Submission Delete'|t }}:</b> {{ token_delete }}</div>
+  {% endif %}
   <br />
   <div><b>{{ 'Created'|t }}:</b> {{ created }}</div>
   <div><b>{{ 'Completed'|t }}:</b> {{ completed }}</div>
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax.yml
index e5687d99be..c58f42b8f0 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax.yml
@@ -150,6 +150,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_inline.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_inline.yml
index 230568fd56..d4de666778 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_inline.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_inline.yml
@@ -151,6 +151,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_message.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_message.yml
index ea755acc84..4cf321daaf 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_message.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_message.yml
@@ -151,6 +151,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_modal.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_modal.yml
index 87016a5225..b147b72092 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_modal.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_modal.yml
@@ -151,6 +151,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_page.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_page.yml
index 796a213813..d7698f0486 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_page.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_page.yml
@@ -151,6 +151,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_url.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_url.yml
index 0a0f9692e6..6943f01f0c 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_url.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_url.yml
@@ -148,6 +148,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_url_msg.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_url_msg.yml
index 5b03021bc4..eec0eeac6b 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_url_msg.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_url_msg.yml
@@ -151,6 +151,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite.yml
index dc591ace21..00f0285053 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite.yml
@@ -104,7 +104,7 @@ elements: |
         one: One
         two: Two
         three: Three
-
+  
 css: ''
 javascript: ''
 settings:
@@ -234,6 +234,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite_custom.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite_custom.yml
index 27029ffab6..b7d080a16d 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite_custom.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite_custom.yml
@@ -66,7 +66,7 @@ elements: |
         martial_status: Single
         employment_status: Unemployed
         age: 20
-
+  
 css: ''
 javascript: ''
 settings:
@@ -196,6 +196,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite_custom_file.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite_custom_file.yml
index 0a20ecfdfa..aa883cda09 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite_custom_file.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite_custom_file.yml
@@ -37,7 +37,7 @@ elements: |
       managed_file:
         '#type': managed_file
         '#title': managed_file
-
+  
 css: ''
 javascript: ''
 settings:
@@ -167,6 +167,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite_format.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite_format.yml
index ce25ad13f9..e2a650dd70 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite_format.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite_format.yml
@@ -456,7 +456,7 @@ elements: |
           q2: 1
           q3: 1
         '#format': table
-
+  
 css: ''
 javascript: ''
 settings:
@@ -586,6 +586,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite_format_multiple.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite_format_multiple.yml
index e6182a6418..98333bc572 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite_format_multiple.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite_format_multiple.yml
@@ -712,7 +712,7 @@ elements: |
             phone: '+1 212-333-4444'
             ext: 0
         '#format_items': table
-
+  
 css: ''
 javascript: ''
 settings:
@@ -842,6 +842,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_inline.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_inline.yml
index ddf330bcfa..9b84bc9b42 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_inline.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_inline.yml
@@ -151,6 +151,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_message.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_message.yml
index 66f64247a8..f2e68d7f00 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_message.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_message.yml
@@ -151,6 +151,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_modal.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_modal.yml
index 3c6c20fde1..5b48bf880d 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_modal.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_modal.yml
@@ -151,6 +151,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_none.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_none.yml
index f24152614a..7d6b96b6ed 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_none.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_none.yml
@@ -151,6 +151,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_page.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_page.yml
index 3e78b695fd..9587ca0f4a 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_page.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_page.yml
@@ -151,6 +151,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_page_custom.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_page_custom.yml
index 8ff8342a45..9537d5ef27 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_page_custom.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_page_custom.yml
@@ -154,6 +154,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_url.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_url.yml
index 824510b58d..6130630ee7 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_url.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_url.yml
@@ -148,6 +148,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_url_message.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_url_message.yml
index ef3e025db5..b0d1bc8890 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_url_message.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_url_message.yml
@@ -151,6 +151,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element.yml
index f7c4ccf76b..85e466987f 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element.yml
@@ -368,6 +368,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_access.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_access.yml
index 0765765093..d43bdf8a9e 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_access.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_access.yml
@@ -250,6 +250,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: true
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_actions.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_actions.yml
index a22209ce8b..f4dc056f2c 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_actions.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_actions.yml
@@ -288,6 +288,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_actions_buttons.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_actions_buttons.yml
index 3b230bfb37..0908920141 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_actions_buttons.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_actions_buttons.yml
@@ -189,6 +189,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_address.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_address.yml
index 0f69da9f37..486b25ad46 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_address.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_address.yml
@@ -71,7 +71,7 @@ elements: |
         administrative_area: CA
         country_code: US
         langcode: en
-
+  
 css: ''
 javascript: ''
 settings:
@@ -201,6 +201,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_allowed_tags.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_allowed_tags.yml
index b78e0ff96d..0ac7e12994 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_allowed_tags.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_allowed_tags.yml
@@ -150,6 +150,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_attributes.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_attributes.yml
index 20c2c78308..1ee981803d 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_attributes.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_attributes.yml
@@ -23,7 +23,7 @@ elements: |
       one
       two
       three
-
+  
     '#class__description': 'This is a custom class description.'
     '#style__description': 'This is a custom style description.'
     '#attributes__description': 'This is a custom attributes description.'
@@ -34,7 +34,7 @@ elements: |
         - four
       style: 'color: red'
       custom: test
-
+  
 css: ''
 javascript: ''
 settings:
@@ -164,6 +164,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_autocomplete.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_autocomplete.yml
index a0828246cd..dce7525d00 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_autocomplete.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_autocomplete.yml
@@ -168,6 +168,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_captcha.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_captcha.yml
index 93c6830d31..d5a4200781 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_captcha.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_captcha.yml
@@ -41,7 +41,7 @@ elements: |
   captcha_recaptcha:
     '#type': captcha
     '#captcha_type': recaptcha/reCAPTCHA
-
+  
 css: ''
 javascript: ''
 settings:
@@ -171,6 +171,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_checkbox.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_checkbox.yml
index 938120c4b5..a340037254 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_checkbox.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_checkbox.yml
@@ -32,7 +32,7 @@ elements: |
     '#title': checkbox_return_value_raw
     '#return_value': custom_return_value_raw
     '#format': raw
-
+  
 css: ''
 javascript: ''
 settings:
@@ -162,6 +162,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_checkbox_value.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_checkbox_value.yml
index 8c3f43bcf9..f4b66de470 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_checkbox_value.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_checkbox_value.yml
@@ -35,7 +35,7 @@ elements: |
         One: One
         Two: Two
         Three: Three
-
+  
 css: ''
 javascript: ''
 settings:
@@ -165,6 +165,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_checkboxes.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_checkboxes.yml
index ef64337e0e..3d77003f26 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_checkboxes.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_checkboxes.yml
@@ -209,7 +209,7 @@ elements: |
           '#disabled': true
         three:
           '#disabled': true
-
+  
 css: ''
 javascript: ''
 settings:
@@ -339,6 +339,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_checkboxes_all_none.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_checkboxes_all_none.yml
index 8ee696edf0..8261cfaf96 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_checkboxes_all_none.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_checkboxes_all_none.yml
@@ -69,7 +69,7 @@ elements: |
       include_anonymous: true
     '#default_value':
       - 1
-
+  
 css: ''
 javascript: ''
 settings:
@@ -92,7 +92,7 @@ settings:
   form_confidential_message: ''
   form_remote_addr: true
   form_convert_anonymous: false
-  form_prepopulate: false
+  form_prepopulate: true
   form_prepopulate_source_entity: false
   form_prepopulate_source_entity_required: false
   form_prepopulate_source_entity_type: ''
@@ -199,6 +199,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_codemirror.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_codemirror.yml
index 49c5607c0e..012aa4b872 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_codemirror.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_codemirror.yml
@@ -93,16 +93,16 @@ elements: |
           </script>
         </body>
       </html>
-
+  
   twig_basic:
     '#type': webform_codemirror
     '#mode': twig
     '#title': twig_basic
     '#default_value': |
-
+  
       {% set value = "Hello" %}
       {{ value }}
-
+  
 css: ''
 javascript: ''
 settings:
@@ -232,6 +232,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_composite.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_composite.yml
index cd82c82732..4fe98e578c 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_composite.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_composite.yml
@@ -58,7 +58,7 @@ elements: |
         '#field_suffix': ' yrs. old'
         '#min': 1
         '#max': 125
-
+  
 css: ''
 javascript: ''
 settings:
@@ -188,6 +188,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_composite_wrapper.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_composite_wrapper.yml
index eb209c4337..46aa374947 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_composite_wrapper.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_composite_wrapper.yml
@@ -134,7 +134,7 @@ elements: |
       visible:
         ':input[name="states_checkbox"]':
           checked: true
-
+  
 css: ''
 javascript: ''
 settings:
@@ -264,6 +264,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_computed_ajax.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_computed_ajax.yml
index 7b1d8ad61b..68725b7969 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_computed_ajax.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_computed_ajax.yml
@@ -51,7 +51,7 @@ elements: |
       Please enter a value for a and b.
       {% endif %}
       {% endspaceless %}
-
+  
   webform_computed_twig_token:
     '#type': webform_computed_twig
     '#title': webform_computed_twig_token
@@ -66,7 +66,7 @@ elements: |
       Please enter a value for a and b.
       {% endif %}
       {% endspaceless %}
-
+  
   horizontal_rule:
     '#type': webform_horizontal_rule
   composite:
@@ -89,9 +89,9 @@ elements: |
       Please enter a value for composite textfield.
       {% endif %}
       {% endspaceless %}
-
+  
     '#ajax': true
-
+  
 css: ''
 javascript: ''
 settings:
@@ -221,6 +221,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_computed_debug.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_computed_debug.yml
index 6cefb9352e..0f35dd8f47 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_computed_debug.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_computed_debug.yml
@@ -281,6 +281,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_computed_token.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_computed_token.yml
index 0341e1d987..e8084acef5 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_computed_token.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_computed_token.yml
@@ -30,7 +30,7 @@ elements: |
     '#default_value': |
       <p>This is a <strong>text format</strong> string.</p>
       <p>It contains &quot;double&quot; and 'single' quotes with special characters like &lt;, &gt;, &lt;&gt;, and &gt;&lt;.</p>
-
+  
   xss:
     '#type': textfield
     '#title': xss
@@ -43,7 +43,7 @@ elements: |
       <b class="webform_computed_token_auto">complex string :</b> [webform_submission:values:complex_string]<br />
       <b class="webform_computed_token_auto">text_format:</b> [webform_submission:values:text_format]<br />
       <b class="webform_computed_token_auto">xss:</b> [webform_submission:values:xss]<br />
-
+  
   webform_computed_token_html:
     '#type': webform_computed_token
     '#title': webform_computed_token_html
@@ -53,7 +53,7 @@ elements: |
       <b class="webform_computed_token_html">complex string :</b> [webform_submission:values:complex_string]<br />
       <b class="webform_computed_token_html">text_format:</b> [webform_submission:values:text_format]<br />
       <b class="webform_computed_token_html">xss:</b> [webform_submission:values:xss]<br />
-
+  
   webform_computed_token_text:
     '#type': webform_computed_token
     '#title': webform_computed_token_text
@@ -63,7 +63,7 @@ elements: |
       complex string : [webform_submission:values:complex_string]
       text_format: [webform_submission:values:text_format]
       xss: [webform_submission:values:xss]
-
+  
   webform_computed_token_store:
     '#type': webform_computed_token
     '#title': webform_computed_token_store
@@ -71,7 +71,7 @@ elements: |
     '#display_on': none
     '#store': true
     '#template': 'sid: [webform_submission:sid]'
-
+  
 css: ''
 javascript: ''
 settings:
@@ -201,6 +201,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_computed_twig.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_computed_twig.yml
index 27ce710ec3..1b765862c1 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_computed_twig.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_computed_twig.yml
@@ -228,6 +228,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_container.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_container.yml
index 778c630d70..02fb5c15e1 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_container.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_container.yml
@@ -205,6 +205,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_counter.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_counter.yml
index 6cdefd7b4f..aae4013b5a 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_counter.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_counter.yml
@@ -56,7 +56,7 @@ elements: |
       '#counter_maximum': 10
       '#counter_minimum_message': '<script>alert(''XSS'');</script><em>%d</em> character(s) entered.'
       '#counter_maximum_message': '<script>alert(''XSS'');</script><em>%d</em> character(s) remaining.'
-
+  
   counter_word:
     '#type': details
     '#title': counter_word
@@ -89,7 +89,7 @@ elements: |
       '#counter_type': word
       '#counter_maximum': 10
       '#counter_maximum_message': '%d character(s) remaining. This is custom text'
-
+  
 css: ''
 javascript: ''
 settings:
@@ -219,6 +219,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_date.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_date.yml
index 24088a9791..262bd38cc7 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_date.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_date.yml
@@ -83,7 +83,7 @@ elements: |
     '#title': date_datepicker_placeholder
     '#datepicker': true
     '#placeholder': '{date}'
-
+  
 css: ''
 javascript: ''
 settings:
@@ -213,6 +213,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_datelist.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_datelist.yml
index f66561eac0..c246807819 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_datelist.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_datelist.yml
@@ -96,7 +96,7 @@ elements: |
         '#title': datelist
     '#default_value':
       - datelist: '2009-08-18T01:00:00-05:00'
-
+  
 css: ''
 javascript: ''
 settings:
@@ -226,6 +226,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_datetime.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_datetime.yml
index cb380283fe..41a11160ac 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_datetime.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_datetime.yml
@@ -124,7 +124,7 @@ elements: |
     '#description': |
       @see <a href="https://www.drupal.org/node/2917107">Issue #2917107: Date and Time validation problem</a><br/>
       @see <a href="https://www.drupal.org/node/2723159">Issue #2723159: Datetime form element cannot validate when using a format without seconds</a><br/>
-
+  
     '#date_date_element': datepicker
     '#date_time_element': text
     '#date_time_format': 'H:i'
@@ -154,7 +154,7 @@ elements: |
         '#autocomplete': 'off'
     '#default_value':
       - datetime: '2009-08-18T01:00:00-05:00'
-
+  
 css: ''
 javascript: ''
 settings:
@@ -284,6 +284,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_description_tooltip.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_description_tooltip.yml
index 4809ca22bb..4e2401d4ca 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_description_tooltip.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_description_tooltip.yml
@@ -271,15 +271,15 @@ elements: |
       '#title': 'Image select'
       '#show_label': true
       '#images':
-        bear_1:
-          text: 'Bear 1'
-          src: 'https://www.placebear.com/80/100'
-        bear_2:
-          text: 'Bear 2'
-          src: 'https://www.placebear.com/100/100'
-        bear_3:
-          text: 'Bear 3'
-          src: 'https://www.placebear.com/120/100'
+        dog_1:
+          text: 'Dog 1'
+          src: 'https://www.placedog.net/80/100'
+        dog_2:
+          text: 'Dog 2'
+          src: 'https://www.placedog.net/100/100'
+        dog_3:
+          text: 'Dog 3'
+          src: 'https://www.placedog.net/120/100'
       '#description': 'This is a description for the ''webform_image_select'' element.'
       '#description_display': tooltip
     webform_likert:
@@ -467,7 +467,7 @@ elements: |
       '#title': 'Machine name'
       '#description': 'This is a description for the ''machine_name'' element.'
       '#description_display': tooltip
-  
+
 css: ''
 javascript: ''
 settings:
@@ -597,6 +597,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_details.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_details.yml
index 744d7a7343..242f5ac6a6 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_details.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_details.yml
@@ -177,6 +177,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_disabled.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_disabled.yml
index a0554cb63e..2453f93ac9 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_disabled.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_disabled.yml
@@ -494,6 +494,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_email_confirm.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_email_confirm.yml
index 2985a935cc..3b88491bc5 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_email_confirm.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_email_confirm.yml
@@ -43,7 +43,7 @@ elements: |
     '#type': webform_email_confirm
     '#title': email_confirm_flexbox
     '#flexbox': 1
-
+  
 css: ''
 javascript: ''
 settings:
@@ -173,6 +173,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_email_multiple.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_email_multiple.yml
index 47a3fe89dd..6805196c22 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_email_multiple.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_email_multiple.yml
@@ -28,7 +28,7 @@ elements: |
     '#type': webform_email_multiple
     '#title': email_multiple_three
     '#cardinality': 3
-
+  
 css: ''
 javascript: ''
 settings:
@@ -158,6 +158,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_entity_autocomplete.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_entity_autocomplete.yml
index c2a06e5cb3..b12b792ef2 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_entity_autocomplete.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_entity_autocomplete.yml
@@ -86,7 +86,7 @@ elements: |
       auto_create: true
       auto_create_bundle: tags
     '#default_value': 1
-
+  
 css: ''
 javascript: ''
 settings:
@@ -216,6 +216,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_entity_reference.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_entity_reference.yml
index 7d439e9bd2..329770dda1 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_entity_reference.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_entity_reference.yml
@@ -63,7 +63,7 @@ elements: |
         include_anonymous: true
       '#default_value':
         - 1
-
+  
 css: ''
 javascript: ''
 settings:
@@ -193,6 +193,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_excluded_columns.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_excluded_columns.yml
index 706cd96f32..78ebf7117d 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_excluded_columns.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_excluded_columns.yml
@@ -30,7 +30,7 @@ elements: |
     '#title': webform_excluded_columns
     '#default_value':
       webform_excluded_columns: webform_excluded_columns
-
+  
 css: ''
 javascript: ''
 settings:
@@ -160,6 +160,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_excluded_elements.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_excluded_elements.yml
index 31b819a273..fdfe9ed67c 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_excluded_elements.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_excluded_elements.yml
@@ -38,7 +38,7 @@ elements: |
     '#default_value':
       webform_excluded_elements: webform_excluded_elements
       webform_excluded_elements_markup: webform_excluded_elements_markup
-
+  
 css: ''
 javascript: ''
 settings:
@@ -168,6 +168,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_fieldset.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_fieldset.yml
index da19294345..2f8fadd44f 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_fieldset.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_fieldset.yml
@@ -191,6 +191,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_flexbox.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_flexbox.yml
index cb9767a125..3c287c79d8 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_flexbox.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_flexbox.yml
@@ -461,29 +461,29 @@ elements: |
       '#title': 'Image select 01'
       '#show_label': true
       '#images':
-        bear_1:
-          text: 'Bear 1'
-          src: 'https://www.placebear.com/80/100'
-        bear_2:
-          text: 'Bear 2'
-          src: 'https://www.placebear.com/100/100'
-        bear_3:
-          text: 'Bear 3'
-          src: 'https://www.placebear.com/120/100'
+        dog_1:
+          text: 'Dog 1'
+          src: 'https://www.placedog.net/80/100'
+        dog_2:
+          text: 'Dog 2'
+          src: 'https://www.placedog.net/100/100'
+        dog_3:
+          text: 'Dog 3'
+          src: 'https://www.placedog.net/120/100'
     flex_webform_image_select_right:
       '#type': webform_image_select
       '#title': 'Image select 02'
       '#show_label': true
       '#images':
-        bear_1:
-          text: 'Bear 1'
-          src: 'https://www.placebear.com/80/100'
-        bear_2:
-          text: 'Bear 2'
-          src: 'https://www.placebear.com/100/100'
-        bear_3:
-          text: 'Bear 3'
-          src: 'https://www.placebear.com/120/100'
+        dog_1:
+          text: 'Dog 1'
+          src: 'https://www.placedog.net/80/100'
+        dog_2:
+          text: 'Dog 2'
+          src: 'https://www.placedog.net/100/100'
+        dog_3:
+          text: 'Dog 3'
+          src: 'https://www.placedog.net/120/100'
   flexbox_item:
     '#type': webform_flexbox
     flex_item_left:
@@ -928,16 +928,28 @@ elements: |
     '#type': webform_flexbox
     '#align_items': flex-end
     toggle:
-      '#type': toggle
+      '#type': webform_toggle
       '#title': toggle
     toggle_textfield:
       '#type': textfield
       '#title': textfield
       '#flex': 5
     toggle_rating:
-      '#type': rating
+      '#type': webform_rating
       '#title': rating
-  
+  flexbox_inline_title:
+    '#type': webform_flexbox
+    flexbox_inline_title_textfield_01:
+      '#type': textfield
+      '#title': 'textfield 01'
+      '#title_display': inline
+      '#size': 20
+    flexbox_inline_title_textfield_02:
+      '#type': textfield
+      '#title': 'textfield 02'
+      '#title_display': inline
+      '#size': 20
+
 css: ''
 javascript: ''
 settings:
@@ -1067,6 +1079,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_flexbox_flex.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_flexbox_flex.yml
index 26c9fe3bb8..6b45f09750 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_flexbox_flex.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_flexbox_flex.yml
@@ -936,6 +936,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_format.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_format.yml
index 51a4f82a2e..35197db1b4 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_format.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_format.yml
@@ -497,15 +497,15 @@ elements: |
         '#title': 'Image select (Value)'
         '#show_label': true
         '#images':
-          bear_1:
-            text: 'Bear 1'
-            src: 'https://www.placebear.com/80/100'
-          bear_2:
-            text: 'Bear 2'
-            src: 'https://www.placebear.com/100/100'
-          bear_3:
-            text: 'Bear 3'
-            src: 'https://www.placebear.com/120/100'
+          dog_1:
+            text: 'Dog 1'
+            src: 'https://www.placedog.net/80/100'
+          dog_2:
+            text: 'Dog 2'
+            src: 'https://www.placedog.net/100/100'
+          dog_3:
+            text: 'Dog 3'
+            src: 'https://www.placedog.net/120/100'
         '#default_value': Loremipsum
         '#format': value
       webform_image_select_raw:
@@ -513,15 +513,15 @@ elements: |
         '#title': 'Image select (Raw value)'
         '#show_label': true
         '#images':
-          bear_1:
-            text: 'Bear 1'
-            src: 'https://www.placebear.com/80/100'
-          bear_2:
-            text: 'Bear 2'
-            src: 'https://www.placebear.com/100/100'
-          bear_3:
-            text: 'Bear 3'
-            src: 'https://www.placebear.com/120/100'
+          dog_1:
+            text: 'Dog 1'
+            src: 'https://www.placedog.net/80/100'
+          dog_2:
+            text: 'Dog 2'
+            src: 'https://www.placedog.net/100/100'
+          dog_3:
+            text: 'Dog 3'
+            src: 'https://www.placedog.net/120/100'
         '#default_value': Loremipsum
         '#format': raw
       webform_image_select_image:
@@ -529,15 +529,15 @@ elements: |
         '#title': 'Image select (Image)'
         '#show_label': true
         '#images':
-          bear_1:
-            text: 'Bear 1'
-            src: 'https://www.placebear.com/80/100'
-          bear_2:
-            text: 'Bear 2'
-            src: 'https://www.placebear.com/100/100'
-          bear_3:
-            text: 'Bear 3'
-            src: 'https://www.placebear.com/120/100'
+          dog_1:
+            text: 'Dog 1'
+            src: 'https://www.placedog.net/80/100'
+          dog_2:
+            text: 'Dog 2'
+            src: 'https://www.placedog.net/100/100'
+          dog_3:
+            text: 'Dog 3'
+            src: 'https://www.placedog.net/120/100'
         '#default_value': Loremipsum
         '#format': image
     radios:
@@ -1435,6 +1435,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_format_custom.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_format_custom.yml
index 2ec190b320..9565092c26 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_format_custom.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_format_custom.yml
@@ -344,6 +344,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_format_multiple.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_format_multiple.yml
index 8dc9f62a2e..2837282bdc 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_format_multiple.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_format_multiple.yml
@@ -540,15 +540,15 @@ elements: |
         '#title': 'Image select (Comma)'
         '#show_label': true
         '#images':
-          bear_1:
-            text: 'Bear 1'
-            src: 'https://www.placebear.com/80/100'
-          bear_2:
-            text: 'Bear 2'
-            src: 'https://www.placebear.com/100/100'
-          bear_3:
-            text: 'Bear 3'
-            src: 'https://www.placebear.com/120/100'
+          dog_1:
+            text: 'Dog 1'
+            src: 'https://www.placedog.net/80/100'
+          dog_2:
+            text: 'Dog 2'
+            src: 'https://www.placedog.net/100/100'
+          dog_3:
+            text: 'Dog 3'
+            src: 'https://www.placedog.net/120/100'
         '#multiple': true
         '#default_value':
           - Loremipsum
@@ -560,15 +560,15 @@ elements: |
         '#title': 'Image select (Semicolon)'
         '#show_label': true
         '#images':
-          bear_1:
-            text: 'Bear 1'
-            src: 'https://www.placebear.com/80/100'
-          bear_2:
-            text: 'Bear 2'
-            src: 'https://www.placebear.com/100/100'
-          bear_3:
-            text: 'Bear 3'
-            src: 'https://www.placebear.com/120/100'
+          dog_1:
+            text: 'Dog 1'
+            src: 'https://www.placedog.net/80/100'
+          dog_2:
+            text: 'Dog 2'
+            src: 'https://www.placedog.net/100/100'
+          dog_3:
+            text: 'Dog 3'
+            src: 'https://www.placedog.net/120/100'
         '#multiple': true
         '#default_value':
           - Loremipsum
@@ -580,15 +580,15 @@ elements: |
         '#title': 'Image select (And)'
         '#show_label': true
         '#images':
-          bear_1:
-            text: 'Bear 1'
-            src: 'https://www.placebear.com/80/100'
-          bear_2:
-            text: 'Bear 2'
-            src: 'https://www.placebear.com/100/100'
-          bear_3:
-            text: 'Bear 3'
-            src: 'https://www.placebear.com/120/100'
+          dog_1:
+            text: 'Dog 1'
+            src: 'https://www.placedog.net/80/100'
+          dog_2:
+            text: 'Dog 2'
+            src: 'https://www.placedog.net/100/100'
+          dog_3:
+            text: 'Dog 3'
+            src: 'https://www.placedog.net/120/100'
         '#multiple': true
         '#default_value':
           - Loremipsum
@@ -600,15 +600,15 @@ elements: |
         '#title': 'Image select (Ordered list)'
         '#show_label': true
         '#images':
-          bear_1:
-            text: 'Bear 1'
-            src: 'https://www.placebear.com/80/100'
-          bear_2:
-            text: 'Bear 2'
-            src: 'https://www.placebear.com/100/100'
-          bear_3:
-            text: 'Bear 3'
-            src: 'https://www.placebear.com/120/100'
+          dog_1:
+            text: 'Dog 1'
+            src: 'https://www.placedog.net/80/100'
+          dog_2:
+            text: 'Dog 2'
+            src: 'https://www.placedog.net/100/100'
+          dog_3:
+            text: 'Dog 3'
+            src: 'https://www.placedog.net/120/100'
         '#multiple': true
         '#default_value':
           - Loremipsum
@@ -620,15 +620,15 @@ elements: |
         '#title': 'Image select (Unordered list)'
         '#show_label': true
         '#images':
-          bear_1:
-            text: 'Bear 1'
-            src: 'https://www.placebear.com/80/100'
-          bear_2:
-            text: 'Bear 2'
-            src: 'https://www.placebear.com/100/100'
-          bear_3:
-            text: 'Bear 3'
-            src: 'https://www.placebear.com/120/100'
+          dog_1:
+            text: 'Dog 1'
+            src: 'https://www.placedog.net/80/100'
+          dog_2:
+            text: 'Dog 2'
+            src: 'https://www.placedog.net/100/100'
+          dog_3:
+            text: 'Dog 3'
+            src: 'https://www.placedog.net/120/100'
         '#multiple': true
         '#default_value':
           - Loremipsum
@@ -640,15 +640,15 @@ elements: |
         '#title': 'Image select (Break)'
         '#show_label': true
         '#images':
-          bear_1:
-            text: 'Bear 1'
-            src: 'https://www.placebear.com/80/100'
-          bear_2:
-            text: 'Bear 2'
-            src: 'https://www.placebear.com/100/100'
-          bear_3:
-            text: 'Bear 3'
-            src: 'https://www.placebear.com/120/100'
+          dog_1:
+            text: 'Dog 1'
+            src: 'https://www.placedog.net/80/100'
+          dog_2:
+            text: 'Dog 2'
+            src: 'https://www.placedog.net/100/100'
+          dog_3:
+            text: 'Dog 3'
+            src: 'https://www.placedog.net/120/100'
         '#multiple': true
         '#default_value':
           - Loremipsum
@@ -660,15 +660,15 @@ elements: |
         '#title': 'Image select (Space)'
         '#show_label': true
         '#images':
-          bear_1:
-            text: 'Bear 1'
-            src: 'https://www.placebear.com/80/100'
-          bear_2:
-            text: 'Bear 2'
-            src: 'https://www.placebear.com/100/100'
-          bear_3:
-            text: 'Bear 3'
-            src: 'https://www.placebear.com/120/100'
+          dog_1:
+            text: 'Dog 1'
+            src: 'https://www.placedog.net/80/100'
+          dog_2:
+            text: 'Dog 2'
+            src: 'https://www.placedog.net/100/100'
+          dog_3:
+            text: 'Dog 3'
+            src: 'https://www.placedog.net/120/100'
         '#multiple': true
         '#default_value':
           - Loremipsum
@@ -1697,6 +1697,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_format_token.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_format_token.yml
index c30a8bb551..9c6b902356 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_format_token.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_format_token.yml
@@ -27,7 +27,7 @@ elements: |
       - 1
       - 2
       - 3
-
+  
 css: ''
 javascript: ''
 settings:
@@ -157,6 +157,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
@@ -235,7 +236,7 @@ handlers:
         <h3>ul:</h3>[webform_submission:values:checkboxes:value:ul]<hr />
         <h3>ol:</h3>[webform_submission:values:checkboxes:value:ol]<hr />
         <h3>raw:</h3>[webform_submission:values:checkboxes:raw]<hr />
-
+        
       excluded_elements: {  }
       ignore_access: false
       exclude_empty: true
@@ -275,25 +276,25 @@ handlers:
       body: |
         default:
         [webform_submission:values:checkboxes]
-
+        
         comma:
         [webform_submission:values:checkboxes:value:comma]
-
+        
         semicolon:
         [webform_submission:values:checkboxes:value:semicolon]
-
+        
         and:
         [webform_submission:values:checkboxes:value:and]
-
+        
         ul:
         [webform_submission:values:checkboxes:value:ul]
-
+        
         ol:
         [webform_submission:values:checkboxes:value:ol]
-
+        
         raw:
         [webform_submission:values:checkboxes:raw]
-
+        
       excluded_elements: {  }
       ignore_access: false
       exclude_empty: true
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_height.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_height.yml
index e4439d88ab..791c65a5f8 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_height.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_height.yml
@@ -92,6 +92,7 @@ elements: |
     '#title': height_select_empty_required
     '#height_type': select
     '#required': true
+  
 css: ''
 javascript: ''
 settings:
@@ -133,7 +134,6 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
-  form_elements_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
@@ -222,6 +222,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_help.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_help.yml
index 3f5227384d..0f7b541087 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_help.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_help.yml
@@ -263,6 +263,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_help_display.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_help_display.yml
index 8fddd867d8..ce12d3c27c 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_help_display.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_help_display.yml
@@ -1027,15 +1027,15 @@ elements: |
       '#title': 'Image select (title_before)'
       '#show_label': true
       '#images':
-        bear_1:
-          text: 'Bear 1'
-          src: 'https://www.placebear.com/80/100'
-        bear_2:
-          text: 'Bear 2'
-          src: 'https://www.placebear.com/100/100'
-        bear_3:
-          text: 'Bear 3'
-          src: 'https://www.placebear.com/120/100'
+        dog_1:
+          text: 'Dog 1'
+          src: 'https://www.placedog.net/80/100'
+        dog_2:
+          text: 'Dog 2'
+          src: 'https://www.placedog.net/100/100'
+        dog_3:
+          text: 'Dog 3'
+          src: 'https://www.placedog.net/120/100'
       '#help': 'This is help.'
       '#help_display': title_before
     webform_image_select_title_after:
@@ -1043,15 +1043,15 @@ elements: |
       '#title': 'Image select (title_after)'
       '#show_label': true
       '#images':
-        bear_1:
-          text: 'Bear 1'
-          src: 'https://www.placebear.com/80/100'
-        bear_2:
-          text: 'Bear 2'
-          src: 'https://www.placebear.com/100/100'
-        bear_3:
-          text: 'Bear 3'
-          src: 'https://www.placebear.com/120/100'
+        dog_1:
+          text: 'Dog 1'
+          src: 'https://www.placedog.net/80/100'
+        dog_2:
+          text: 'Dog 2'
+          src: 'https://www.placedog.net/100/100'
+        dog_3:
+          text: 'Dog 3'
+          src: 'https://www.placedog.net/120/100'
       '#help': 'This is help.'
       '#help_display': title_after
     webform_image_select_element_before:
@@ -1059,15 +1059,15 @@ elements: |
       '#title': 'Image select (element_before)'
       '#show_label': true
       '#images':
-        bear_1:
-          text: 'Bear 1'
-          src: 'https://www.placebear.com/80/100'
-        bear_2:
-          text: 'Bear 2'
-          src: 'https://www.placebear.com/100/100'
-        bear_3:
-          text: 'Bear 3'
-          src: 'https://www.placebear.com/120/100'
+        dog_1:
+          text: 'Dog 1'
+          src: 'https://www.placedog.net/80/100'
+        dog_2:
+          text: 'Dog 2'
+          src: 'https://www.placedog.net/100/100'
+        dog_3:
+          text: 'Dog 3'
+          src: 'https://www.placedog.net/120/100'
       '#help': 'This is help.'
       '#help_display': element_before
     webform_image_select_element_after:
@@ -1075,15 +1075,15 @@ elements: |
       '#title': 'Image select (element_after)'
       '#show_label': true
       '#images':
-        bear_1:
-          text: 'Bear 1'
-          src: 'https://www.placebear.com/80/100'
-        bear_2:
-          text: 'Bear 2'
-          src: 'https://www.placebear.com/100/100'
-        bear_3:
-          text: 'Bear 3'
-          src: 'https://www.placebear.com/120/100'
+        dog_1:
+          text: 'Dog 1'
+          src: 'https://www.placedog.net/80/100'
+        dog_2:
+          text: 'Dog 2'
+          src: 'https://www.placedog.net/100/100'
+        dog_3:
+          text: 'Dog 3'
+          src: 'https://www.placedog.net/120/100'
       '#help': 'This is help.'
       '#help_display': element_after
     webform_image_select_hr:
@@ -1910,7 +1910,7 @@ elements: |
       '#help_display': element_after
     machine_name_hr:
       '#type': webform_horizontal_rule
-  
+
 css: ''
 javascript: ''
 settings:
@@ -2040,6 +2040,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_horizontal_rule.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_horizontal_rule.yml
index 4145cb0634..97a6439c03 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_horizontal_rule.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_horizontal_rule.yml
@@ -102,7 +102,7 @@ elements: |
     '#attributes':
       class:
         - webform-horizontal-rule--glyph
-
+  
 css: ''
 javascript: ''
 settings:
@@ -232,6 +232,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_html_editor.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_html_editor.yml
index 18d5b1766e..6bf7e92733 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_html_editor.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_html_editor.yml
@@ -42,7 +42,7 @@ elements: |
     '#required': true
     '#default_value': 'Hello <b>World!!!</b>'
     '#format': false
-
+  
 css: ''
 javascript: ''
 settings:
@@ -172,6 +172,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_html_escape.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_html_escape.yml
index 3eca0bcd0f..b4f575bac3 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_html_escape.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_html_escape.yml
@@ -261,29 +261,29 @@ elements: |
       '#title': 'Image select | <script>alert(''This markup is not escaped properly!!!'') </script>'
       '#show_label': true
       '#images':
-        bear_1:
-          text: 'Bear 1'
-          src: 'https://www.placebear.com/80/100'
-        bear_2:
-          text: 'Bear 2'
-          src: 'https://www.placebear.com/100/100'
-        bear_3:
-          text: 'Bear 3'
-          src: 'https://www.placebear.com/120/100'
+        dog_1:
+          text: 'Dog 1'
+          src: 'https://www.placedog.net/80/100'
+        dog_2:
+          text: 'Dog 2'
+          src: 'https://www.placedog.net/100/100'
+        dog_3:
+          text: 'Dog 3'
+          src: 'https://www.placedog.net/120/100'
     webform_image_select_multiple:
       '#type': webform_image_select
       '#title': 'Image select multiple | <script>alert(''This markup is not escaped properly!!!'') </script>'
       '#show_label': true
       '#images':
-        bear_1:
-          text: 'Bear 1'
-          src: 'https://www.placebear.com/80/100'
-        bear_2:
-          text: 'Bear 2'
-          src: 'https://www.placebear.com/100/100'
-        bear_3:
-          text: 'Bear 3'
-          src: 'https://www.placebear.com/120/100'
+        dog_1:
+          text: 'Dog 1'
+          src: 'https://www.placedog.net/80/100'
+        dog_2:
+          text: 'Dog 2'
+          src: 'https://www.placedog.net/100/100'
+        dog_3:
+          text: 'Dog 3'
+          src: 'https://www.placedog.net/120/100'
       '#multiple': true
     radios:
       '#type': radios
@@ -525,7 +525,7 @@ elements: |
     table:
       '#type': table
       '#title': 'Table | <script>alert(''This markup is not escaped properly!!!'') </script>'
-  
+
 css: ''
 javascript: ''
 settings:
@@ -655,6 +655,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_html_markup.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_html_markup.yml
index 8beda5c967..8c010015fd 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_html_markup.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_html_markup.yml
@@ -261,29 +261,29 @@ elements: |
       '#title': '<u>Image select</u>'
       '#show_label': true
       '#images':
-        bear_1:
-          text: 'Bear 1'
-          src: 'https://www.placebear.com/80/100'
-        bear_2:
-          text: 'Bear 2'
-          src: 'https://www.placebear.com/100/100'
-        bear_3:
-          text: 'Bear 3'
-          src: 'https://www.placebear.com/120/100'
+        dog_1:
+          text: 'Dog 1'
+          src: 'https://www.placedog.net/80/100'
+        dog_2:
+          text: 'Dog 2'
+          src: 'https://www.placedog.net/100/100'
+        dog_3:
+          text: 'Dog 3'
+          src: 'https://www.placedog.net/120/100'
     webform_image_select_multiple:
       '#type': webform_image_select
       '#title': '<u>Image select multiple</u>'
       '#show_label': true
       '#images':
-        bear_1:
-          text: 'Bear 1'
-          src: 'https://www.placebear.com/80/100'
-        bear_2:
-          text: 'Bear 2'
-          src: 'https://www.placebear.com/100/100'
-        bear_3:
-          text: 'Bear 3'
-          src: 'https://www.placebear.com/120/100'
+        dog_1:
+          text: 'Dog 1'
+          src: 'https://www.placedog.net/80/100'
+        dog_2:
+          text: 'Dog 2'
+          src: 'https://www.placedog.net/100/100'
+        dog_3:
+          text: 'Dog 3'
+          src: 'https://www.placedog.net/120/100'
       '#multiple': true
     radios:
       '#type': radios
@@ -525,7 +525,7 @@ elements: |
     table:
       '#type': table
       '#title': '<u>Table</u>'
-  
+
 css: ''
 javascript: ''
 settings:
@@ -655,6 +655,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_ignored_properties.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_ignored_properties.yml
index ccb1f38000..758198c60e 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_ignored_properties.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_ignored_properties.yml
@@ -200,6 +200,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_image_file.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_image_file.yml
index 6c3c116fa0..dfc7a24a12 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_image_file.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_image_file.yml
@@ -23,7 +23,7 @@ elements: |
     '#type': webform_image_file
     '#title': 'webform_image_file_advanced (max: 20x20)'
     '#max_resolution': 20x20
-
+  
 css: ''
 javascript: ''
 settings:
@@ -153,6 +153,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_image_file_attach.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_image_file_attach.yml
index f8bc76ca3e..fecfd04a50 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_image_file_attach.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_image_file_attach.yml
@@ -21,7 +21,7 @@ elements: |
     '#title': webform_image_file_attachment
     '#file_extensions': gif
     '#attachment_image_style': thumbnail
-
+  
 css: ''
 javascript: ''
 settings:
@@ -151,6 +151,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_image_resolution.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_image_resolution.yml
index 964be246d1..af40d07c99 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_image_resolution.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_image_resolution.yml
@@ -26,7 +26,7 @@ elements: |
     '#height_title': '{height_title}'
     '#width_title': '{width_title}'
     '#default_value': 300x400
-
+  
 css: ''
 javascript: ''
 settings:
@@ -156,6 +156,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_input_mask.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_input_mask.yml
index 4dc1a62f3f..ef1c8e5b3a 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_input_mask.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_input_mask.yml
@@ -82,7 +82,7 @@ elements: |
     '#type': textfield
     '#title': module
     '#input_mask': '999'
-
+  
 css: ''
 javascript: ''
 settings:
@@ -212,6 +212,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_invalid.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_invalid.yml
index 226e1b648a..ff65ca47e0 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_invalid.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_invalid.yml
@@ -145,6 +145,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_likert.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_likert.yml
index d0ea3f040e..f3fbf7deaa 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_likert.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_likert.yml
@@ -31,6 +31,7 @@ elements: |
     '#type': webform_likert
     '#title': likert_advanced
     '#required': true
+    '#required_error': '{custom error for @name}'
     '#na_answer': true
     '#na_answer_value': N/A
     '#na_answer_text': 'Not applicable'
@@ -209,6 +210,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_loc_places.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_loc_places.yml
index 17793be056..bf531b8cb7 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_loc_places.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_loc_places.yml
@@ -70,7 +70,7 @@ elements: |
     '#geolocation': true
     '#hidden': true
     '#geocomplete': true
-
+  
 css: ''
 javascript: ''
 settings:
@@ -200,6 +200,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file.yml
index ddc240445c..d7218d1b8b 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file.yml
@@ -199,6 +199,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_dis.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_dis.yml
index 3759bc787a..fc2942adbd 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_dis.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_dis.yml
@@ -150,6 +150,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_help.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_help.yml
index cab1d36750..78d99269c4 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_help.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_help.yml
@@ -65,7 +65,7 @@ elements: |
       '#type': managed_file
       '#title': managed_file_help_none
       '#file_help': none
-
+  
 css: ''
 javascript: ''
 settings:
@@ -195,6 +195,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_limit.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_limit.yml
index 75df5694fa..d226583b4b 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_limit.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_limit.yml
@@ -165,6 +165,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_name.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_name.yml
index 171d774f3d..b2de9eb45c 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_name.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_name.yml
@@ -32,7 +32,7 @@ elements: |
     '#type': managed_file
     '#title': 'File truncate (255)'
     '#file_name': 'file_truncate_123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'
-
+  
 css: ''
 javascript: ''
 settings:
@@ -162,6 +162,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_prev.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_prev.yml
index 8e2cfbdb6f..9b732a99f3 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_prev.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_prev.yml
@@ -190,6 +190,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_mapping.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_mapping.yml
index ab9c1d5bbf..bc1ec43252 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_mapping.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_mapping.yml
@@ -131,7 +131,7 @@ elements: |
         two: Two
         three: Three
       '#destination__type': webform_email_multiple
-
+  
 css: ''
 javascript: ''
 settings:
@@ -261,6 +261,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_markup.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_markup.yml
index c78703f712..60851e1b41 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_markup.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_markup.yml
@@ -164,6 +164,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_media_file.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_media_file.yml
index c6e01957d9..0d9e1b3428 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_media_file.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_media_file.yml
@@ -202,6 +202,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_message.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_message.yml
index 3929988cea..404773c86c 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_message.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_message.yml
@@ -222,6 +222,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_more.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_more.yml
index 55cafdaeb2..e69cd5df20 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_more.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_more.yml
@@ -195,6 +195,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_multiple.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_multiple.yml
index 69b82f011d..2f5a3227b0 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_multiple.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_multiple.yml
@@ -279,7 +279,7 @@ elements: |
         '#attributes':
           class:
             - custom-element
-
+  
 css: ''
 javascript: ''
 settings:
@@ -409,6 +409,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_multiple_date.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_multiple_date.yml
index db38e2cb32..8a02b6c572 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_multiple_date.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_multiple_date.yml
@@ -40,7 +40,7 @@ elements: |
       '#type': datelist
       '#title': datelist_basic
       '#multiple': true
-
+  
 css: ''
 javascript: ''
 settings:
@@ -170,6 +170,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_multiple_property.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_multiple_property.yml
index b6c2a7e96c..a6e060619b 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_multiple_property.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_multiple_property.yml
@@ -51,7 +51,7 @@ elements: |
     '#title': webform_element_multiple_custom_access
     '#default_value': 5
     '#access': false
-
+  
 css: ''
 javascript: ''
 settings:
@@ -181,6 +181,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_multiple_text.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_multiple_text.yml
index ab836c7d29..24abf710a8 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_multiple_text.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_multiple_text.yml
@@ -83,7 +83,7 @@ elements: |
       '#type': number
       '#title': number_basic
       '#multiple': true
-
+  
 css: ''
 javascript: ''
 settings:
@@ -213,6 +213,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_options.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_options.yml
index a0f3a460b7..4e93cd34f3 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_options.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_options.yml
@@ -76,7 +76,7 @@ elements: |
       '#title': webform_element_options_custom_type_multiple
       '#custom__type': webform_multiple
       '#default_value': { }
-
+  
 css: ''
 javascript: ''
 settings:
@@ -206,6 +206,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_other.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_other.yml
index 86f9f3fae7..cccefaabd8 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_other.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_other.yml
@@ -63,6 +63,14 @@ elements: |
         - One
         - Two
         - Four
+    select_other_zero:
+      '#type': webform_select_other
+      '#title': 'Select other zero'
+      '#options':
+        One: One
+        Two: Two
+        Three: Three
+      '#default_value': 0
   checkboxes_other:
     '#type': details
     '#title': 'Checkboxes other (checkboxes_other)'
@@ -279,6 +287,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_prepopulate.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_prepopulate.yml
index d9c20db617..12a15d5e05 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_prepopulate.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_prepopulate.yml
@@ -178,6 +178,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_private.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_private.yml
index 0b336aa589..910bacd09c 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_private.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_private.yml
@@ -160,6 +160,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: true
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_radios.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_radios.yml
index 7c3e81d587..ae2a43013b 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_radios.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_radios.yml
@@ -224,7 +224,7 @@ elements: |
           '#disabled': true
         three:
           '#disabled': true
-
+  
 css: ''
 javascript: ''
 settings:
@@ -354,6 +354,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_range.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_range.yml
index ae43c5b73b..7d959dd7a1 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_range.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_range.yml
@@ -71,7 +71,7 @@ elements: |
     '#output': right
     '#output__field_prefix': $
     '#output__field_suffix': '.00'
-
+  
 css: ''
 javascript: ''
 settings:
@@ -201,6 +201,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_rating.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_rating.yml
index 646e6a6608..b692de594a 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_rating.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_rating.yml
@@ -34,7 +34,7 @@ elements: |
       '#type': webform_rating
       '#title': rating_required
       '#required': true
-
+  
 css: ''
 javascript: ''
 settings:
@@ -164,6 +164,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_readonly.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_readonly.yml
index f99a061f97..2ed9437c19 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_readonly.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_readonly.yml
@@ -24,7 +24,7 @@ elements: |
     '#type': textarea
     '#title': textarea
     '#readonly': true
-
+  
 css: ''
 javascript: ''
 settings:
@@ -154,6 +154,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_same.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_same.yml
index c86b13e1b9..5b95aa84aa 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_same.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_same.yml
@@ -89,7 +89,7 @@ elements: |
       '#title': textfield_multiple_destination
       '#multiple': true
       '#required': true
-
+  
 css: ''
 javascript: ''
 settings:
@@ -219,6 +219,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_scale.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_scale.yml
index 3b8196b067..c8626114fb 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_scale.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_scale.yml
@@ -56,7 +56,7 @@ elements: |
     '#scale_type': flexbox
     '#min_text': '1 = disagree'
     '#max_text': 'agree = 5'
-
+  
 css: ''
 javascript: ''
 settings:
@@ -186,6 +186,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_section.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_section.yml
index 9368aedbc3..84df8418ab 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_section.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_section.yml
@@ -165,6 +165,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_select.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_select.yml
index 3c6bf607da..d1730f7435 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_select.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_select.yml
@@ -70,7 +70,7 @@ elements: |
         five: Five
       '#attributes':
         'data-webform-select-options-disabled': 'one,two,four,five'
-
+  
   select_select2_examples:
     '#type': details
     '#title': 'Select select2'
@@ -373,7 +373,7 @@ elements: |
         three: Three
         four: Four
         five: Five
-
+  
 css: ''
 javascript: ''
 settings:
@@ -503,6 +503,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_signature.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_signature.yml
index b8ef325900..3e26355410 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_signature.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_signature.yml
@@ -42,7 +42,7 @@ elements: |
     '#type': webform_signature
     '#title': signature_readonly
     '#readonly': true
-
+  
 css: ''
 javascript: ''
 settings:
@@ -172,6 +172,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_states.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_states.yml
index 4865df81c6..2357fbab8a 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_states.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_states.yml
@@ -124,7 +124,7 @@ elements: |
         custom_selector:
           value:
             pattern: '[a-z0-9]+'
-
+  
 css: ''
 javascript: ''
 settings:
@@ -254,6 +254,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_submission_views.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_submission_views.yml
index 10c44d4e41..562038d116 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_submission_views.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_submission_views.yml
@@ -47,7 +47,7 @@ elements: |
             - entity.webform.results_submissions
           node_routes:
             - entity.node.webform.results_submissions
-
+  
 css: ''
 javascript: ''
 settings:
@@ -177,6 +177,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_submission_views_r.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_submission_views_r.yml
index 337ad0d879..a5b89b2ce0 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_submission_views_r.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_submission_views_r.yml
@@ -41,7 +41,7 @@ elements: |
           - entity.webform.results_submissions
         node_routes:
           - entity.node.webform.results_submissions
-
+  
 css: ''
 javascript: ''
 settings:
@@ -171,6 +171,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_submitted_value.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_submitted_value.yml
index 71ddd4006a..ed6851a7d8 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_submitted_value.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_submitted_value.yml
@@ -55,7 +55,7 @@ elements: |
       - one
       - two
       - three
-
+  
 css: ''
 javascript: ''
 settings:
@@ -185,6 +185,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_table.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_table.yml
index 32ba985abb..ecdf4b1234 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_table.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_table.yml
@@ -193,7 +193,7 @@ elements: |
       table_advanced_04_textfield:
         '#type': textfield
         '#title': 'textfield (4)'
-
+  
 css: ''
 javascript: ''
 settings:
@@ -323,6 +323,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_table_select_sort.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_table_select_sort.yml
index 748b1f8b97..aad573e581 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_table_select_sort.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_table_select_sort.yml
@@ -157,7 +157,7 @@ elements: |
       '#default_value':
         five: five
         three: three
-
+  
 css: ''
 javascript: ''
 settings:
@@ -287,6 +287,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_telephone.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_telephone.yml
index 49be668259..cee87d608c 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_telephone.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_telephone.yml
@@ -45,7 +45,7 @@ elements: |
     '#international': true
     '#international_preferred_countries':
       - ZW
-
+  
 css: ''
 javascript: ''
 settings:
@@ -175,6 +175,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_term_reference.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_term_reference.yml
index d8fc87efc0..812729dea6 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_term_reference.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_term_reference.yml
@@ -28,6 +28,11 @@ elements: |
         '#type': webform_term_checkboxes
         '#title': webform_term_checkboxes_tree_default
         '#vocabulary': tags
+      webform_term_checkboxes_tree_depth:
+        '#type': webform_term_checkboxes
+        '#title': webform_term_checkboxes_tree_depth
+        '#vocabulary': tags
+        '#depth': 1
       webform_term_checkboxes_tree_advanced:
         '#type': webform_term_checkboxes
         '#title': webform_term_checkboxes_tree_advanced
@@ -47,6 +52,13 @@ elements: |
         '#vocabulary': tags
         '#breadcrumb': true
         '#format': breadcrumb
+      webform_term_checkboxes_breadcrumb_depth:
+        '#type': webform_term_checkboxes
+        '#title': webform_term_checkboxes_breadcrumb_depth
+        '#vocabulary': tags
+        '#breadcrumb': true
+        '#format': breadcrumb
+        '#depth': 1
       webform_term_checkboxes_breadcrumb_advanced:
         '#type': webform_term_checkboxes
         '#title': webform_term_checkboxes_breadcrumb_advanced
@@ -69,6 +81,11 @@ elements: |
         '#type': webform_term_select
         '#title': webform_term_select_tree_default
         '#vocabulary': tags
+      webform_term_select_tree_depth:
+        '#type': webform_term_select
+        '#title': webform_term_select_tree_depth
+        '#vocabulary': tags
+        '#depth': 1
       webform_term_select_tree_advanced:
         '#type': webform_term_select
         '#title': webform_term_select_tree_advanced
@@ -87,6 +104,13 @@ elements: |
         '#vocabulary': tags
         '#breadcrumb': true
         '#format': breadcrumb
+      webform_term_select_breadcrumb_depth:
+        '#type': webform_term_select
+        '#title': webform_term_select_breadcrumb_depth
+        '#vocabulary': tags
+        '#breadcrumb': true
+        '#format': breadcrumb
+        '#depth': 1
       webform_term_select_breadcrumb_advanced:
         '#type': webform_term_select
         '#title': webform_term_select_breadcrumb_advanced
@@ -97,7 +121,7 @@ elements: |
         '#breadcrumb_delimiter': ' » '
         '#format': breadcrumb
         '#format_items': ul
-  
+
 css: ''
 javascript: ''
 settings:
@@ -227,6 +251,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_terms_of_service.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_terms_of_service.yml
index eb2021ca73..6a421d95e3 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_terms_of_service.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_terms_of_service.yml
@@ -164,6 +164,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_text_format.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_text_format.yml
index e27bd56b27..fa8714b9fc 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_text_format.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_text_format.yml
@@ -161,6 +161,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_time.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_time.yml
index 7e1a7f2673..dfb8ee28e6 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_time.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_time.yml
@@ -68,7 +68,7 @@ elements: |
     '#title': time_timepicker_placeholder
     '#timepicker': true
     '#placeholder': '{time}'
-
+  
 css: ''
 javascript: ''
 settings:
@@ -198,6 +198,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_title_display.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_title_display.yml
index 41ae2b7462..9920ea536b 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_title_display.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_title_display.yml
@@ -743,45 +743,45 @@ elements: |
       '#title': 'Image select (before)'
       '#show_label': true
       '#images':
-        bear_1:
-          text: 'Bear 1'
-          src: 'https://www.placebear.com/80/100'
-        bear_2:
-          text: 'Bear 2'
-          src: 'https://www.placebear.com/100/100'
-        bear_3:
-          text: 'Bear 3'
-          src: 'https://www.placebear.com/120/100'
+        dog_1:
+          text: 'Dog 1'
+          src: 'https://www.placedog.net/80/100'
+        dog_2:
+          text: 'Dog 2'
+          src: 'https://www.placedog.net/100/100'
+        dog_3:
+          text: 'Dog 3'
+          src: 'https://www.placedog.net/120/100'
       '#title_display': before
     webform_image_select_after:
       '#type': webform_image_select
       '#title': 'Image select (after)'
       '#show_label': true
       '#images':
-        bear_1:
-          text: 'Bear 1'
-          src: 'https://www.placebear.com/80/100'
-        bear_2:
-          text: 'Bear 2'
-          src: 'https://www.placebear.com/100/100'
-        bear_3:
-          text: 'Bear 3'
-          src: 'https://www.placebear.com/120/100'
+        dog_1:
+          text: 'Dog 1'
+          src: 'https://www.placedog.net/80/100'
+        dog_2:
+          text: 'Dog 2'
+          src: 'https://www.placedog.net/100/100'
+        dog_3:
+          text: 'Dog 3'
+          src: 'https://www.placedog.net/120/100'
       '#title_display': after
     webform_image_select_none:
       '#type': webform_image_select
       '#title': 'Image select (none)'
       '#show_label': true
       '#images':
-        bear_1:
-          text: 'Bear 1'
-          src: 'https://www.placebear.com/80/100'
-        bear_2:
-          text: 'Bear 2'
-          src: 'https://www.placebear.com/100/100'
-        bear_3:
-          text: 'Bear 3'
-          src: 'https://www.placebear.com/120/100'
+        dog_1:
+          text: 'Dog 1'
+          src: 'https://www.placedog.net/80/100'
+        dog_2:
+          text: 'Dog 2'
+          src: 'https://www.placedog.net/100/100'
+        dog_3:
+          text: 'Dog 3'
+          src: 'https://www.placedog.net/120/100'
       '#title_display': none
     webform_image_select_hr:
       '#type': webform_horizontal_rule
@@ -1644,6 +1644,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_users_roles.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_users_roles.yml
index 7dc5a5c1fa..a432477074 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_users_roles.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_users_roles.yml
@@ -33,7 +33,7 @@ elements: |
     '#include_anonymous': false
     '#default_value':
       authenticated: authenticated
-
+  
 css: ''
 javascript: ''
 settings:
@@ -163,6 +163,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_minlength.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_minlength.yml
index dbf46e07e9..0d17076eda 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_minlength.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_minlength.yml
@@ -157,6 +157,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_multiple.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_multiple.yml
index fb37aec765..7e71ed8ee2 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_multiple.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_multiple.yml
@@ -79,7 +79,7 @@ elements: |
       '#title': webform_element_multiple_managed_file_two
       '#select2': true
       '#multiple': 2
-
+  
 css: ''
 javascript: ''
 settings:
@@ -209,6 +209,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_pattern.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_pattern.yml
index c586b4522d..939ca2a397 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_pattern.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_pattern.yml
@@ -38,7 +38,7 @@ elements: |
     '#title': pattern_unicode
     '#pattern': \u2E8F
     '#description': 'Enter unicode CJK characters ''⺏'''
-
+  
 css: ''
 javascript: ''
 settings:
@@ -168,6 +168,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_required.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_required.yml
index d194ca5f7a..c7a1b172d6 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_required.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_required.yml
@@ -165,6 +165,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_unique.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_unique.yml
index 8570469fd0..58f4551314 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_unique.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_unique.yml
@@ -186,6 +186,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_vertical_tabs.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_vertical_tabs.yml
new file mode 100644
index 0000000000..51692d5910
--- /dev/null
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_vertical_tabs.yml
@@ -0,0 +1,274 @@
+uuid: null
+langcode: en
+status: open
+dependencies:
+  enforced:
+    module:
+      - webform_test
+open: null
+close: null
+weight: 0
+uid: null
+template: false
+archive: false
+id: test_element_vertical_tabs
+title: 'Test: Element: Vertical tabs'
+description: 'Test Vertical tabs support'
+category: 'Test: Element'
+elements: |
+  vertical_tabs:
+    '#type': vertical_tabs
+  vertical_tabs_details_01:
+    '#type': details
+    '#title': vertical_tabs_details_01
+    '#group': vertical_tabs
+    vertical_tabs_textfield_01:
+      '#type': textfield
+      '#title': vertical_tabs_textfield_01
+  vertical_tabs_details_02:
+    '#type': details
+    '#title': vertical_tabs_details_02
+    '#group': vertical_tabs
+    vertical_tabs_textfield_02:
+      '#type': textfield
+      '#title': vertical_tabs_textfield_02
+  vertical_tabs_details_03:
+    '#type': details
+    '#title': vertical_tabs_details_03
+    '#group': vertical_tabs
+    vertical_tabs_textfield_03:
+      '#type': textfield
+      '#title': vertical_tabs_textfield_03
+  vertical_tabs_advanced:
+    '#type': vertical_tabs
+    '#title': 'My Vertical Tabs'
+    '#title_display': before
+    '#require': TRUE
+    '#description': 'This is a description'
+    '#help': 'This is a help'
+    '#more': 'This is a more'
+    '#default_tab': edit-vertical-tabs-advanced-details-03
+    '#wrapper_attributes':
+      style: 'border: 1px solid red; padding: 10px'
+    '#label_attributes':
+      style: 'color: green'
+  vertical_tabs_advanced_details_01:
+    '#type': details
+    '#title': vertical_tabs_advanced_details_01
+    '#group': vertical_tabs_advanced
+    vertical_tabs_advanced_textfield_01:
+      '#type': textfield
+      '#title': vertical_tabs_advanced_textfield_01
+  vertical_tabs_advanced_details_02:
+    '#type': details
+    '#title': vertical_tabs_advanced_details_02
+    '#group': vertical_tabs_advanced
+    vertical_tabs_advanced_textfield_02:
+      '#type': textfield
+      '#title': vertical_tabs_advanced_textfield_02
+  vertical_tabs_advanced_details_03:
+    '#type': details
+    '#title': vertical_tabs_advanced_details_03
+    '#group': vertical_tabs_advanced
+    vertical_tabs_advanced_textfield_03:
+      '#type': textfield
+      '#title': vertical_tabs_advanced_textfield_03
+  details_01:
+    '#type': details
+    '#title': details_01
+    textfield_01:
+      '#type': textfield
+      '#title': textfield_01
+  details_02:
+    '#type': details
+    '#title': details_02
+    textfield_02:
+      '#type': textfield
+      '#title': textfield_02
+  details_03:
+    '#type': details
+    '#title': details_03
+    textfield_03:
+      '#type': textfield
+      '#title': textfield_03
+
+css: ''
+javascript: ''
+settings:
+  ajax: false
+  ajax_scroll_top: form
+  ajax_progress_type: ''
+  ajax_effect: ''
+  ajax_speed: null
+  page: true
+  page_submit_path: ''
+  page_confirm_path: ''
+  page_theme_name: ''
+  form_title: source_entity_webform
+  form_submit_once: false
+  form_exception_message: ''
+  form_open_message: ''
+  form_close_message: ''
+  form_previous_submissions: true
+  form_confidential: false
+  form_confidential_message: ''
+  form_remote_addr: true
+  form_convert_anonymous: false
+  form_prepopulate: false
+  form_prepopulate_source_entity: false
+  form_prepopulate_source_entity_required: false
+  form_prepopulate_source_entity_type: ''
+  form_reset: false
+  form_disable_autocomplete: false
+  form_novalidate: false
+  form_disable_inline_errors: false
+  form_required: false
+  form_unsaved: false
+  form_disable_back: false
+  form_submit_back: false
+  form_autofocus: false
+  form_details_toggle: false
+  form_access_denied: default
+  form_access_denied_title: ''
+  form_access_denied_message: ''
+  form_access_denied_attributes: {  }
+  form_file_limit: ''
+  share: false
+  share_node: false
+  share_theme_name: ''
+  share_title: true
+  share_page_body_attributes: {  }
+  submission_label: ''
+  submission_log: false
+  submission_views: {  }
+  submission_views_replace: {  }
+  submission_user_columns: {  }
+  submission_user_duplicate: false
+  submission_access_denied: default
+  submission_access_denied_title: ''
+  submission_access_denied_message: ''
+  submission_access_denied_attributes: {  }
+  submission_exception_message: ''
+  submission_locked_message: ''
+  submission_excluded_elements: {  }
+  submission_exclude_empty: false
+  submission_exclude_empty_checkbox: false
+  previous_submission_message: ''
+  previous_submissions_message: ''
+  autofill: false
+  autofill_message: ''
+  autofill_excluded_elements: {  }
+  wizard_progress_bar: true
+  wizard_progress_pages: false
+  wizard_progress_percentage: false
+  wizard_progress_link: false
+  wizard_progress_states: false
+  wizard_auto_forward: true
+  wizard_auto_forward_hide_next_button: false
+  wizard_keyboard: true
+  wizard_start_label: ''
+  wizard_preview_link: false
+  wizard_confirmation: true
+  wizard_confirmation_label: ''
+  wizard_track: ''
+  wizard_prev_button_label: ''
+  wizard_next_button_label: ''
+  wizard_toggle: false
+  wizard_toggle_show_label: ''
+  wizard_toggle_hide_label: ''
+  preview: 0
+  preview_label: ''
+  preview_title: ''
+  preview_message: ''
+  preview_attributes: {  }
+  preview_excluded_elements: {  }
+  preview_exclude_empty: true
+  preview_exclude_empty_checkbox: false
+  draft: none
+  draft_multiple: false
+  draft_auto_save: false
+  draft_saved_message: ''
+  draft_loaded_message: ''
+  draft_pending_single_message: ''
+  draft_pending_multiple_message: ''
+  confirmation_type: page
+  confirmation_title: ''
+  confirmation_message: ''
+  confirmation_url: ''
+  confirmation_attributes: {  }
+  confirmation_back: true
+  confirmation_back_label: ''
+  confirmation_back_attributes: {  }
+  confirmation_exclude_query: false
+  confirmation_exclude_token: false
+  confirmation_update: false
+  limit_total: null
+  limit_total_interval: null
+  limit_total_message: ''
+  limit_total_unique: false
+  limit_user: null
+  limit_user_interval: null
+  limit_user_message: ''
+  limit_user_unique: false
+  entity_limit_total: null
+  entity_limit_total_interval: null
+  entity_limit_user: null
+  entity_limit_user_interval: null
+  purge: none
+  purge_days: null
+  results_disabled: false
+  results_disabled_ignore: false
+  results_customize: false
+  token_view: false
+  token_update: false
+  token_delete: false
+  serial_disabled: false
+access:
+  create:
+    roles:
+      - anonymous
+      - authenticated
+    users: {  }
+    permissions: {  }
+  view_any:
+    roles: {  }
+    users: {  }
+    permissions: {  }
+  update_any:
+    roles: {  }
+    users: {  }
+    permissions: {  }
+  delete_any:
+    roles: {  }
+    users: {  }
+    permissions: {  }
+  purge_any:
+    roles: {  }
+    users: {  }
+    permissions: {  }
+  view_own:
+    roles: {  }
+    users: {  }
+    permissions: {  }
+  update_own:
+    roles: {  }
+    users: {  }
+    permissions: {  }
+  delete_own:
+    roles: {  }
+    users: {  }
+    permissions: {  }
+  administer:
+    roles: {  }
+    users: {  }
+    permissions: {  }
+  test:
+    roles: {  }
+    users: {  }
+    permissions: {  }
+  configuration:
+    roles: {  }
+    users: {  }
+    permissions: {  }
+handlers: {  }
+variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_view.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_view.yml
index d258c43571..5ee0cb618e 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_view.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_view.yml
@@ -25,7 +25,7 @@ elements: |
     '#display_id': default
     '#arguments':
       - '[webform:id]'
-
+  
 css: ''
 javascript: ''
 settings:
@@ -155,6 +155,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_example_elements.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_example_elements.yml
index 49ddc4f5c8..672d7789e6 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_example_elements.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_example_elements.yml
@@ -247,29 +247,29 @@ elements: |
       '#title': 'Image select'
       '#show_label': true
       '#images':
-        bear_1:
-          text: 'Bear 1'
-          src: 'https://www.placebear.com/80/100'
-        bear_2:
-          text: 'Bear 2'
-          src: 'https://www.placebear.com/100/100'
-        bear_3:
-          text: 'Bear 3'
-          src: 'https://www.placebear.com/120/100'
+        dog_1:
+          text: 'Dog 1'
+          src: 'https://www.placedog.net/80/100'
+        dog_2:
+          text: 'Dog 2'
+          src: 'https://www.placedog.net/100/100'
+        dog_3:
+          text: 'Dog 3'
+          src: 'https://www.placedog.net/120/100'
     webform_image_select_multiple:
       '#type': webform_image_select
       '#title': 'Image select multiple'
       '#show_label': true
       '#images':
-        bear_1:
-          text: 'Bear 1'
-          src: 'https://www.placebear.com/80/100'
-        bear_2:
-          text: 'Bear 2'
-          src: 'https://www.placebear.com/100/100'
-        bear_3:
-          text: 'Bear 3'
-          src: 'https://www.placebear.com/120/100'
+        dog_1:
+          text: 'Dog 1'
+          src: 'https://www.placedog.net/80/100'
+        dog_2:
+          text: 'Dog 2'
+          src: 'https://www.placedog.net/100/100'
+        dog_3:
+          text: 'Dog 3'
+          src: 'https://www.placedog.net/120/100'
       '#multiple': true
     radios:
       '#type': radios
@@ -511,7 +511,7 @@ elements: |
     table:
       '#type': table
       '#title': Table
-  
+
 css: ''
 javascript: ''
 settings:
@@ -641,6 +641,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_example_elements_composite.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_example_elements_composite.yml
index 25bf5f6362..0f7658ad4f 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_example_elements_composite.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_example_elements_composite.yml
@@ -301,6 +301,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_exporter_entity_reference.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_exporter_entity_reference.yml
index 66ed2b2ab1..96dffe9e4c 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_exporter_entity_reference.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_exporter_entity_reference.yml
@@ -164,6 +164,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_exporter_options.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_exporter_options.yml
index b17204a529..4e32b2b596 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_exporter_options.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_exporter_options.yml
@@ -174,6 +174,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_access_denied.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_access_denied.yml
index 1d5a057f1f..1215961897 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_access_denied.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_access_denied.yml
@@ -149,6 +149,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_api.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_api.yml
index 5a37d705b7..f86fe0d170 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_api.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_api.yml
@@ -249,6 +249,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_archived.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_archived.yml
index 325774c86b..7f2f1cbb35 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_archived.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_archived.yml
@@ -148,6 +148,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_assets.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_assets.yml
index 46862386af..f40564219a 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_assets.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_assets.yml
@@ -161,6 +161,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_autofill.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_autofill.yml
index 0d3b9f408b..62918040be 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_autofill.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_autofill.yml
@@ -153,6 +153,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_autofocus.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_autofocus.yml
index 0b68ca980a..03cce26716 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_autofocus.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_autofocus.yml
@@ -149,6 +149,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_closed.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_closed.yml
index 1bd7f4ad5b..b2614f8699 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_closed.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_closed.yml
@@ -148,6 +148,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_confidential.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_confidential.yml
index 07aa2950b3..bfc32a5a24 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_confidential.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_confidential.yml
@@ -149,6 +149,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_details_toggle.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_details_toggle.yml
index 8fbf020dc7..fbecb87e7d 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_details_toggle.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_details_toggle.yml
@@ -156,6 +156,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_disable_autocomplete.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_disable_autocomplete.yml
index 92ad1b99bf..d09a9d6c0d 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_disable_autocomplete.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_disable_autocomplete.yml
@@ -151,6 +151,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_disable_back.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_disable_back.yml
index 4bed3fbfee..2feb56008d 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_disable_back.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_disable_back.yml
@@ -476,6 +476,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_disable_inline_errors.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_disable_inline_errors.yml
index 402417aad2..1bea2561fa 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_disable_inline_errors.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_disable_inline_errors.yml
@@ -150,6 +150,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_draft_anonymous.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_draft_anonymous.yml
index 009c159666..aa2b982ebd 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_draft_anonymous.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_draft_anonymous.yml
@@ -153,6 +153,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_draft_authenticated.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_draft_authenticated.yml
index 5ebf576bb5..6c973da54d 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_draft_authenticated.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_draft_authenticated.yml
@@ -153,6 +153,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_draft_multiple.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_draft_multiple.yml
index 13930ed7eb..23a7d81aa9 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_draft_multiple.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_draft_multiple.yml
@@ -153,6 +153,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_inline_errors.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_inline_errors.yml
index 9cada602bc..b27f069d34 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_inline_errors.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_inline_errors.yml
@@ -257,6 +257,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_limit.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_limit.yml
index e18bad2bb5..71b46388a9 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_limit.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_limit.yml
@@ -169,6 +169,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_limit_total_unique.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_limit_total_unique.yml
index 6e32134803..c82d3e47ad 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_limit_total_unique.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_limit_total_unique.yml
@@ -149,6 +149,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_limit_user_unique.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_limit_user_unique.yml
index cdabfdfee8..6ff94ade78 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_limit_user_unique.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_limit_user_unique.yml
@@ -149,6 +149,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_limit_wait.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_limit_wait.yml
index e34518fa55..fdbfb21255 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_limit_wait.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_limit_wait.yml
@@ -158,6 +158,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_long_100.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_long_100.yml
index 69f5cb1365..826fb8cfbe 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_long_100.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_long_100.yml
@@ -446,6 +446,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_long_200.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_long_200.yml
index 91e32608ab..bd7359b665 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_long_200.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_long_200.yml
@@ -746,6 +746,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_long_300.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_long_300.yml
index 1aecfecfff..30d0b06073 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_long_300.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_long_300.yml
@@ -1046,6 +1046,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_novalidate.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_novalidate.yml
index 5c19359f44..b5b192fcdd 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_novalidate.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_novalidate.yml
@@ -153,6 +153,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_opening.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_opening.yml
index bae32c2e6e..c9f9e1b758 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_opening.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_opening.yml
@@ -148,6 +148,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_prepopulate.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_prepopulate.yml
index 2a41a8b057..04847e3edc 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_prepopulate.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_prepopulate.yml
@@ -169,6 +169,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_preview.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_preview.yml
index ee92ac36f9..285013fe4b 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_preview.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_preview.yml
@@ -187,6 +187,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_properties.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_properties.yml
index 67373b1a03..e7dc2a9774 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_properties.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_properties.yml
@@ -161,6 +161,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_remote_addr.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_remote_addr.yml
index 181bbed6bc..2a94ec4b5d 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_remote_addr.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_remote_addr.yml
@@ -149,6 +149,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_required.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_required.yml
index f74bbb441c..cf35f9ccb9 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_required.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_required.yml
@@ -150,6 +150,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_reset.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_reset.yml
index b970ee695c..0024181e1f 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_reset.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_reset.yml
@@ -150,6 +150,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_results_disabled.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_results_disabled.yml
index e8144b3efc..e190b93344 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_results_disabled.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_results_disabled.yml
@@ -148,6 +148,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_submit_back.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_submit_back.yml
index 98030e0634..eb453cdf6a 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_submit_back.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_submit_back.yml
@@ -160,6 +160,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_submit_once.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_submit_once.yml
index 35f28dd5f7..96e580e40c 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_submit_once.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_submit_once.yml
@@ -157,6 +157,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_submit_text.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_submit_text.yml
index f0f6299b39..1db9c28323 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_submit_text.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_submit_text.yml
@@ -150,6 +150,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_template.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_template.yml
index bf506282a4..52d89990b0 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_template.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_template.yml
@@ -148,6 +148,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_unsaved.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_unsaved.yml
index 31223aa43e..9fadfcecf3 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_unsaved.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_unsaved.yml
@@ -154,6 +154,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_unsaved_wizard.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_unsaved_wizard.yml
index 19a4869ca8..decc847b4a 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_unsaved_wizard.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_unsaved_wizard.yml
@@ -158,6 +158,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_validate.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_validate.yml
index 208b0f9da1..496a44052f 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_validate.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_validate.yml
@@ -149,6 +149,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_access.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_access.yml
index 6d06b793f1..bb771a9a7f 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_access.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_access.yml
@@ -187,6 +187,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_advanced.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_advanced.yml
index fb0837d662..72083a9676 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_advanced.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_advanced.yml
@@ -191,6 +191,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_basic.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_basic.yml
index 1873a93868..efd13eb68e 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_basic.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_basic.yml
@@ -160,6 +160,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_conditional.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_conditional.yml
index eb1c4a0372..55ce51f0f7 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_conditional.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_conditional.yml
@@ -229,6 +229,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_custom.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_custom.yml
index b6e5ee1c6f..72cc84db5f 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_custom.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_custom.yml
@@ -192,6 +192,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_links.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_links.yml
index eb13895a33..c7a6b01e24 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_links.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_links.yml
@@ -160,6 +160,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_long_100.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_long_100.yml
index 352f48af60..519a7bf98f 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_long_100.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_long_100.yml
@@ -476,6 +476,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_long_200.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_long_200.yml
index a8532c3a09..91daa2b0d0 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_long_200.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_long_200.yml
@@ -806,6 +806,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_long_300.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_long_300.yml
index 3d2a6996ca..4eb920612f 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_long_300.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_long_300.yml
@@ -1136,6 +1136,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_validate.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_validate.yml
index 372aa75f42..bf75217725 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_validate.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_validate.yml
@@ -59,7 +59,7 @@ elements: |
   wizard_3:
     '#type': webform_wizard_page
     '#title': 'Wizard page #3'
-
+  
 css: ''
 javascript: ''
 settings:
@@ -189,6 +189,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_validate_comp.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_validate_comp.yml
index 0a73222946..f0a336c26f 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_validate_comp.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_validate_comp.yml
@@ -107,7 +107,7 @@ elements: |
   wizard_3:
     '#type': webform_wizard_page
     '#title': 'Wizard page #3'
-
+  
 css: ''
 javascript: ''
 settings:
@@ -237,6 +237,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_action.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_action.yml
index cac6e5b404..066d6402d2 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_action.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_action.yml
@@ -48,7 +48,7 @@ elements: |
       '#attributes':
         readonly: readonly
         style: 'background-color: #eee'
-
+  
 css: ''
 javascript: ''
 settings:
@@ -178,6 +178,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
@@ -250,7 +251,7 @@ handlers:
       data: |
         notes_add: ''
         notes_last: '[webform_submission:values:notes_add]'
-
+        
       message: 'Submission notes have been updated.'
       message_type: status
       debug: true
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email.yml
index 2dbcd9f934..d9b8551f0e 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email.yml
@@ -41,7 +41,7 @@ elements: |
     '#type': textarea
     '#required': true
     '#default_value': '{message}'
-
+  
 css: ''
 javascript: ''
 settings:
@@ -171,6 +171,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_advanced.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_advanced.yml
index ce65851fb7..d146231f11 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_advanced.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_advanced.yml
@@ -56,7 +56,7 @@ elements: |
     '#title': Notes
     '#private': true
     '#default_value': 'These notes are private.'
-
+  
 css: ''
 javascript: ''
 settings:
@@ -186,6 +186,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
@@ -263,7 +264,7 @@ handlers:
         [webform_submission:values]
         <hr />
         <p style="color:yellow"><em>Custom styled HTML markup</em></p>
-
+        
       excluded_elements: {  }
       ignore_access: true
       exclude_empty: true
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_mapping.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_mapping.yml
index c4547158bd..17f8e856e8 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_mapping.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_mapping.yml
@@ -31,7 +31,7 @@ elements: |
     '#title': radios_other
     '#options': gender
     '#description': 'Check and enter ''Other'' to trigger an email.'
-
+  
 css: ''
 javascript: ''
 settings:
@@ -161,6 +161,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_roles.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_roles.yml
index a01230c938..d01b236d51 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_roles.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_roles.yml
@@ -23,7 +23,7 @@ elements: |
       authenticated: 'Authenticated (authenticated)'
       administrator: 'Administrator (administrator)'
       other: Other
-
+  
 css: ''
 javascript: ''
 settings:
@@ -153,6 +153,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_states.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_states.yml
index 5e650fba29..991f18420e 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_states.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_states.yml
@@ -18,7 +18,7 @@ category: 'Test: Handler'
 elements: |
   message:
     '#markup': 'Click ''Save Draft'' and ''Submit'' to send emails triggered by submissions  state.'
-
+  
 css: ''
 javascript: ''
 settings:
@@ -148,6 +148,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_twig.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_twig.yml
index e88029bb85..bfa20d0cfc 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_twig.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_twig.yml
@@ -41,7 +41,7 @@ elements: |
     '#type': textarea
     '#required': true
     '#default_value': '{message}'
-
+  
 css: ''
 javascript: ''
 settings:
@@ -171,6 +171,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
@@ -244,7 +245,7 @@ handlers:
       body: |
         <p>Submitted values are:</p>
         {{ webform_token('[webform_submission:values]', webform_submission) }}
-
+        
       excluded_elements: {  }
       ignore_access: false
       exclude_empty: true
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_settings.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_settings.yml
index 50228e7d82..c7a37d4c31 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_settings.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_settings.yml
@@ -61,7 +61,7 @@ elements: |
       '#type': textfield
       '#title': 'Draft loaded message'
       '#default_value': '{Custom draft loaded message}'
-
+  
 css: ''
 javascript: ''
 settings:
@@ -191,6 +191,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_libraries_optional.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_libraries_optional.yml
index 797d77dbc0..f4dbb7534f 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_libraries_optional.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_libraries_optional.yml
@@ -215,6 +215,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_rendering.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_rendering.yml
index dc1282b35a..3bf2dade81 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_rendering.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_rendering.yml
@@ -50,7 +50,7 @@ elements: |
     '#default_value':
       value: '<p><em>{default_value}</em></p>'
       format: basic_html
-
+  
 css: ''
 javascript: ''
 settings:
@@ -180,6 +180,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: true
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_autocomplete.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_autocomplete.yml
index 8b95721f68..8d9717fc52 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_autocomplete.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_autocomplete.yml
@@ -290,6 +290,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_client_disabled.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_client_disabled.yml
index 36215f7fbf..25eb1c2d7d 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_client_disabled.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_client_disabled.yml
@@ -473,15 +473,15 @@ elements: |
     '#title': 'Image select'
     '#show_label': true
     '#images':
-      bear_1:
-        text: 'Bear 1'
-        src: 'https://www.placebear.com/80/100'
-      bear_2:
-        text: 'Bear 2'
-        src: 'https://www.placebear.com/100/100'
-      bear_3:
-        text: 'Bear 3'
-        src: 'https://www.placebear.com/120/100'
+      dog_1:
+        text: 'Dog 1'
+        src: 'https://www.placedog.net/80/100'
+      dog_2:
+        text: 'Dog 2'
+        src: 'https://www.placedog.net/100/100'
+      dog_3:
+        text: 'Dog 3'
+        src: 'https://www.placedog.net/120/100'
     '#default_value': Loremipsum
     '#states':
       disabled:
@@ -998,7 +998,7 @@ elements: |
           checked: true
   webform_variant:
     '#type': webform_variant
-    '#title': 'Variant [EXPERIMENTAL]'
+    '#title': 'Variant'
     '#states':
       disabled:
         ':input[name="trigger"]':
@@ -1146,6 +1146,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_client_invisible.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_client_invisible.yml
index 83b66118e9..f00adebeea 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_client_invisible.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_client_invisible.yml
@@ -403,15 +403,15 @@ elements: |
     '#title': 'Image select'
     '#show_label': true
     '#images':
-      bear_1:
-        text: 'Bear 1'
-        src: 'https://www.placebear.com/80/100'
-      bear_2:
-        text: 'Bear 2'
-        src: 'https://www.placebear.com/100/100'
-      bear_3:
-        text: 'Bear 3'
-        src: 'https://www.placebear.com/120/100'
+      dog_1:
+        text: 'Dog 1'
+        src: 'https://www.placedog.net/80/100'
+      dog_2:
+        text: 'Dog 2'
+        src: 'https://www.placedog.net/100/100'
+      dog_3:
+        text: 'Dog 3'
+        src: 'https://www.placedog.net/120/100'
     '#default_value': Loremipsum
     '#states':
       invisible:
@@ -817,7 +817,7 @@ elements: |
           checked: true
   webform_variant:
     '#type': webform_variant
-    '#title': 'Variant [EXPERIMENTAL]'
+    '#title': 'Variant'
     '#states':
       invisible:
         ':input[name="trigger"]':
@@ -959,6 +959,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_client_required.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_client_required.yml
index 53283bbe3a..22b88bec4e 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_client_required.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_client_required.yml
@@ -147,7 +147,7 @@ elements: |
         two: Two
         three: Three
       '#required': true
-
+  
 css: ''
 javascript: ''
 settings:
@@ -277,6 +277,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_client_visible.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_client_visible.yml
index 99a0776074..d4b1be76cf 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_client_visible.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_client_visible.yml
@@ -514,15 +514,15 @@ elements: |
     '#title': 'Image select'
     '#show_label': true
     '#images':
-      bear_1:
-        text: 'Bear 1'
-        src: 'https://www.placebear.com/80/100'
-      bear_2:
-        text: 'Bear 2'
-        src: 'https://www.placebear.com/100/100'
-      bear_3:
-        text: 'Bear 3'
-        src: 'https://www.placebear.com/120/100'
+      dog_1:
+        text: 'Dog 1'
+        src: 'https://www.placedog.net/80/100'
+      dog_2:
+        text: 'Dog 2'
+        src: 'https://www.placedog.net/100/100'
+      dog_3:
+        text: 'Dog 3'
+        src: 'https://www.placedog.net/120/100'
     '#default_value': Loremipsum
     '#states':
       visible:
@@ -1039,7 +1039,7 @@ elements: |
           checked: true
   webform_variant:
     '#type': webform_variant
-    '#title': 'Variant [EXPERIMENTAL]'
+    '#title': 'Variant'
     '#states':
       visible:
         ':input[name="trigger"]':
@@ -1187,6 +1187,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_crosspage.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_crosspage.yml
index c6df0b4acf..c7bac1640c 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_crosspage.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_crosspage.yml
@@ -176,6 +176,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_disabled.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_disabled.yml
index 4e09360eb2..e1b4fed262 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_disabled.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_disabled.yml
@@ -60,7 +60,7 @@ elements: |
       disabled:
         ':input[name="disabled"]':
           checked: true
-
+  
 css: ''
 javascript: ''
 settings:
@@ -190,6 +190,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_clear.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_clear.yml
index 8f36d31d94..6848f155b1 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_clear.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_clear.yml
@@ -103,7 +103,7 @@ elements: |
       '#type': textfield
       '#title': dependent_details_textfield
       '#default_value': '{dependent_details_textfield}'
-
+  
 css: ''
 javascript: ''
 settings:
@@ -233,6 +233,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_comp.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_comp.yml
index d42792826b..dfd924a085 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_comp.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_comp.yml
@@ -207,6 +207,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_containers.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_containers.yml
index 50dcced9ad..fc116bcee2 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_containers.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_containers.yml
@@ -204,6 +204,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_custom.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_custom.yml
index 7063694bcd..f250d0faf6 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_custom.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_custom.yml
@@ -280,6 +280,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_file.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_file.yml
new file mode 100644
index 0000000000..f0d93afc21
--- /dev/null
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_file.yml
@@ -0,0 +1,209 @@
+uuid: null
+langcode: en
+status: open
+dependencies:
+  enforced:
+    module:
+      - webform_test
+open: null
+close: null
+weight: 0
+uid: null
+template: false
+archive: false
+id: test_states_server_file
+title: 'Test: Form API #states file validation'
+description: 'Test Drupal''s #states API file validation.'
+category: 'Test: Form API #states'
+elements: |
+  trigger_file:
+    '#type': managed_file
+    '#title': trigger_file
+  textfield_dependent_required:
+    '#type': textfield
+    '#title': textfield_dependent_required
+    '#states':
+      required:
+        ':input[name="files[trigger_file]"]':
+          filled: true
+  
+css: ''
+javascript: ''
+settings:
+  ajax: false
+  ajax_scroll_top: form
+  ajax_progress_type: ''
+  ajax_effect: ''
+  ajax_speed: null
+  page: true
+  page_submit_path: ''
+  page_confirm_path: ''
+  page_theme_name: ''
+  form_title: source_entity_webform
+  form_submit_once: false
+  form_exception_message: ''
+  form_open_message: ''
+  form_close_message: ''
+  form_previous_submissions: true
+  form_confidential: false
+  form_confidential_message: ''
+  form_remote_addr: true
+  form_convert_anonymous: false
+  form_prepopulate: false
+  form_prepopulate_source_entity: false
+  form_prepopulate_source_entity_required: false
+  form_prepopulate_source_entity_type: ''
+  form_reset: false
+  form_disable_autocomplete: false
+  form_novalidate: true
+  form_disable_inline_errors: false
+  form_required: false
+  form_unsaved: false
+  form_disable_back: false
+  form_submit_back: false
+  form_autofocus: false
+  form_details_toggle: false
+  form_access_denied: default
+  form_access_denied_title: ''
+  form_access_denied_message: ''
+  form_access_denied_attributes: {  }
+  form_file_limit: ''
+  share: false
+  share_node: false
+  share_theme_name: ''
+  share_title: true
+  share_page_body_attributes: {  }
+  submission_label: ''
+  submission_log: false
+  submission_views: {  }
+  submission_views_replace: {  }
+  submission_user_columns: {  }
+  submission_user_duplicate: false
+  submission_access_denied: default
+  submission_access_denied_title: ''
+  submission_access_denied_message: ''
+  submission_access_denied_attributes: {  }
+  submission_exception_message: ''
+  submission_locked_message: ''
+  submission_excluded_elements: {  }
+  submission_exclude_empty: false
+  submission_exclude_empty_checkbox: false
+  previous_submission_message: ''
+  previous_submissions_message: ''
+  autofill: false
+  autofill_message: ''
+  autofill_excluded_elements: {  }
+  wizard_progress_bar: true
+  wizard_progress_pages: false
+  wizard_progress_percentage: false
+  wizard_progress_link: false
+  wizard_progress_states: false
+  wizard_auto_forward: true
+  wizard_auto_forward_hide_next_button: false
+  wizard_keyboard: true
+  wizard_start_label: ''
+  wizard_preview_link: false
+  wizard_confirmation: true
+  wizard_confirmation_label: ''
+  wizard_track: ''
+  wizard_prev_button_label: ''
+  wizard_next_button_label: ''
+  wizard_toggle: false
+  wizard_toggle_show_label: ''
+  wizard_toggle_hide_label: ''
+  preview: 0
+  preview_label: ''
+  preview_title: ''
+  preview_message: ''
+  preview_attributes: {  }
+  preview_excluded_elements: {  }
+  preview_exclude_empty: true
+  preview_exclude_empty_checkbox: false
+  draft: none
+  draft_multiple: false
+  draft_auto_save: false
+  draft_saved_message: ''
+  draft_loaded_message: ''
+  draft_pending_single_message: ''
+  draft_pending_multiple_message: ''
+  confirmation_type: message
+  confirmation_title: ''
+  confirmation_message: ''
+  confirmation_url: ''
+  confirmation_attributes: {  }
+  confirmation_back: true
+  confirmation_back_label: ''
+  confirmation_back_attributes: {  }
+  confirmation_exclude_query: false
+  confirmation_exclude_token: false
+  confirmation_update: false
+  limit_total: null
+  limit_total_interval: null
+  limit_total_message: ''
+  limit_total_unique: false
+  limit_user: null
+  limit_user_interval: null
+  limit_user_message: ''
+  limit_user_unique: false
+  entity_limit_total: null
+  entity_limit_total_interval: null
+  entity_limit_user: null
+  entity_limit_user_interval: null
+  purge: none
+  purge_days: null
+  results_disabled: true
+  results_disabled_ignore: true
+  results_customize: false
+  token_view: false
+  token_update: false
+  token_delete: false
+  serial_disabled: false
+access:
+  create:
+    roles:
+      - anonymous
+      - authenticated
+    users: {  }
+    permissions: {  }
+  view_any:
+    roles: {  }
+    users: {  }
+    permissions: {  }
+  update_any:
+    roles: {  }
+    users: {  }
+    permissions: {  }
+  delete_any:
+    roles: {  }
+    users: {  }
+    permissions: {  }
+  purge_any:
+    roles: {  }
+    users: {  }
+    permissions: {  }
+  view_own:
+    roles: {  }
+    users: {  }
+    permissions: {  }
+  update_own:
+    roles: {  }
+    users: {  }
+    permissions: {  }
+  delete_own:
+    roles: {  }
+    users: {  }
+    permissions: {  }
+  administer:
+    roles: {  }
+    users: {  }
+    permissions: {  }
+  test:
+    roles: {  }
+    users: {  }
+    permissions: {  }
+  configuration:
+    roles: {  }
+    users: {  }
+    permissions: {  }
+handlers: {  }
+variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_hidden.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_hidden.yml
index 8bc736666a..4f9fc569a7 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_hidden.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_hidden.yml
@@ -139,7 +139,7 @@ elements: |
         invisible:
           ':input[name="trigger_checkbox"]':
             checked: true
-
+  
 css: ''
 javascript: ''
 settings:
@@ -269,6 +269,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_likert.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_likert.yml
index f4b616ee69..8e2ec3deb0 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_likert.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_likert.yml
@@ -164,6 +164,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_multiple.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_multiple.yml
index f57ab35bdb..d239d74a20 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_multiple.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_multiple.yml
@@ -158,6 +158,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_nested.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_nested.yml
index 55f11be8ba..af382fc9f0 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_nested.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_nested.yml
@@ -189,6 +189,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_preview.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_preview.yml
index 59e6ccb04e..eab1c632f5 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_preview.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_preview.yml
@@ -183,6 +183,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_required.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_required.yml
index 902732e5e4..e62efc2374 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_required.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_required.yml
@@ -578,6 +578,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_save.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_save.yml
index ec24e84421..bdeef0d771 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_save.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_save.yml
@@ -71,7 +71,7 @@ elements: |
       '#type': textfield
       '#title': dependent_details_textfield
       '#default_value': '{dependent_details_textfield}'
-
+  
 css: ''
 javascript: ''
 settings:
@@ -201,6 +201,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_wizard.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_wizard.yml
index e2352b554a..f7610b5066 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_wizard.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_wizard.yml
@@ -234,7 +234,7 @@ elements: |
       '#default_value': '{default_value}'
       '#required': '{default_value}'
       '#description': '<b>Required:</b> page_01_trigger_checkbox:checked'
-
+  
 css: ''
 javascript: ''
 settings:
@@ -364,6 +364,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_to_text.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_to_text.yml
index 735a1e05d8..6672bb9fe9 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_to_text.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_to_text.yml
@@ -47,7 +47,7 @@ elements: |
     '#states':
       required:
         - ':input[name="some_trigger"]':
-            checked: true
+            unchecked: false
         - 'or'
         - ':input[name="some_value"]':
             value: 1
@@ -61,7 +61,7 @@ elements: |
     '#states':
       required:
         - ':input[name="some_trigger"]':
-            checked: true
+            checked: false
         -
           - ':input[name="some_value"]':
               value: 1
@@ -69,7 +69,7 @@ elements: |
           - ':input[name="some_number"]':
               value:
                 between: '1:10'
-  
+
 css: ''
 javascript: ''
 settings:
@@ -199,6 +199,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_triggers.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_triggers.yml
index ee6b3815d3..d54592dd36 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_triggers.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_triggers.yml
@@ -261,6 +261,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_submission_label.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_submission_label.yml
index a50d911ce8..753b92f3c7 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_submission_label.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_submission_label.yml
@@ -150,6 +150,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_submission_log.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_submission_log.yml
index 481f4142fb..dcab22fd55 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_submission_log.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_submission_log.yml
@@ -149,6 +149,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_submission_views.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_submission_views.yml
index eed2c4e3f1..769ccd3f87 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_submission_views.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_submission_views.yml
@@ -179,6 +179,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_token.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_token.yml
index c0a7d3f4ec..026052b91b 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_token.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_token.yml
@@ -35,7 +35,7 @@ elements: |
       Close long: [webform:close:long]
       Element title: [webform:element:webform_tokens:title]
       Element description: [webform:element:webform_tokens:description]
-
+  
   webform_submission_tokens:
     '#type': webform_codemirror
     '#mode': text
@@ -68,7 +68,7 @@ elements: |
       URL: [webform_submission:url]
       URL Edit Webform: [webform_submission:url:edit-form]
       UUID: [webform_submission:uuid]
-
+  
   webform_submission_source_entity_tokens:
     '#type': webform_codemirror
     '#mode': text
@@ -97,7 +97,7 @@ elements: |
       Summary: [webform_submission:source-entity:summary]
       Title: [webform_submission:source-entity:title]
       URL: [webform_submission:source-entity:url]
-
+  
   webform_submission_node_tokens:
     '#type': webform_codemirror
     '#mode': text
@@ -126,7 +126,7 @@ elements: |
       Summary: [webform_submission:node:summary]
       Title: [webform_submission:node:title]
       URL: [webform_submission:node:url]
-
+  
 css: ''
 javascript: ''
 settings:
@@ -256,6 +256,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: true
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_token_view_update.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_token_operations.yml
similarity index 92%
rename from web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_token_view_update.yml
rename to web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_token_operations.yml
index 0dc7bb753f..310928fbdf 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_token_view_update.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_token_operations.yml
@@ -11,15 +11,15 @@ weight: 0
 uid: null
 template: false
 archive: false
-id: test_token_view_update
-title: 'Test: Token: View & Update'
-description: 'Test viewing and updating submission using secure token.'
+id: test_token_operations
+title: 'Test: Token: Operations (View, Update, & Delete)'
+description: 'Test viewing, updating, and deleting a submission using secure token.'
 category: 'Test: Token'
 elements: |
   textfield:
     '#type': textfield
     '#title': textfield
-
+  
 css: ''
 javascript: ''
 settings:
@@ -124,7 +124,8 @@ settings:
   confirmation_message: |
     <p>You can view your submission via <a href="[webform_submission:view-url]">[webform_submission:view-url:relative]</a></p>
     <p>You can update your submission via <a href="[webform_submission:update-url]">[webform_submission:update-url:relative]</a></p>
-
+    <p>You can delete your submission via <a href="[webform_submission:delete-url]">[webform_submission:delete-url:relative]</a></p>
+    
   confirmation_url: ''
   confirmation_attributes: {  }
   confirmation_back: true
@@ -152,6 +153,7 @@ settings:
   results_customize: false
   token_view: true
   token_update: true
+  token_delete: true
   serial_disabled: false
 access:
   create:
@@ -224,8 +226,9 @@ handlers:
       subject: _default
       body: |
         <a href="[webform_submission:view-url]">[webform_submission:view-url]</a><br/>
-        <a href="[webform_submission:update-url]">[webform_submission:update-url]</a>
-
+        <a href="[webform_submission:update-url]">[webform_submission:update-url]</a><br/>
+        <a href="[webform_submission:delete-url]">[webform_submission:delete-url]</a>
+        
       excluded_elements: {  }
       ignore_access: false
       exclude_empty: true
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_token_submission_value.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_token_submission_value.yml
index 0d1b48a305..d36dab6009 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_token_submission_value.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_token_submission_value.yml
@@ -399,6 +399,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: true
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_variant.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_variant.yml
index 4487f89db0..6a4ef4a9f2 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_variant.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_variant.yml
@@ -20,7 +20,7 @@ elements: |
     '#type': webform_variant
     '#title': test_offcanvas_width
     '#variant': test_offcanvas_width
-
+  
 css: ''
 javascript: ''
 settings:
@@ -150,6 +150,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_variant_multiple.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_variant_multiple.yml
index 51a4ac95c0..dedb2d50b8 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_variant_multiple.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_variant_multiple.yml
@@ -34,7 +34,7 @@ elements: |
     '#wrapper_attributes':
       style: 'display: inline-block; margin: 0; padding: 0 20px; font-size: 100px; '
     '#markup': '{0}'
-
+  
 css: ''
 javascript: ''
 settings:
@@ -164,6 +164,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
@@ -236,7 +237,7 @@ variants:
       elements: |
         letter_markup:
           '#markup': '[A]'
-
+        
       handlers: {  }
       debug: false
   b:
@@ -252,7 +253,7 @@ variants:
       elements: |
         letter_markup:
           '#markup': '[B]'
-
+        
       handlers: {  }
       debug: false
   1:
@@ -268,7 +269,7 @@ variants:
       elements: |
         number_markup:
           '#markup': '[1]'
-
+        
       handlers: {  }
       debug: false
   2:
@@ -284,7 +285,7 @@ variants:
       elements: |
         number_markup:
           '#markup': '[2]'
-
+        
       handlers: {  }
       debug: false
   3:
@@ -300,6 +301,6 @@ variants:
       elements: |
         number_markup:
           '#markup': '[3]'
-
+        
       handlers: {  }
       debug: false
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_variant_override.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_variant_override.yml
index bc72f12117..9edf472886 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_variant_override.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_variant_override.yml
@@ -24,7 +24,7 @@ elements: |
   textfield:
     '#type': textfield
     '#title': textfield
-
+  
 css: ''
 javascript: ''
 settings:
@@ -154,6 +154,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
@@ -240,7 +241,7 @@ variants:
       elements: |
         textfield:
           '#placeholder': 'This is a placeholder'
-
+        
       handlers: {  }
       debug: true
   handlers:
@@ -286,6 +287,6 @@ variants:
       elements: |
         '#method': get
         '#action': 'https://drupal.org'
-
+        
       handlers: {  }
       debug: true
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_variant_randomize.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_variant_randomize.yml
index 7019ec5510..4b6c07b7b9 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_variant_randomize.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_variant_randomize.yml
@@ -26,7 +26,7 @@ elements: |
     '#attributes':
       style: 'display: inline-block; margin: 0; padding: 0 20px; font-size: 100px;'
     '#markup': '{X}'
-
+  
 css: ''
 javascript: ''
 settings:
@@ -156,6 +156,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
@@ -228,7 +229,7 @@ variants:
       elements: |
         letter_markup:
           '#markup': '[A]'
-
+        
       handlers: {  }
       debug: false
   b:
@@ -244,6 +245,6 @@ variants:
       elements: |
         letter_markup:
           '#markup': '[B]'
-
+        
       handlers: {  }
       debug: false
diff --git a/web/modules/webform/tests/modules/webform_test/webform_test.info.yml b/web/modules/webform/tests/modules/webform_test/webform_test.info.yml
index b4dd448714..3f7714f0db 100644
--- a/web/modules/webform/tests/modules/webform_test/webform_test.info.yml
+++ b/web/modules/webform/tests/modules/webform_test/webform_test.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453181
diff --git a/web/modules/webform/tests/modules/webform_test_ajax/webform_test_ajax.info.yml b/web/modules/webform/tests/modules/webform_test_ajax/webform_test_ajax.info.yml
index 8dc3d152d7..3c023030f4 100644
--- a/web/modules/webform/tests/modules/webform_test_ajax/webform_test_ajax.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_ajax/webform_test_ajax.info.yml
@@ -7,7 +7,7 @@ dependencies:
   - 'drupal:block'
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453181
diff --git a/web/modules/webform/tests/modules/webform_test_alter_hooks/webform_test_alter_hooks.info.yml b/web/modules/webform/tests/modules/webform_test_alter_hooks/webform_test_alter_hooks.info.yml
index 8b92435da1..95717aa08a 100644
--- a/web/modules/webform/tests/modules/webform_test_alter_hooks/webform_test_alter_hooks.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_alter_hooks/webform_test_alter_hooks.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453181
diff --git a/web/modules/webform/tests/modules/webform_test_block_context/webform_test_block_context.info.yml b/web/modules/webform/tests/modules/webform_test_block_context/webform_test_block_context.info.yml
index 9ba2fcb144..a657efe00c 100644
--- a/web/modules/webform/tests/modules/webform_test_block_context/webform_test_block_context.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_block_context/webform_test_block_context.info.yml
@@ -7,7 +7,7 @@ dependencies:
   - 'drupal:block'
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453181
diff --git a/web/modules/webform/tests/modules/webform_test_block_custom/webform_test_block_custom.info.yml b/web/modules/webform/tests/modules/webform_test_block_custom/webform_test_block_custom.info.yml
index cb2415e387..7b33c5415d 100644
--- a/web/modules/webform/tests/modules/webform_test_block_custom/webform_test_block_custom.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_block_custom/webform_test_block_custom.info.yml
@@ -8,7 +8,7 @@ dependencies:
   - 'drupal:block_content'
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453181
diff --git a/web/modules/webform/tests/modules/webform_test_block_submission_limit/webform_test_block_submission_limit.info.yml b/web/modules/webform/tests/modules/webform_test_block_submission_limit/webform_test_block_submission_limit.info.yml
index f8b0da0909..68d6bd3b4e 100644
--- a/web/modules/webform/tests/modules/webform_test_block_submission_limit/webform_test_block_submission_limit.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_block_submission_limit/webform_test_block_submission_limit.info.yml
@@ -7,7 +7,7 @@ dependencies:
   - 'drupal:block'
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453181
diff --git a/web/modules/webform/tests/modules/webform_test_config_performance/webform_test_config_performance.info.yml b/web/modules/webform/tests/modules/webform_test_config_performance/webform_test_config_performance.info.yml
index 4af6f89f90..bcede73e99 100644
--- a/web/modules/webform/tests/modules/webform_test_config_performance/webform_test_config_performance.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_config_performance/webform_test_config_performance.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453181
diff --git a/web/modules/webform/tests/modules/webform_test_element/config/install/webform.webform.test_element_comp_file_plugin.yml b/web/modules/webform/tests/modules/webform_test_element/config/install/webform.webform.test_element_comp_file_plugin.yml
index b740484dab..f19a0ee69b 100644
--- a/web/modules/webform/tests/modules/webform_test_element/config/install/webform.webform.test_element_comp_file_plugin.yml
+++ b/web/modules/webform/tests/modules/webform_test_element/config/install/webform.webform.test_element_comp_file_plugin.yml
@@ -28,7 +28,7 @@ elements: |
     '#title': webform_test_composite_file_multiple_header
     '#multiple': true
     '#multiple__header': true
-
+  
 css: ''
 javascript: ''
 settings:
@@ -158,6 +158,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test_element/config/install/webform.webform.test_element_composite_plugin.yml b/web/modules/webform/tests/modules/webform_test_element/config/install/webform.webform.test_element_composite_plugin.yml
index 487720a170..55a73d3e47 100644
--- a/web/modules/webform/tests/modules/webform_test_element/config/install/webform.webform.test_element_composite_plugin.yml
+++ b/web/modules/webform/tests/modules/webform_test_element/config/install/webform.webform.test_element_composite_plugin.yml
@@ -28,7 +28,7 @@ elements: |
     '#title': webform_test_composite_multiple_header
     '#multiple': true
     '#multiple__header': true
-
+  
 css: ''
 javascript: ''
 settings:
@@ -158,6 +158,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test_element/config/install/webform.webform.test_element_plugin.yml b/web/modules/webform/tests/modules/webform_test_element/config/install/webform.webform.test_element_plugin.yml
index 7ccd4176af..44512a59fa 100644
--- a/web/modules/webform/tests/modules/webform_test_element/config/install/webform.webform.test_element_plugin.yml
+++ b/web/modules/webform/tests/modules/webform_test_element/config/install/webform.webform.test_element_plugin.yml
@@ -154,6 +154,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test_element/webform_test_element.info.yml b/web/modules/webform/tests/modules/webform_test_element/webform_test_element.info.yml
index 531189c201..81c4473120 100644
--- a/web/modules/webform/tests/modules/webform_test_element/webform_test_element.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_element/webform_test_element.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453181
diff --git a/web/modules/webform/tests/modules/webform_test_element_input_masks/webform_test_element_input_masks.info.yml b/web/modules/webform/tests/modules/webform_test_element_input_masks/webform_test_element_input_masks.info.yml
index 4969235268..df25a23e20 100644
--- a/web/modules/webform/tests/modules/webform_test_element_input_masks/webform_test_element_input_masks.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_element_input_masks/webform_test_element_input_masks.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453181
diff --git a/web/modules/webform/tests/modules/webform_test_entity_reference/config/install/views.view.webform_test_entity_reference_vs.yml b/web/modules/webform/tests/modules/webform_test_entity_reference_views/config/install/views.view.webform_test_entity_reference_vs.yml
similarity index 100%
rename from web/modules/webform/tests/modules/webform_test_entity_reference/config/install/views.view.webform_test_entity_reference_vs.yml
rename to web/modules/webform/tests/modules/webform_test_entity_reference_views/config/install/views.view.webform_test_entity_reference_vs.yml
diff --git a/web/modules/webform/tests/modules/webform_test_entity_reference/config/install/webform.webform.test_element_entity_reference_vs.yml b/web/modules/webform/tests/modules/webform_test_entity_reference_views/config/install/webform.webform.test_element_entity_reference_vs.yml
similarity index 97%
rename from web/modules/webform/tests/modules/webform_test_entity_reference/config/install/webform.webform.test_element_entity_reference_vs.yml
rename to web/modules/webform/tests/modules/webform_test_entity_reference_views/config/install/webform.webform.test_element_entity_reference_vs.yml
index 58d180c3e9..5409d06ba0 100644
--- a/web/modules/webform/tests/modules/webform_test_entity_reference/config/install/webform.webform.test_element_entity_reference_vs.yml
+++ b/web/modules/webform/tests/modules/webform_test_entity_reference_views/config/install/webform.webform.test_element_entity_reference_vs.yml
@@ -25,7 +25,7 @@ elements: |
     '#selection_settings':
       view:
         view_name: webform_test_entity_reference_vs
-        display_name: entity_reference_1
+        display_name: entity_reference
         arguments: {  }
   entity_select:
     '#type': webform_entity_select
@@ -36,7 +36,7 @@ elements: |
     '#selection_settings':
       view:
         view_name: webform_test_entity_reference_vs
-        display_name: entity_reference_1
+        display_name: entity_reference
         arguments: {  }
   entity_radios:
     '#type': webform_entity_radios
@@ -47,7 +47,7 @@ elements: |
     '#selection_settings':
       view:
         view_name: webform_test_entity_reference_vs
-        display_name: entity_reference_1
+        display_name: entity_reference
         arguments: {  }
     '#wrapper_attributes':
       class:
@@ -61,22 +61,22 @@ elements: |
     '#selection_settings':
       view:
         view_name: webform_test_entity_reference_vs
-        display_name: entity_reference_1
+        display_name: entity_reference
         arguments: {  }
     '#wrapper_attributes':
       class:
         - webform-entity-reference-options
-
+  
 css: |
   /* Autocomplete */
-
+  
   .ui-autocomplete {
     display: flex;
     flex-wrap: wrap !important;
     align-self: flex-start !important;
     max-width: 540px !important;
   }
-
+  
   .ui-autocomplete .ui-menu-item-wrapper {
     display: block !important;
     border: 1px solid #ccc !important;
@@ -85,34 +85,34 @@ css: |
     margin: 10px 0 0 10px !important;
     padding: 10px !important;
   }
-
+  
   .ui-autocomplete .ui-menu-item-wrapper.ui-state-active {
     background-color: blue !important;
   }
-
+  
   .ui-autocomplete .views-field views-field-field-image {
     display: block;
     margin: 0 0 5px 0;
   }
-
+  
   /* Checkboex and radios */
-
+  
   .webform-entity-reference-options .fieldset-wrapper > div {
     display: flex;
     flex-wrap: wrap;
     align-self: flex-start;
   }
-
+  
   .webform-entity-reference-options .form-item {
     position: relative;
   }
-
+  
   .webform-entity-reference-options .form-item input {
     position: absolute;
     top: 20px;
     left: 20px;
   }
-
+  
   .webform-entity-reference-options .form-item label {
     display: block;
     border: 1px solid #ccc;
@@ -121,7 +121,7 @@ css: |
     margin: 0 10px 10px 0;
     padding: 10px;
   }
-
+  
   .webform-entity-reference-options .form-item input:checked + label {
     display: block;
     border: 1px solid #ccc;
@@ -130,12 +130,12 @@ css: |
     margin: 0 10px 10px 0;
     padding: 10px;
   }
-
+  
   .webform-entity-reference-options label.option img {
     display: block;
     margin: 0 0 5px 0;
   }
-
+  
 javascript: ''
 settings:
   ajax: false
@@ -264,6 +264,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test_entity_reference/webform_test_entity_reference_views.info.yml b/web/modules/webform/tests/modules/webform_test_entity_reference_views/webform_test_entity_reference_views.info.yml
similarity index 73%
rename from web/modules/webform/tests/modules/webform_test_entity_reference/webform_test_entity_reference_views.info.yml
rename to web/modules/webform/tests/modules/webform_test_entity_reference_views/webform_test_entity_reference_views.info.yml
index 60fa7df24e..d38be28505 100644
--- a/web/modules/webform/tests/modules/webform_test_entity_reference/webform_test_entity_reference_views.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_entity_reference_views/webform_test_entity_reference_views.info.yml
@@ -9,7 +9,7 @@ dependencies:
   - 'drupal:views'
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453181
diff --git a/web/modules/webform/tests/modules/webform_test_exporter/webform_test_exporter.info.yml b/web/modules/webform/tests/modules/webform_test_exporter/webform_test_exporter.info.yml
index 7e7a2f9de4..dda53dcb99 100644
--- a/web/modules/webform/tests/modules/webform_test_exporter/webform_test_exporter.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_exporter/webform_test_exporter.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453181
diff --git a/web/modules/webform/tests/modules/webform_test_handler/config/install/webform.webform.test_handler_conditions.yml b/web/modules/webform/tests/modules/webform_test_handler/config/install/webform.webform.test_handler_conditions.yml
index d183e11055..2b79ae47a1 100644
--- a/web/modules/webform/tests/modules/webform_test_handler/config/install/webform.webform.test_handler_conditions.yml
+++ b/web/modules/webform/tests/modules/webform_test_handler/config/install/webform.webform.test_handler_conditions.yml
@@ -24,7 +24,7 @@ elements: |
   trigger_b:
     '#type': checkbox
     '#title': trigger_b
-
+  
 css: ''
 javascript: ''
 settings:
@@ -154,6 +154,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test_handler/config/install/webform.webform.test_handler_test.yml b/web/modules/webform/tests/modules/webform_test_handler/config/install/webform.webform.test_handler_test.yml
index 8cf148ff0d..34d2ad986b 100644
--- a/web/modules/webform/tests/modules/webform_test_handler/config/install/webform.webform.test_handler_test.yml
+++ b/web/modules/webform/tests/modules/webform_test_handler/config/install/webform.webform.test_handler_test.yml
@@ -22,7 +22,7 @@ elements: |
     '#type': textfield
     '#title': 'Empty element'
     '#description': 'Entering any value will throw an error'
-
+  
 css: ''
 javascript: ''
 settings:
@@ -152,6 +152,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test_handler/src/Plugin/WebformHandler/TestPurgeHandler.php b/web/modules/webform/tests/modules/webform_test_handler/src/Plugin/WebformHandler/TestPurgeHandler.php
new file mode 100644
index 0000000000..2d6be6f872
--- /dev/null
+++ b/web/modules/webform/tests/modules/webform_test_handler/src/Plugin/WebformHandler/TestPurgeHandler.php
@@ -0,0 +1,40 @@
+<?php
+
+namespace Drupal\webform_test_handler\Plugin\WebformHandler;
+
+use Drupal\webform\Plugin\WebformHandlerBase;
+use Drupal\webform\WebformSubmissionInterface;
+
+/**
+ * Defines a handler that interacts with the submission purge APIs.
+ *
+ * @WebformHandler(
+ *   id = "test_purge",
+ *   label = @Translation("Test purging"),
+ *   category = @Translation("Testing"),
+ *   description = @Translation("Tests webform submission handler purge APIS."),
+ * )
+ */
+class TestPurgeHandler extends WebformHandlerBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function prePurge(array $webform_submissions) {
+    \Drupal::state()->set('webform_test_purge_handler_pre', array_map(function (WebformSubmissionInterface $submission) {
+      return $submission->id();
+    }, $webform_submissions));
+    parent::prePurge($webform_submissions);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function postPurge(array $webform_submissions) {
+    \Drupal::state()->set('webform_test_purge_handler_post', array_map(function (WebformSubmissionInterface $submission) {
+      return $submission->id();
+    }, $webform_submissions));
+    parent::postPurge($webform_submissions);
+  }
+
+}
diff --git a/web/modules/webform/tests/modules/webform_test_handler/webform_test_handler.info.yml b/web/modules/webform/tests/modules/webform_test_handler/webform_test_handler.info.yml
index cc0db94dd4..e0bddfa5fe 100644
--- a/web/modules/webform/tests/modules/webform_test_handler/webform_test_handler.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_handler/webform_test_handler.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453181
diff --git a/web/modules/webform/tests/modules/webform_test_handler/webform_test_handler.module b/web/modules/webform/tests/modules/webform_test_handler/webform_test_handler.module
index 340e41cca4..20b0c5a768 100644
--- a/web/modules/webform/tests/modules/webform_test_handler/webform_test_handler.module
+++ b/web/modules/webform/tests/modules/webform_test_handler/webform_test_handler.module
@@ -5,6 +5,8 @@
  * Support module for webform that provides handler plugin tests.
  */
 
+use Drupal\webform\WebformSubmissionInterface;
+
 /**
  * Implements hook_theme().
  */
@@ -18,3 +20,21 @@ function webform_test_handler_theme() {
     ],
   ];
 }
+
+/**
+ * Implements hook_webform_submissions_pre_purge().
+ */
+function webform_test_handler_webform_submissions_pre_purge(array $webform_submissions) {
+  \Drupal::state()->set('webform_test_purge_hook_pre', array_map(function (WebformSubmissionInterface $submission) {
+    return $submission->id();
+  }, $webform_submissions));
+}
+
+/**
+ * Implements hook_webform_submissions_post_purge().
+ */
+function webform_test_handler_webform_submissions_post_purge(array $webform_submissions) {
+  \Drupal::state()->set('webform_test_purge_hook_post', array_map(function (WebformSubmissionInterface $submission) {
+    return $submission->id();
+  }, $webform_submissions));
+}
diff --git a/web/modules/webform/tests/modules/webform_test_handler_invoke_alter/webform_test_handler_invoke_alter.info.yml b/web/modules/webform/tests/modules/webform_test_handler_invoke_alter/webform_test_handler_invoke_alter.info.yml
index 49fbc81e11..19124b8585 100644
--- a/web/modules/webform/tests/modules/webform_test_handler_invoke_alter/webform_test_handler_invoke_alter.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_handler_invoke_alter/webform_test_handler_invoke_alter.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453181
diff --git a/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_get.yml b/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_get.yml
index b46d70975a..6c603eac42 100644
--- a/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_get.yml
+++ b/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_get.yml
@@ -38,7 +38,7 @@ elements: |
     '#title': 'Confirmation number'
     '#type': value
     '#value': '[webform:handler:remote_post:completed:confirmation_number]'
-
+  
 css: ''
 javascript: ''
 settings:
@@ -142,7 +142,7 @@ settings:
   confirmation_title: ''
   confirmation_message: |
     <p>Your confirmation number is [webform_submission:values:confirmation_number].</p>
-
+    
   confirmation_url: ''
   confirmation_attributes: {  }
   confirmation_back: true
@@ -170,6 +170,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
@@ -253,37 +254,37 @@ handlers:
         confirmation_number: confirmation_number
       custom_data: |
         custom_data: true
-
+        
       custom_options: |
         headers:
           custom_header: 'true'
-
+        
       cast: false
       debug: true
       completed_url: 'http://webform-test-handler-remote-post/completed'
       completed_custom_data: |
         custom_completed: true
-
+        
       updated_url: 'http://webform-test-handler-remote-post/updated'
       updated_custom_data: |
         custom_updated: true
-
+        
       deleted_url: 'http://webform-test-handler-remote-post/deleted'
       deleted_custom_data: |
         custom_deleted: true
-
+        
       draft_created_url: 'http://webform-test-handler-remote-post/draft_created'
       draft_created_custom_data: |
         custom_draft_created: true
-
+        
       draft_updated_url: 'http://webform-test-handler-remote-post/draft_updated'
       draft_updated_custom_data: |
         custom_draft_updated: true
-
+        
       converted_url: 'http://webform-test-handler-remote-post/converted'
       converted_custom_data: |
         custom_converted: true
-
+        
       message: ''
       messages: {  }
       error_url: ''
diff --git a/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_post.yml b/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_post.yml
index 080d450fdf..ec6cb3fce0 100644
--- a/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_post.yml
+++ b/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_post.yml
@@ -41,7 +41,7 @@ elements: |
     '#title': 'Confirmation number'
     '#type': value
     '#value': '[webform:handler:remote_post:completed:confirmation_number]'
-
+  
 css: ''
 javascript: ''
 settings:
@@ -145,7 +145,7 @@ settings:
   confirmation_title: ''
   confirmation_message: |
     <p>Your confirmation number is [webform_submission:values:confirmation_number].</p>
-
+    
   confirmation_url: ''
   confirmation_attributes: {  }
   confirmation_back: true
@@ -173,6 +173,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
@@ -256,38 +257,38 @@ handlers:
         confirmation_number: confirmation_number
       custom_data: |
         custom_data: true
-
+        
       custom_options: |
         headers:
           'Accept-Language': '[webform_submission:langcode]'
           custom_header: 'true'
-
+        
       cast: false
       debug: true
       completed_url: 'http://webform-test-handler-remote-post/completed'
       completed_custom_data: |
         custom_completed: true
-
+        
       updated_url: 'http://webform-test-handler-remote-post/updated'
       updated_custom_data: |
         custom_updated: true
-
+        
       deleted_url: 'http://webform-test-handler-remote-post/deleted'
       deleted_custom_data: |
         custom_deleted: true
-
+        
       draft_created_url: 'http://webform-test-handler-remote-post/draft_created'
       draft_created_custom_data: |
         custom_draft_created: true
-
+        
       draft_updated_url: 'http://webform-test-handler-remote-post/draft_updated'
       draft_updated_custom_data: |
         custom_draft_updated: true
-
+        
       converted_url: 'http://webform-test-handler-remote-post/converted'
       converted_custom_data: |
         custom_converted: true
-
+        
       message: ''
       messages:
         - code: 401
diff --git a/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_post_cast.yml b/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_post_cast.yml
index da9a433496..195b5e791d 100644
--- a/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_post_cast.yml
+++ b/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_post_cast.yml
@@ -39,7 +39,7 @@ elements: |
       number:
         '#type': number
         '#title': number
-
+  
 css: ''
 javascript: ''
 settings:
@@ -145,7 +145,7 @@ settings:
   confirmation_title: ''
   confirmation_message: |
     <p>Your confirmation number is [webform_submission:values:confirmation_number].</p>
-
+    
   confirmation_url: ''
   confirmation_attributes: {  }
   confirmation_back: true
@@ -173,6 +173,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
@@ -257,7 +258,7 @@ handlers:
         boolean_true: '(boolean) true'
         integer: '(integer) 100'
         float: '(float) 100.01'
-
+        
       custom_options: ''
       debug: true
       completed_url: 'http://webform-test-handler-remote-post/completed'
diff --git a/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_post_file.yml b/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_post_file.yml
index de3076bb27..6f6644a836 100644
--- a/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_post_file.yml
+++ b/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_post_file.yml
@@ -27,7 +27,7 @@ elements: |
     '#required': true
     '#multiple': true
     '#file_extensions': txt
-
+  
 css: ''
 javascript: ''
 settings:
@@ -131,7 +131,7 @@ settings:
   confirmation_title: ''
   confirmation_message: |
     <p>Your confirmation number is [webform_submission:values:confirmation_number].</p>
-
+    
   confirmation_url: ''
   confirmation_attributes: {  }
   confirmation_back: true
@@ -159,6 +159,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_put.yml b/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_put.yml
index 5e4869c756..ff697d1afd 100644
--- a/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_put.yml
+++ b/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_put.yml
@@ -38,7 +38,7 @@ elements: |
     '#title': 'Confirmation number'
     '#type': value
     '#value': '[webform:handler:remote_post:completed:confirmation_number]'
-
+  
 css: ''
 javascript: ''
 settings:
@@ -142,7 +142,7 @@ settings:
   confirmation_title: ''
   confirmation_message: |
     <p>Your confirmation number is [webform_submission:values:confirmation_number].</p>
-
+    
   confirmation_url: ''
   confirmation_attributes: {  }
   confirmation_back: true
@@ -170,6 +170,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
@@ -253,37 +254,37 @@ handlers:
         confirmation_number: confirmation_number
       custom_data: |
         custom_data: true
-
+        
       custom_options: |
         headers:
           custom_header: 'true'
-
+        
       cast: false
       debug: true
       completed_url: 'http://webform-test-handler-remote-post/completed'
       completed_custom_data: |
         custom_completed: true
-
+        
       updated_url: 'http://webform-test-handler-remote-post/updated'
       updated_custom_data: |
         custom_updated: true
-
+        
       deleted_url: 'http://webform-test-handler-remote-post/deleted'
       deleted_custom_data: |
         custom_deleted: true
-
+        
       draft_created_url: 'http://webform-test-handler-remote-post/draft_created'
       draft_created_custom_data: |
         custom_draft_created: true
-
+        
       draft_updated_url: 'http://webform-test-handler-remote-post/draft_updated'
       draft_updated_custom_data: |
         custom_draft_updated: true
-
+        
       converted_url: 'http://webform-test-handler-remote-post/converted'
       converted_custom_data: |
         custom_converted: true
-
+        
       message: ''
       messages: {  }
       error_url: ''
diff --git a/web/modules/webform/tests/modules/webform_test_handler_remote_post/webform_test_handler_remote_post.info.yml b/web/modules/webform/tests/modules/webform_test_handler_remote_post/webform_test_handler_remote_post.info.yml
index 43c3054a52..03e82600a6 100644
--- a/web/modules/webform/tests/modules/webform_test_handler_remote_post/webform_test_handler_remote_post.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_handler_remote_post/webform_test_handler_remote_post.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453181
diff --git a/web/modules/webform/tests/modules/webform_test_markup/webform_test_markup.info.yml b/web/modules/webform/tests/modules/webform_test_markup/webform_test_markup.info.yml
index fc0bf60a4b..da7a5c902a 100644
--- a/web/modules/webform/tests/modules/webform_test_markup/webform_test_markup.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_markup/webform_test_markup.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453181
diff --git a/web/modules/webform/tests/modules/webform_test_message_custom/webform_test_message_custom.info.yml b/web/modules/webform/tests/modules/webform_test_message_custom/webform_test_message_custom.info.yml
index c8ed8bb4e0..8065973efa 100644
--- a/web/modules/webform/tests/modules/webform_test_message_custom/webform_test_message_custom.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_message_custom/webform_test_message_custom.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453181
diff --git a/web/modules/webform/tests/modules/webform_test_options/config/install/webform.webform.test_options.yml b/web/modules/webform/tests/modules/webform_test_options/config/install/webform.webform.test_options.yml
index 94d2f213fe..7d089c15c5 100644
--- a/web/modules/webform/tests/modules/webform_test_options/config/install/webform.webform.test_options.yml
+++ b/web/modules/webform/tests/modules/webform_test_options/config/install/webform.webform.test_options.yml
@@ -350,6 +350,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test_options/webform_test_options.info.yml b/web/modules/webform/tests/modules/webform_test_options/webform_test_options.info.yml
index c72fe1308a..fbb538104d 100644
--- a/web/modules/webform/tests/modules/webform_test_options/webform_test_options.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_options/webform_test_options.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453181
diff --git a/web/modules/webform/tests/modules/webform_test_paragraphs/webform_test_paragraphs.info.yml b/web/modules/webform/tests/modules/webform_test_paragraphs/webform_test_paragraphs.info.yml
index 8d97507f19..51a75befa4 100644
--- a/web/modules/webform/tests/modules/webform_test_paragraphs/webform_test_paragraphs.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_paragraphs/webform_test_paragraphs.info.yml
@@ -7,7 +7,7 @@ dependencies:
   - 'paragraphs:paragraphs'
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453181
diff --git a/web/modules/webform/tests/modules/webform_test_rest/webform_test_rest.info.yml b/web/modules/webform/tests/modules/webform_test_rest/webform_test_rest.info.yml
index b643d3683a..8fe01a2673 100644
--- a/web/modules/webform/tests/modules/webform_test_rest/webform_test_rest.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_rest/webform_test_rest.info.yml
@@ -9,7 +9,7 @@ dependencies:
   - 'drupal:serialization'
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453181
diff --git a/web/modules/webform/tests/modules/webform_test_states/webform_test_states.info.yml b/web/modules/webform/tests/modules/webform_test_states/webform_test_states.info.yml
index 2afe08e80b..bfd09d165d 100644
--- a/web/modules/webform/tests/modules/webform_test_states/webform_test_states.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_states/webform_test_states.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453181
diff --git a/web/modules/webform/tests/modules/webform_test_submissions/config/install/webform.webform.test_submissions.yml b/web/modules/webform/tests/modules/webform_test_submissions/config/install/webform.webform.test_submissions.yml
index 5307d62d21..d4d2f9eb6c 100644
--- a/web/modules/webform/tests/modules/webform_test_submissions/config/install/webform.webform.test_submissions.yml
+++ b/web/modules/webform/tests/modules/webform_test_submissions/config/install/webform.webform.test_submissions.yml
@@ -189,6 +189,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
diff --git a/web/modules/webform/tests/modules/webform_test_submissions/webform_test_submissions.info.yml b/web/modules/webform/tests/modules/webform_test_submissions/webform_test_submissions.info.yml
index d3df2fc139..ec5dbb0e86 100644
--- a/web/modules/webform/tests/modules/webform_test_submissions/webform_test_submissions.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_submissions/webform_test_submissions.info.yml
@@ -7,7 +7,7 @@ dependencies:
   - 'drupal:node'
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453181
diff --git a/web/modules/webform/tests/modules/webform_test_third_party_settings/webform_test_third_party_settings.info.yml b/web/modules/webform/tests/modules/webform_test_third_party_settings/webform_test_third_party_settings.info.yml
index f9743c3ff5..ee52060c18 100644
--- a/web/modules/webform/tests/modules/webform_test_third_party_settings/webform_test_third_party_settings.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_third_party_settings/webform_test_third_party_settings.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453181
diff --git a/web/modules/webform/tests/modules/webform_test_translation/config/install/language/es/webform.webform.test_translation.yml b/web/modules/webform/tests/modules/webform_test_translation/config/install/language/es/webform.webform.test_translation.yml
index 73f75dbe14..e952549b61 100644
--- a/web/modules/webform/tests/modules/webform_test_translation/config/install/language/es/webform.webform.test_translation.yml
+++ b/web/modules/webform/tests/modules/webform_test_translation/config/install/language/es/webform.webform.test_translation.yml
@@ -43,7 +43,13 @@ settings:
 handlers:
   email_confirmation:
     label: ' Confirmación de correo electrónico'
-weight: 0
+variants:
+  test:
+    settings:
+      elements: |
+        textfield:
+          '#title': 'Campo de texto - Variante'
+˚weight: 0
 dependencies:
   enforced:
     module:
diff --git a/web/modules/webform/tests/modules/webform_test_translation/config/install/webform.webform.test_translation.yml b/web/modules/webform/tests/modules/webform_test_translation/config/install/webform.webform.test_translation.yml
index f7860fd14a..c287b88ab9 100644
--- a/web/modules/webform/tests/modules/webform_test_translation/config/install/webform.webform.test_translation.yml
+++ b/web/modules/webform/tests/modules/webform_test_translation/config/install/webform.webform.test_translation.yml
@@ -16,6 +16,10 @@ title: 'Test: Translations'
 description: 'Test translating a webform.'
 category: null
 elements: |
+  variant:
+    '#type': webform_variant
+    '#title': Variant
+    '#variant': override
   textfield:
     '#type': textfield
     '#title': 'Text field'
@@ -193,6 +197,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
@@ -279,4 +284,21 @@ handlers:
       return_path: ''
       sender_mail: ''
       sender_name: ''
-variants: {  }
+variants:
+  test:
+    id: override
+    label: Test
+    notes: ''
+    variant_id: test
+    element_key: variant
+    status: true
+    weight: 1
+    settings:
+      settings: {  }
+      elements: |
+        textfield:
+          '#title': 'Text field - Variant'
+          '#type': textarea
+
+      handlers: {  }
+      debug: false
diff --git a/web/modules/webform/tests/modules/webform_test_translation/webform_test_translation.info.yml b/web/modules/webform/tests/modules/webform_test_translation/webform_test_translation.info.yml
index 807e14e6ec..a483496686 100644
--- a/web/modules/webform/tests/modules/webform_test_translation/webform_test_translation.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_translation/webform_test_translation.info.yml
@@ -9,7 +9,7 @@ dependencies:
   - 'drupal:locale'
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453181
diff --git a/web/modules/webform/tests/modules/webform_test_translation_lingotek/webform_test_translation_lingotek.info.yml b/web/modules/webform/tests/modules/webform_test_translation_lingotek/webform_test_translation_lingotek.info.yml
index 9d2c99c97e..e6ac9f7c3d 100644
--- a/web/modules/webform/tests/modules/webform_test_translation_lingotek/webform_test_translation_lingotek.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_translation_lingotek/webform_test_translation_lingotek.info.yml
@@ -10,7 +10,7 @@ dependencies:
   - 'lingotek:lingotek'
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453181
diff --git a/web/modules/webform/tests/modules/webform_test_validate/webform_test_validate.info.yml b/web/modules/webform/tests/modules/webform_test_validate/webform_test_validate.info.yml
index b140c22e2a..53d7d871a1 100644
--- a/web/modules/webform/tests/modules/webform_test_validate/webform_test_validate.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_validate/webform_test_validate.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453181
diff --git a/web/modules/webform/tests/modules/webform_test_variant/webform_test_variant.info.yml b/web/modules/webform/tests/modules/webform_test_variant/webform_test_variant.info.yml
index dda382f9ec..dafa50a0b6 100644
--- a/web/modules/webform/tests/modules/webform_test_variant/webform_test_variant.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_variant/webform_test_variant.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453181
diff --git a/web/modules/webform/tests/modules/webform_test_views/webform_test_views.info.yml b/web/modules/webform/tests/modules/webform_test_views/webform_test_views.info.yml
index e14ad6bd73..e967a1fbd5 100644
--- a/web/modules/webform/tests/modules/webform_test_views/webform_test_views.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_views/webform_test_views.info.yml
@@ -9,7 +9,7 @@ dependencies:
   - 'drupal:views'
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453181
diff --git a/web/modules/webform/tests/modules/webform_test_wizard_custom/webform_test_wizard_custom.info.yml b/web/modules/webform/tests/modules/webform_test_wizard_custom/webform_test_wizard_custom.info.yml
index 57f1ddc91c..5bf58e01b6 100644
--- a/web/modules/webform/tests/modules/webform_test_wizard_custom/webform_test_wizard_custom.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_wizard_custom/webform_test_wizard_custom.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453181
diff --git a/web/modules/webform/tests/src/Functional/Composite/WebformCompositeCustomFileTest.php b/web/modules/webform/tests/src/Functional/Composite/WebformCompositeCustomFileTest.php
index 53e4ce5cb9..1875fbb641 100644
--- a/web/modules/webform/tests/src/Functional/Composite/WebformCompositeCustomFileTest.php
+++ b/web/modules/webform/tests/src/Functional/Composite/WebformCompositeCustomFileTest.php
@@ -31,12 +31,23 @@ public function testCustom() {
 
     /**************************************************************************/
 
-    // Create submission with file.
+    // Upload file while adding a new row to the composite element.
     $edit = [
       'webform_custom_composite_file[items][0][_item_][textfield]' => '{textfield}',
       'files[webform_custom_composite_file_items_0__item__managed_file]' => \Drupal::service('file_system')->realpath($first_file->uri),
     ];
-    $sid = $this->postSubmission($webform, $edit);
+    $this->drupalPostForm('webform/test_composite_custom_file', $edit, 'webform_custom_composite_file_table_add');
+
+    // Check that file was uploaded.
+    $this->assertRaw(basename($first_file->uri));
+
+    // Add another empty row and check that file is still uploaded and attached.
+    $this->drupalPostForm(NULL, [], 'webform_custom_composite_file_table_add');
+    $this->assertRaw(basename($first_file->uri));
+
+    // Submit the file and the text field.
+    $this->drupalPostForm(NULL, [], 'Submit');
+    $sid = $this->getLastSubmissionId($webform);
 
     $webform_submission = WebformSubmission::load($sid);
 
@@ -63,6 +74,18 @@ public function testCustom() {
 
     // Check that test file exists.
     $this->assertFileExists($file->getFileUri());
+
+    // Login as root user.
+    $this->drupalLogin($this->rootUser);
+
+    // Check that the file exists on the submission edit form.
+    $this->drupalGet("/admin/structure/webform/manage/test_composite_custom_file/submission/$sid/edit");
+    $this->assertLink($file->getFileName());
+
+    // Check that test file still exists as more items are be added to the
+    // composite element.
+    $this->drupalPostForm(NULL, [], 'webform_custom_composite_file_table_add');
+    $this->assertLink($file->getFileName());
   }
 
 }
diff --git a/web/modules/webform/tests/src/Functional/Element/WebformElementFormatCustomTest.php b/web/modules/webform/tests/src/Functional/Element/WebformElementFormatCustomTest.php
index 224139262f..7e6117c069 100644
--- a/web/modules/webform/tests/src/Functional/Element/WebformElementFormatCustomTest.php
+++ b/web/modules/webform/tests/src/Functional/Element/WebformElementFormatCustomTest.php
@@ -88,7 +88,13 @@ public function testFormatCustom() {
     $this->assertRaw("item['value']: $file_url<br/>");
     $this->assertRaw("item['raw']: $file_url<br/>");
     $this->assertRaw("item['link']:");
-    $this->assertRaw('<span class="file file--mime-image-png file--image"><a href="' . $file_url . '" type="image/png; length=' . $file_size . '">' . $file_name . '</a></span>');
+    // @todo Remove once Drupal 9.1.x is only supported.
+    if (floatval(\Drupal::VERSION) >= 9.1) {
+      $this->assertRaw('<span class="file file--mime-image-png file--image"><a href="' . $file_url . '" type="image/png">' . $file_name . '</a></span>');
+    }
+    else {
+      $this->assertRaw('<span class="file file--mime-image-png file--image"><a href="' . $file_url . '" type="image/png; length=' . $file_size . '">' . $file_name . '</a></span>');
+    }
     $this->assertRaw('item[\'id\']: 1<br/>');
     $this->assertRaw("item['url']: $file_url<br/>");
     $this->assertRaw('<img class="webform-image-file" alt="' . $file_name . '" title="' . $file_name . '" src="' . $file_url . '" />');
diff --git a/web/modules/webform/tests/src/Functional/Element/WebformElementFormatTest.php b/web/modules/webform/tests/src/Functional/Element/WebformElementFormatTest.php
index a0e3c079a8..f5f0d8c69b 100644
--- a/web/modules/webform/tests/src/Functional/Element/WebformElementFormatTest.php
+++ b/web/modules/webform/tests/src/Functional/Element/WebformElementFormatTest.php
@@ -134,7 +134,12 @@ public function testFormat() {
       'File (File extension)' => 'txt',
       'File (URL)' => $this->getSubmissionFileUrl($submission, 'managed_file_url'),
     ];
+
     foreach ($elements as $label => $value) {
+      // @todo Remove once Drupal 9.1.x is only supported.
+      if (floatval(\Drupal::VERSION) >= 9.1) {
+        $value = str_replace('; length=43', '', $value);
+      }
       $this->assertStringContainsString('<b>' . $label . '</b><br />' . $value, $body, new FormattableMarkup('Found @label: @value', ['@label' => $label, '@value' => $value]));
     }
 
diff --git a/web/modules/webform/tests/src/Functional/Element/WebformElementLikertTest.php b/web/modules/webform/tests/src/Functional/Element/WebformElementLikertTest.php
index 90284964df..df56c8ec45 100644
--- a/web/modules/webform/tests/src/Functional/Element/WebformElementLikertTest.php
+++ b/web/modules/webform/tests/src/Functional/Element/WebformElementLikertTest.php
@@ -49,11 +49,14 @@ public function testLikertElement() {
     $this->assertRaw('<label>Question 1<span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;Question 1&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;This is help text&lt;/div&gt;"><span aria-hidden="true">?</span></span>');
     $this->assertRaw('<label for="edit-likert-help-q1--2" class="option"><span class="webform-likert-label visually-hidden">Option 2<span class="webform-likert-help hidden"><span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;Option 2&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;This is help text&lt;/div&gt;"><span aria-hidden="true">?</span></span>');
 
-    // Check likert required.
+    // Check likert with custom required error.
     $this->drupalPostForm('/webform/test_element_likert', [], 'Submit');
-    $this->assertRaw('Question 1 field is required.');
-    $this->assertRaw('Question 2 field is required.');
-    $this->assertRaw('Question 3 field is required.');
+    $this->assertNoRaw('Question 1 field is required.');
+    $this->assertNoRaw('Question 2 field is required.');
+    $this->assertNoRaw('Question 3 field is required.');
+    $this->assertRaw('{custom error for Question 1}');
+    $this->assertRaw('{custom error for Question 2}');
+    $this->assertRaw('{custom error for Question 3}');
 
     // Check likert processing.
     $edit = [
diff --git a/web/modules/webform/tests/src/Functional/Element/WebformElementManagedFileTest.php b/web/modules/webform/tests/src/Functional/Element/WebformElementManagedFileTest.php
index 1f13448f05..7d7fc37296 100644
--- a/web/modules/webform/tests/src/Functional/Element/WebformElementManagedFileTest.php
+++ b/web/modules/webform/tests/src/Functional/Element/WebformElementManagedFileTest.php
@@ -336,7 +336,13 @@ protected function checkFileUpload($type, $first_file, $second_file) {
       $this->assertRaw('<label>managed_file_multiple</label>');
       $this->assertRaw('<ul>');
     }
-    $this->assertRaw('<span class="file file--mime-text-plain file--text"><a href="' . file_create_url($file->getFileUri()) . '" type="text/plain; length=' . $file->getSize() . '">' . $file->getFilename() . '</a></span>');
+    // @todo Remove once Drupal 9.1.x is only supported.
+    if (floatval(\Drupal::VERSION) >= 9.1) {
+      $this->assertRaw('<span class="file file--mime-text-plain file--text"><a href="' . file_create_url($file->getFileUri()) . '" type="text/plain">' . $file->getFilename() . '</a></span>');
+    }
+    else {
+      $this->assertRaw('<span class="file file--mime-text-plain file--text"><a href="' . file_create_url($file->getFileUri()) . '" type="text/plain; length=' . $file->getSize() . '">' . $file->getFilename() . '</a></span>');
+    }
 
     // Remove the uploaded file.
     if ($type === 'multiple') {
diff --git a/web/modules/webform/tests/src/Functional/Element/WebformElementOtherTest.php b/web/modules/webform/tests/src/Functional/Element/WebformElementOtherTest.php
index 584a9a1bb4..a102f6e406 100644
--- a/web/modules/webform/tests/src/Functional/Element/WebformElementOtherTest.php
+++ b/web/modules/webform/tests/src/Functional/Element/WebformElementOtherTest.php
@@ -48,6 +48,11 @@ public function testBuildingOtherElements() {
     $this->assertRaw('<select data-drupal-selector="edit-select-other-multiple-select" multiple="multiple" name="select_other_multiple[select][]" id="edit-select-other-multiple-select" class="form-select">');
     $this->assertRaw('<input data-drupal-selector="edit-select-other-multiple-other" type="text" id="edit-select-other-multiple-other" name="select_other_multiple[other]" value="Four" size="60" maxlength="255" placeholder="Enter other…" class="form-text" />');
 
+    // Check select_other with zero (0) as the default value.
+    $this->assertRaw('<span class="fieldset-legend">Select other zero</span>');
+    $this->assertRaw('<select data-drupal-selector="edit-select-other-zero-select" id="edit-select-other-zero-select" name="select_other_zero[select]" class="form-select">');
+    $this->assertRaw('<input data-drupal-selector="edit-select-other-zero-other" type="text" id="edit-select-other-zero-other" name="select_other_zero[other]" value="0" size="60" maxlength="255" placeholder="Enter other…" class="form-text" />');
+
     /**************************************************************************/
     // checkboxes_other
     /**************************************************************************/
@@ -99,6 +104,32 @@ public function testBuildingOtherElements() {
   public function testProcessingOtherElements() {
     $webform = Webform::load('test_element_other');
 
+    /**************************************************************************/
+    // Basic input processing.
+    /**************************************************************************/
+
+    $this->postSubmission($webform);
+    $this->assertRaw("select_other_basic: Four
+select_other_advanced: Four
+select_other_multiple:
+  - One
+  - Two
+  - Four
+select_other_zero: '0'
+checkboxes_other_basic:
+  - One
+  - Two
+  - Four
+checkboxes_other_advanced:
+  - One
+  - Two
+  - Four
+radios_other_basic: Four
+radios_other_advanced: Four
+wrapper_other_fieldset: ''
+wrapper_other_form_element: ''
+wrapper_other_container: ''");
+
     /**************************************************************************/
     // select_other
     /**************************************************************************/
diff --git a/web/modules/webform/tests/src/Functional/Element/WebformElementPluginDefinitionsTest.php b/web/modules/webform/tests/src/Functional/Element/WebformElementPluginDefinitionsTest.php
index 74aa248f37..97db70d72e 100644
--- a/web/modules/webform/tests/src/Functional/Element/WebformElementPluginDefinitionsTest.php
+++ b/web/modules/webform/tests/src/Functional/Element/WebformElementPluginDefinitionsTest.php
@@ -764,6 +764,25 @@ class: Drupal\webform\Plugin\WebformElement\Value
   container: false
   root: false
   multiple: false
+vertical_tabs:
+  dependencies: {  }
+  default_key: ''
+  category: 'Markup elements'
+  description: 'Provides a vertical tabs element.'
+  hidden: true
+  multiline: false
+  composite: false
+  states_wrapper: false
+  deprecated: false
+  deprecated_message: ''
+  id: vertical_tabs
+  label: 'Vertical tabs'
+  class: Drupal\webform\Plugin\WebformElement\VerticalTabs
+  provider: webform
+  input: false
+  container: false
+  root: false
+  multiple: false
 view:
   dependencies: {  }
   default_key: ''
@@ -1075,7 +1094,7 @@ class: Drupal\webform\Plugin\WebformElement\WebformDocumentFile
   default_key: ''
   category: ''
   description: 'Provides a generic form element.'
-  hidden: false
+  hidden: true
   multiline: false
   composite: false
   states_wrapper: false
@@ -1849,7 +1868,7 @@ class: Drupal\webform_toggles\Plugin\WebformElement\WebformToggles
   deprecated: false
   deprecated_message: ''
   id: webform_variant
-  label: 'Variant [EXPERIMENTAL]'
+  label: 'Variant'
   class: Drupal\webform\Plugin\WebformElement\WebformVariant
   provider: webform
   input: true
@@ -1896,7 +1915,6 @@ class: Drupal\webform\Plugin\WebformElement\WebformWizardPage
   root: true
   multiple: false
 YAML;
-
     return Yaml::decode($yaml);
   }
 
diff --git a/web/modules/webform/tests/src/Functional/Element/WebformElementPluginPropertiesTest.php b/web/modules/webform/tests/src/Functional/Element/WebformElementPluginPropertiesTest.php
index a5b6577022..d0d78ca909 100644
--- a/web/modules/webform/tests/src/Functional/Element/WebformElementPluginPropertiesTest.php
+++ b/web/modules/webform/tests/src/Functional/Element/WebformElementPluginPropertiesTest.php
@@ -26,7 +26,7 @@ class WebformElementPluginPropertiesTest extends WebformElementBrowserTestBase {
     'webform_attachment',
     'webform_cards',
     // Issue #3110478: [Webform 8.x-6.x] Track the D9 readiness state of the
-    // Webform module's (optional) dependencies
+    // Webform module's (optional) dependencies.
     // @see https://www.drupal.org/project/webform/issues/3110478
     // 'webform_entity_print_attachment',
     'webform_image_select',
@@ -52,7 +52,7 @@ public function testElementDefaultProperties() {
     $expected_elements = $this->getExpectedElementDefaultProperties();
 
     // Issue #3110478: [Webform 8.x-6.x] Track the D9 readiness state of the
-    // Webform module's (optional) dependencies
+    // Webform module's (optional) dependencies.
     // @see https://www.drupal.org/project/webform/issues/3110478
     unset($expected_elements['webform_entity_print_attachment:pdf']);
 
@@ -1849,6 +1849,41 @@ protected function getExpectedElementDefaultProperties() {
 value:
   title: ''
   value: ''
+vertical_tabs:
+  access: true
+  access_create_permissions: {  }
+  access_create_roles:
+    - anonymous
+    - authenticated
+  access_create_users: {  }
+  access_update_permissions: {  }
+  access_update_roles:
+    - anonymous
+    - authenticated
+  access_update_users: {  }
+  access_view_permissions: {  }
+  access_view_roles:
+    - anonymous
+    - authenticated
+  access_view_users: {  }
+  admin_notes: ''
+  admin_title: ''
+  default_tab: ''
+  description: ''
+  description_display: ''
+  flex: 1
+  help: ''
+  help_display: ''
+  help_title: ''
+  label_attributes: {  }
+  more: ''
+  more_title: ''
+  private: false
+  required: false
+  states: {  }
+  title: 'Vertical Tabs'
+  title_display: invisible
+  wrapper_attributes: {  }
 view:
   access: true
   access_create_permissions: {  }
@@ -4773,6 +4808,7 @@ protected function getExpectedElementDefaultProperties() {
   breadcrumb: false
   breadcrumb_delimiter: ' › '
   default_value: ''
+  depth: null
   description: ''
   description_display: ''
   disabled: false
@@ -4844,6 +4880,7 @@ protected function getExpectedElementDefaultProperties() {
   choices: false
   chosen: false
   default_value: ''
+  depth: null
   description: ''
   description_display: ''
   disabled: false
diff --git a/web/modules/webform/tests/src/Functional/Element/WebformElementTermReferenceTest.php b/web/modules/webform/tests/src/Functional/Element/WebformElementTermReferenceTest.php
index 5c49b6a995..c7536b6f9c 100644
--- a/web/modules/webform/tests/src/Functional/Element/WebformElementTermReferenceTest.php
+++ b/web/modules/webform/tests/src/Functional/Element/WebformElementTermReferenceTest.php
@@ -54,6 +54,12 @@ public function testTermReference() {
     $this->assertRaw('<input data-drupal-selector="edit-webform-term-checkboxes-tree-default-2" type="checkbox" id="edit-webform-term-checkboxes-tree-default-2" name="webform_term_checkboxes_tree_default[2]" value="2" class="form-checkbox" />');
     $this->assertRaw('<label for="edit-webform-term-checkboxes-tree-default-2" class="option">Parent 1: Child 1</label>');
 
+    // Check term checkboxes tree depth.
+    $this->assertRaw('<label for="edit-webform-term-checkboxes-tree-depth-1" class="option">Parent 1</label>');
+    $this->assertNoRaw('<label for="edit-webform-term-checkboxes-tree-depth-2" class="option">Parent 1: Child 1</label>');
+    $this->assertRaw('<label for="edit-webform-term-checkboxes-tree-depth-5" class="option">Parent 2</label>');
+    $this->assertRaw('<label for="edit-webform-term-checkboxes-tree-depth-9" class="option">Parent 3</label>');
+
     // Check term checkboxes tree advanced.
     $this->assertRaw('<fieldset data-drupal-selector="edit-webform-term-checkboxes-tree-advanced" class="js-webform-term-checkboxes webform-term-checkboxes webform-term-checkboxes--wrapper fieldgroup form-composite webform-composite-visible-title js-webform-type-webform-term-checkboxes webform-type-webform-term-checkboxes js-form-item form-item js-form-wrapper form-wrapper" id="edit-webform-term-checkboxes-tree-advanced--wrapper">');
     $this->assertRaw('<span class="field-prefix">..</span>');
@@ -72,25 +78,25 @@ public function testTermReference() {
     $this->assertRaw('<label>webform_term_checkboxes_breadcrumb_advanced</label>');
     $this->assertRaw('<ul><li>Parent 1 › Parent 1: Child 1</li><li>Parent 1 › Parent 1: Child 2</li></ul>');
 
-     // Unpublish term:2.
-     Term::load(2)->setUnpublished()->save();
+    // Unpublish term:2.
+    Term::load(2)->setUnpublished()->save();
 
-     $this->drupalGet('/webform/test_element_term_reference');
+    $this->drupalGet('/webform/test_element_term_reference');
 
-     // Check term select tree default.
-     $this->assertRaw('<option value="1">Parent 1</option>');
-     $this->assertNoRaw('<option value="2">-Parent 1: Child 1</option>');
-     $this->assertRaw('<option value="3">-Parent 1: Child 2</option>');
-     $this->assertRaw('<option value="4">-Parent 1: Child 3</option>');
+    // Check term select tree default.
+    $this->assertRaw('<option value="1">Parent 1</option>');
+    $this->assertNoRaw('<option value="2">-Parent 1: Child 1</option>');
+    $this->assertRaw('<option value="3">-Parent 1: Child 2</option>');
+    $this->assertRaw('<option value="4">-Parent 1: Child 3</option>');
 
-     // Check term select breadcrumb default.
-     $this->assertRaw('<option value="1">Parent 1</option>');
-     $this->assertNoRaw('<option value="2">Parent 1 › Parent 1: Child 1</option>');
-     $this->assertRaw('<option value="3">Parent 1 › Parent 1: Child 2</option>');
-     $this->assertRaw('<option value="4">Parent 1 › Parent 1: Child 3</option>');
+    // Check term select breadcrumb default.
+    $this->assertRaw('<option value="1">Parent 1</option>');
+    $this->assertNoRaw('<option value="2">Parent 1 › Parent 1: Child 1</option>');
+    $this->assertRaw('<option value="3">Parent 1 › Parent 1: Child 2</option>');
+    $this->assertRaw('<option value="4">Parent 1 › Parent 1: Child 3</option>');
 
-     // Publish term: 2
-     Term::load(2)->setPublished()->save();
+    // Publish term: 2
+    Term::load(2)->setPublished()->save();
 
     /**************************************************************************/
     // Term select.
diff --git a/web/modules/webform/tests/src/Functional/Element/WebformElementTextFormatTest.php b/web/modules/webform/tests/src/Functional/Element/WebformElementTextFormatTest.php
index b2011d4fe1..b3f7f2a342 100644
--- a/web/modules/webform/tests/src/Functional/Element/WebformElementTextFormatTest.php
+++ b/web/modules/webform/tests/src/Functional/Element/WebformElementTextFormatTest.php
@@ -54,7 +54,7 @@ public function testTextFormat() {
 
     // Check that formats and tips are removed and/or hidden.
     $this->drupalGet('/webform/test_element_text_format');
-    $this->assertRaw('<div class="js-filter-wrapper filter-wrapper js-form-wrapper form-wrapper" data-drupal-selector="edit-text-format-format" style="display: none" id="edit-text-format-format">');
+    $this->assertRaw('<div class="js-filter-wrapper filter-wrapper js-form-wrapper form-wrapper" data-drupal-selector="edit-text-format-format" style="display: none" data-webform-states-no-clear id="edit-text-format-format">');
     $this->assertRaw('<div class="filter-help js-form-wrapper form-wrapper" data-drupal-selector="edit-text-format-format-help" style="display: none" id="edit-text-format-format-help">');
 
     // Check description + more.
diff --git a/web/modules/webform/tests/src/Functional/Element/WebformElementVerticalTabsTest.php b/web/modules/webform/tests/src/Functional/Element/WebformElementVerticalTabsTest.php
new file mode 100644
index 0000000000..1fc8bf39bc
--- /dev/null
+++ b/web/modules/webform/tests/src/Functional/Element/WebformElementVerticalTabsTest.php
@@ -0,0 +1,34 @@
+<?php
+
+namespace Drupal\Tests\webform\Functional\Element;
+
+/**
+ * Tests for vertical tabs element.
+ *
+ * @group webform
+ */
+class WebformElementVerticalTabsTest extends WebformElementBrowserTestBase {
+
+  /**
+   * Webforms to load.
+   *
+   * @var array
+   */
+  protected static $testWebforms = ['test_element_vertical_tabs'];
+
+  /**
+   * Test vertical tabs element.
+   */
+  public function testVerticalTabs() {
+    $this->drupalGet('/webform/test_element_vertical_tabs');
+
+    // Check vertical_tabs element.
+    $this->assertRaw('<div data-drupal-selector="edit-vertical-tabs" data-vertical-tabs-panes>');
+    $this->assertRaw('<input class="vertical-tabs__active-tab" data-drupal-selector="edit-vertical-tabs-active-tab" type="hidden" name="vertical_tabs__active_tab" value="" />');
+
+    // Check vertical_tabs advanced element.
+    $this->assertRaw('<div data-drupal-selector="edit-vertical-tabs-advanced" aria-describedby="edit-vertical-tabs-advanced--description" data-vertical-tabs-panes>');
+    $this->assertRaw('<input class="vertical-tabs__active-tab" data-drupal-selector="edit-vertical-tabs-advanced-active-tab" type="hidden" name="vertical_tabs_advanced__active_tab" value="edit-vertical-tabs-advanced-details-03" />');
+  }
+
+}
diff --git a/web/modules/webform/tests/src/Functional/Settings/WebformSettingsAutofillTest.php b/web/modules/webform/tests/src/Functional/Settings/WebformSettingsAutofillTest.php
index fb2e6af8b0..d1fb2dd0c3 100644
--- a/web/modules/webform/tests/src/Functional/Settings/WebformSettingsAutofillTest.php
+++ b/web/modules/webform/tests/src/Functional/Settings/WebformSettingsAutofillTest.php
@@ -23,7 +23,8 @@ class WebformSettingsAutofillTest extends WebformBrowserTestBase {
    * Test webform submission form autofill.
    */
   public function testAutofill() {
-    $this->drupalLogin($this->rootUser);
+    $account = $this->drupalCreateUser();
+    $this->drupalLogin($account);
 
     $webform = Webform::load('test_form_autofill');
 
diff --git a/web/modules/webform/tests/src/Functional/Settings/WebformSettingsLimitUniqueTest.php b/web/modules/webform/tests/src/Functional/Settings/WebformSettingsLimitUniqueTest.php
index 3ea019a4e5..96b5ac7efb 100644
--- a/web/modules/webform/tests/src/Functional/Settings/WebformSettingsLimitUniqueTest.php
+++ b/web/modules/webform/tests/src/Functional/Settings/WebformSettingsLimitUniqueTest.php
@@ -231,11 +231,17 @@ public function testLimitUnique() {
     $this->assertFieldByName('name', 'Jane Doe');
     $this->assertRaw("<div><b>Submission ID:</b> $sid</div>");
 
+    // Check that the delete submission link includes ?destination.
+    $this->assertLinkByHref(base_path() . 'webform/test_form_limit_user_unique/submissions/' . $sid . '/delete?destination=' . base_path() . 'form/test-form-limit-user-unique');
+
     // Check that 'Test' form also has name set to 'Jane Doe'
     // and does not display a message.
     $this->drupalGet('/webform/test_form_limit_user_unique/test');
     $this->assertFieldByName('name', 'Jane Doe');
     $this->assertRaw("<div><b>Submission ID:</b> $sid</div>");
+
+    // Check that the delete submission link does not include the ?destination.
+    $this->assertLinkByHref(base_path() . 'admin/structure/webform/manage/test_form_limit_user_unique/submission/' . $sid . '/delete');
   }
 
 }
diff --git a/web/modules/webform/tests/src/Functional/States/WebformStatesManagerTest.php b/web/modules/webform/tests/src/Functional/States/WebformStatesManagerTest.php
index 39524c1e63..916e014556 100644
--- a/web/modules/webform/tests/src/Functional/States/WebformStatesManagerTest.php
+++ b/web/modules/webform/tests/src/Functional/States/WebformStatesManagerTest.php
@@ -36,7 +36,7 @@ public function testStatesToText() {
     $this->assertRaw('<label>textfield_or</label>');
     $this->assertRaw('This element is <strong>required</strong> when <strong>any</strong> of the following conditions are met:<ul><li><strong>some_trigger</strong> is checked.</li><li><strong>some_value</strong> = <strong>one</strong>.</li><li><strong>some_number</strong> &gt;= <strong>1</strong>.</li></ul>');
     $this->assertRaw('<label>textfield_or</label>');
-    $this->assertRaw('This element is <strong>required</strong> when <strong>any</strong> of the following conditions are met:<ul><li><strong>some_trigger</strong> is checked.</li><li>When <strong>any</strong> of the following (nested) conditions are met:<ul><li><strong>some_value</strong> = <strong>one</strong>.</li><li><strong>some_number</strong> is between <strong>1</strong> and <strong>10</strong>.</li></ul></li></ul>');
+    $this->assertRaw('This element is <strong>required</strong> when <strong>any</strong> of the following conditions are met:<ul><li><strong>some_trigger</strong> is not checked.</li><li>When <strong>any</strong> of the following (nested) conditions are met:<ul><li><strong>some_value</strong> = <strong>one</strong>.</li><li><strong>some_number</strong> is between <strong>1</strong> and <strong>10</strong>.</li></ul></li></ul>');
   }
 
 }
diff --git a/web/modules/webform/tests/src/Functional/States/WebformStatesServerTest.php b/web/modules/webform/tests/src/Functional/States/WebformStatesServerTest.php
index b8cb4d3eda..be003c239d 100644
--- a/web/modules/webform/tests/src/Functional/States/WebformStatesServerTest.php
+++ b/web/modules/webform/tests/src/Functional/States/WebformStatesServerTest.php
@@ -3,6 +3,7 @@
 namespace Drupal\Tests\webform\Functional\States;
 
 use Drupal\Component\Utility\Crypt;
+use Drupal\Tests\TestFileCreationTrait;
 use Drupal\webform\Element\WebformOtherBase;
 use Drupal\webform\Entity\Webform;
 use Drupal\Tests\webform\Functional\WebformBrowserTestBase;
@@ -14,6 +15,8 @@
  */
 class WebformStatesServerTest extends WebformBrowserTestBase {
 
+  use TestFileCreationTrait;
+
   /**
    * Webforms to load.
    *
@@ -23,6 +26,8 @@ class WebformStatesServerTest extends WebformBrowserTestBase {
     'test_states_crosspage',
     'test_states_server_custom',
     'test_states_server_comp',
+    'test_states_server_file',
+    'test_states_server_file',
     'test_states_server_likert',
     'test_states_server_nested',
     'test_states_server_multiple',
@@ -35,7 +40,7 @@ class WebformStatesServerTest extends WebformBrowserTestBase {
    *
    * @var array
    */
-  public static $modules = ['filter', 'webform'];
+  public static $modules = ['filter', 'file', 'webform'];
 
   /**
    * {@inheritdoc}
@@ -447,6 +452,20 @@ public function testFormStatesValidatorRequired() {
     $this->assertRaw('webform_name_nested_last field is required.');
     $this->assertRaw(' <input data-drupal-selector="edit-webform-name-nested-last" type="text" id="edit-webform-name-nested-last" name="webform_name_nested[last]" value="" size="60" maxlength="255" class="form-text error" aria-invalid="true" data-drupal-states="{&quot;required&quot;:{&quot;.webform-submission-test-states-server-comp-add-form :input[name=\u0022webform_name_nested_trigger\u0022]&quot;:{&quot;checked&quot;:true}}}" />');
 
+    /**************************************************************************/
+    // file_trigger.
+    /**************************************************************************/
+
+    $webform = Webform::load('test_states_server_file');
+
+    // Check required error.
+    $files = $this->getTestFiles('text');;
+    $edit = [
+      'files[trigger_file]' => \Drupal::service('file_system')->realpath($files[0]->uri),
+    ];
+    $this->postSubmission($webform, $edit);
+    $this->assertRaw('textfield_dependent_required field is required.');
+
     /**************************************************************************/
     // likert element.
     /**************************************************************************/
diff --git a/web/modules/webform/tests/src/Functional/Variant/WebformVariantElementTest.php b/web/modules/webform/tests/src/Functional/Variant/WebformVariantElementTest.php
index 5b510d14ba..e93fd3609b 100644
--- a/web/modules/webform/tests/src/Functional/Variant/WebformVariantElementTest.php
+++ b/web/modules/webform/tests/src/Functional/Variant/WebformVariantElementTest.php
@@ -47,13 +47,13 @@ public function testVariantElement() {
     // 'edit webform variants' permission.
     $this->drupalLogin($variant_user);
     $this->drupalGet('/admin/structure/webform/manage/contact/element/add');
-    $this->assertLink('Variant [EXPERIMENTAL]');
+    $this->assertLink('Variant');
 
     // Check that the variant element is hidden to users without
     // 'edit webform variants' permission.
     $this->drupalLogin($admin_user);
     $this->drupalGet('/admin/structure/webform/manage/contact/element/add');
-    $this->assertNoLink('Variant [EXPERIMENTAL]');
+    $this->assertNoLink('Variant');
 
     // Check that hidden variant element is still available.
     $this->drupalGet('/admin/structure/webform/manage/contact/element/add/webform_variant');
diff --git a/web/modules/webform/tests/src/Functional/WebformEntityTranslationTest.php b/web/modules/webform/tests/src/Functional/WebformEntityTranslationTest.php
index f4d1c09a3d..ca930b5a4a 100644
--- a/web/modules/webform/tests/src/Functional/WebformEntityTranslationTest.php
+++ b/web/modules/webform/tests/src/Functional/WebformEntityTranslationTest.php
@@ -122,7 +122,9 @@ public function testTranslate() {
 
     // Check default elements.
     $this->drupalGet('/admin/structure/webform/manage/test_translation/translate/fr/add');
-    $this->assertRaw('<textarea lang="fr" data-drupal-selector="edit-translation-config-names-webformwebformtest-translation-elements" aria-describedby="edit-translation-config-names-webformwebformtest-translation-elements--description" class="js-webform-codemirror webform-codemirror yaml form-textarea" data-webform-codemirror-mode="text/x-yaml" id="edit-translation-config-names-webformwebformtest-translation-elements" name="translation[config_names][webform.webform.test_translation][elements]" rows="48" cols="60">textfield:
+    $this->assertRaw('<textarea lang="fr" data-drupal-selector="edit-translation-config-names-webformwebformtest-translation-elements" aria-describedby="edit-translation-config-names-webformwebformtest-translation-elements--description" class="js-webform-codemirror webform-codemirror yaml form-textarea" data-webform-codemirror-mode="text/x-yaml" id="edit-translation-config-names-webformwebformtest-translation-elements" name="translation[config_names][webform.webform.test_translation][elements]" rows="52" cols="60">variant:
+  &#039;#title&#039;: Variant
+textfield:
   &#039;#title&#039;: &#039;Text field&#039;
 select_options:
   &#039;#title&#039;: &#039;Select (options)&#039;
@@ -288,4 +290,79 @@ public function testTranslate() {
     $this->assertRaw('<label for="edit-textfield">French</label>');
   }
 
+  /**
+   * Tests webform translate variants.
+   */
+  public function testTranslateVariants() {
+    // Check English webform.
+    $this->drupalGet('/webform/test_translation');
+    $this->assertRaw('<label for="edit-textfield">Text field</label>');
+    $this->assertRaw('<label for="edit-select-options">Select (options)</label>');
+
+    // Check English webform with test variant.
+    $this->drupalGet('/webform/test_translation', ['query' => ['variant' => 'test']]);
+    $this->assertRaw('<label for="edit-textfield">Text field - Variant</label>');
+    $this->assertRaw('<label for="edit-select-options">Select (options)</label>');
+
+    // Check Spanish webform.
+    $this->drupalGet('/es/webform/test_translation');
+    $this->assertRaw('<label for="edit-textfield">Campo de texto</label>');
+    $this->assertRaw('<label for="edit-select-options">Seleccione (opciones)</label>');
+
+    // Check Spanish webform with test variant.
+    $this->drupalGet('/es/webform/test_translation', ['query' => ['variant' => 'test']]);
+    $this->assertRaw('<label for="edit-textfield">Campo de texto - Variante</label>');
+    $this->assertRaw('<label for="edit-select-options">Seleccione (opciones)</label>');
+
+    // Check French (not translated) webform.
+    $this->drupalGet('/fr/webform/test_translation');
+    $this->assertRaw('<label for="edit-textfield">Text field</label>');
+    $this->assertRaw('<label for="edit-select-options">Select (options)</label>');
+
+    // Check French (not translated) webform with test variant.
+    $this->drupalGet('/fr/webform/test_translation', ['query' => ['variant' => 'test']]);
+    $this->assertRaw('<label for="edit-textfield">Text field - Variant</label>');
+    $this->assertRaw('<label for="edit-select-options">Select (options)</label>');
+
+    // Remove variant element and variants.
+    /** @var \Drupal\webform\WebformInterface $webform */
+    $webform = Webform::load('test_translation');
+    $variants = $webform->getVariants();
+    foreach ($variants as $variant) {
+      $webform->deleteWebformVariant($variant);
+    }
+    $webform->deleteElement('variant');
+    $webform->save();
+
+    // Check English webform.
+    $this->drupalGet('/webform/test_translation');
+    $this->assertRaw('<label for="edit-textfield">Text field</label>');
+    $this->assertRaw('<label for="edit-select-options">Select (options)</label>');
+
+    // Check English webform with test variant.
+    $this->drupalGet('/webform/test_translation', ['query' => ['variant' => 'test']]);
+    $this->assertRaw('<label for="edit-textfield">Text field</label>');
+    $this->assertRaw('<label for="edit-select-options">Select (options)</label>');
+
+    // Check Spanish webform.
+    $this->drupalGet('/es/webform/test_translation');
+    $this->assertRaw('<label for="edit-textfield">Campo de texto</label>');
+    $this->assertRaw('<label for="edit-select-options">Seleccione (opciones)</label>');
+
+    // Check Spanish webform with test variant.
+    $this->drupalGet('/es/webform/test_translation', ['query' => ['variant' => 'test']]);
+    $this->assertRaw('<label for="edit-textfield">Campo de texto</label>');
+    $this->assertRaw('<label for="edit-select-options">Seleccione (opciones)</label>');
+
+    // Check French (not translated) webform.
+    $this->drupalGet('/fr/webform/test_translation');
+    $this->assertRaw('<label for="edit-textfield">Text field</label>');
+    $this->assertRaw('<label for="edit-select-options">Select (options)</label>');
+
+    // Check French (not translated) webform with test variant.
+    $this->drupalGet('/fr/webform/test_translation', ['query' => ['variant' => 'test']]);
+    $this->assertRaw('<label for="edit-textfield">Text field</label>');
+    $this->assertRaw('<label for="edit-select-options">Select (options)</label>');
+  }
+
 }
diff --git a/web/modules/webform/tests/src/Functional/WebformSubmissionTokenOperationsTest.php b/web/modules/webform/tests/src/Functional/WebformSubmissionTokenOperationsTest.php
new file mode 100644
index 0000000000..461f8c3938
--- /dev/null
+++ b/web/modules/webform/tests/src/Functional/WebformSubmissionTokenOperationsTest.php
@@ -0,0 +1,135 @@
+<?php
+
+namespace Drupal\Tests\webform\Functional;
+
+use Drupal\webform\Entity\Webform;
+use Drupal\webform\Entity\WebformSubmission;
+
+/**
+ * Tests for operations on a webform submission using a tokenized URL.
+ *
+ * @group webform
+ */
+class WebformSubmissionTokenOperationsTest extends WebformBrowserTestBase {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = ['token'];
+
+  /**
+   * Webforms to load.
+   *
+   * @var array
+   */
+  protected static $testWebforms = ['test_token_operations'];
+
+  /**
+   * Test operations on a webform submission using a tokenized URL.
+   */
+  public function testTokenOperationsTest() {
+    $normal_user = $this->drupalCreateUser();
+
+    $webform = Webform::load('test_token_operations');
+
+    $token_operations = ['view', 'update', 'delete'];
+
+    // Post test submission.
+    $sid = $this->postSubmission($webform, ['textfield' => 'test']);
+    /** @var \Drupal\webform\WebformSubmissionInterface $webform_submission */
+    $webform_submission = WebformSubmission::load($sid);
+
+    /**************************************************************************/
+
+    // Check confirmation page's operations (view, update, & delete) token URLs.
+    foreach ($token_operations as $token_operation) {
+      $token_url = $webform_submission->getTokenUrl($token_operation);
+      $link_label = $token_url->setAbsolute(FALSE)->toString();
+      $link_url = $token_url->setAbsolute(TRUE)->toString();
+      $this->assertRaw('<a href="' . $link_url . '">' . $link_label . '</a>');
+    }
+
+    /**************************************************************************/
+    /* View */
+    /**************************************************************************/
+
+    // Check token view access allowed.
+    $this->drupalLogin($normal_user);
+    $this->drupalGet($webform_submission->getTokenUrl('view'));
+    $this->assertResponse(200);
+    $this->assertRaw('Submission information');
+    $this->assertRaw('<label>textfield</label>');
+
+    // Check token view access denied.
+    $webform->setSetting('token_view', FALSE)->save();
+    $this->drupalLogin($normal_user);
+    $this->drupalGet($webform_submission->getTokenUrl('view'));
+    $this->assertResponse(403);
+    $this->assertNoRaw('Submission information');
+    $this->assertNoRaw('<label>textfield</label>');
+
+    /**************************************************************************/
+    /* Update */
+    /**************************************************************************/
+
+    // Check token update access allowed.
+    $this->drupalLogin($normal_user);
+    $this->drupalGet($webform_submission->getTokenUrl('update'));
+    $this->assertResponse(200);
+    $this->assertRaw('Submission information');
+    $this->assertFieldByName('textfield', $webform_submission->getElementData('textfield'));
+
+    // Check token update does not load the submission.
+    $webform->setSetting('token_update', FALSE)->save();
+    $this->drupalLogin($normal_user);
+    $this->drupalGet($webform_submission->getTokenUrl('update'));
+    $this->assertResponse(200);
+    $this->assertNoRaw('Submission information');
+    $this->assertNoFieldByName('textfield', $webform_submission->getElementData('textfield'));
+
+    /**************************************************************************/
+    /* Delete */
+    /**************************************************************************/
+
+    // Check token delete access allowed.
+    $this->drupalLogin($normal_user);
+    $this->drupalGet($webform_submission->getTokenUrl('delete'));
+    $this->assertResponse(200);
+
+    // Check token delete access denied.
+    $webform->setSetting('token_delete', FALSE)->save();
+    $this->drupalLogin($normal_user);
+    $this->drupalGet($webform_submission->getTokenUrl('delete'));
+    $this->assertResponse(403);
+
+    /**************************************************************************/
+    /* Anonymous */
+    /**************************************************************************/
+
+    // Logout and switch to anonymous user.
+    $this->drupalLogout();
+
+    // Set access to authenticated only and reenabled tokenized URL.
+    $access = $webform->getAccessRules();
+    $access['create']['roles'] = ['authenticated'];
+    $webform->setAccessRules($access);
+    $webform
+      ->setSetting('token_view', TRUE)
+      ->setSetting('token_update', TRUE)
+      ->setSetting('token_delete', TRUE)
+      ->save();
+
+    // Check that access is denied for anonymous user.
+    $this->drupalGet('/webform/test_token_operations');
+    $this->assertResponse(403);
+
+    // Check token operations are allowed for anonymous user.
+    foreach ($token_operations as $token_operation) {
+      $this->drupalGet($webform_submission->getTokenUrl($token_operation));
+      $this->assertResponse(200);
+    }
+  }
+
+}
diff --git a/web/modules/webform/tests/src/Functional/WebformSubmissionTokenUpdateTest.php b/web/modules/webform/tests/src/Functional/WebformSubmissionTokenUpdateTest.php
deleted file mode 100644
index d13c388465..0000000000
--- a/web/modules/webform/tests/src/Functional/WebformSubmissionTokenUpdateTest.php
+++ /dev/null
@@ -1,108 +0,0 @@
-<?php
-
-namespace Drupal\Tests\webform\Functional;
-
-use Drupal\webform\Entity\Webform;
-use Drupal\webform\Entity\WebformSubmission;
-
-/**
- * Tests for updating webform submission using tokenized URL.
- *
- * @group webform
- */
-class WebformSubmissionTokenUpdateTest extends WebformBrowserTestBase {
-
-  /**
-   * Modules to enable.
-   *
-   * @var array
-   */
-  public static $modules = ['token'];
-
-  /**
-   * Webforms to load.
-   *
-   * @var array
-   */
-  protected static $testWebforms = ['test_token_view_update'];
-
-  /**
-   * Test updating webform submission using tokenized URL.
-   */
-  public function testTokenUpdateTest() {
-    $normal_user = $this->drupalCreateUser();
-
-    $webform = Webform::load('test_token_view_update');
-
-    /**************************************************************************/
-
-    // Post test submission.
-    $this->drupalLogin($this->rootUser);
-    $sid = $this->postSubmissionTest($webform);
-    $webform_submission = WebformSubmission::load($sid);
-    // Check confirmation page's URL token.
-    $token_url = $webform_submission->getTokenUrl();
-    $link_label = $token_url->setAbsolute(FALSE)->toString();
-    $link_url = $token_url->setAbsolute(TRUE)->toString();
-    $this->assertRaw('<a href="' . $link_url . '">' . $link_label . '</a>');
-
-    /* View */
-
-    // Check token view access allowed.
-    $this->drupalLogin($normal_user);
-    $this->drupalGet($webform_submission->getTokenUrl('view'));
-    $this->assertResponse(200);
-    $this->assertRaw('Submission information');
-    $this->assertRaw('<label>textfield</label>');
-
-    // Check token view access denied.
-    $webform->setSetting('token_view', FALSE)->save();
-    $this->drupalLogin($normal_user);
-    $this->drupalGet($webform_submission->getTokenUrl('view'));
-    $this->assertResponse(403);
-    $this->assertNoRaw('Submission information');
-    $this->assertNoRaw('<label>textfield</label>');
-
-    /* Update */
-
-    // Check token update access allowed.
-    $this->drupalLogin($normal_user);
-    $this->drupalGet($webform_submission->getTokenUrl());
-    $this->assertResponse(200);
-    $this->assertRaw('Submission information');
-    $this->assertFieldByName('textfield', $webform_submission->getElementData('textfield'));
-
-    // Check token update not autoload.
-    $webform->setSetting('token_update', FALSE)->save();
-    $this->drupalLogin($normal_user);
-    $this->drupalGet($webform_submission->getTokenUrl());
-    $this->assertResponse(200);
-    $this->assertNoRaw('Submission information');
-    $this->assertNoFieldByName('textfield', $webform_submission->getElementData('textfield'));
-
-    // Logout and switch to anonymous user.
-    $this->drupalLogout();
-
-    // Set access to authenticated only and reenabled tokenized URL.
-    $access = $webform->getAccessRules();
-    $access['create']['roles'] = ['authenticated'];
-    $webform->setAccessRules($access);
-    $webform
-      ->setSetting('token_view', TRUE)
-      ->setSetting('token_update', TRUE)
-      ->save();
-
-    // Check that access is denied for anonymous user.
-    $this->drupalGet('/webform/test_token_view_update');
-    $this->assertResponse(403);
-
-    // Check token view access allowed for anonymous user.
-    $this->drupalGet($webform_submission->getTokenUrl('view'));
-    $this->assertResponse(200);
-
-    // Check token update access allowed for anonymous user.
-    $this->drupalGet($webform_submission->getTokenUrl());
-    $this->assertResponse(200);
-  }
-
-}
diff --git a/web/modules/webform/tests/src/FunctionalJavascript/Element/WebformElementCheckboxesJavaScriptTest.php b/web/modules/webform/tests/src/FunctionalJavascript/Element/WebformElementCheckboxesJavaScriptTest.php
index ac201efe08..6883ee8ef0 100644
--- a/web/modules/webform/tests/src/FunctionalJavascript/Element/WebformElementCheckboxesJavaScriptTest.php
+++ b/web/modules/webform/tests/src/FunctionalJavascript/Element/WebformElementCheckboxesJavaScriptTest.php
@@ -66,6 +66,15 @@ public function testCheckboxesAllNone() {
     $assert_session->checkboxChecked('edit-checkboxes-both-two');
     $assert_session->checkboxChecked('edit-checkboxes-both-three');
     $assert_session->checkboxChecked('edit-checkboxes-both-all');
+
+    // Check that 'all' is checked when form is prepopulated.
+    $options = [
+      'query' => [
+        'checkboxes_all' => ['one', 'two', 'three'],
+      ],
+    ];
+    $this->drupalGet('/webform/test_element_checkboxes_all_none', $options);
+    $assert_session->checkboxChecked('edit-checkboxes-all-all');
   }
 
 }
diff --git a/web/modules/webform/tests/src/FunctionalJavascript/Wizard/WebformWizardBasicJavaScriptTest.php b/web/modules/webform/tests/src/FunctionalJavascript/Wizard/WebformWizardBasicJavaScriptTest.php
index 7e667ab247..e7fcc81a78 100644
--- a/web/modules/webform/tests/src/FunctionalJavascript/Wizard/WebformWizardBasicJavaScriptTest.php
+++ b/web/modules/webform/tests/src/FunctionalJavascript/Wizard/WebformWizardBasicJavaScriptTest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\Tests\webform\FunctionalJavaScript\Wizard;
+namespace Drupal\Tests\webform\FunctionalJavascript\Wizard;
 
 use Drupal\webform\Entity\Webform;
 use Drupal\Tests\webform\FunctionalJavascript\WebformWebDriverTestBase;
@@ -75,6 +75,30 @@ public function testBasicWizard() {
     $page->pressButton('edit-wizard-prev');
     $assert_session->waitForText('Element 1');
     $this->assertQuery('custom_param=1&page=page_1');
+
+    /**************************************************************************/
+
+    // Set the webform to use ajax.
+    $webform->setSetting('ajax', TRUE);
+    $webform->save();
+
+    // There should be no announcements when first visiting the form.
+    $this->drupalGet('/webform/test_form_wizard_basic');
+    $this->assertRaw('Element 1');
+    $this->assertEqual('', $page->findById('drupal-live-announce')->getText());
+
+    // Check announcements on next and previous pages.
+    $page->pressButton('Next >');
+    $assert_session->waitForText('"Test: Webform: Wizard basic: Page 2" loaded. (2 of 4)');
+
+    $page->pressButton('< Previous');
+    $assert_session->waitForText('"Test: Webform: Wizard basic: Page 1" loaded. (1 of 4)');
+
+    $page->pressButton('Next >');
+    $assert_session->waitForText('"Test: Webform: Wizard basic: Page 2" loaded. (2 of 4)');
+
+    $page->pressButton('Preview');
+    $assert_session->waitForText('"Test: Webform: Wizard basic: Preview" loaded. (3 of 4)');
   }
 
   /**
diff --git a/web/modules/webform/tests/src/Kernel/WebformSubmissionPurgeApiTest.php b/web/modules/webform/tests/src/Kernel/WebformSubmissionPurgeApiTest.php
new file mode 100644
index 0000000000..69c66de884
--- /dev/null
+++ b/web/modules/webform/tests/src/Kernel/WebformSubmissionPurgeApiTest.php
@@ -0,0 +1,75 @@
+<?php
+
+namespace Drupal\Tests\webform\Kernel;
+
+use Drupal\KernelTests\KernelTestBase;
+use Drupal\webform\Entity\Webform;
+use Drupal\webform\Entity\WebformSubmission;
+use Drupal\webform\WebformSubmissionStorageInterface;
+
+/**
+ * Defines a class for testing webform submission purge APIs.
+ *
+ * @group webform
+ */
+class WebformSubmissionPurgeApiTest extends KernelTestBase {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = [
+    'system',
+    'user',
+    'path',
+    'path_alias',
+    'webform_test_handler',
+    'field',
+    'webform',
+  ];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+    $this->installEntitySchema('path_alias');
+    $this->installSchema('webform', ['webform']);
+    $this->installConfig('webform');
+    $this->installEntitySchema('webform_submission');
+    $this->installEntitySchema('user');
+  }
+
+  /**
+   * Tests webform handler prePurge and postPurge methods and associated hooks.
+   */
+  public function testPurgeApis() {
+    /** @var \Drupal\webform\WebformInterface $webform */
+    $webform = Webform::create([
+      'id' => $this->randomMachineName(),
+    ]);
+    $webform->setSetting('purge', WebformSubmissionStorageInterface::PURGE_ALL);
+    $webform->setSetting('purge_days', 14);
+    $webform->addWebformHandler(\Drupal::service('plugin.manager.webform.handler')->createInstance('test_purge'));
+    $webform->save();
+
+    $submission_ids = [];
+    for ($i = 0; $i < 10; $i++) {
+      $webform_submission = WebformSubmission::create([
+        'webform_id' => $webform->id(),
+      ]);
+      $webform_submission->in_draft = FALSE;
+      // 15 days ago.
+      $webform_submission->setCreatedTime(time() - (15 * 86400));
+      $webform_submission->save();
+      $submission_ids[$webform_submission->id()] = $webform_submission->id();
+    }
+    \Drupal::entityTypeManager()->getStorage('webform_submission')->purge(10);
+    $this->assertEquals($submission_ids, \Drupal::state()->get('webform_test_purge_handler_pre'));
+    $this->assertEquals($submission_ids, \Drupal::state()->get('webform_test_purge_handler_post'));
+    $this->assertEquals($submission_ids, \Drupal::state()->get('webform_test_purge_hook_pre'));
+    $this->assertEquals($submission_ids, \Drupal::state()->get('webform_test_purge_hook_post'));
+  }
+
+}
diff --git a/web/modules/webform/tests/src/Unit/Plugin/Block/WebformBlockTest.php b/web/modules/webform/tests/src/Unit/Plugin/Block/WebformBlockTest.php
index 57786ec8b4..01e8395b62 100644
--- a/web/modules/webform/tests/src/Unit/Plugin/Block/WebformBlockTest.php
+++ b/web/modules/webform/tests/src/Unit/Plugin/Block/WebformBlockTest.php
@@ -6,6 +6,7 @@
 use Drupal\Core\Cache\Context\CacheContextsManager;
 use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
+use Drupal\Core\Routing\RouteMatchInterface;
 use Drupal\Core\Session\AccountInterface;
 use Drupal\Tests\UnitTestCase;
 use Drupal\webform\Plugin\Block\WebformBlock;
@@ -135,13 +136,17 @@ protected function mockWebformBlock(WebformInterface $webform) {
       ->disableOriginalConstructor()
       ->getMock();
 
+    $route_match = $this->getMockBuilder(RouteMatchInterface::class)
+      ->disableOriginalConstructor()
+      ->getMock();
+
     $configuration = ['webform_id' => $webform->id()];
 
     $plugin_id = 'webform_block';
 
     $plugin_definition = ['provider' => 'unit_test'];
 
-    return new WebformBlock($configuration, $plugin_id, $plugin_definition, $request_stack, $entity_type_manager, $token_manager);
+    return new WebformBlock($configuration, $plugin_id, $plugin_definition, $request_stack, $entity_type_manager, $token_manager, $route_match);
   }
 
 }
diff --git a/web/modules/webform/tests/themes/webform_test_bartik/webform_test_bartik.info.yml b/web/modules/webform/tests/themes/webform_test_bartik/webform_test_bartik.info.yml
index 1c429a49e9..532e9dc3a0 100644
--- a/web/modules/webform/tests/themes/webform_test_bartik/webform_test_bartik.info.yml
+++ b/web/modules/webform/tests/themes/webform_test_bartik/webform_test_bartik.info.yml
@@ -5,7 +5,7 @@ name: 'Webform Bartik test'
 description: 'Support theme for webform Bartik integration testing.'
 package: 'Webform Testing'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453181
diff --git a/web/modules/webform/webform.api.php b/web/modules/webform/webform.api.php
index b4e98a3a3c..a3cb0c075d 100644
--- a/web/modules/webform/webform.api.php
+++ b/web/modules/webform/webform.api.php
@@ -331,6 +331,26 @@ function hook_webform_options_WEBFORM_OPTIONS_ID_alter(array &$options, array &$
 
 }
 
+/**
+ * Respond before webform submissions are purged (before they are deleted).
+ *
+ * @param \Drupal\webform\WebformSubmissionInterface[] $webform_submissions
+ *   The webform submissions being purged.
+ */
+function hook_webform_submissions_pre_purge(array $webform_submissions) {
+
+}
+
+/**
+ * Respond to webform submissions being purged (after they are deleted).
+ *
+ * @param \Drupal\webform\WebformSubmissionInterface[] $webform_submissions
+ *   The webform submissions that were purged.
+ */
+function hook_webform_submissions_post_purge(array $webform_submissions) {
+
+}
+
 /**
  * Perform alterations before a webform submission form is rendered.
  *
diff --git a/web/modules/webform/webform.info.yml b/web/modules/webform/webform.info.yml
index 3e120960a7..e30e4798db 100644
--- a/web/modules/webform/webform.info.yml
+++ b/web/modules/webform/webform.info.yml
@@ -8,7 +8,7 @@ dependencies:
   - 'drupal:field'
   - 'drupal:user'
 
-# Information added by Drupal.org packaging script on 2020-10-05
-version: '8.x-5.22'
+# Information added by Drupal.org packaging script on 2021-02-04
+version: '8.x-5.24'
 project: 'webform'
-datestamp: 1601919526
+datestamp: 1612453182
diff --git a/web/modules/webform/webform.libraries.yml b/web/modules/webform/webform.libraries.yml
index 821bda4858..d2cfb96a0d 100644
--- a/web/modules/webform/webform.libraries.yml
+++ b/web/modules/webform/webform.libraries.yml
@@ -50,6 +50,7 @@ webform.admin.dialog:
     - webform/webform.form.tabs
     - webform/webform.admin.dropbutton
     - webform/webform.element.codemirror.yaml
+    - webform/webform.element.help
     - webform/webform.element.html_editor
     - webform/webform.element.other
     - webform/webform.element.message
@@ -130,6 +131,7 @@ webform.ajax:
     - core/drupal.announce
     - core/jquery.once
     - core/jquery.form
+    - webform/webform.scroll
 
 # Announce.
 
@@ -143,6 +145,13 @@ webform.announce:
     - core/drupal
     - core/drupal.announce
 
+# Behaviors.
+
+webform.behaviors:
+  version: VERSION
+  js:
+    js/webform.behaviors.js: {}
+
 # Block.
 
 webform.block:
@@ -267,6 +276,16 @@ webform.promotions:
     component:
       css/webform.promotions.css: {}
 
+# Scroll.
+
+webform.scroll:
+  version: VERSION
+  js:
+    js/webform.scroll.js: {}
+  dependencies:
+    - core/drupal
+    - core/jquery
+
 # States.
 
 webform.states:
@@ -274,6 +293,7 @@ webform.states:
   js:
     js/webform.states.js: {}
   dependencies:
+    - webform/webform.behaviors
     - core/drupal.states
 
 # Token.
@@ -990,14 +1010,14 @@ libraries.choices:
 
 libraries.codemirror.text:
   remote: https://github.com/codemirror/codemirror
-  version: &webform_codemirror_version '5.57.0'
+  version: &webform_codemirror_version '5.53.2'
   license: &webform_codemirror_license
     name: MIT
     url: http://codemirror.net/LICENSE
     gpl-compatible: true
   cdn: &webform_codemirror_cdn
-    /libraries/codemirror/lib/: https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.57.0/
-    /libraries/codemirror/: https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.57.0/
+    /libraries/codemirror/lib/: https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.53.2/
+    /libraries/codemirror/: https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.53.2/
   css:
     component:
       /libraries/codemirror/lib/codemirror.css: {}
diff --git a/web/modules/webform/webform.module b/web/modules/webform/webform.module
index af3825ae69..b9b01aff3e 100644
--- a/web/modules/webform/webform.module
+++ b/web/modules/webform/webform.module
@@ -420,7 +420,12 @@ function webform_mail($key, &$message, $params) {
   // instead of site's email address.
   // @see: \Drupal\Core\Mail\MailManager::mail.
   if (!empty($params['from_mail'])) {
-    $message['from'] = $message['headers']['From'] = (!empty($params['from_name'])) ? Mail::formatDisplayName($params['from_name']) . ' <' . $params['from_mail'] . '>' : $params['from_mail'];
+    // 'From name' is only used when the 'From mail' contains a single
+    // email address.
+    $from = (!empty($params['from_name']) && strpos($params['from_mail'], ',') === FALSE)
+      ? Mail::formatDisplayName($params['from_name']) . ' <' . $params['from_mail'] . '>'
+      : $params['from_mail'];
+    $message['from'] = $message['headers']['From'] = $from;
   }
 
   // Set header 'Cc'.
@@ -442,10 +447,12 @@ function webform_mail($key, &$message, $params) {
     $message['reply-to'] = $message['headers']['Reply-to'] = $reply_to;
   }
 
-  // Set header 'Return-Path'.
+  // Set header 'Return-Path' which only supports a single email address and the
+  // 'from_mail' may contain multiple comma delimited email addresses.
   $return_path = $params['return_path'] ?: $params['from_mail'] ?: '';
   if ($return_path) {
-    $message['headers']['Sender'] = $message['headers']['Return-Path'] = $return_path;
+    $return_path = explode(',', $return_path);
+    $message['headers']['Sender'] = $message['headers']['Return-Path'] = $return_path[0];
   }
 
   // Set header 'Sender'.
@@ -481,7 +488,6 @@ function webform_toolbar_alter(&$items) {
   }
 }
 
-
 /**
  * Implements hook_menu_links_discovered_alter().
  */
@@ -742,10 +748,28 @@ function setSessionVariantID(variant_key, variant_id) {
  * @see webform_preprocess_file_link()
  */
 function webform_file_access(FileInterface $file, $operation, AccountInterface $account) {
-  // Block access to temporary anonymous private file uploads.
-  if ($operation === 'download' && $file->isTemporary() && (int) $file->getOwnerId() === 0 && strpos($file->getFileUri(), 'private://webform/') === 0) {
+  $is_webform_download = ($operation === 'download' && strpos($file->getFileUri(), 'private://webform/') === 0);
+
+  // Block access to temporary anonymous private file uploads
+  // only when an anonymous user is attempting to download the file.
+  // Links to anonymous file uploads are automatically suppressed.
+  // @see webform_preprocess_file_link()
+  // @see webform_file_download()
+  if ($is_webform_download
+    && $file->isTemporary()
+    && $file->getOwner() && $file->getOwner()->isAnonymous()
+    && \Drupal::routeMatch()->getRouteName() === 'system.files') {
     return AccessResult::forbidden();
   }
+
+  // Allow access to files associated with a webform submission.
+  // This prevent uploaded webform files from being lost when another user
+  // edits a submission with multiple file uploads.
+  // @see \Drupal\file\Element\ManagedFile::valueCallback
+  if ($is_webform_download && ManagedFile::accessFile($file, $account)) {
+    return AccessResult::allowed();
+  }
+
   return AccessResult::neutral();
 }
 
@@ -878,7 +902,7 @@ function webform_process_states(array &$elements, $key = '#attributes') {
 /******************************************************************************/
 
 /**
- * Implements hook_devel_generate_info_alter()
+ * Implements hook_devel_generate_info_alter().
  */
 function webform_devel_generate_info_alter(array &$generators) {
   if (!isset($generators['webform_submission'])) {
@@ -936,11 +960,11 @@ function webform_process_options(&$element, FormStateInterface $form_state, &$co
     foreach (Element::children($element) as $key) {
       $title = (string) $element[$key]['#title'];
       // Check for -- delimiter.
-      if (strpos($title, WebformOptionsHelper::DESCRIPTION_DELIMITER) === FALSE) {
+      if (!WebformOptionsHelper::hasOptionDescription($title)) {
         continue;
       }
 
-      list($title, $description) = explode(WebformOptionsHelper::DESCRIPTION_DELIMITER, $title);
+      list($title, $description) = WebformOptionsHelper::splitOption($title);
       $element[$key]['#title'] = $title;
       $element[$key]['#webform_element'] = TRUE;
       $element[$key][$description_property_name] = $description;
@@ -1018,19 +1042,19 @@ function webform_process_options(&$element, FormStateInterface $form_state, &$co
  * @param string $message
  *   The error message.
  * @param string $filename
- *   The filename that the error was raised in.
- * @param int $line
- *   The line number the error was raised at.
+ *   (optional) The filename that the error was raised in.
+ * @param string $line
+ *   (optional) The line number the error was raised at.
  * @param array $context
- *   An array that points to the active symbol table at the point the error
- *   occurred.
+ *   (optional) An array that points to the active symbol table at the point the
+ *   error occurred.
  *
  * @throws \ErrorException
  *   Throw ErrorException for E_RECOVERABLE_ERROR errors.
  *
  * @see \Drupal\webform\WebformEntityElementsValidator::validateRendering()
  */
-function _webform_entity_element_validate_rendering_error_handler($error_level, $message, $filename, $line, array $context) {
+function _webform_entity_element_validate_rendering_error_handler($error_level, $message, $filename = NULL, $line = NULL, $context = NULL) {
   // From: http://stackoverflow.com/questions/15461611/php-try-catch-not-catching-all-exceptions
   if (E_RECOVERABLE_ERROR === $error_level) {
     // Allow Drupal to still log the error but convert it to a warning.
diff --git a/web/modules/webform/webform.services.yml b/web/modules/webform/webform.services.yml
index e6bb3890be..3210cca967 100644
--- a/web/modules/webform/webform.services.yml
+++ b/web/modules/webform/webform.services.yml
@@ -57,7 +57,7 @@ services:
 
   webform.entity_reference_manager:
     class: Drupal\webform\WebformEntityReferenceManager
-    arguments: ['@current_route_match', '@current_user', '@user.data']
+    arguments: ['@current_route_match', '@current_user', '@user.data', '@module_handler', '@entity_type.manager']
 
   webform.help_manager:
     class: Drupal\webform\WebformHelpManager
diff --git a/web/modules/webform/webform.tokens.inc b/web/modules/webform/webform.tokens.inc
index 404adbef95..8cd23af764 100644
--- a/web/modules/webform/webform.tokens.inc
+++ b/web/modules/webform/webform.tokens.inc
@@ -82,6 +82,11 @@ function webform_token_info() {
     'description' => t('The URL that can used to update the webform submission. The webform must be configured to allow users to update a submission using a secure token.'),
     'type' => 'url',
   ];
+  $webform_submission['delete-url'] = [
+    'name' => t('Delete (token) URL'),
+    'description' => t('The URL that can used to delete the webform submission. The webform must be configured to allow users to delete a submission using a secure token.'),
+    'type' => 'url',
+  ];
   $webform_submission['langcode'] = [
     'name' => t('Langcode'),
     'description' => t('The language code of the webform submission.'),
@@ -103,12 +108,12 @@ function webform_token_info() {
     'description' => t('Is the webform submission in draft.'),
   ];
   $webform_submission['state'] = [
-    'name' => t('State'),
-    'description' => t('The state of the webform submission. (Unsaved, Draft, Completed, Updated, Locked, or Converted)'),
+    'name' => t('State (Name)'),
+    'description' => t('The state of the webform submission. (unsaved, draft, completed, updated, locked, or converted)'),
   ];
-  $webform_submission['state:raw'] = [
-    'name' => t('State (Raw value)'),
-    'description' => t('The state raw value untranslated of the webform submission. (unsaved, draft, completed, updated, locked, or converted)'),
+  $webform_submission['state:label'] = [
+    'name' => t('State (Label)'),
+    'description' => t('The state raw value untranslated of the webform submission. (Unsaved, Draft, Completed, Updated, Locked, or Converted)'),
   ];
   $webform_submission['label'] = [
     'name' => t('Label'),
@@ -538,11 +543,9 @@ function webform_tokens($type, $tokens, array $data, array $options, BubbleableM
           break;
 
         case 'view-url':
-          $replacements[$original] = $webform_submission->getTokenUrl('view')->toString();
-          break;
-
         case 'update-url':
-          $replacements[$original] = $webform_submission->getTokenUrl('update')->toString();
+        case 'delete-url':
+          $replacements[$original] = $webform_submission->getTokenUrl(str_replace('-url', '', $name))->toString();
           break;
 
         case 'token':
@@ -730,21 +733,21 @@ function webform_tokens($type, $tokens, array $data, array $options, BubbleableM
       $replacements += $token_service->generate('webform', $webform_tokens, ['webform' => $webform], $options, $bubbleable_metadata);
     }
     if (($source_entity_tokens = $token_service->findWithPrefix($tokens, 'source-entity')) && ($source_entity = $webform_submission->getSourceEntity(TRUE))) {
-      $replacements += $token_service->generate($source_entity->getEntityTypeId(), $source_entity_tokens, [$source_entity->getEntityTypeId() => $source_entity], $options, $bubbleable_metadata);
+      $type = $source_entity->getEntityType()->get('token_type') ?: $source_entity->getEntityTypeId();
+      $replacements += $token_service->generate($type, $source_entity_tokens, [$type => $source_entity], $options, $bubbleable_metadata);
     }
     if (($submitted_to_tokens = $token_service->findWithPrefix($tokens, 'submitted-to')) && ($submitted_to = $webform_submission->getSourceEntity(TRUE) ?: $webform_submission->getWebform())) {
-      $replacements += $token_service->generate($submitted_to->getEntityTypeId(), $submitted_to_tokens, [$submitted_to->getEntityTypeId() => $submitted_to], $options, $bubbleable_metadata);
+      $type = $submitted_to->getEntityType()->get('token_type') ?: $submitted_to->getEntityTypeId();
+      $replacements += $token_service->generate($type, $submitted_to_tokens, [$type => $submitted_to], $options, $bubbleable_metadata);
     }
-    foreach (['view-url', 'update-url', 'source-url'] as $token) {
+    foreach (['view-url', 'update-url', 'delete-url', 'source-url'] as $token) {
       if ($url_tokens = $token_service->findWithPrefix($tokens, $token)) {
         $url = NULL;
         switch ($token) {
           case 'view-url':
-            $url = $webform_submission->getTokenUrl('view');
-            break;
-
           case 'update-url':
-            $url = $webform_submission->getTokenUrl('update');
+          case 'delete-url':
+            $url = $webform_submission->getTokenUrl(str_replace('-url', '', $token));
             break;
 
           case 'source-url':
-- 
GitLab