From 7784f4c23d8da16ccdc4af416ba24a80e7edad3a Mon Sep 17 00:00:00 2001 From: Pantheon Automation Date: Tue, 17 Nov 2015 13:42:33 -0800 Subject: [PATCH] Update to Drupal 8.0-dev-2015-11-17. Commits through da81cd220, Tue Nov 17 15:53:49 2015 +0000, Issue #2617224 by Wim Leers: Move around/fix some documentation. --- .gitignore | 4 + .htaccess | 3 - composer.json | 2 +- composer.lock | 222 +- core/CHANGELOG.txt | 139 +- core/MAINTAINERS.txt | 1 + core/composer.json | 2 +- core/core.libraries.yml | 1 - core/core.services.yml | 8 +- core/includes/errors.inc | 12 +- core/includes/install.core.inc | 3 + core/includes/theme.inc | 2 +- core/includes/theme.maintenance.inc | 14 +- core/lib/Drupal.php | 18 +- .../Component/PhpStorage/FileStorage.php | 3 +- core/lib/Drupal/Core/Asset/AssetResolver.php | 27 +- core/lib/Drupal/Core/Cache/CacheCollector.php | 27 +- core/lib/Drupal/Core/Composer/Composer.php | 46 +- .../Drupal/Core/Config/ConfigInstaller.php | 62 +- .../Core/Config/Entity/ConfigEntityBase.php | 11 + .../Drupal/Core/Controller/ControllerBase.php | 24 + core/lib/Drupal/Core/Datetime/DateHelper.php | 16 +- .../DependencyInjection/ContainerBuilder.php | 27 - core/lib/Drupal/Core/DrupalKernel.php | 7 - .../Entity/Element/EntityAutocomplete.php | 66 +- core/lib/Drupal/Core/Entity/Entity.php | 41 +- .../Drupal/Core/Entity/EntityInterface.php | 66 +- .../SelectionInterface.php | 4 +- .../SelectionWithAutocreateInterface.php | 52 + .../Core/Entity/EntityTypeBundleInfo.php | 18 +- .../DefaultSelection.php | 36 +- .../Constraint/ValidReferenceConstraint.php | 18 +- .../ValidReferenceConstraintValidator.php | 133 +- .../Routing/DefaultHtmlRouteProvider.php | 69 +- core/lib/Drupal/Core/Entity/entity.api.php | 10 +- .../ContentControllerSubscriber.php | 48 - .../DefaultExceptionHtmlSubscriber.php | 7 +- ...lResponsePlaceholderStrategySubscriber.php | 4 - .../HtmlResponseSubscriber.php | 4 - .../Drupal/Core/Extension/ThemeHandler.php | 14 + .../Core/Extension/ThemeHandlerInterface.php | 14 + .../Field/EntityReferenceFieldItemList.php | 10 + .../Field/FieldType/EntityReferenceItem.php | 17 - .../Field/Plugin/Field/FieldType/UriItem.php | 14 + .../lib/Drupal/Core/Menu/LocalTaskManager.php | 4 +- core/lib/Drupal/Core/Menu/MenuLinkManager.php | 7 +- core/lib/Drupal/Core/Menu/MenuLinkTree.php | 1 + core/lib/Drupal/Core/Path/AliasStorage.php | 106 +- .../Core/Path/AliasStorageInterface.php | 20 +- .../OutboundPathProcessorInterface.php | 23 +- .../Core/Render/Element/RenderElement.php | 5 + .../Routing/Enhancer/FormRouteEnhancer.php | 33 + .../Enhancer/ParamConversionEnhancer.php | 8 +- .../lib/Drupal/Core/Routing/RouteProvider.php | 4 +- core/lib/Drupal/Core/Routing/UrlGenerator.php | 3 + .../Core/Routing/UrlGeneratorInterface.php | 4 + .../ReverseProxyMiddleware.php | 29 +- .../StringTranslation/TranslationManager.php | 5 + core/lib/Drupal/Core/Template/Attribute.php | 7 +- .../Theme/MissingThemeDependencyException.php | 47 + .../Drupal/Core/Theme/ThemeInitialization.php | 10 + .../Theme/ThemeInitializationInterface.php | 7 +- .../Core/Utility/LinkGeneratorInterface.php | 7 + core/misc/ajax.js | 27 + core/misc/drupalSettingsLoader.js | 3 +- core/misc/progress.js | 1 + core/misc/tabledrag.js | 30 +- .../Migrate/MigrateAggregatorStubTest.php | 63 + core/modules/block/block.module | 5 +- .../block/src/Controller/BlockController.php | 5 + .../src/Controller/BlockListController.php | 33 + .../src/Plugin/Derivative/ThemeLocalTask.php | 2 +- .../block/src/Tests/BlockHiddenRegionTest.php | 4 +- core/modules/block/src/Tests/BlockTest.php | 4 +- core/modules/block/src/Tests/BlockUiTest.php | 26 + .../src/Tests/NewDefaultThemeBlocksTest.php | 8 + .../src/Unit/Menu/BlockLocalTasksTest.php | 13 +- .../block_content/block_content.routing.yml | 3 + .../src/Tests/BlockContentTypeTest.php | 8 +- .../Migrate/MigrateBlockContentStubTest.php | 63 + core/modules/book/book.routing.yml | 3 + .../ckeditor/js/plugins/drupallink/plugin.js | 92 +- core/modules/comment/comment.routing.yml | 5 + .../CommentSelection.php | 28 + .../migrate/destination/EntityComment.php | 37 +- .../src/Tests/CommentValidationTest.php | 2 +- .../Tests/Migrate/MigrateCommentStubTest.php | 78 + .../Tests/Migrate/d6/MigrateCommentTest.php | 8 +- .../Tests/ConfigImportInstallProfileTest.php | 1 + .../ConfigInstallProfileOverrideTest.php | 4 +- ...figInstallProfileUnmetDependenciesTest.php | 1 + core/modules/contact/contact.routing.yml | 1 + .../content_translation.install | 16 + .../content_translation.module | 8 +- .../src/ContentTranslationHandler.php | 4 +- .../ContentTranslationController.php | 6 +- .../ContentTranslationRouteSubscriber.php | 6 +- .../Tests/ContentTranslationEnableTest.php | 18 +- .../Tests/ContentTranslationUITestBase.php | 19 +- .../Tests/ContentTranslationWorkflowsTest.php | 8 +- core/modules/editor/editor.module | 6 +- core/modules/editor/src/Annotation/Editor.php | 32 + core/modules/editor/src/EditorController.php | 3 + core/modules/editor/src/Plugin/EditorBase.php | 26 +- .../editor/src/Tests/EditorFileUsageTest.php | 121 +- .../migrate/source/d6/FieldInstance.php | 2 +- .../EntityReferenceItemTest.php | 114 +- .../field/src/Tests/Uri/UriItemTest.php | 5 + .../config/schema/file.destination.schema.yml | 3 + core/modules/file/file.field.inc | 21 - core/modules/file/file.js | 4 +- core/modules/file/file.module | 4 - .../file/migration_templates/d6_file.yml | 1 + .../file/migration_templates/d7_file.yml | 1 + .../FileSelection.php | 35 +- .../src/Plugin/Field/FieldType/FileItem.php | 2 +- .../Plugin/Field/FieldWidget/FileWidget.php | 19 +- .../Constraint/FileValidationConstraint.php | 22 + .../FileValidationConstraintValidator.php | 34 + .../Plugin/migrate/destination/EntityFile.php | 46 +- .../src/Plugin/migrate/process/d6/FileUri.php | 5 + .../file/src/Tests/FileFieldValidateTest.php | 31 + .../src/Tests/Migrate/MigrateFileStubTest.php | 42 + .../file/templates/file-widget.html.twig | 17 - .../src/Kernel/FileItemValidationTest.php | 119 + core/modules/history/history.routing.yml | 1 + .../views/filter/HistoryUserTimestamp.php | 3 +- .../src/Tests/Views/HistoryTimestampTest.php | 9 + .../src/Plugin/Field/FieldType/ImageItem.php | 6 +- core/modules/language/language.install | 13 + core/modules/language/language.services.yml | 2 +- .../src/EventSubscriber/ConfigSubscriber.php | 40 +- .../src/Form/ContentLanguageSettingsForm.php | 2 +- .../src/HttpKernel/PathProcessorLanguage.php | 32 +- .../language/src/LanguageServiceProvider.php | 4 +- .../LanguageNegotiationContentEntity.php | 294 +++ .../src/Tests/EntityUrlLanguageTest.php | 116 +- .../LanguageNegotiationContentEntityTest.php | 182 ++ .../LanguageSelectorTranslatableTest.php | 2 +- .../LanguageUILanguageNegotiationTest.php | 7 +- ...guage-negotiation-configure-form.html.twig | 39 +- .../src/Plugin/Field/FieldType/LinkItem.php | 37 +- ...NotExistingInternalConstraintValidator.php | 10 + core/modules/link/src/Tests/LinkFieldTest.php | 4 +- core/modules/link/src/Tests/LinkItemTest.php | 41 +- .../LocaleConfigTranslationImportTest.php | 4 + .../src/Tests/LocalePluralFormatTest.php | 65 + .../MigrateMenuLinkContentStubTest.php | 42 + .../modules/migrate/src/MigrateExecutable.php | 4 +- .../src/Plugin/MigrateSourceInterface.php | 8 +- .../src/Plugin/migrate/destination/Entity.php | 13 - .../migrate/destination/EntityContentBase.php | 66 +- .../migrate/src/Plugin/migrate/id_map/Sql.php | 1 + .../migrate/source/SourcePluginBase.php | 2 +- core/modules/migrate/src/Row.php | 13 +- .../tests/src/Unit/MigrateSourceTest.php | 188 ++ .../tests/src/Unit/MigrateTestCase.php | 5 + .../destination/EntityContentBaseTest.php | 118 + .../Unit/destination/EntityRevisionTest.php | 10 +- .../src/Tests/StubTestTrait.php | 80 + .../migrate_drupal/tests/fixtures/drupal7.php | 20 + core/modules/node/node.module | 8 + core/modules/node/node.routing.yml | 5 + .../node/src/Controller/NodeController.php | 2 +- .../node/src/Entity/NodeRouteProvider.php | 3 + .../NodeSelection.php | 28 + .../node/src/Plugin/views/wizard/Node.php | 4 +- .../src/Tests/Migrate/MigrateNodeStubTest.php | 48 + .../src/Tests/NodeAccessAutoBubblingTest.php | 72 + .../node/src/Tests/NodeRevisionsTest.php | 27 + .../node/src/Tests/NodeTranslationUITest.php | 3 +- core/modules/node/src/Tests/NodeTypeTest.php | 6 + .../node_access_test_auto_bubbling.info.yml | 6 + ...node_access_test_auto_bubbling.routing.yml | 6 + .../NodeAccessTestAutoBubblingController.php | 61 + core/modules/path/src/Form/PathFormBase.php | 16 +- core/modules/path/src/Tests/PathAliasTest.php | 62 +- .../src/Plugin/views/display/RestExport.php | 2 +- .../src/Tests/Views/StyleSerializerTest.php | 62 +- ...ew.test_serializer_node_exposed_filter.yml | 172 ++ .../d7_search_settings.yml | 8 + .../Migrate/d7/MigrateSearchSettingsTest.php | 1 + .../src/Tests/NormalizerTestBase.php | 8 +- core/modules/shortcut/shortcut.routing.yml | 5 + .../Tests/Migrate/MigrateShortcutStubTest.php | 44 + core/modules/simpletest/simpletest.module | 19 +- core/modules/simpletest/src/TestBase.php | 38 +- .../system/src/Controller/ThemeController.php | 15 +- .../system/src/Form/ThemeSettingsForm.php | 8 +- .../src/Plugin/Derivative/ThemeLocalTask.php | 2 +- .../system/src/SystemConfigSubscriber.php | 32 + .../EntityAutocompleteElementFormTest.php | 1 + .../src/Tests/Entity/EntityFieldTest.php | 8 +- .../Tests/Entity/EntityReferenceFieldTest.php | 2 +- .../src/Tests/File/HtaccessUnitTest.php | 9 +- .../Tests/Installer/StandardInstallerTest.php | 13 + .../system/src/Tests/Menu/MenuRouterTest.php | 1 + .../src/Tests/Routing/RouteProviderTest.php | 12 +- .../System/DefaultMobileMetaTagsTest.php | 5 - .../src/Tests/System/ErrorHandlerTest.php | 1 + .../system/src/Tests/System/ThemeTest.php | 44 +- .../Tests/System/UncaughtExceptionTest.php | 8 +- .../Tests/Theme/StableLibraryOverrideTest.php | 185 ++ .../UpdatePathRC1TestBaseFilledTest.php | 3 +- .../Update/UpdatePathRC1TestBaseTest.php | 9 +- core/modules/system/system.install | 47 +- core/modules/system/system.services.yml | 1 + .../block--local-actions-block.html.twig | 2 +- .../update/drupal-8-rc1.bare.standard.php.gz | Bin 0 -> 119576 bytes .../drupal-8-rc1.filled.standard.php.gz | Bin 0 -> 623241 bytes .../test_page_test/src/Controller/Test.php | 11 + .../test_page_test/test_page_test.routing.yml | 8 + .../tests/src/Unit/Menu/MenuLinkTreeTest.php | 1 + .../src/Unit/Menu/SystemLocalTasksTest.php | 4 + .../test_basetheme/test_basetheme.info.yml | 2 + .../themes/test_theme/test_theme.info.yml | 4 +- .../d6_vocabulary_field_instance.yml | 1 + .../destination/EntityTaxonomyTerm.php | 30 - .../Migrate/MigrateTaxonomyTermStubTest.php | 118 + .../d6/MigrateVocabularyFieldInstanceTest.php | 2 + core/modules/taxonomy/taxonomy.routing.yml | 3 + .../toolbar/js/views/ToolbarVisualView.js | 2 +- .../toolbar/src/Menu/ToolbarMenuLinkTree.php | 1 + core/modules/tracker/tracker.routing.yml | 2 + ...pdate_settings.yml => update_settings.yml} | 3 +- .../Migrate/d6/MigrateUpdateConfigsTest.php | 2 +- .../user/config/schema/user.source.schema.yml | 4 +- .../user/src/Entity/UserRouteProvider.php | 3 + .../UserSelection.php | 36 + .../Plugin/migrate/destination/EntityUser.php | 38 +- .../Migrate/MigrateUserAdminPassTest.php | 116 + .../src/Tests/Migrate/MigrateUserStubTest.php | 43 + .../src/Tests/Migrate/d6/MigrateUserTest.php | 7 +- .../user/src/Tests/UserValidationTest.php | 2 +- core/modules/user/user.routing.yml | 1 + .../src/Plugin/views/argument_default/Raw.php | 6 +- .../views/src/Tests/DefaultViewsTest.php | 7 + .../views/src/Tests/Plugin/StyleGridTest.php | 2 +- .../src/Tests/Plugin/StyleSummaryTest.php | 77 + .../views/src/Tests/Plugin/StyleTestBase.php | 2 +- .../views/src/Tests/Wizard/BasicTest.php | 5 +- core/modules/views/src/ViewExecutable.php | 14 +- .../test_views/views.view.test_summary.yml | 127 + .../argument_default/QueryParameterTest.php | 50 +- .../Unit/Plugin/argument_default/RawTest.php | 36 +- .../tests/src/Unit/ViewExecutableTest.php | 96 + core/modules/views_ui/src/ViewPreviewForm.php | 1 + core/modules/views_ui/src/ViewUI.php | 14 + .../install/block.block.classy_page_title.yml | 17 - core/scripts/run-tests.sh | 252 +- .../Core/Cache/CacheCollectorTest.php | 79 + .../Core/Path/AliasStorageTest.php | 86 + .../Core/Theme/MaintenanceThemeTest.php | 43 + .../Core/Theme/StableTemplateOverrideTest.php | 108 + .../RedirectOnExceptionTest.php | 50 + .../Tests/Core/Asset/AssetResolverTest.php | 168 ++ .../Core/Asset/LibraryDiscoveryParserTest.php | 48 +- .../Tests/Core/Common/AttributesTest.php | 16 + .../Tests/Core/Datetime/DateHelperTest.php | 112 + core/tests/Drupal/Tests/Core/DrupalTest.php | 10 + .../Enhancer/ParamConversionEnhancerTest.php | 8 +- .../Tests/Core/Entity/EntityLinkTest.php | 62 +- .../Core/Entity/EntityTypeBundleInfoTest.php | 53 +- .../Tests/Core/Entity/EntityUrlTest.php | 126 +- .../Routing/DefaultHtmlRouteProviderTest.php | 155 ++ .../Core/PathProcessor/PathProcessorTest.php | 7 +- .../TranslationManagerTest.php | 7 +- core/themes/classy/classy.info.yml | 2 +- .../block--local-actions-block.html.twig | 2 +- .../block/block--local-tasks-block.html.twig | 2 +- .../content-edit/file-widget.html.twig | 16 - .../classy/templates/layout/html.html.twig | 2 +- core/themes/stable/css/block/block.admin.css | 42 + .../stable/css/ckeditor/ckeditor-iframe.css | 23 + .../stable/css/ckeditor/ckeditor.admin.css | 328 +++ core/themes/stable/css/ckeditor/ckeditor.css | 39 + .../ckeditor.drupalimagecaption.css | 21 + core/themes/stable/css/color/color.admin.css | 150 ++ .../config_translation.admin.css | 24 + .../content_translation.admin.css | 33 + .../css/contextual/contextual.icons.theme.css | 39 + .../css/contextual/contextual.module.css | 18 + .../css/contextual/contextual.theme.css | 112 + .../css/contextual/contextual.toolbar.css | 24 + .../stable/css/core/dropbutton/dropbutton.css | 164 ++ core/themes/stable/css/core/print.css | 25 + core/themes/stable/css/core/vertical-tabs.css | 69 + core/themes/stable/css/dblog/dblog.module.css | 37 + .../stable/css/field_ui/field_ui.admin.css | 53 + core/themes/stable/css/file/file.admin.css | 18 + .../themes/stable/css/filter/filter.admin.css | 81 + .../stable/css/filter/filter.caption.css | 30 + core/themes/stable/css/image/image.admin.css | 74 + .../stable/css/language/language.admin.css | 11 + .../themes/stable/css/locale/locale.admin.css | 135 ++ .../stable/css/menu_ui/menu_ui.admin.css | 6 + core/themes/stable/css/node/node.admin.css | 11 + core/themes/stable/css/node/node.module.css | 76 + core/themes/stable/css/node/node.preview.css | 22 + .../css/quickedit/quickedit.icons.theme.css | 74 + .../stable/css/quickedit/quickedit.module.css | 123 + .../stable/css/quickedit/quickedit.theme.css | 254 ++ .../css/shortcut/shortcut.icons.theme.css | 40 + .../stable/css/shortcut/shortcut.theme.css | 62 + .../css/simpletest/simpletest.module.css | 93 + .../components/ajax-progress.module.css | 49 + .../css/system/components/align.module.css | 32 + .../autocomplete-loading.module.css | 22 + .../css/system/components/clearfix.module.css | 15 + .../components/container-inline.module.css | 13 + .../css/system/components/details.module.css | 10 + .../system/components/fieldgroup.module.css | 9 + .../css/system/components/hidden.module.css | 53 + .../system/components/item-list.module.css | 19 + .../css/system/components/js.module.css | 22 + .../css/system/components/nowrap.module.css | 8 + .../components/position-container.module.css | 8 + .../css/system/components/progress.module.css | 51 + .../components/reset-appearance.module.css | 15 + .../css/system/components/resize.module.css | 21 + .../components/sticky-header.module.css | 13 + .../system/components/tabledrag.module.css | 88 + .../system/components/tablesort.module.css | 19 + .../system/components/tree-child.module.css | 18 + .../themes/stable/css/system/system.admin.css | 389 +++ core/themes/stable/css/system/system.diff.css | 42 + .../stable/css/system/system.maintenance.css | 56 + .../stable/css/taxonomy/taxonomy.theme.css | 10 + .../css/toolbar/toolbar.icons.theme.css | 300 +++ .../stable/css/toolbar/toolbar.menu.css | 103 + .../stable/css/toolbar/toolbar.module.css | 260 ++ .../stable/css/toolbar/toolbar.theme.css | 168 ++ core/themes/stable/css/tour/tour.module.css | 142 ++ .../stable/css/update/update.admin.theme.css | 63 + core/themes/stable/css/user/user.admin.css | 22 + .../stable/css/user/user.icons.admin.css | 15 + core/themes/stable/css/user/user.module.css | 21 + core/themes/stable/css/views/views.module.css | 19 + .../stable/css/views_ui/views_ui.admin.css | 208 ++ .../css/views_ui/views_ui.admin.theme.css | 838 +++++++ .../css/views_ui/views_ui.contextual.css | 57 + core/themes/stable/images/color/hook-rtl.png | Bin 0 -> 116 bytes core/themes/stable/images/color/hook.png | Bin 0 -> 116 bytes core/themes/stable/images/color/lock.png | Bin 0 -> 230 bytes core/themes/stable/images/core/druplicon.png | Bin 0 -> 3905 bytes core/themes/stable/images/core/feed.svg | 8 + core/themes/stable/images/core/help.png | Bin 0 -> 294 bytes .../images/core/icons/000000/barchart.svg | 1 + .../images/core/icons/000000/chevron-left.svg | 1 + .../core/icons/000000/chevron-right.svg | 2 + .../stable/images/core/icons/000000/ex.svg | 1 + .../stable/images/core/icons/000000/file.svg | 1 + .../stable/images/core/icons/000000/move.svg | 1 + .../images/core/icons/000000/orgchart.svg | 1 + .../images/core/icons/000000/paintbrush.svg | 1 + .../images/core/icons/000000/people.svg | 1 + .../images/core/icons/000000/puzzlepiece.svg | 1 + .../core/icons/000000/questionmark-disc.svg | 1 + .../images/core/icons/000000/wrench.svg | 1 + .../images/core/icons/004875/twistie-down.svg | 1 + .../images/core/icons/004875/twistie-up.svg | 1 + .../images/core/icons/0074bd/chevron-left.svg | 1 + .../core/icons/0074bd/chevron-right.svg | 1 + .../images/core/icons/008ee6/twistie-down.svg | 1 + .../images/core/icons/008ee6/twistie-up.svg | 1 + .../images/core/icons/333333/caret-down.svg | 1 + .../stable/images/core/icons/424242/loupe.svg | 1 + .../stable/images/core/icons/505050/loupe.svg | 1 + .../core/icons/5181c6/chevron-disc-down.svg | 1 + .../core/icons/5181c6/chevron-disc-up.svg | 1 + .../images/core/icons/5181c6/pencil.svg | 1 + .../images/core/icons/5181c6/twistie-down.svg | 1 + .../images/core/icons/5181c6/twistie-up.svg | 1 + .../stable/images/core/icons/73b355/check.svg | 1 + .../images/core/icons/787878/barchart.svg | 1 + .../core/icons/787878/chevron-disc-down.svg | 1 + .../core/icons/787878/chevron-disc-up.svg | 1 + .../stable/images/core/icons/787878/cog.svg | 1 + .../stable/images/core/icons/787878/ex.svg | 1 + .../stable/images/core/icons/787878/file.svg | 1 + .../stable/images/core/icons/787878/key.svg | 1 + .../stable/images/core/icons/787878/move.svg | 1 + .../images/core/icons/787878/orgchart.svg | 1 + .../images/core/icons/787878/paintbrush.svg | 1 + .../images/core/icons/787878/pencil.svg | 1 + .../images/core/icons/787878/people.svg | 1 + .../images/core/icons/787878/push-left.svg | 1 + .../images/core/icons/787878/push-right.svg | 1 + .../images/core/icons/787878/push-up.svg | 1 + .../images/core/icons/787878/puzzlepiece.svg | 1 + .../core/icons/787878/questionmark-disc.svg | 1 + .../images/core/icons/787878/twistie-down.svg | 1 + .../images/core/icons/787878/twistie-up.svg | 1 + .../images/core/icons/787878/wrench.svg | 1 + .../core/icons/bebebe/chevron-disc-left.svg | 1 + .../core/icons/bebebe/chevron-disc-right.svg | 1 + .../stable/images/core/icons/bebebe/cog.svg | 1 + .../stable/images/core/icons/bebebe/ex.svg | 1 + .../images/core/icons/bebebe/hamburger.svg | 1 + .../stable/images/core/icons/bebebe/house.svg | 1 + .../stable/images/core/icons/bebebe/key.svg | 1 + .../stable/images/core/icons/bebebe/move.svg | 1 + .../images/core/icons/bebebe/pencil.svg | 1 + .../images/core/icons/bebebe/person.svg | 1 + .../images/core/icons/bebebe/push-left.svg | 1 + .../images/core/icons/bebebe/push-right.svg | 1 + .../images/core/icons/bebebe/push-up.svg | 1 + .../core/icons/bebebe/questionmark-disc.svg | 1 + .../images/core/icons/bebebe/star-empty.svg | 1 + .../stable/images/core/icons/bebebe/star.svg | 1 + .../images/core/icons/e29700/warning.svg | 1 + .../stable/images/core/icons/e32700/error.svg | 1 + .../images/core/icons/ee0000/required.svg | 1 + .../stable/images/core/icons/ffffff/ex.svg | 1 + .../images/core/icons/ffffff/hamburger.svg | 1 + .../stable/images/core/icons/ffffff/house.svg | 1 + .../images/core/icons/ffffff/pencil.svg | 1 + .../images/core/icons/ffffff/person.svg | 1 + .../core/icons/ffffff/questionmark-disc.svg | 1 + .../images/core/icons/ffffff/star-empty.svg | 1 + .../stable/images/core/icons/ffffff/star.svg | 1 + .../images/core/icons/ffffff/twistie-down.svg | 1 + .../images/core/icons/ffffff/twistie-up.svg | 1 + .../stable/images/core/icons/license.md | 9 + .../stable/images/core/loading-small.gif | Bin 0 -> 2112 bytes core/themes/stable/images/core/loading.gif | Bin 0 -> 6733 bytes .../stable/images/core/menu-collapsed-rtl.png | Bin 0 -> 107 bytes .../stable/images/core/menu-collapsed.png | Bin 0 -> 105 bytes .../stable/images/core/menu-expanded.png | Bin 0 -> 106 bytes core/themes/stable/images/core/menu-leaf.png | Bin 0 -> 126 bytes .../stable/images/core/throbber-active.gif | Bin 0 -> 230 bytes .../stable/images/core/throbber-inactive.png | Bin 0 -> 356 bytes .../themes/stable/images/core/tree-bottom.png | Bin 0 -> 129 bytes core/themes/stable/images/core/tree.png | Bin 0 -> 130 bytes .../stable/images/quickedit/icon-throbber.gif | Bin 0 -> 1032 bytes .../stable/images/shortcut/favstar-rtl.svg | 19 + .../themes/stable/images/shortcut/favstar.svg | 1 + .../themes/stable/images/views_ui/sprites.png | Bin 0 -> 1777 bytes core/themes/stable/stable.info.yml | 230 +- .../admin/admin-block-content.html.twig | 32 + .../templates/admin/admin-block.html.twig | 24 + .../templates/admin/admin-page.html.twig | 25 + .../admin/authorize-report.html.twig | 21 + .../admin/block-content-add-list.html.twig | 22 + .../templates/admin/block-list.html.twig | 21 + .../admin/ckeditor-settings-toolbar.html.twig | 73 + .../admin/color-scheme-form.html.twig | 24 + ..._translation_manage_form_element.html.twig | 22 + .../templates/admin/field-ui-table.html.twig | 45 + .../templates/admin/image-anchor.html.twig | 12 + .../admin/image-crop-summary.html.twig | 30 + .../admin/image-resize-summary.html.twig | 28 + .../admin/image-rotate-summary.html.twig | 25 + .../admin/image-scale-summary.html.twig | 35 + .../admin/image-style-preview.html.twig | 55 + .../templates/admin/indentation.html.twig | 12 + .../language-content-settings-table.html.twig | 14 + ...guage-negotiation-configure-form.html.twig | 38 + .../locale-translation-last-check.html.twig | 23 + .../locale-translation-update-info.html.twig | 57 + .../admin/maintenance-task-list.html.twig | 23 + .../admin/simpletest-result-summary.html.twig | 20 + .../templates/admin/status-report.html.twig | 39 + .../admin/system-admin-index.html.twig | 25 + .../admin/system-config-form.html.twig | 15 + .../admin/system-modules-details.html.twig | 74 + .../admin/system-modules-uninstall.html.twig | 73 + .../admin/system-themes-page.html.twig | 74 + .../admin/tablesort-indicator.html.twig | 26 + .../admin/update-last-check.html.twig | 21 + .../admin/update-project-status.html.twig | 104 + .../templates/admin/update-report.html.twig | 23 + .../templates/admin/update-version.html.twig | 36 + ...views-ui-build-group-filter-form.html.twig | 55 + .../admin/views-ui-container.html.twig | 13 + .../views-ui-display-tab-bucket.html.twig | 33 + .../views-ui-display-tab-setting.html.twig | 35 + .../views-ui-expose-filter-form.html.twig | 65 + .../views-ui-rearrange-filter-form.html.twig | 25 + .../views-ui-style-plugin-table.html.twig | 16 + .../admin/views-ui-view-info.html.twig | 26 + .../views-ui-view-preview-section.html.twig | 18 + .../block--local-actions-block.html.twig | 12 + .../block--system-branding-block.html.twig | 26 + .../block/block--system-menu-block.html.twig | 48 + .../block--system-messages-block.html.twig | 13 + .../stable/templates/block/block.html.twig | 37 + .../content-edit/file-managed-file.html.twig | 21 + .../content-edit/file-upload-help.html.twig | 12 + .../file-widget-multiple.html.twig | 14 + .../content-edit/filter-caption.html.twig | 18 + .../content-edit/filter-guidelines.html.twig | 23 + .../content-edit/filter-tips.html.twig | 44 + .../content-edit/image-widget.html.twig | 17 + .../content-edit/node-add-list.html.twig | 30 + .../content-edit/node-edit-form.html.twig | 18 + .../text-format-wrapper.html.twig | 21 + .../content/aggregator-item.html.twig | 24 + .../content/book-node-export-html.html.twig | 20 + .../templates/content/comment.html.twig | 100 + .../stable/templates/content/mark.html.twig | 20 + .../stable/templates/content/node.html.twig | 90 + .../templates/content/page-title.html.twig | 21 + .../templates/content/search-result.html.twig | 69 + .../templates/content/taxonomy-term.html.twig | 33 + .../dataset/aggregator-feed.html.twig | 25 + .../templates/dataset/forum-icon.html.twig | 24 + .../templates/dataset/forum-list.html.twig | 75 + .../stable/templates/dataset/forums.html.twig | 21 + .../templates/dataset/item-list.html.twig | 39 + .../stable/templates/dataset/table.html.twig | 103 + .../templates/field/field--comment.html.twig | 43 + .../field/field--node--created.html.twig | 26 + .../field/field--node--title.html.twig | 26 + .../field/field--node--uid.html.twig | 26 + .../stable/templates/field/field.html.twig | 65 + .../templates/field/file-link.html.twig | 13 + .../templates/field/image-formatter.html.twig | 18 + .../templates/field/image-style.html.twig | 18 + .../stable/templates/field/image.html.twig | 13 + .../link-formatter-link-separate.html.twig | 18 + .../responsive-image-formatter.html.twig | 17 + .../field/responsive-image.html.twig | 34 + .../stable/templates/field/time.html.twig | 22 + .../templates/form/checkboxes.html.twig | 15 + .../templates/form/confirm-form.html.twig | 13 + .../stable/templates/form/container.html.twig | 26 + .../templates/form/datetime-form.html.twig | 15 + .../templates/form/datetime-wrapper.html.twig | 31 + .../stable/templates/form/details.html.twig | 31 + .../form/dropbutton-wrapper.html.twig | 21 + .../form/field-multiple-value-form.html.twig | 36 + .../stable/templates/form/fieldset.html.twig | 60 + .../form/form-element-label.html.twig | 25 + .../templates/form/form-element.html.twig | 94 + .../stable/templates/form/form.html.twig | 15 + .../stable/templates/form/input.html.twig | 13 + .../stable/templates/form/radios.html.twig | 13 + .../stable/templates/form/select.html.twig | 27 + .../stable/templates/form/textarea.html.twig | 18 + .../layout/book-export-html.html.twig | 45 + .../stable/templates/layout/html.html.twig | 43 + .../templates/layout/install-page.html.twig | 53 + .../layout/maintenance-page.html.twig | 58 + .../stable/templates/layout/page.html.twig | 93 + .../stable/templates/layout/region.html.twig | 19 + .../stable/templates/misc/feed-icon.html.twig | 15 + .../templates/misc/progress-bar.html.twig | 21 + .../templates/misc/rdf-metadata.html.twig | 20 + .../templates/misc/rdf-wrapper.html.twig | 11 + .../templates/misc/status-messages.html.twig | 47 + .../navigation/book-all-books-block.html.twig | 22 + .../navigation/book-navigation.html.twig | 55 + .../templates/navigation/book-tree.html.twig | 47 + .../templates/navigation/breadcrumb.html.twig | 25 + .../templates/navigation/links.html.twig | 56 + .../navigation/menu--toolbar.html.twig | 55 + .../navigation/menu-local-action.html.twig | 13 + .../navigation/menu-local-task.html.twig | 17 + .../navigation/menu-local-tasks.html.twig | 23 + .../templates/navigation/menu.html.twig | 47 + .../templates/navigation/pager.html.twig | 98 + .../templates/navigation/toolbar.html.twig | 46 + .../navigation/vertical-tabs.html.twig | 13 + .../templates/user/forum-submitted.html.twig | 21 + .../stable/templates/user/user.html.twig | 23 + .../stable/templates/user/username.html.twig | 23 + .../views/views-exposed-form.html.twig | 19 + .../views/views-mini-pager.html.twig | 41 + .../views/views-view-field.html.twig | 21 + .../views/views-view-fields.html.twig | 52 + .../templates/views/views-view-grid.html.twig | 76 + .../views/views-view-grouping.html.twig | 18 + .../templates/views/views-view-list.html.twig | 36 + .../views/views-view-mapping-test.html.twig | 12 + .../templates/views/views-view-opml.html.twig | 23 + .../views/views-view-row-opml.html.twig | 12 + .../views/views-view-row-rss.html.twig | 28 + .../templates/views/views-view-rss.html.twig | 28 + .../views-view-summary-unformatted.html.twig | 31 + .../views/views-view-summary.html.twig | 29 + .../views/views-view-table.html.twig | 124 + .../views/views-view-unformatted.html.twig | 30 + .../templates/views/views-view.html.twig | 66 + sites/default/default.settings.php | 17 +- sites/default/settings.php | 29 +- vendor/.htaccess | 3 +- vendor/composer/installed.json | 2142 ++++++++--------- vendor/symfony/browser-kit/Client.php | 43 +- vendor/symfony/browser-kit/Cookie.php | 26 - vendor/symfony/browser-kit/CookieJar.php | 10 - vendor/symfony/browser-kit/README.md | 2 +- vendor/symfony/browser-kit/Request.php | 18 - vendor/symfony/browser-kit/Response.php | 10 - vendor/symfony/browser-kit/composer.json | 3 +- .../symfony/class-loader/ApcClassLoader.php | 4 - .../class-loader/ApcUniversalClassLoader.php | 4 - .../class-loader/ClassCollectionLoader.php | 2 +- vendor/symfony/class-loader/ClassLoader.php | 14 +- .../symfony/class-loader/DebugClassLoader.php | 4 - .../class-loader/UniversalClassLoader.php | 16 - .../class-loader/XcacheClassLoader.php | 4 - vendor/symfony/class-loader/composer.json | 1 - vendor/symfony/console/Application.php | 40 - vendor/symfony/console/Command/Command.php | 49 +- .../Descriptor/ApplicationDescription.php | 8 +- .../console/Formatter/OutputFormatter.php | 16 - .../Formatter/OutputFormatterInterface.php | 14 - .../Formatter/OutputFormatterStyle.php | 10 - .../OutputFormatterStyleInterface.php | 8 - .../console/Helper/HelperInterface.php | 8 - vendor/symfony/console/Helper/ProgressBar.php | 44 +- vendor/symfony/console/Input/ArgvInput.php | 4 - vendor/symfony/console/Input/ArrayInput.php | 4 - vendor/symfony/console/Input/Input.php | 11 +- .../symfony/console/Input/InputArgument.php | 4 - .../symfony/console/Input/InputDefinition.php | 30 - vendor/symfony/console/Input/InputOption.php | 4 - vendor/symfony/console/Input/StringInput.php | 4 - .../symfony/console/Output/ConsoleOutput.php | 12 +- vendor/symfony/console/Output/NullOutput.php | 2 - vendor/symfony/console/Output/Output.php | 4 - .../console/Output/OutputInterface.php | 18 - .../symfony/console/Output/StreamOutput.php | 8 +- vendor/symfony/console/Question/Question.php | 4 +- vendor/symfony/console/Style/SymfonyStyle.php | 2 +- vendor/symfony/console/composer.json | 1 - vendor/symfony/css-selector/CssSelector.php | 4 - vendor/symfony/css-selector/composer.json | 3 - vendor/symfony/debug/DebugClassLoader.php | 4 - vendor/symfony/debug/composer.json | 1 - vendor/symfony/dependency-injection/Alias.php | 11 - .../Compiler/CheckReferenceValidityPass.php | 1 - .../Compiler/Compiler.php | 10 - .../Compiler/CompilerPassInterface.php | 4 - .../Compiler/ExtensionCompilerPass.php | 9 + .../Compiler/PassConfig.php | 30 - .../dependency-injection/Container.php | 32 - .../dependency-injection/ContainerAware.php | 6 - .../ContainerAwareInterface.php | 4 - .../dependency-injection/ContainerBuilder.php | 80 +- .../ContainerInterface.php | 24 - .../dependency-injection/Definition.php | 89 - .../DefinitionDecorator.php | 27 - .../dependency-injection/Dumper/Dumper.php | 4 - .../Dumper/DumperInterface.php | 4 - .../dependency-injection/Dumper/PhpDumper.php | 6 - .../dependency-injection/Dumper/XmlDumper.php | 4 - .../Dumper/YamlDumper.php | 10 +- .../Extension/ExtensionInterface.php | 10 - .../dependency-injection/Parameter.php | 2 - .../ParameterBag/FrozenParameterBag.php | 12 - .../ParameterBag/ParameterBag.php | 18 - .../ParameterBag/ParameterBagInterface.php | 14 - .../dependency-injection/Reference.php | 2 - vendor/symfony/dependency-injection/Scope.php | 11 - .../dependency-injection/ScopeInterface.php | 8 - .../TaggedContainerInterface.php | 4 - .../dependency-injection/composer.json | 1 - vendor/symfony/dom-crawler/Crawler.php | 111 +- .../dom-crawler/Field/ChoiceFormField.php | 8 - .../dom-crawler/Field/FileFormField.php | 4 - .../symfony/dom-crawler/Field/FormField.php | 2 - .../dom-crawler/Field/InputFormField.php | 2 - .../dom-crawler/Field/TextareaFormField.php | 2 - vendor/symfony/dom-crawler/Form.php | 28 - vendor/symfony/dom-crawler/Link.php | 8 - vendor/symfony/dom-crawler/composer.json | 1 - vendor/symfony/event-dispatcher/Event.php | 14 - .../event-dispatcher/EventDispatcher.php | 2 - .../EventDispatcherInterface.php | 8 - .../EventSubscriberInterface.php | 4 - vendor/symfony/event-dispatcher/composer.json | 1 - vendor/symfony/http-foundation/Cookie.php | 20 - vendor/symfony/http-foundation/File/File.php | 10 - .../http-foundation/File/UploadedFile.php | 16 - vendor/symfony/http-foundation/FileBag.php | 10 - vendor/symfony/http-foundation/HeaderBag.php | 24 - vendor/symfony/http-foundation/IpUtils.php | 13 +- .../symfony/http-foundation/ParameterBag.php | 28 - .../http-foundation/RedirectResponse.php | 4 - vendor/symfony/http-foundation/Request.php | 102 +- .../http-foundation/RequestMatcher.php | 4 - .../RequestMatcherInterface.php | 4 - vendor/symfony/http-foundation/Response.php | 100 +- .../http-foundation/ResponseHeaderBag.php | 18 - .../http-foundation/Session/Session.php | 2 - .../Session/SessionInterface.php | 26 - .../Storage/Handler/NullSessionHandler.php | 2 - .../Session/Storage/NativeSessionStorage.php | 12 +- .../Storage/SessionStorageInterface.php | 14 - .../http-foundation/StreamedResponse.php | 4 - vendor/symfony/http-foundation/composer.json | 1 - vendor/symfony/http-kernel/Bundle/Bundle.php | 12 - .../http-kernel/Bundle/BundleInterface.php | 18 - vendor/symfony/http-kernel/Client.php | 2 - .../Controller/ControllerResolver.php | 8 +- .../ControllerResolverInterface.php | 6 - .../DataCollector/DataCollectorInterface.php | 6 - .../DataCollector/DumpDataCollector.php | 1 + .../ConfigurableExtension.php | 8 +- .../Event/FilterControllerEvent.php | 8 - .../http-kernel/Event/FilterResponseEvent.php | 6 - .../http-kernel/Event/GetResponseEvent.php | 8 - .../GetResponseForControllerResultEvent.php | 6 - .../Event/GetResponseForExceptionEvent.php | 6 - .../symfony/http-kernel/Event/KernelEvent.php | 10 - vendor/symfony/http-kernel/HttpCache/Esi.php | 1 - .../http-kernel/HttpCache/HttpCache.php | 8 +- vendor/symfony/http-kernel/HttpCache/Ssi.php | 1 - vendor/symfony/http-kernel/HttpKernel.php | 8 - .../http-kernel/HttpKernelInterface.php | 4 - vendor/symfony/http-kernel/Kernel.php | 42 +- vendor/symfony/http-kernel/KernelEvents.php | 12 - .../symfony/http-kernel/KernelInterface.php | 36 - .../http-kernel/Log/LoggerInterface.php | 10 - vendor/symfony/http-kernel/Log/NullLogger.php | 14 - .../http-kernel/TerminableInterface.php | 4 - vendor/symfony/http-kernel/composer.json | 1 - vendor/symfony/process/ExecutableFinder.php | 3 +- vendor/symfony/process/PhpProcess.php | 18 +- vendor/symfony/process/Pipes/WindowsPipes.php | 7 +- vendor/symfony/process/Process.php | 28 +- vendor/symfony/process/README.md | 16 +- vendor/symfony/process/composer.json | 3 - .../routing/Exception/ExceptionInterface.php | 2 - .../Exception/InvalidParameterException.php | 2 - .../Exception/MethodNotAllowedException.php | 2 - .../MissingMandatoryParametersException.php | 2 - .../Exception/ResourceNotFoundException.php | 2 - .../Exception/RouteNotFoundException.php | 2 - .../Dumper/GeneratorDumperInterface.php | 2 - .../Generator/Dumper/PhpGeneratorDumper.php | 4 - .../routing/Generator/UrlGenerator.php | 4 - .../Generator/UrlGeneratorInterface.php | 4 - .../symfony/routing/Loader/ClosureLoader.php | 6 - .../symfony/routing/Loader/PhpFileLoader.php | 6 - .../symfony/routing/Loader/XmlFileLoader.php | 6 - .../symfony/routing/Loader/YamlFileLoader.php | 14 +- .../Matcher/Dumper/DumperCollection.php | 2 + .../Matcher/Dumper/DumperPrefixCollection.php | 2 + .../routing/Matcher/Dumper/DumperRoute.php | 2 + .../Matcher/RedirectableUrlMatcher.php | 2 - .../RedirectableUrlMatcherInterface.php | 4 - vendor/symfony/routing/Matcher/UrlMatcher.php | 4 - .../routing/Matcher/UrlMatcherInterface.php | 4 - vendor/symfony/routing/RequestContext.php | 20 - .../routing/RequestContextAwareInterface.php | 7 - vendor/symfony/routing/Route.php | 10 - vendor/symfony/routing/RouteCollection.php | 8 - vendor/symfony/routing/composer.json | 1 - .../Mapping/Loader/AnnotationLoader.php | 2 +- .../Normalizer/AbstractNormalizer.php | 2 +- vendor/symfony/serializer/composer.json | 1 - .../translation/DataCollectorTranslator.php | 4 - .../Exception/ExceptionInterface.php | 2 - .../Exception/InvalidResourceException.php | 2 - .../Exception/NotFoundResourceException.php | 2 - .../translation/IdentityTranslator.php | 12 - .../translation/Loader/ArrayLoader.php | 4 - .../translation/Loader/CsvFileLoader.php | 16 +- .../translation/Loader/LoaderInterface.php | 4 - .../translation/Loader/PhpFileLoader.php | 4 - .../translation/Loader/QtFileLoader.php | 4 - .../translation/Loader/XliffFileLoader.php | 4 - .../translation/Loader/YamlFileLoader.php | 4 - .../symfony/translation/LoggingTranslator.php | 4 - .../symfony/translation/MessageCatalogue.php | 30 - .../translation/MessageCatalogueInterface.php | 30 - .../symfony/translation/MessageSelector.php | 4 - .../translation/PluralizationRules.php | 4 +- vendor/symfony/translation/Translator.php | 22 - .../translation/TranslatorInterface.php | 10 - vendor/symfony/translation/composer.json | 1 - vendor/symfony/validator/Constraint.php | 14 - .../symfony/validator/ConstraintValidator.php | 2 - .../ConstraintValidatorInterface.php | 4 - .../ConstraintViolationInterface.php | 14 - .../ConstraintViolationListInterface.php | 14 - vendor/symfony/validator/Constraints/All.php | 2 - .../validator/Constraints/AllValidator.php | 2 - .../symfony/validator/Constraints/Blank.php | 2 - .../validator/Constraints/BlankValidator.php | 2 - .../validator/Constraints/Callback.php | 2 - .../Constraints/CallbackValidator.php | 2 - .../symfony/validator/Constraints/Choice.php | 2 - .../validator/Constraints/ChoiceValidator.php | 2 - .../validator/Constraints/Collection.php | 2 - .../Constraints/CollectionValidator.php | 2 - .../symfony/validator/Constraints/Count.php | 2 - .../symfony/validator/Constraints/Country.php | 2 - .../Constraints/CountryValidator.php | 2 - .../validator/Constraints/Currency.php | 2 - .../Constraints/CurrencyValidator.php | 2 - vendor/symfony/validator/Constraints/Date.php | 2 - .../validator/Constraints/DateTime.php | 2 - .../Constraints/DateTimeValidator.php | 2 - .../validator/Constraints/DateValidator.php | 2 - .../symfony/validator/Constraints/Email.php | 2 - .../validator/Constraints/EmailValidator.php | 2 - vendor/symfony/validator/Constraints/File.php | 2 - .../validator/Constraints/FileValidator.php | 2 - .../validator/Constraints/GroupSequence.php | 2 - .../symfony/validator/Constraints/Image.php | 2 - vendor/symfony/validator/Constraints/Ip.php | 2 - .../validator/Constraints/IpValidator.php | 2 - .../symfony/validator/Constraints/IsFalse.php | 2 - .../Constraints/IsFalseValidator.php | 2 - .../symfony/validator/Constraints/IsNull.php | 2 - .../validator/Constraints/IsNullValidator.php | 2 - .../symfony/validator/Constraints/IsTrue.php | 2 - .../validator/Constraints/IsTrueValidator.php | 2 - .../validator/Constraints/Language.php | 2 - .../Constraints/LanguageValidator.php | 2 - .../symfony/validator/Constraints/Length.php | 2 - .../symfony/validator/Constraints/Locale.php | 2 - .../validator/Constraints/LocaleValidator.php | 2 - .../validator/Constraints/NotBlank.php | 2 - .../Constraints/NotBlankValidator.php | 2 - .../symfony/validator/Constraints/NotNull.php | 2 - .../Constraints/NotNullValidator.php | 2 - .../symfony/validator/Constraints/Range.php | 2 - .../symfony/validator/Constraints/Regex.php | 2 - .../validator/Constraints/RegexValidator.php | 2 - vendor/symfony/validator/Constraints/Time.php | 2 - .../validator/Constraints/TimeValidator.php | 2 - vendor/symfony/validator/Constraints/Type.php | 2 - .../validator/Constraints/TypeValidator.php | 2 - vendor/symfony/validator/Constraints/Url.php | 2 - .../validator/Constraints/UrlValidator.php | 10 +- .../symfony/validator/Constraints/Valid.php | 2 - .../validator/ExecutionContextInterface.php | 8 - .../validator/ObjectInitializerInterface.php | 4 - .../Resources/translations/validators.de.xlf | 2 +- .../Resources/translations/validators.it.xlf | 12 + .../RecursiveContextualValidator.php | 10 + .../symfony/validator/ValidatorInterface.php | 12 - vendor/symfony/validator/composer.json | 2 +- .../symfony/yaml/Exception/DumpException.php | 2 - .../yaml/Exception/ExceptionInterface.php | 2 - .../symfony/yaml/Exception/ParseException.php | 2 - .../yaml/Exception/RuntimeException.php | 2 - vendor/symfony/yaml/Inline.php | 4 +- vendor/symfony/yaml/Parser.php | 40 +- vendor/symfony/yaml/Yaml.php | 6 - vendor/symfony/yaml/composer.json | 3 - vendor/twig/twig/CHANGELOG | 21 + vendor/twig/twig/composer.json | 2 +- .../twig/twig/lib/Twig/Cache/Filesystem.php | 6 +- vendor/twig/twig/lib/Twig/Environment.php | 81 +- vendor/twig/twig/lib/Twig/Error.php | 22 + vendor/twig/twig/lib/Twig/Error/Syntax.php | 33 + .../twig/twig/lib/Twig/ExpressionParser.php | 36 +- vendor/twig/twig/lib/Twig/Extension.php | 34 +- vendor/twig/twig/lib/Twig/Extension/Core.php | 52 +- vendor/twig/twig/lib/Twig/Extension/Debug.php | 10 - .../twig/twig/lib/Twig/Extension/Escaper.php | 20 - .../lib/Twig/Extension/GlobalsInterface.php | 22 + .../Twig/Extension/InitRuntimeInterface.php | 22 + .../twig/lib/Twig/Extension/Optimizer.php | 6 - .../twig/twig/lib/Twig/Extension/Profiler.php | 6 - .../twig/twig/lib/Twig/Extension/Sandbox.php | 15 - .../twig/twig/lib/Twig/Extension/Staging.php | 21 - .../twig/lib/Twig/Extension/StringLoader.php | 6 - .../twig/twig/lib/Twig/ExtensionInterface.php | 12 +- vendor/twig/twig/lib/Twig/Lexer.php | 16 +- vendor/twig/twig/lib/Twig/Node.php | 2 +- vendor/twig/twig/lib/Twig/Node/AutoEscape.php | 5 - vendor/twig/twig/lib/Twig/Node/Block.php | 5 - .../twig/lib/Twig/Node/BlockReference.php | 5 - vendor/twig/twig/lib/Twig/Node/Do.php | 5 - .../twig/lib/Twig/Node/Expression/Array.php | 5 - .../lib/Twig/Node/Expression/AssignName.php | 5 - .../twig/lib/Twig/Node/Expression/Binary.php | 5 - .../Twig/Node/Expression/Binary/FloorDiv.php | 5 - .../lib/Twig/Node/Expression/Binary/In.php | 5 - .../lib/Twig/Node/Expression/Binary/NotIn.php | 5 - .../lib/Twig/Node/Expression/Binary/Power.php | 5 - .../lib/Twig/Node/Expression/Binary/Range.php | 5 - .../Twig/Node/Expression/BlockReference.php | 5 - .../Node/Expression/ExtensionReference.php | 5 - .../twig/lib/Twig/Node/Expression/Parent.php | 5 - .../lib/Twig/Node/Expression/Test/Defined.php | 2 +- vendor/twig/twig/lib/Twig/Node/Flush.php | 5 - vendor/twig/twig/lib/Twig/Node/For.php | 5 - vendor/twig/twig/lib/Twig/Node/ForLoop.php | 5 - vendor/twig/twig/lib/Twig/Node/If.php | 5 - vendor/twig/twig/lib/Twig/Node/Import.php | 5 - vendor/twig/twig/lib/Twig/Node/Include.php | 5 - vendor/twig/twig/lib/Twig/Node/Macro.php | 7 +- vendor/twig/twig/lib/Twig/Node/Module.php | 5 - vendor/twig/twig/lib/Twig/Node/Print.php | 5 - vendor/twig/twig/lib/Twig/Node/Sandbox.php | 5 - .../twig/lib/Twig/Node/SandboxedPrint.php | 10 - vendor/twig/twig/lib/Twig/Node/Set.php | 5 - vendor/twig/twig/lib/Twig/Node/Spaceless.php | 5 - vendor/twig/twig/lib/Twig/Node/Text.php | 5 - vendor/twig/twig/lib/Twig/Parser.php | 27 +- .../lib/Twig/Test/IntegrationTestCase.php | 8 +- .../twig/twig/lib/Twig/Test/NodeTestCase.php | 12 +- .../twig/lib/Twig/TokenParser/AutoEscape.php | 14 +- .../twig/twig/lib/Twig/TokenParser/Block.php | 16 +- vendor/twig/twig/lib/Twig/TokenParser/Do.php | 12 - .../twig/twig/lib/Twig/TokenParser/Embed.php | 12 - .../twig/lib/Twig/TokenParser/Extends.php | 16 +- .../twig/twig/lib/Twig/TokenParser/Filter.php | 12 - .../twig/twig/lib/Twig/TokenParser/Flush.php | 12 - vendor/twig/twig/lib/Twig/TokenParser/For.php | 16 +- .../twig/twig/lib/Twig/TokenParser/From.php | 14 +- vendor/twig/twig/lib/Twig/TokenParser/If.php | 14 +- .../twig/twig/lib/Twig/TokenParser/Import.php | 12 - .../twig/lib/Twig/TokenParser/Include.php | 12 - .../twig/twig/lib/Twig/TokenParser/Macro.php | 14 +- .../twig/lib/Twig/TokenParser/Sandbox.php | 14 +- vendor/twig/twig/lib/Twig/TokenParser/Set.php | 12 - .../twig/lib/Twig/TokenParser/Spaceless.php | 12 - vendor/twig/twig/lib/Twig/TokenParser/Use.php | 12 - .../twig/twig/lib/Twig/TokenParserBroker.php | 9 +- vendor/twig/twig/lib/Twig/TokenStream.php | 6 +- .../composer-merge-plugin/.arcconfig | 6 + .../wikimedia/composer-merge-plugin/.arclint | 13 + .../wikimedia/composer-merge-plugin/README.md | 126 +- .../composer-merge-plugin/composer.json | 3 +- .../composer-merge-plugin/src/Logger.php | 56 +- .../src/Merge/ExtraPackage.php | 342 +-- .../src/Merge/MissingFileException.php | 18 + .../src/Merge/PluginState.php | 55 +- .../src/Merge/StabilityFlags.php | 181 ++ .../composer-merge-plugin/src/MergePlugin.php | 80 +- 929 files changed, 19798 insertions(+), 5304 deletions(-) create mode 100644 core/lib/Drupal/Core/Entity/EntityReferenceSelection/SelectionWithAutocreateInterface.php delete mode 100644 core/lib/Drupal/Core/EventSubscriber/ContentControllerSubscriber.php create mode 100644 core/lib/Drupal/Core/Routing/Enhancer/FormRouteEnhancer.php create mode 100644 core/lib/Drupal/Core/Theme/MissingThemeDependencyException.php create mode 100644 core/modules/aggregator/src/Tests/Migrate/MigrateAggregatorStubTest.php create mode 100644 core/modules/block_content/src/Tests/Migrate/MigrateBlockContentStubTest.php create mode 100644 core/modules/comment/src/Tests/Migrate/MigrateCommentStubTest.php create mode 100644 core/modules/file/src/Plugin/Validation/Constraint/FileValidationConstraint.php create mode 100644 core/modules/file/src/Plugin/Validation/Constraint/FileValidationConstraintValidator.php create mode 100644 core/modules/file/src/Tests/Migrate/MigrateFileStubTest.php delete mode 100644 core/modules/file/templates/file-widget.html.twig create mode 100644 core/modules/file/tests/src/Kernel/FileItemValidationTest.php create mode 100644 core/modules/language/language.install create mode 100644 core/modules/language/src/Plugin/LanguageNegotiation/LanguageNegotiationContentEntity.php create mode 100644 core/modules/language/src/Tests/LanguageNegotiationContentEntityTest.php create mode 100644 core/modules/menu_link_content/src/Tests/Migrate/MigrateMenuLinkContentStubTest.php create mode 100644 core/modules/migrate/tests/src/Unit/Plugin/migrate/destination/EntityContentBaseTest.php create mode 100644 core/modules/migrate_drupal/src/Tests/StubTestTrait.php create mode 100644 core/modules/node/src/Tests/Migrate/MigrateNodeStubTest.php create mode 100644 core/modules/node/src/Tests/NodeAccessAutoBubblingTest.php create mode 100644 core/modules/node/tests/node_access_test_auto_bubbling/node_access_test_auto_bubbling.info.yml create mode 100644 core/modules/node/tests/node_access_test_auto_bubbling/node_access_test_auto_bubbling.routing.yml create mode 100644 core/modules/node/tests/node_access_test_auto_bubbling/src/Controller/NodeAccessTestAutoBubblingController.php create mode 100644 core/modules/rest/tests/modules/rest_test_views/test_views/views.view.test_serializer_node_exposed_filter.yml create mode 100644 core/modules/shortcut/src/Tests/Migrate/MigrateShortcutStubTest.php create mode 100644 core/modules/system/src/Tests/Theme/StableLibraryOverrideTest.php create mode 100644 core/modules/system/tests/fixtures/update/drupal-8-rc1.bare.standard.php.gz create mode 100644 core/modules/system/tests/fixtures/update/drupal-8-rc1.filled.standard.php.gz delete mode 100644 core/modules/taxonomy/src/Plugin/migrate/destination/EntityTaxonomyTerm.php create mode 100644 core/modules/taxonomy/src/Tests/Migrate/MigrateTaxonomyTermStubTest.php rename core/modules/update/migration_templates/{d6_update_settings.yml => update_settings.yml} (94%) create mode 100644 core/modules/user/src/Tests/Migrate/MigrateUserAdminPassTest.php create mode 100644 core/modules/user/src/Tests/Migrate/MigrateUserStubTest.php create mode 100644 core/modules/views/src/Tests/Plugin/StyleSummaryTest.php create mode 100644 core/modules/views/tests/modules/views_test_config/test_views/views.view.test_summary.yml delete mode 100644 core/profiles/standard/config/install/block.block.classy_page_title.yml create mode 100644 core/tests/Drupal/KernelTests/Core/Cache/CacheCollectorTest.php create mode 100644 core/tests/Drupal/KernelTests/Core/Path/AliasStorageTest.php create mode 100644 core/tests/Drupal/KernelTests/Core/Theme/MaintenanceThemeTest.php create mode 100644 core/tests/Drupal/KernelTests/Core/Theme/StableTemplateOverrideTest.php create mode 100644 core/tests/Drupal/KernelTests/RequestProcessing/RedirectOnExceptionTest.php create mode 100644 core/tests/Drupal/Tests/Core/Asset/AssetResolverTest.php create mode 100644 core/tests/Drupal/Tests/Core/Datetime/DateHelperTest.php create mode 100644 core/tests/Drupal/Tests/Core/Entity/Routing/DefaultHtmlRouteProviderTest.php delete mode 100644 core/themes/classy/templates/content-edit/file-widget.html.twig create mode 100644 core/themes/stable/css/block/block.admin.css create mode 100644 core/themes/stable/css/ckeditor/ckeditor-iframe.css create mode 100644 core/themes/stable/css/ckeditor/ckeditor.admin.css create mode 100644 core/themes/stable/css/ckeditor/ckeditor.css create mode 100644 core/themes/stable/css/ckeditor/plugins/drupalimagecaption/ckeditor.drupalimagecaption.css create mode 100644 core/themes/stable/css/color/color.admin.css create mode 100644 core/themes/stable/css/config_translation/config_translation.admin.css create mode 100644 core/themes/stable/css/content_translation/content_translation.admin.css create mode 100644 core/themes/stable/css/contextual/contextual.icons.theme.css create mode 100644 core/themes/stable/css/contextual/contextual.module.css create mode 100644 core/themes/stable/css/contextual/contextual.theme.css create mode 100644 core/themes/stable/css/contextual/contextual.toolbar.css create mode 100644 core/themes/stable/css/core/dropbutton/dropbutton.css create mode 100644 core/themes/stable/css/core/print.css create mode 100644 core/themes/stable/css/core/vertical-tabs.css create mode 100644 core/themes/stable/css/dblog/dblog.module.css create mode 100644 core/themes/stable/css/field_ui/field_ui.admin.css create mode 100644 core/themes/stable/css/file/file.admin.css create mode 100644 core/themes/stable/css/filter/filter.admin.css create mode 100644 core/themes/stable/css/filter/filter.caption.css create mode 100644 core/themes/stable/css/image/image.admin.css create mode 100644 core/themes/stable/css/language/language.admin.css create mode 100644 core/themes/stable/css/locale/locale.admin.css create mode 100644 core/themes/stable/css/menu_ui/menu_ui.admin.css create mode 100644 core/themes/stable/css/node/node.admin.css create mode 100644 core/themes/stable/css/node/node.module.css create mode 100644 core/themes/stable/css/node/node.preview.css create mode 100644 core/themes/stable/css/quickedit/quickedit.icons.theme.css create mode 100644 core/themes/stable/css/quickedit/quickedit.module.css create mode 100644 core/themes/stable/css/quickedit/quickedit.theme.css create mode 100644 core/themes/stable/css/shortcut/shortcut.icons.theme.css create mode 100644 core/themes/stable/css/shortcut/shortcut.theme.css create mode 100644 core/themes/stable/css/simpletest/simpletest.module.css create mode 100644 core/themes/stable/css/system/components/ajax-progress.module.css create mode 100644 core/themes/stable/css/system/components/align.module.css create mode 100644 core/themes/stable/css/system/components/autocomplete-loading.module.css create mode 100644 core/themes/stable/css/system/components/clearfix.module.css create mode 100644 core/themes/stable/css/system/components/container-inline.module.css create mode 100644 core/themes/stable/css/system/components/details.module.css create mode 100644 core/themes/stable/css/system/components/fieldgroup.module.css create mode 100644 core/themes/stable/css/system/components/hidden.module.css create mode 100644 core/themes/stable/css/system/components/item-list.module.css create mode 100644 core/themes/stable/css/system/components/js.module.css create mode 100644 core/themes/stable/css/system/components/nowrap.module.css create mode 100644 core/themes/stable/css/system/components/position-container.module.css create mode 100644 core/themes/stable/css/system/components/progress.module.css create mode 100644 core/themes/stable/css/system/components/reset-appearance.module.css create mode 100644 core/themes/stable/css/system/components/resize.module.css create mode 100644 core/themes/stable/css/system/components/sticky-header.module.css create mode 100644 core/themes/stable/css/system/components/tabledrag.module.css create mode 100644 core/themes/stable/css/system/components/tablesort.module.css create mode 100644 core/themes/stable/css/system/components/tree-child.module.css create mode 100644 core/themes/stable/css/system/system.admin.css create mode 100644 core/themes/stable/css/system/system.diff.css create mode 100644 core/themes/stable/css/system/system.maintenance.css create mode 100644 core/themes/stable/css/taxonomy/taxonomy.theme.css create mode 100644 core/themes/stable/css/toolbar/toolbar.icons.theme.css create mode 100644 core/themes/stable/css/toolbar/toolbar.menu.css create mode 100644 core/themes/stable/css/toolbar/toolbar.module.css create mode 100644 core/themes/stable/css/toolbar/toolbar.theme.css create mode 100644 core/themes/stable/css/tour/tour.module.css create mode 100644 core/themes/stable/css/update/update.admin.theme.css create mode 100644 core/themes/stable/css/user/user.admin.css create mode 100644 core/themes/stable/css/user/user.icons.admin.css create mode 100644 core/themes/stable/css/user/user.module.css create mode 100644 core/themes/stable/css/views/views.module.css create mode 100644 core/themes/stable/css/views_ui/views_ui.admin.css create mode 100644 core/themes/stable/css/views_ui/views_ui.admin.theme.css create mode 100644 core/themes/stable/css/views_ui/views_ui.contextual.css create mode 100644 core/themes/stable/images/color/hook-rtl.png create mode 100644 core/themes/stable/images/color/hook.png create mode 100644 core/themes/stable/images/color/lock.png create mode 100644 core/themes/stable/images/core/druplicon.png create mode 100644 core/themes/stable/images/core/feed.svg create mode 100644 core/themes/stable/images/core/help.png create mode 100644 core/themes/stable/images/core/icons/000000/barchart.svg create mode 100644 core/themes/stable/images/core/icons/000000/chevron-left.svg create mode 100644 core/themes/stable/images/core/icons/000000/chevron-right.svg create mode 100644 core/themes/stable/images/core/icons/000000/ex.svg create mode 100644 core/themes/stable/images/core/icons/000000/file.svg create mode 100644 core/themes/stable/images/core/icons/000000/move.svg create mode 100644 core/themes/stable/images/core/icons/000000/orgchart.svg create mode 100644 core/themes/stable/images/core/icons/000000/paintbrush.svg create mode 100644 core/themes/stable/images/core/icons/000000/people.svg create mode 100644 core/themes/stable/images/core/icons/000000/puzzlepiece.svg create mode 100644 core/themes/stable/images/core/icons/000000/questionmark-disc.svg create mode 100644 core/themes/stable/images/core/icons/000000/wrench.svg create mode 100644 core/themes/stable/images/core/icons/004875/twistie-down.svg create mode 100644 core/themes/stable/images/core/icons/004875/twistie-up.svg create mode 100644 core/themes/stable/images/core/icons/0074bd/chevron-left.svg create mode 100644 core/themes/stable/images/core/icons/0074bd/chevron-right.svg create mode 100644 core/themes/stable/images/core/icons/008ee6/twistie-down.svg create mode 100644 core/themes/stable/images/core/icons/008ee6/twistie-up.svg create mode 100644 core/themes/stable/images/core/icons/333333/caret-down.svg create mode 100644 core/themes/stable/images/core/icons/424242/loupe.svg create mode 100644 core/themes/stable/images/core/icons/505050/loupe.svg create mode 100644 core/themes/stable/images/core/icons/5181c6/chevron-disc-down.svg create mode 100644 core/themes/stable/images/core/icons/5181c6/chevron-disc-up.svg create mode 100644 core/themes/stable/images/core/icons/5181c6/pencil.svg create mode 100644 core/themes/stable/images/core/icons/5181c6/twistie-down.svg create mode 100644 core/themes/stable/images/core/icons/5181c6/twistie-up.svg create mode 100644 core/themes/stable/images/core/icons/73b355/check.svg create mode 100644 core/themes/stable/images/core/icons/787878/barchart.svg create mode 100644 core/themes/stable/images/core/icons/787878/chevron-disc-down.svg create mode 100644 core/themes/stable/images/core/icons/787878/chevron-disc-up.svg create mode 100644 core/themes/stable/images/core/icons/787878/cog.svg create mode 100644 core/themes/stable/images/core/icons/787878/ex.svg create mode 100644 core/themes/stable/images/core/icons/787878/file.svg create mode 100644 core/themes/stable/images/core/icons/787878/key.svg create mode 100644 core/themes/stable/images/core/icons/787878/move.svg create mode 100644 core/themes/stable/images/core/icons/787878/orgchart.svg create mode 100644 core/themes/stable/images/core/icons/787878/paintbrush.svg create mode 100644 core/themes/stable/images/core/icons/787878/pencil.svg create mode 100644 core/themes/stable/images/core/icons/787878/people.svg create mode 100644 core/themes/stable/images/core/icons/787878/push-left.svg create mode 100644 core/themes/stable/images/core/icons/787878/push-right.svg create mode 100644 core/themes/stable/images/core/icons/787878/push-up.svg create mode 100644 core/themes/stable/images/core/icons/787878/puzzlepiece.svg create mode 100644 core/themes/stable/images/core/icons/787878/questionmark-disc.svg create mode 100644 core/themes/stable/images/core/icons/787878/twistie-down.svg create mode 100644 core/themes/stable/images/core/icons/787878/twistie-up.svg create mode 100644 core/themes/stable/images/core/icons/787878/wrench.svg create mode 100644 core/themes/stable/images/core/icons/bebebe/chevron-disc-left.svg create mode 100644 core/themes/stable/images/core/icons/bebebe/chevron-disc-right.svg create mode 100644 core/themes/stable/images/core/icons/bebebe/cog.svg create mode 100644 core/themes/stable/images/core/icons/bebebe/ex.svg create mode 100644 core/themes/stable/images/core/icons/bebebe/hamburger.svg create mode 100644 core/themes/stable/images/core/icons/bebebe/house.svg create mode 100644 core/themes/stable/images/core/icons/bebebe/key.svg create mode 100644 core/themes/stable/images/core/icons/bebebe/move.svg create mode 100644 core/themes/stable/images/core/icons/bebebe/pencil.svg create mode 100644 core/themes/stable/images/core/icons/bebebe/person.svg create mode 100644 core/themes/stable/images/core/icons/bebebe/push-left.svg create mode 100644 core/themes/stable/images/core/icons/bebebe/push-right.svg create mode 100644 core/themes/stable/images/core/icons/bebebe/push-up.svg create mode 100644 core/themes/stable/images/core/icons/bebebe/questionmark-disc.svg create mode 100644 core/themes/stable/images/core/icons/bebebe/star-empty.svg create mode 100644 core/themes/stable/images/core/icons/bebebe/star.svg create mode 100644 core/themes/stable/images/core/icons/e29700/warning.svg create mode 100644 core/themes/stable/images/core/icons/e32700/error.svg create mode 100644 core/themes/stable/images/core/icons/ee0000/required.svg create mode 100644 core/themes/stable/images/core/icons/ffffff/ex.svg create mode 100644 core/themes/stable/images/core/icons/ffffff/hamburger.svg create mode 100644 core/themes/stable/images/core/icons/ffffff/house.svg create mode 100644 core/themes/stable/images/core/icons/ffffff/pencil.svg create mode 100644 core/themes/stable/images/core/icons/ffffff/person.svg create mode 100644 core/themes/stable/images/core/icons/ffffff/questionmark-disc.svg create mode 100644 core/themes/stable/images/core/icons/ffffff/star-empty.svg create mode 100644 core/themes/stable/images/core/icons/ffffff/star.svg create mode 100644 core/themes/stable/images/core/icons/ffffff/twistie-down.svg create mode 100644 core/themes/stable/images/core/icons/ffffff/twistie-up.svg create mode 100644 core/themes/stable/images/core/icons/license.md create mode 100644 core/themes/stable/images/core/loading-small.gif create mode 100644 core/themes/stable/images/core/loading.gif create mode 100644 core/themes/stable/images/core/menu-collapsed-rtl.png create mode 100644 core/themes/stable/images/core/menu-collapsed.png create mode 100644 core/themes/stable/images/core/menu-expanded.png create mode 100644 core/themes/stable/images/core/menu-leaf.png create mode 100644 core/themes/stable/images/core/throbber-active.gif create mode 100644 core/themes/stable/images/core/throbber-inactive.png create mode 100644 core/themes/stable/images/core/tree-bottom.png create mode 100644 core/themes/stable/images/core/tree.png create mode 100644 core/themes/stable/images/quickedit/icon-throbber.gif create mode 100644 core/themes/stable/images/shortcut/favstar-rtl.svg create mode 100644 core/themes/stable/images/shortcut/favstar.svg create mode 100644 core/themes/stable/images/views_ui/sprites.png create mode 100644 core/themes/stable/templates/admin/admin-block-content.html.twig create mode 100644 core/themes/stable/templates/admin/admin-block.html.twig create mode 100644 core/themes/stable/templates/admin/admin-page.html.twig create mode 100644 core/themes/stable/templates/admin/authorize-report.html.twig create mode 100644 core/themes/stable/templates/admin/block-content-add-list.html.twig create mode 100644 core/themes/stable/templates/admin/block-list.html.twig create mode 100644 core/themes/stable/templates/admin/ckeditor-settings-toolbar.html.twig create mode 100644 core/themes/stable/templates/admin/color-scheme-form.html.twig create mode 100644 core/themes/stable/templates/admin/config_translation_manage_form_element.html.twig create mode 100644 core/themes/stable/templates/admin/field-ui-table.html.twig create mode 100644 core/themes/stable/templates/admin/image-anchor.html.twig create mode 100644 core/themes/stable/templates/admin/image-crop-summary.html.twig create mode 100644 core/themes/stable/templates/admin/image-resize-summary.html.twig create mode 100644 core/themes/stable/templates/admin/image-rotate-summary.html.twig create mode 100644 core/themes/stable/templates/admin/image-scale-summary.html.twig create mode 100644 core/themes/stable/templates/admin/image-style-preview.html.twig create mode 100644 core/themes/stable/templates/admin/indentation.html.twig create mode 100644 core/themes/stable/templates/admin/language-content-settings-table.html.twig create mode 100644 core/themes/stable/templates/admin/language-negotiation-configure-form.html.twig create mode 100644 core/themes/stable/templates/admin/locale-translation-last-check.html.twig create mode 100644 core/themes/stable/templates/admin/locale-translation-update-info.html.twig create mode 100644 core/themes/stable/templates/admin/maintenance-task-list.html.twig create mode 100644 core/themes/stable/templates/admin/simpletest-result-summary.html.twig create mode 100644 core/themes/stable/templates/admin/status-report.html.twig create mode 100644 core/themes/stable/templates/admin/system-admin-index.html.twig create mode 100644 core/themes/stable/templates/admin/system-config-form.html.twig create mode 100644 core/themes/stable/templates/admin/system-modules-details.html.twig create mode 100644 core/themes/stable/templates/admin/system-modules-uninstall.html.twig create mode 100644 core/themes/stable/templates/admin/system-themes-page.html.twig create mode 100644 core/themes/stable/templates/admin/tablesort-indicator.html.twig create mode 100644 core/themes/stable/templates/admin/update-last-check.html.twig create mode 100644 core/themes/stable/templates/admin/update-project-status.html.twig create mode 100644 core/themes/stable/templates/admin/update-report.html.twig create mode 100644 core/themes/stable/templates/admin/update-version.html.twig create mode 100644 core/themes/stable/templates/admin/views-ui-build-group-filter-form.html.twig create mode 100644 core/themes/stable/templates/admin/views-ui-container.html.twig create mode 100644 core/themes/stable/templates/admin/views-ui-display-tab-bucket.html.twig create mode 100644 core/themes/stable/templates/admin/views-ui-display-tab-setting.html.twig create mode 100644 core/themes/stable/templates/admin/views-ui-expose-filter-form.html.twig create mode 100644 core/themes/stable/templates/admin/views-ui-rearrange-filter-form.html.twig create mode 100644 core/themes/stable/templates/admin/views-ui-style-plugin-table.html.twig create mode 100644 core/themes/stable/templates/admin/views-ui-view-info.html.twig create mode 100644 core/themes/stable/templates/admin/views-ui-view-preview-section.html.twig create mode 100644 core/themes/stable/templates/block/block--local-actions-block.html.twig create mode 100644 core/themes/stable/templates/block/block--system-branding-block.html.twig create mode 100644 core/themes/stable/templates/block/block--system-menu-block.html.twig create mode 100644 core/themes/stable/templates/block/block--system-messages-block.html.twig create mode 100644 core/themes/stable/templates/block/block.html.twig create mode 100644 core/themes/stable/templates/content-edit/file-managed-file.html.twig create mode 100644 core/themes/stable/templates/content-edit/file-upload-help.html.twig create mode 100644 core/themes/stable/templates/content-edit/file-widget-multiple.html.twig create mode 100644 core/themes/stable/templates/content-edit/filter-caption.html.twig create mode 100644 core/themes/stable/templates/content-edit/filter-guidelines.html.twig create mode 100644 core/themes/stable/templates/content-edit/filter-tips.html.twig create mode 100644 core/themes/stable/templates/content-edit/image-widget.html.twig create mode 100644 core/themes/stable/templates/content-edit/node-add-list.html.twig create mode 100644 core/themes/stable/templates/content-edit/node-edit-form.html.twig create mode 100644 core/themes/stable/templates/content-edit/text-format-wrapper.html.twig create mode 100644 core/themes/stable/templates/content/aggregator-item.html.twig create mode 100644 core/themes/stable/templates/content/book-node-export-html.html.twig create mode 100644 core/themes/stable/templates/content/comment.html.twig create mode 100644 core/themes/stable/templates/content/mark.html.twig create mode 100644 core/themes/stable/templates/content/node.html.twig create mode 100644 core/themes/stable/templates/content/page-title.html.twig create mode 100644 core/themes/stable/templates/content/search-result.html.twig create mode 100644 core/themes/stable/templates/content/taxonomy-term.html.twig create mode 100644 core/themes/stable/templates/dataset/aggregator-feed.html.twig create mode 100644 core/themes/stable/templates/dataset/forum-icon.html.twig create mode 100644 core/themes/stable/templates/dataset/forum-list.html.twig create mode 100644 core/themes/stable/templates/dataset/forums.html.twig create mode 100644 core/themes/stable/templates/dataset/item-list.html.twig create mode 100644 core/themes/stable/templates/dataset/table.html.twig create mode 100644 core/themes/stable/templates/field/field--comment.html.twig create mode 100644 core/themes/stable/templates/field/field--node--created.html.twig create mode 100644 core/themes/stable/templates/field/field--node--title.html.twig create mode 100644 core/themes/stable/templates/field/field--node--uid.html.twig create mode 100644 core/themes/stable/templates/field/field.html.twig create mode 100644 core/themes/stable/templates/field/file-link.html.twig create mode 100644 core/themes/stable/templates/field/image-formatter.html.twig create mode 100644 core/themes/stable/templates/field/image-style.html.twig create mode 100644 core/themes/stable/templates/field/image.html.twig create mode 100644 core/themes/stable/templates/field/link-formatter-link-separate.html.twig create mode 100644 core/themes/stable/templates/field/responsive-image-formatter.html.twig create mode 100644 core/themes/stable/templates/field/responsive-image.html.twig create mode 100644 core/themes/stable/templates/field/time.html.twig create mode 100644 core/themes/stable/templates/form/checkboxes.html.twig create mode 100644 core/themes/stable/templates/form/confirm-form.html.twig create mode 100644 core/themes/stable/templates/form/container.html.twig create mode 100644 core/themes/stable/templates/form/datetime-form.html.twig create mode 100644 core/themes/stable/templates/form/datetime-wrapper.html.twig create mode 100644 core/themes/stable/templates/form/details.html.twig create mode 100644 core/themes/stable/templates/form/dropbutton-wrapper.html.twig create mode 100644 core/themes/stable/templates/form/field-multiple-value-form.html.twig create mode 100644 core/themes/stable/templates/form/fieldset.html.twig create mode 100644 core/themes/stable/templates/form/form-element-label.html.twig create mode 100644 core/themes/stable/templates/form/form-element.html.twig create mode 100644 core/themes/stable/templates/form/form.html.twig create mode 100644 core/themes/stable/templates/form/input.html.twig create mode 100644 core/themes/stable/templates/form/radios.html.twig create mode 100644 core/themes/stable/templates/form/select.html.twig create mode 100644 core/themes/stable/templates/form/textarea.html.twig create mode 100644 core/themes/stable/templates/layout/book-export-html.html.twig create mode 100644 core/themes/stable/templates/layout/html.html.twig create mode 100644 core/themes/stable/templates/layout/install-page.html.twig create mode 100644 core/themes/stable/templates/layout/maintenance-page.html.twig create mode 100644 core/themes/stable/templates/layout/page.html.twig create mode 100644 core/themes/stable/templates/layout/region.html.twig create mode 100644 core/themes/stable/templates/misc/feed-icon.html.twig create mode 100644 core/themes/stable/templates/misc/progress-bar.html.twig create mode 100644 core/themes/stable/templates/misc/rdf-metadata.html.twig create mode 100644 core/themes/stable/templates/misc/rdf-wrapper.html.twig create mode 100644 core/themes/stable/templates/misc/status-messages.html.twig create mode 100644 core/themes/stable/templates/navigation/book-all-books-block.html.twig create mode 100644 core/themes/stable/templates/navigation/book-navigation.html.twig create mode 100644 core/themes/stable/templates/navigation/book-tree.html.twig create mode 100644 core/themes/stable/templates/navigation/breadcrumb.html.twig create mode 100644 core/themes/stable/templates/navigation/links.html.twig create mode 100644 core/themes/stable/templates/navigation/menu--toolbar.html.twig create mode 100644 core/themes/stable/templates/navigation/menu-local-action.html.twig create mode 100644 core/themes/stable/templates/navigation/menu-local-task.html.twig create mode 100644 core/themes/stable/templates/navigation/menu-local-tasks.html.twig create mode 100644 core/themes/stable/templates/navigation/menu.html.twig create mode 100644 core/themes/stable/templates/navigation/pager.html.twig create mode 100644 core/themes/stable/templates/navigation/toolbar.html.twig create mode 100644 core/themes/stable/templates/navigation/vertical-tabs.html.twig create mode 100644 core/themes/stable/templates/user/forum-submitted.html.twig create mode 100644 core/themes/stable/templates/user/user.html.twig create mode 100644 core/themes/stable/templates/user/username.html.twig create mode 100644 core/themes/stable/templates/views/views-exposed-form.html.twig create mode 100644 core/themes/stable/templates/views/views-mini-pager.html.twig create mode 100644 core/themes/stable/templates/views/views-view-field.html.twig create mode 100644 core/themes/stable/templates/views/views-view-fields.html.twig create mode 100644 core/themes/stable/templates/views/views-view-grid.html.twig create mode 100644 core/themes/stable/templates/views/views-view-grouping.html.twig create mode 100644 core/themes/stable/templates/views/views-view-list.html.twig create mode 100644 core/themes/stable/templates/views/views-view-mapping-test.html.twig create mode 100644 core/themes/stable/templates/views/views-view-opml.html.twig create mode 100644 core/themes/stable/templates/views/views-view-row-opml.html.twig create mode 100644 core/themes/stable/templates/views/views-view-row-rss.html.twig create mode 100644 core/themes/stable/templates/views/views-view-rss.html.twig create mode 100644 core/themes/stable/templates/views/views-view-summary-unformatted.html.twig create mode 100644 core/themes/stable/templates/views/views-view-summary.html.twig create mode 100644 core/themes/stable/templates/views/views-view-table.html.twig create mode 100644 core/themes/stable/templates/views/views-view-unformatted.html.twig create mode 100644 core/themes/stable/templates/views/views-view.html.twig create mode 100644 vendor/twig/twig/lib/Twig/Extension/GlobalsInterface.php create mode 100644 vendor/twig/twig/lib/Twig/Extension/InitRuntimeInterface.php create mode 100644 vendor/wikimedia/composer-merge-plugin/.arcconfig create mode 100644 vendor/wikimedia/composer-merge-plugin/.arclint create mode 100644 vendor/wikimedia/composer-merge-plugin/src/Merge/MissingFileException.php create mode 100644 vendor/wikimedia/composer-merge-plugin/src/Merge/StabilityFlags.php diff --git a/.gitignore b/.gitignore index 25a11e1df..66de35ab4 100644 --- a/.gitignore +++ b/.gitignore @@ -50,3 +50,7 @@ Thumbs.db # SASS # ########## .sass-cache + +# Things in the core directory that Drupal 8 commits in the repository. +!core/**/*.gz + diff --git a/.htaccess b/.htaccess index b26c63bb5..01c63af98 100644 --- a/.htaccess +++ b/.htaccess @@ -15,9 +15,6 @@ # Don't show directory listings for URLs which map to a directory. Options -Indexes -# Follow symbolic links in this directory. -Options +FollowSymLinks - # Set the default handler. DirectoryIndex index.php index.html index.htm diff --git a/composer.json b/composer.json index 04e1806ee..7f170ce71 100644 --- a/composer.json +++ b/composer.json @@ -5,7 +5,7 @@ "license": "GPL-2.0+", "require": { "composer/installers": "^1.0.21", - "wikimedia/composer-merge-plugin": "^1.3.0" + "wikimedia/composer-merge-plugin": "~1.3" }, "replace": { "drupal/core": "~8.0" diff --git a/composer.lock b/composer.lock index 58be85866..32535367b 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,8 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "2be29019515c847055593ea41b88475d", - "content-hash": "f38613812a285c03a1a18458384fe0b1", + "hash": "dac77f10c1f7585fd1f7344c6a376338", + "content-hash": "73cbcb262208c5d802cb528279f2a95c", "packages": [ { "name": "composer/installers", @@ -1107,24 +1107,23 @@ }, { "name": "symfony/class-loader", - "version": "v2.7.5", + "version": "v2.7.6", "source": { "type": "git", "url": "https://github.com/symfony/class-loader.git", - "reference": "d957ea6295d7016e20d7eff33a6c1deef819c0d4" + "reference": "320f8d2a9cdbcbeb24be602c124aae9d998474a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/class-loader/zipball/d957ea6295d7016e20d7eff33a6c1deef819c0d4", - "reference": "d957ea6295d7016e20d7eff33a6c1deef819c0d4", + "url": "https://api.github.com/repos/symfony/class-loader/zipball/320f8d2a9cdbcbeb24be602c124aae9d998474a4", + "reference": "320f8d2a9cdbcbeb24be602c124aae9d998474a4", "shasum": "" }, "require": { "php": ">=5.3.9" }, "require-dev": { - "symfony/finder": "~2.0,>=2.0.5", - "symfony/phpunit-bridge": "~2.7" + "symfony/finder": "~2.0,>=2.0.5" }, "type": "library", "extra": { @@ -1153,20 +1152,20 @@ ], "description": "Symfony ClassLoader Component", "homepage": "https://symfony.com", - "time": "2015-08-26 17:56:37" + "time": "2015-10-23 14:47:27" }, { "name": "symfony/console", - "version": "v2.7.5", + "version": "v2.7.6", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "06cb17c013a82f94a3d840682b49425cd00a2161" + "reference": "5efd632294c8320ea52492db22292ff853a43766" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/06cb17c013a82f94a3d840682b49425cd00a2161", - "reference": "06cb17c013a82f94a3d840682b49425cd00a2161", + "url": "https://api.github.com/repos/symfony/console/zipball/5efd632294c8320ea52492db22292ff853a43766", + "reference": "5efd632294c8320ea52492db22292ff853a43766", "shasum": "" }, "require": { @@ -1175,7 +1174,6 @@ "require-dev": { "psr/log": "~1.0", "symfony/event-dispatcher": "~2.1", - "symfony/phpunit-bridge": "~2.7", "symfony/process": "~2.1" }, "suggest": { @@ -1210,20 +1208,20 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2015-09-25 08:32:23" + "time": "2015-10-20 14:38:46" }, { "name": "symfony/debug", - "version": "v2.7.5", + "version": "v2.7.6", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "c79c361bca8e5ada6a47603875a3c964d03b67b1" + "reference": "fb9e6887db716939f41af0ba8ef38a1582eb501b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/c79c361bca8e5ada6a47603875a3c964d03b67b1", - "reference": "c79c361bca8e5ada6a47603875a3c964d03b67b1", + "url": "https://api.github.com/repos/symfony/debug/zipball/fb9e6887db716939f41af0ba8ef38a1582eb501b", + "reference": "fb9e6887db716939f41af0ba8ef38a1582eb501b", "shasum": "" }, "require": { @@ -1235,8 +1233,7 @@ }, "require-dev": { "symfony/class-loader": "~2.2", - "symfony/http-kernel": "~2.3.24|~2.5.9|~2.6,>=2.6.2", - "symfony/phpunit-bridge": "~2.7" + "symfony/http-kernel": "~2.3.24|~2.5.9|~2.6,>=2.6.2" }, "type": "library", "extra": { @@ -1265,20 +1262,20 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2015-09-14 08:41:38" + "time": "2015-10-11 09:39:48" }, { "name": "symfony/dependency-injection", - "version": "v2.7.5", + "version": "v2.7.6", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "422c3819b110f610d79c6f1dc38af23787dc790e" + "reference": "af284e795ec8a08c80d1fc47518fd23004b89847" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/422c3819b110f610d79c6f1dc38af23787dc790e", - "reference": "422c3819b110f610d79c6f1dc38af23787dc790e", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/af284e795ec8a08c80d1fc47518fd23004b89847", + "reference": "af284e795ec8a08c80d1fc47518fd23004b89847", "shasum": "" }, "require": { @@ -1290,7 +1287,6 @@ "require-dev": { "symfony/config": "~2.2", "symfony/expression-language": "~2.6", - "symfony/phpunit-bridge": "~2.7", "symfony/yaml": "~2.1" }, "suggest": { @@ -1325,20 +1321,20 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", - "time": "2015-09-15 08:30:42" + "time": "2015-10-27 15:38:06" }, { "name": "symfony/event-dispatcher", - "version": "v2.7.5", + "version": "v2.7.6", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "ae4dcc2a8d3de98bd794167a3ccda1311597c5d9" + "reference": "87a5db5ea887763fa3a31a5471b512ff1596d9b8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/ae4dcc2a8d3de98bd794167a3ccda1311597c5d9", - "reference": "ae4dcc2a8d3de98bd794167a3ccda1311597c5d9", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/87a5db5ea887763fa3a31a5471b512ff1596d9b8", + "reference": "87a5db5ea887763fa3a31a5471b512ff1596d9b8", "shasum": "" }, "require": { @@ -1349,7 +1345,6 @@ "symfony/config": "~2.0,>=2.0.5", "symfony/dependency-injection": "~2.6", "symfony/expression-language": "~2.6", - "symfony/phpunit-bridge": "~2.7", "symfony/stopwatch": "~2.3" }, "suggest": { @@ -1383,28 +1378,27 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2015-09-22 13:49:29" + "time": "2015-10-11 09:39:48" }, { "name": "symfony/http-foundation", - "version": "v2.7.5", + "version": "v2.7.6", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "e1509119f164a0d0a940d7d924d693a7a28a5470" + "reference": "7598eea151ae3d4134df1f9957364b17809eea75" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e1509119f164a0d0a940d7d924d693a7a28a5470", - "reference": "e1509119f164a0d0a940d7d924d693a7a28a5470", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/7598eea151ae3d4134df1f9957364b17809eea75", + "reference": "7598eea151ae3d4134df1f9957364b17809eea75", "shasum": "" }, "require": { "php": ">=5.3.9" }, "require-dev": { - "symfony/expression-language": "~2.4", - "symfony/phpunit-bridge": "~2.7" + "symfony/expression-language": "~2.4" }, "type": "library", "extra": { @@ -1436,20 +1430,20 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2015-09-22 13:49:29" + "time": "2015-10-23 14:47:27" }, { "name": "symfony/http-kernel", - "version": "v2.7.5", + "version": "v2.7.6", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "353aa457424262d7d4e4289ea483145921cffcb5" + "reference": "4260f2273a446a6715063dc9ca89fd0c475c2f77" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/353aa457424262d7d4e4289ea483145921cffcb5", - "reference": "353aa457424262d7d4e4289ea483145921cffcb5", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/4260f2273a446a6715063dc9ca89fd0c475c2f77", + "reference": "4260f2273a446a6715063dc9ca89fd0c475c2f77", "shasum": "" }, "require": { @@ -1472,7 +1466,6 @@ "symfony/dom-crawler": "~2.0,>=2.0.5", "symfony/expression-language": "~2.4", "symfony/finder": "~2.0,>=2.0.5", - "symfony/phpunit-bridge": "~2.7", "symfony/process": "~2.0,>=2.0.5", "symfony/routing": "~2.2", "symfony/stopwatch": "~2.3", @@ -1516,28 +1509,25 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2015-09-25 11:16:52" + "time": "2015-10-27 19:07:21" }, { "name": "symfony/process", - "version": "v2.7.5", + "version": "v2.7.6", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "b27c8e317922cd3cdd3600850273cf6b82b2e8e9" + "reference": "4a959dd4e19c2c5d7512689413921e0a74386ec7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/b27c8e317922cd3cdd3600850273cf6b82b2e8e9", - "reference": "b27c8e317922cd3cdd3600850273cf6b82b2e8e9", + "url": "https://api.github.com/repos/symfony/process/zipball/4a959dd4e19c2c5d7512689413921e0a74386ec7", + "reference": "4a959dd4e19c2c5d7512689413921e0a74386ec7", "shasum": "" }, "require": { "php": ">=5.3.9" }, - "require-dev": { - "symfony/phpunit-bridge": "~2.7" - }, "type": "library", "extra": { "branch-alias": { @@ -1565,7 +1555,7 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2015-09-19 19:59:23" + "time": "2015-10-23 14:47:27" }, { "name": "symfony/psr-http-message-bridge", @@ -1623,16 +1613,16 @@ }, { "name": "symfony/routing", - "version": "v2.7.5", + "version": "v2.7.6", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "6c5fae83efa20baf166fcf4582f57094e9f60f16" + "reference": "f353e1f588679c3ec987624e6c617646bd01ba38" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/6c5fae83efa20baf166fcf4582f57094e9f60f16", - "reference": "6c5fae83efa20baf166fcf4582f57094e9f60f16", + "url": "https://api.github.com/repos/symfony/routing/zipball/f353e1f588679c3ec987624e6c617646bd01ba38", + "reference": "f353e1f588679c3ec987624e6c617646bd01ba38", "shasum": "" }, "require": { @@ -1648,7 +1638,6 @@ "symfony/config": "~2.7", "symfony/expression-language": "~2.4", "symfony/http-foundation": "~2.3", - "symfony/phpunit-bridge": "~2.7", "symfony/yaml": "~2.0,>=2.0.5" }, "suggest": { @@ -1690,20 +1679,20 @@ "uri", "url" ], - "time": "2015-09-14 14:14:09" + "time": "2015-10-27 15:38:06" }, { "name": "symfony/serializer", - "version": "v2.7.5", + "version": "v2.7.6", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "baf24f86a8656eea9c80988f332e51461bfcb67f" + "reference": "14056684acad23b8815eb336bccc0b4ac76bd823" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/baf24f86a8656eea9c80988f332e51461bfcb67f", - "reference": "baf24f86a8656eea9c80988f332e51461bfcb67f", + "url": "https://api.github.com/repos/symfony/serializer/zipball/14056684acad23b8815eb336bccc0b4ac76bd823", + "reference": "14056684acad23b8815eb336bccc0b4ac76bd823", "shasum": "" }, "require": { @@ -1713,7 +1702,6 @@ "doctrine/annotations": "~1.0", "doctrine/cache": "~1.0", "symfony/config": "~2.2", - "symfony/phpunit-bridge": "~2.7", "symfony/property-access": "~2.3", "symfony/yaml": "~2.0,>=2.0.5" }, @@ -1751,20 +1739,20 @@ ], "description": "Symfony Serializer Component", "homepage": "https://symfony.com", - "time": "2015-08-31 16:44:53" + "time": "2015-10-11 09:39:48" }, { "name": "symfony/translation", - "version": "v2.7.5", + "version": "v2.7.6", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "485877661835e188cd78345c6d4eef1290d17571" + "reference": "6ccd9289ec1c71d01a49d83480de3b5293ce30c8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/485877661835e188cd78345c6d4eef1290d17571", - "reference": "485877661835e188cd78345c6d4eef1290d17571", + "url": "https://api.github.com/repos/symfony/translation/zipball/6ccd9289ec1c71d01a49d83480de3b5293ce30c8", + "reference": "6ccd9289ec1c71d01a49d83480de3b5293ce30c8", "shasum": "" }, "require": { @@ -1777,7 +1765,6 @@ "psr/log": "~1.0", "symfony/config": "~2.7", "symfony/intl": "~2.4", - "symfony/phpunit-bridge": "~2.7", "symfony/yaml": "~2.2" }, "suggest": { @@ -1812,20 +1799,20 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", - "time": "2015-09-06 08:36:38" + "time": "2015-10-27 15:38:06" }, { "name": "symfony/validator", - "version": "v2.7.5", + "version": "v2.7.6", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "b359dc71e253ce6eb69eefbd5088032241e7a66f" + "reference": "df9021e689aa3d08367881e7f8917219fabe5e64" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/b359dc71e253ce6eb69eefbd5088032241e7a66f", - "reference": "b359dc71e253ce6eb69eefbd5088032241e7a66f", + "url": "https://api.github.com/repos/symfony/validator/zipball/df9021e689aa3d08367881e7f8917219fabe5e64", + "reference": "df9021e689aa3d08367881e7f8917219fabe5e64", "shasum": "" }, "require": { @@ -1835,12 +1822,12 @@ "require-dev": { "doctrine/annotations": "~1.0", "doctrine/cache": "~1.0", + "doctrine/common": "~2.3", "egulias/email-validator": "~1.2,>=1.2.1", "symfony/config": "~2.2", "symfony/expression-language": "~2.4", "symfony/http-foundation": "~2.1", "symfony/intl": "~2.4", - "symfony/phpunit-bridge": "~2.7", "symfony/property-access": "~2.3", "symfony/yaml": "~2.0,>=2.0.5" }, @@ -1882,28 +1869,25 @@ ], "description": "Symfony Validator Component", "homepage": "https://symfony.com", - "time": "2015-09-23 11:13:27" + "time": "2015-10-18 20:23:18" }, { "name": "symfony/yaml", - "version": "v2.7.5", + "version": "v2.7.6", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "31cb2ad0155c95b88ee55fe12bc7ff92232c1770" + "reference": "eca9019c88fbe250164affd107bc8057771f3f4d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/31cb2ad0155c95b88ee55fe12bc7ff92232c1770", - "reference": "31cb2ad0155c95b88ee55fe12bc7ff92232c1770", + "url": "https://api.github.com/repos/symfony/yaml/zipball/eca9019c88fbe250164affd107bc8057771f3f4d", + "reference": "eca9019c88fbe250164affd107bc8057771f3f4d", "shasum": "" }, "require": { "php": ">=5.3.9" }, - "require-dev": { - "symfony/phpunit-bridge": "~2.7" - }, "type": "library", "extra": { "branch-alias": { @@ -1931,20 +1915,20 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2015-09-14 14:14:09" + "time": "2015-10-11 09:39:48" }, { "name": "twig/twig", - "version": "v1.22.2", + "version": "v1.23.1", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "79249fc8c9ff62e41e217e0c630e2e00bcadda6a" + "reference": "d9b6333ae8dd2c8e3fd256e127548def0bc614c6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/79249fc8c9ff62e41e217e0c630e2e00bcadda6a", - "reference": "79249fc8c9ff62e41e217e0c630e2e00bcadda6a", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/d9b6333ae8dd2c8e3fd256e127548def0bc614c6", + "reference": "d9b6333ae8dd2c8e3fd256e127548def0bc614c6", "shasum": "" }, "require": { @@ -1957,7 +1941,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.22-dev" + "dev-master": "1.23-dev" } }, "autoload": { @@ -1992,20 +1976,20 @@ "keywords": [ "templating" ], - "time": "2015-09-22 13:59:32" + "time": "2015-11-05 12:49:06" }, { "name": "wikimedia/composer-merge-plugin", - "version": "dev-master", + "version": "v1.3.0", "source": { "type": "git", "url": "https://github.com/wikimedia/composer-merge-plugin.git", - "reference": "47bb3388cfeae41a38087ac8465a7d08fa92ea2e" + "reference": "bfed1f8d4eb97e9ba80eee57ea46229d7e5364d9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/wikimedia/composer-merge-plugin/zipball/6196fdb001faf681f92db2ae10abafb5815affde", - "reference": "47bb3388cfeae41a38087ac8465a7d08fa92ea2e", + "url": "https://api.github.com/repos/wikimedia/composer-merge-plugin/zipball/bfed1f8d4eb97e9ba80eee57ea46229d7e5364d9", + "reference": "bfed1f8d4eb97e9ba80eee57ea46229d7e5364d9", "shasum": "" }, "require": { @@ -2015,8 +1999,7 @@ "require-dev": { "composer/composer": "1.0.*@dev", "jakub-onderka/php-parallel-lint": "~0.8", - "phpspec/prophecy-phpunit": "~1.0", - "phpunit/phpunit": "~4.0", + "phpunit/phpunit": "~4.8|~5.0", "squizlabs/php_codesniffer": "~2.1.0" }, "type": "composer-plugin", @@ -2042,7 +2025,7 @@ } ], "description": "Composer plugin to merge multiple composer.json files", - "time": "2015-09-22 21:14:25" + "time": "2015-11-06 20:31:16" }, { "name": "zendframework/zend-diactoros", @@ -3599,16 +3582,16 @@ }, { "name": "symfony/browser-kit", - "version": "v2.7.5", + "version": "v2.7.6", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", - "reference": "277a2457776d4cc25706fbdd9d1e4ab2dac884e4" + "reference": "07d664a052572ccc28eb2ab7dbbe82155b1ad367" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/277a2457776d4cc25706fbdd9d1e4ab2dac884e4", - "reference": "277a2457776d4cc25706fbdd9d1e4ab2dac884e4", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/07d664a052572ccc28eb2ab7dbbe82155b1ad367", + "reference": "07d664a052572ccc28eb2ab7dbbe82155b1ad367", "shasum": "" }, "require": { @@ -3617,8 +3600,7 @@ }, "require-dev": { "symfony/css-selector": "~2.0,>=2.0.5", - "symfony/phpunit-bridge": "~2.7", - "symfony/process": "~2.0,>=2.0.5" + "symfony/process": "~2.3.34|~2.7,>=2.7.6" }, "suggest": { "symfony/process": "" @@ -3650,28 +3632,25 @@ ], "description": "Symfony BrowserKit Component", "homepage": "https://symfony.com", - "time": "2015-09-06 08:36:38" + "time": "2015-10-23 14:47:27" }, { "name": "symfony/css-selector", - "version": "v2.7.5", + "version": "v2.7.6", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "abe19cc0429a06be0c133056d1f9859854860970" + "reference": "e1b865b26be4a56d22a8dee398375044a80c865b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/abe19cc0429a06be0c133056d1f9859854860970", - "reference": "abe19cc0429a06be0c133056d1f9859854860970", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/e1b865b26be4a56d22a8dee398375044a80c865b", + "reference": "e1b865b26be4a56d22a8dee398375044a80c865b", "shasum": "" }, "require": { "php": ">=5.3.9" }, - "require-dev": { - "symfony/phpunit-bridge": "~2.7" - }, "type": "library", "extra": { "branch-alias": { @@ -3703,28 +3682,27 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", - "time": "2015-09-22 13:49:29" + "time": "2015-10-11 09:39:48" }, { "name": "symfony/dom-crawler", - "version": "v2.7.5", + "version": "v2.7.6", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "2e185ca136399f902b948694987e62c80099c052" + "reference": "5fef7d8b80d8f9992df99d8ee283f420484c9612" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/2e185ca136399f902b948694987e62c80099c052", - "reference": "2e185ca136399f902b948694987e62c80099c052", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/5fef7d8b80d8f9992df99d8ee283f420484c9612", + "reference": "5fef7d8b80d8f9992df99d8ee283f420484c9612", "shasum": "" }, "require": { "php": ">=5.3.9" }, "require-dev": { - "symfony/css-selector": "~2.3", - "symfony/phpunit-bridge": "~2.7" + "symfony/css-selector": "~2.3" }, "suggest": { "symfony/css-selector": "" @@ -3756,7 +3734,7 @@ ], "description": "Symfony DomCrawler Component", "homepage": "https://symfony.com", - "time": "2015-09-20 21:13:58" + "time": "2015-10-11 09:39:48" } ], "aliases": [], diff --git a/core/CHANGELOG.txt b/core/CHANGELOG.txt index df80cfbb8..1c5f8a588 100644 --- a/core/CHANGELOG.txt +++ b/core/CHANGELOG.txt @@ -1,24 +1,69 @@ -Drupal 8.0, xxxx-xx-xx (development version) +Drupal 8.0.x, xxxx-xx-xx (development version) ---------------------- -- Added Twig as the default template engine and converted all .tpl.php templates - to .html.twig. +- Dramatically improved the front end: + * Made all built-in themes responsive. + * Added support for responsive images. + * Added Twig as the default template engine and converted all .tpl.php + templates and theme functions to .html.twig. + * Removed the PHPTemplate engine. + * Several large scale cleanups of the markup produced by Drupal. + * Added Classy as a base theme to maintain CSS classes and wrappers. + * Added Stable as the default base theme to maintain backwards compatibility + for core template and CSS changes, because templates and CSS outside + Stable can be improved in minor releases (8.1.0, 8.2.0 …). + * Redesigned several key elements of the Seven theme. + * Added support for HTML5 elements. + * Included the HTML5 Shiv library to support HTML5 elements in IE 8 and + below. + * Included Backbone.js and Underscore.js JavaScript frameworks. + * Updated to jQuery 2.1.4. + * Updated to jQuery UI 1.11.4. + * Removed jquery.bbq. + * Removed the Garland theme from core. + * Removed the Overlay module from core. + * Improved the asset library system to manage CSS and JavaScript files and + their dependencies. Allowing for smaller AJAX request payloads. + * jQuery is no longer loaded on all pages, only when another asset needs it. + * No JavaScript is loaded at all for anonymous users by default, for faster + page loads. + * Implemented SMACSS-style categorization for CSS files. + * Removed most support for Internet Explorer 8 and below. + * Added Modernizr for making styling changes based on browser support. + * All page template variables converted to blocks. - Added tour module. Provides highly contextual tips for UI elements. - Improved entity system. * Added support for saving and deleting entities through the controller. + * Base entity fields (such as labels) support widgets, formatters and + translation. + * Form modes introduced, similar to display modes. * Entities are now classed objects, implementing EntityInterface. * Drupal now understands the concept of a "default" revision, tracked independently from the latest revision, allowing for the creation of drafts while the current revision stays published. * All entity types, not just nodes, now have support for revisions. -- Replaced the core routing system with one built on the Symfony2 framework. +- Refactored routing system based on Symfony2 components. +- Reworked menu links, local actions, and local tasks based upon the new routing + system. +- Added plugin system to standardize implementation of several core APIs. - Configuration: * Added a centralized file-based configuration system. * Allows module authors to provide configuration in a standard format. * Implements functionality to get, set, add and remove configuration. * Includes ability to override configuration values with language variants and other runtime values. -- Added the CKEditor WYSIWYG editor. Provides a drag-and-drop configuration UI. -- Included the HTML5 Shiv library to support HTML5 elements in IE 8 and below. + * Supports configuration schema, dependencies, and validation to maintain + data-integrity between deployments and updates. +- Improved authoring experience: + * Added the CKEditor WYSIWYG editor. Clean markup guaranteed thanks to tight + integration with the filter system. + * Includes uploading, aligning and captioning of images. + * Correspondingly modernized the default text formats. + * Provides a drag-and-drop configuration UI, which automatically updates the + HTML filter settings, making configuring text formats trivial for typical + use cases. + * Added align and caption filters that can be applied to any element: + images, blockquotes, code snippets, videos… + * In-place editing of any entity: nodes, blocks… - Included the following Symfony2 components: * ClassLoader - PSR-0-compatible autoload routines. * DependencyInjection - Flexible dependency injection container. @@ -28,10 +73,13 @@ Drupal 8.0, xxxx-xx-xx (development version) * Process - Allows for executing commands in a sub-process. * Routing - Framework for mapping incoming requests to controller information. + * Serialization - Serialize complex nested objects into JSON/XML etc. + * Validator - Ensure that an object is in a valid state based upon some + validation rules defined for it. * Yaml - Parser for YAML files. -- Included the Assetic asset management framework for PHP. -- Included Backbone.js and Underscore.js JavaScript frameworks. -- Support added for making HTTP requests through a proxy server. +- Added routing component from Symfony CMF. +- Added Guzzle HTTP library. +- Added Zend Feed component. - Removed modules from core. * The following modules have been removed from core, because contributed modules with similar functionality are available: @@ -42,35 +90,30 @@ Drupal 8.0, xxxx-xx-xx (development version) * Poll * Profile * Trigger -- Removed the Overlay module from core. -- Removed the Garland theme from core. - Removed the Statistics module's accesslog functionality and reports from core. - Removed XML-RPC functionality from core. - Removed user signatures support from core. -- Removed backwards-compatibility with 'magic_quotes_gpc'/'magic_quotes_runtime' - PHP configuration settings. Both are required to be disabled. - Universally Unique IDentifier (UUID): * Support for generating and validating UUIDs. -- JavaScript changes: - * Updated to jQuery 2.1.0 - * Updated to jQuery UI 1.10.2 - * Removed jquery.bbq - Tremendously improved language support all around. * Great language improvements for users: * Improved language selection with user preference detection in the - installer. + installer based on browser settings. + * The installer is presented in the user's native language. * Moved base language support to Language module. * Greatly simplified the interface for setting up languages. * Improved browser language detection considerably. - * Language domain and path prefix configuraton simplified and centralized; - path prefix detection is now default. + * Language domain and path prefix configuration simplified and + centralized; path prefix detection is now default. * Added HTML 5 language markup; language information added in markup in several more places. * Made it possible to assign external language codes to local languages. * Introduced the possibility of an administration-specific language preference for users. + * Language selection fallback language is now independently configurable + without needing to change the site default language. * Simplified and added new features in interface translation: - * Made interface translation directly accessible from language list. + * Made interface translation directly accessible from the language list. * Centralized interface translation import to one directory. * Drupal can now be translated to English and English can be deleted. * Much improved built-in translation interface. @@ -79,6 +122,7 @@ Drupal 8.0, xxxx-xx-xx (development version) be identified and protected from translation update overwrites. * All Gettext files are now imported in chunks, better for low resource environments. + * Automated import and update of translations in the installer and later. * Improved content language support: * Made it possible to assign language to taxonomy terms, vocabularies, menu items, and files. @@ -107,29 +151,64 @@ Drupal 8.0, xxxx-xx-xx (development version) developers. * Made it possible for users to have a preferred language separate from their user entity language. - * The text formatter from t() is now available as format_string(). + * The text formatter from t() is now available as FormattableMarkup. * Added support for interface translation contexts in Drupal.t(), - Drupal.formatPlural() as well as routing, tabs, actions, and contextual - links. + Drupal.formatPlural() as well as routing, tabs, actions, shipped + menu items and contextual links. * Removed textgroups support from interface translation in favor of native configuration language support. * Added configuration schema system to support generating translation forms for any configuration. * Reworked Gettext PO support to use pluggable read/write handlers. * Added language select form element in the Form API. -- Added Email field type to core. -- Added Link field type to core. -- Added Phone number field type to core. + * Added a transliteration API. (Only used for machine names in core.) +- New field types added to core: + - Email + - Link + - Phone number + - Entity reference + - Date + - Comment (allows comment threads on entity types other than node). - Added local image input filter, to enable secure image posting. -- Added Views and Views UI module to core. -- Added Entity Reference field type to core. -- Added Date field type to core. +- Added Views and Views UI module to core: + * Various core listings: /node, /admin/content/node, /admin/people etc. are + now served by views. + * REST API support built in. + * Rewrote caching integration for better performance. +- Custom blocks are now fieldable, revisionable, and translatable entities. +- An accessible modal API based on improvements made in collaboration with the + jQuery UI team and the Views team. +- Fieldable contact forms allowing site-builders to easily build custom forms + for soliciting feedback from users. - Added a Web Services module package. * Added a RESTful web services provider module. * Added a serialization module using the Symfony serialization component. * Added a Hypertext Application Language (HAL) serialization module. * Added a HTTP Basic authentication provider module. +- Significant performance/scalability improvements: + * Cache tags, which allow content to be invalidated accurately and instantly, + including reverse proxies and CDNs. + * Cache contexts, which allow content to be cached correctly, and placeholdered + to improve cache hit rates. + * Cacheability bubbling, which allows strict tracking of assets and + cacheability throughout page rendering. + * Page caching has been factored out to its own module and is enabled by + default. + * Authenticated page caching has been added to core via the Dynamic Page Cache + module and is enabled by default. + * APCu, memory, and PHP file caching backends added to core, alongside support + for a chained, consistent cache backend to support correctly using fast + local cache implementations with multiple web servers. - When using MySQL, the MyISAM engine is no longer supported. +- Testing improvements + * Added PHPUnit for proper unit testing, see + https://phpunit.de/manual/4.8/en/index.html so you can run tests via + your IDE. + * Added BrowserTestBase as an alternative to simpletest for browser + testing (JavaScript support to be included in the future) + * Added KernelTestBase to provide a fast API testing of integration of + different components + * Core branch nightly tests include PHP 5.5, 5.6, 7, sqlite and PostgreSQL. Drupal 7.0, 2011-01-05 ---------------------- diff --git a/core/MAINTAINERS.txt b/core/MAINTAINERS.txt index 5d00d6650..1fa3118a6 100644 --- a/core/MAINTAINERS.txt +++ b/core/MAINTAINERS.txt @@ -283,6 +283,7 @@ Breakpoint module CKEditor module - Wim Leers 'Wim Leers' https://www.drupal.org/u/wim-leers +- Marek 'mlewand' Lewandowski https://www.drupal.org/u/mlewand Color module - ? diff --git a/core/composer.json b/core/composer.json index fd33b45b7..afb170ad5 100644 --- a/core/composer.json +++ b/core/composer.json @@ -17,7 +17,7 @@ "symfony/validator": "2.7.*", "symfony/process": "2.7.*", "symfony/yaml": "2.7.*", - "twig/twig": "^1.22.2", + "twig/twig": "^1.23.1", "doctrine/common": "2.5.*", "doctrine/annotations": "1.2.*", "guzzlehttp/guzzle": "~6.1", diff --git a/core/core.libraries.yml b/core/core.libraries.yml index a05f09410..2d16fc975 100644 --- a/core/core.libraries.yml +++ b/core/core.libraries.yml @@ -260,7 +260,6 @@ drupal.tabledrag: misc/tabledrag.js: { weight: -1 } dependencies: - core/jquery - - core/modernizr - core/drupal - core/drupalSettings - core/jquery.once diff --git a/core/core.services.yml b/core/core.services.yml index a83af3460..afccb3177 100644 --- a/core/core.services.yml +++ b/core/core.services.yml @@ -949,14 +949,14 @@ services: tags: - { name: route_enhancer } - { name: event_subscriber } + route_enhancer.form: + class: Drupal\Core\Routing\Enhancer\FormRouteEnhancer + tags: + - { name: route_enhancer } route_enhancer.entity: class: Drupal\Core\Entity\Enhancer\EntityRouteEnhancer tags: - { name: route_enhancer, priority: 20 } - route_content_controller_subscriber: - class: Drupal\Core\EventSubscriber\ContentControllerSubscriber - tags: - - { name: event_subscriber } route_special_attributes_subscriber: class: Drupal\Core\EventSubscriber\SpecialAttributesRouteSubscriber tags: diff --git a/core/includes/errors.inc b/core/includes/errors.inc index 479548065..39d8ffd03 100644 --- a/core/includes/errors.inc +++ b/core/includes/errors.inc @@ -119,8 +119,11 @@ function error_displayable($error = NULL) { * %line, severity_level, and backtrace. All the parameters are plain-text, * with the exception of @message, which needs to be an HTML string, and * backtrace, which is a standard PHP backtrace. - * @param $fatal - * TRUE if the error is fatal. + * @param bool $fatal + * TRUE for: + * - An exception is thrown and not caught by something else. + * - A recoverable fatal error, which is a fatal error. + * Non-recoverable fatal errors cannot be logged by Drupal. */ function _drupal_log_error($error, $fatal = FALSE) { $is_installer = drupal_installation_attempted(); @@ -169,6 +172,11 @@ function _drupal_log_error($error, $fatal = FALSE) { } } + // Log fatal errors, so developers can find and debug them. + if ($fatal) { + error_log(sprintf('%s: %s in %s on line %d', $error['%type'], $error['@message'], $error['%file'], $error['%line'])); + } + if (PHP_SAPI === 'cli') { if ($fatal) { // When called from CLI, simply output a plain text message. diff --git a/core/includes/install.core.inc b/core/includes/install.core.inc index 60ef2d7cd..7b669114e 100644 --- a/core/includes/install.core.inc +++ b/core/includes/install.core.inc @@ -15,6 +15,7 @@ use Drupal\Core\Language\LanguageManager; use Drupal\Core\Logger\LoggerChannelFactory; use Drupal\Core\Site\Settings; use Drupal\Core\StringTranslation\Translator\FileTranslation; +use Drupal\Core\StackMiddleware\ReverseProxyMiddleware; use Drupal\Core\Extension\ExtensionDiscovery; use Drupal\Core\DependencyInjection\ContainerBuilder; use Drupal\Core\Url; @@ -403,6 +404,8 @@ function install_begin_request($class_loader, &$install_state) { $kernel->setSitePath($site_path); $kernel->boot(); $container = $kernel->getContainer(); + // If Drupal is being installed behind a proxy, configure the request. + ReverseProxyMiddleware::setSettingsOnRequest($request, Settings::getInstance()); // Register the file translation service. if (isset($GLOBALS['config']['locale.settings']['translation']['path'])) { diff --git a/core/includes/theme.inc b/core/includes/theme.inc index e8cff8ba6..62f2d6ff7 100644 --- a/core/includes/theme.inc +++ b/core/includes/theme.inc @@ -1778,7 +1778,7 @@ function drupal_common_theme() { ), // From menu.inc. 'menu' => array( - 'variables' => array('items' => array(), 'attributes' => array()), + 'variables' => array('menu_name' => NULL, 'items' => array(), 'attributes' => array()), ), 'menu_local_task' => array( 'render element' => 'element', diff --git a/core/includes/theme.maintenance.inc b/core/includes/theme.maintenance.inc index b98d28af7..80cc52cb8 100644 --- a/core/includes/theme.maintenance.inc +++ b/core/includes/theme.maintenance.inc @@ -82,19 +82,21 @@ function _drupal_maintenance_theme() { $theme = $custom_theme; // Find all our ancestor themes and put them in an array. - $base_theme = array(); + // @todo This is just a workaround. Find a better way how to handle themes + // on maintenance pages, see https://www.drupal.org/node/2322619. + // This code is basically a duplicate of + // \Drupal\Core\Theme\ThemeInitialization::getActiveThemeByName. + $base_themes = []; $ancestor = $theme; while ($ancestor && isset($themes[$ancestor]->base_theme)) { - $base_theme[] = $themes[$themes[$ancestor]->base_theme]; + $base_themes[] = $themes[$themes[$ancestor]->base_theme]; $ancestor = $themes[$ancestor]->base_theme; if ($ancestor) { - // Ensure that the base theme is added. + // Ensure that the base theme is added and installed. $theme_handler->addTheme($themes[$ancestor]); } } - // @todo This is just a workaround. Find a better way how to handle themes - // on maintenance pages, see https://www.drupal.org/node/2322619. - \Drupal::theme()->setActiveTheme($theme_init->getActiveTheme($themes[$custom_theme], array_reverse($base_theme))); + \Drupal::theme()->setActiveTheme($theme_init->getActiveTheme($themes[$custom_theme], $base_themes)); // Prime the theme registry. Drupal::service('theme.registry'); } diff --git a/core/lib/Drupal.php b/core/lib/Drupal.php index b2edb81da..d75f50b72 100644 --- a/core/lib/Drupal.php +++ b/core/lib/Drupal.php @@ -81,7 +81,7 @@ class Drupal { /** * The current system version. */ - const VERSION = '8.0.0-rc3'; + const VERSION = '8.0.0-dev-2015-11-17'; /** * Core API compatibility. @@ -252,11 +252,27 @@ class Drupal { * * @return \Drupal\Core\Entity\EntityManagerInterface * The entity manager service. + * + * @deprecated in Drupal 8.0.0 and will be removed before Drupal 9.0.0. + * Use \Drupal::entityTypeManager() instead in most cases. If the needed + * method is not on \Drupal\Core\Entity\EntityTypeManagerInterface, see the + * deprecated \Drupal\Core\Entity\EntityManager to find the + * correct interface or service. */ public static function entityManager() { return static::getContainer()->get('entity.manager'); } + /** + * Retrieves the entity type manager. + * + * @return \Drupal\Core\Entity\EntityTypeManagerInterface + * The entity type manager. + */ + public static function entityTypeManager() { + return static::getContainer()->get('entity_type.manager'); + } + /** * Returns the current primary database. * diff --git a/core/lib/Drupal/Component/PhpStorage/FileStorage.php b/core/lib/Drupal/Component/PhpStorage/FileStorage.php index e4e7fde44..b6a2a9dc2 100644 --- a/core/lib/Drupal/Component/PhpStorage/FileStorage.php +++ b/core/lib/Drupal/Component/PhpStorage/FileStorage.php @@ -79,8 +79,7 @@ class FileStorage implements PhpStorageInterface { public static function htaccessLines($private = TRUE) { $lines = <<themeManager->getActiveTheme(); // Add the theme name to the cache key since themes may implement - // hook_css_alter(). - $cid = 'css:' . $theme_info->getName() . ':' . Crypt::hashBase64(serialize($assets)) . (int) $optimize; + // hook_library_info_alter(). + $libraries_to_load = $this->getLibrariesToLoad($assets); + $cid = 'css:' . $theme_info->getName() . ':' . Crypt::hashBase64(serialize($libraries_to_load)) . (int) $optimize; if ($cached = $this->cache->get($cid)) { return $cached->data; } @@ -132,7 +133,7 @@ class AssetResolver implements AssetResolverInterface { 'browsers' => [], ]; - foreach ($this->getLibrariesToLoad($assets) as $library) { + foreach ($libraries_to_load as $library) { list($extension, $name) = explode('/', $library, 2); $definition = $this->libraryDiscovery->getLibraryByName($extension, $name); if (isset($definition['css'])) { @@ -187,9 +188,7 @@ class AssetResolver implements AssetResolverInterface { * Returns the JavaScript settings assets for this response's libraries. * * Gathers all drupalSettings from all libraries in the attached assets - * collection and merges them, then it merges individual attached settings, - * and finally invokes hook_js_settings_alter() to allow alterations of - * JavaScript settings by modules and themes. + * collection and merges them. * * @param \Drupal\Core\Asset\AttachedAssetsInterface $assets * The assets attached to the current response. @@ -207,9 +206,6 @@ class AssetResolver implements AssetResolverInterface { } } - // Attached settings win over settings in libraries. - $settings = NestedArray::mergeDeepArray([$settings, $assets->getSettings()], TRUE); - return $settings; } @@ -219,9 +215,10 @@ class AssetResolver implements AssetResolverInterface { public function getJsAssets(AttachedAssetsInterface $assets, $optimize) { $theme_info = $this->themeManager->getActiveTheme(); // Add the theme name to the cache key since themes may implement - // hook_js_alter(). Additionally add the current language to support - // translation of JavaScript files. - $cid = 'js:' . $theme_info->getName() . ':' . $this->languageManager->getCurrentLanguage()->getId() . ':' . Crypt::hashBase64(serialize($assets)) . (int) $optimize; + // hook_library_info_alter(). Additionally add the current language to + // support translation of JavaScript files via hook_js_alter(). + $libraries_to_load = $this->getLibrariesToLoad($assets); + $cid = 'js:' . $theme_info->getName() . ':' . $this->languageManager->getCurrentLanguage()->getId() . ':' . Crypt::hashBase64(serialize($libraries_to_load)) . (int) (count($assets->getSettings()) > 0) . (int) $optimize; if ($cached = $this->cache->get($cid)) { list($js_assets_header, $js_assets_footer, $settings, $settings_in_header) = $cached->data; @@ -239,8 +236,6 @@ class AssetResolver implements AssetResolverInterface { 'browsers' => [], ]; - $libraries_to_load = $this->getLibrariesToLoad($assets); - // Collect all libraries that contain JS assets and are in the header. $header_js_libraries = []; foreach ($libraries_to_load as $library) { @@ -329,8 +324,10 @@ class AssetResolver implements AssetResolverInterface { $this->cache->set($cid, [$js_assets_header, $js_assets_footer, $settings, $settings_in_header], CacheBackendInterface::CACHE_PERMANENT, ['library_info']); } - if ($settings !== FALSE) { + // Attached settings override both library definitions and + // hook_js_settings_build(). + $settings = NestedArray::mergeDeepArray([$settings, $assets->getSettings()], TRUE); // Allow modules and themes to alter the JavaScript settings. $this->moduleHandler->alter('js_settings', $settings, $assets); $this->themeManager->alter('js_settings', $settings, $assets); diff --git a/core/lib/Drupal/Core/Cache/CacheCollector.php b/core/lib/Drupal/Core/Cache/CacheCollector.php index eb1ca57a5..9755c1abb 100644 --- a/core/lib/Drupal/Core/Cache/CacheCollector.php +++ b/core/lib/Drupal/Core/Cache/CacheCollector.php @@ -7,6 +7,7 @@ namespace Drupal\Core\Cache; +use Drupal\Component\Utility\Crypt; use Drupal\Core\DestructableInterface; use Drupal\Core\Lock\LockBackendInterface; @@ -232,7 +233,7 @@ abstract class CacheCollector implements CacheCollectorInterface, DestructableIn // Lock cache writes to help avoid stampedes. $cid = $this->getCid(); - $lock_name = $cid . ':' . __CLASS__; + $lock_name = $this->normalizeLockName($cid . ':' . __CLASS__); if (!$lock || $this->lock->acquire($lock_name)) { // Set and delete operations invalidate the cache item. Try to also load // an eventually invalidated cache entry, only update an invalidated cache @@ -264,6 +265,30 @@ abstract class CacheCollector implements CacheCollectorInterface, DestructableIn $this->keysToRemove = array(); } + /** + * Normalizes a cache ID in order to comply with database limitations. + * + * @param string $cid + * The passed in cache ID. + * + * @return string + * An ASCII-encoded cache ID that is at most 255 characters long. + */ + protected function normalizeLockName($cid) { + // Nothing to do if the ID is a US ASCII string of 255 characters or less. + $cid_is_ascii = mb_check_encoding($cid, 'ASCII'); + if (strlen($cid) <= 255 && $cid_is_ascii) { + return $cid; + } + // Return a string that uses as much as possible of the original cache ID + // with the hash appended. + $hash = Crypt::hashBase64($cid); + if (!$cid_is_ascii) { + return $hash; + } + return substr($cid, 0, 255 - strlen($hash)) . $hash; + } + /** * {@inheritdoc} */ diff --git a/core/lib/Drupal/Core/Composer/Composer.php b/core/lib/Drupal/Core/Composer/Composer.php index 50e694256..0d5b6aacd 100644 --- a/core/lib/Drupal/Core/Composer/Composer.php +++ b/core/lib/Drupal/Core/Composer/Composer.php @@ -10,6 +10,7 @@ namespace Drupal\Core\Composer; use Drupal\Component\PhpStorage\FileStorage; use Composer\Script\Event; use Composer\Installer\PackageEvent; +use Composer\Semver\Constraint\Constraint; /** * Provides static functions for composer script events. @@ -71,23 +72,38 @@ class Composer { ]; /** - * Add vendor classes to composers static classmap. + * Add vendor classes to Composer's static classmap. */ public static function preAutoloadDump(Event $event) { - $composer = $event->getComposer(); - $package = $composer->getPackage(); - $autoload = $package->getAutoload(); - $autoload['classmap'] = array_merge($autoload['classmap'], array( - 'vendor/symfony/http-foundation/Request.php', - 'vendor/symfony/http-foundation/ParameterBag.php', - 'vendor/symfony/http-foundation/FileBag.php', - 'vendor/symfony/http-foundation/ServerBag.php', - 'vendor/symfony/http-foundation/HeaderBag.php', - 'vendor/symfony/http-kernel/HttpKernel.php', - 'vendor/symfony/http-kernel/HttpKernelInterface.php', - 'vendor/symfony/http-kernel/TerminableInterface.php', - )); - $package->setAutoload($autoload); + // We need the root package so we can add our classmaps to its loader. + $package = $event->getComposer()->getPackage(); + // We need the local repository so that we can query and see if it's likely + // that our files are present there. + $repository = $event->getComposer()->getRepositoryManager()->getLocalRepository(); + // This is, essentially, a null constraint. We only care whether the package + // is present in vendor/ yet, but findPackage() requires it. + $constraint = new Constraint('>', ''); + // Check for our packages, and then optimize them if they're present. + if ($repository->findPackage('symfony/http-foundation', $constraint)) { + $autoload = $package->getAutoload(); + $autoload['classmap'] = array_merge($autoload['classmap'], array( + 'vendor/symfony/http-foundation/Request.php', + 'vendor/symfony/http-foundation/ParameterBag.php', + 'vendor/symfony/http-foundation/FileBag.php', + 'vendor/symfony/http-foundation/ServerBag.php', + 'vendor/symfony/http-foundation/HeaderBag.php', + )); + $package->setAutoload($autoload); + } + if ($repository->findPackage('symfony/http-kernel', $constraint)) { + $autoload = $package->getAutoload(); + $autoload['classmap'] = array_merge($autoload['classmap'], array( + 'vendor/symfony/http-kernel/HttpKernel.php', + 'vendor/symfony/http-kernel/HttpKernelInterface.php', + 'vendor/symfony/http-kernel/TerminableInterface.php', + )); + $package->setAutoload($autoload); + } } /** diff --git a/core/lib/Drupal/Core/Config/ConfigInstaller.php b/core/lib/Drupal/Core/Config/ConfigInstaller.php index 7209030dd..ae12c9186 100644 --- a/core/lib/Drupal/Core/Config/ConfigInstaller.php +++ b/core/lib/Drupal/Core/Config/ConfigInstaller.php @@ -112,13 +112,13 @@ class ConfigInstaller implements ConfigInstallerInterface { $prefix = $name . '.'; } - // Gets a profile storage to search for overrides if necessary. - $profile_storage = $this->getProfileStorage($name); + // Gets profile storages to search for overrides if necessary. + $profile_storages = $this->getProfileStorages($name); // Gather information about all the supported collections. $collection_info = $this->configManager->getConfigCollectionInfo(); foreach ($collection_info->getCollectionNames() as $collection) { - $config_to_create = $this->getConfigToCreate($storage, $collection, $prefix, $profile_storage); + $config_to_create = $this->getConfigToCreate($storage, $collection, $prefix, $profile_storages); // If we're installing a profile ensure configuration that is overriding // is excluded. if ($name == $this->drupalGetProfile()) { @@ -223,19 +223,22 @@ class ConfigInstaller implements ConfigInstallerInterface { * The configuration collection to use. * @param string $prefix * (optional) Limit to configuration starting with the provided string. + * @param \Drupal\Core\Config\StorageInterface[] $profile_storages + * An array of storage interfaces containing profile configuration to check + * for overrides. * * @return array * An array of configuration data read from the source storage keyed by the * configuration object name. */ - protected function getConfigToCreate(StorageInterface $storage, $collection, $prefix = '', StorageInterface $profile_storage = NULL) { + protected function getConfigToCreate(StorageInterface $storage, $collection, $prefix = '', array $profile_storages = []) { if ($storage->getCollectionName() != $collection) { $storage = $storage->createCollection($collection); } $data = $storage->readMultiple($storage->listAll($prefix)); // Check to see if the corresponding override storage has any overrides. - if ($profile_storage) { + foreach ($profile_storages as $profile_storage) { if ($profile_storage->getCollectionName() != $collection) { $profile_storage = $profile_storage->createCollection($collection); } @@ -435,11 +438,11 @@ class ConfigInstaller implements ConfigInstallerInterface { $enabled_extensions = $this->getEnabledExtensions(); // Add the extension that will be enabled to the list of enabled extensions. $enabled_extensions[] = $name; - // Gets a profile storage to search for overrides if necessary. - $profile_storage = $this->getProfileStorage($name); + // Gets profile storages to search for overrides if necessary. + $profile_storages = $this->getProfileStorages($name); // Check the dependencies of configuration provided by the module. - $invalid_default_config = $this->findDefaultConfigWithUnmetDependencies($storage, $enabled_extensions, $profile_storage); + $invalid_default_config = $this->findDefaultConfigWithUnmetDependencies($storage, $enabled_extensions, $profile_storages); if (!empty($invalid_default_config)) { throw UnmetDependenciesException::create($name, $invalid_default_config); } @@ -460,14 +463,19 @@ class ConfigInstaller implements ConfigInstallerInterface { /** * Finds default configuration with unmet dependencies. * + * @param \Drupal\Core\Config\StorageInterface $storage + * The storage containing the default configuration. * @param array $enabled_extensions * A list of all the currently enabled modules and themes. + * @param \Drupal\Core\Config\StorageInterface[] $profile_storages + * An array of storage interfaces containing profile configuration to check + * for overrides. * * @return array * List of configuration that has unmet dependencies */ - protected function findDefaultConfigWithUnmetDependencies(StorageInterface $storage, array $enabled_extensions, StorageInterface $profile_storage = NULL) { - $config_to_create = $this->getConfigToCreate($storage, StorageInterface::DEFAULT_COLLECTION, '', $profile_storage); + protected function findDefaultConfigWithUnmetDependencies(StorageInterface $storage, array $enabled_extensions, array $profile_storages = []) { + $config_to_create = $this->getConfigToCreate($storage, StorageInterface::DEFAULT_COLLECTION, '', $profile_storages); $all_config = array_merge($this->configFactory->listAll(), array_keys($config_to_create)); return array_filter(array_keys($config_to_create), function($config_name) use ($enabled_extensions, $all_config, $config_to_create) { return !$this->validateDependencies($config_name, $config_to_create[$config_name], $enabled_extensions, $all_config); @@ -550,27 +558,31 @@ class ConfigInstaller implements ConfigInstallerInterface { /** * Gets the profile storage to use to check for profile overrides. * + * The install profile can override module configuration during a module + * install. Both the install and optional directories are checked for matching + * configuration. This allows profiles to override default configuration for + * modules they do not depend on. + * * @param string $installing_name * (optional) The name of the extension currently being installed. * - * @return \Drupal\Core\Config\StorageInterface|null - * A storage to access configuration from the installation profile. If a - * Drupal installation is not in progress or we're installing the profile - * itself, then it will return NULL as the profile storage should not be - * used. + * @return \Drupal\Core\Config\StorageInterface[]|null + * Storages to access configuration from the installation profile. If we're + * installing the profile itself, then it will return an empty array as the + * profile storage should not be used. */ - protected function getProfileStorage($installing_name = '') { + protected function getProfileStorages($installing_name = '') { $profile = $this->drupalGetProfile(); - if ($this->drupalInstallationAttempted() && $profile != $installing_name) { - // Profiles should not contain optional configuration so always use the - // install directory. - $profile_install_path = $this->getDefaultConfigDirectory('module', $profile); - $profile_storage = new FileStorage($profile_install_path, StorageInterface::DEFAULT_COLLECTION); + $profile_storages = []; + if ($profile && $profile != $installing_name) { + $profile_path = $this->drupalGetPath('module', $profile); + foreach ([InstallStorage::CONFIG_INSTALL_DIRECTORY, InstallStorage::CONFIG_OPTIONAL_DIRECTORY] as $directory) { + if (is_dir($profile_path . '/' . $directory)) { + $profile_storages[] = new FileStorage($profile_path . '/' . $directory, StorageInterface::DEFAULT_COLLECTION); + } + } } - else { - $profile_storage = NULL; - } - return $profile_storage; + return $profile_storages; } /** diff --git a/core/lib/Drupal/Core/Config/Entity/ConfigEntityBase.php b/core/lib/Drupal/Core/Config/Entity/ConfigEntityBase.php index ab2fb1058..bb396e6d4 100644 --- a/core/lib/Drupal/Core/Config/Entity/ConfigEntityBase.php +++ b/core/lib/Drupal/Core/Config/Entity/ConfigEntityBase.php @@ -387,6 +387,7 @@ abstract class ConfigEntityBase extends Entity implements ConfigEntityInterface * {@inheritdoc} */ public function url($rel = 'edit-form', $options = array()) { + // Do not remove this override: the default value of $rel is different. return parent::url($rel, $options); } @@ -394,9 +395,19 @@ abstract class ConfigEntityBase extends Entity implements ConfigEntityInterface * {@inheritdoc} */ public function link($text = NULL, $rel = 'edit-form', array $options = []) { + // Do not remove this override: the default value of $rel is different. return parent::link($text, $rel, $options); } + /** + * {@inheritdoc} + */ + public function toUrl($rel = 'edit-form', array $options = []) { + // Unless language was already provided, avoid setting an explicit language. + $options += ['language' => NULL]; + return parent::toUrl($rel, $options); + } + /** * {@inheritdoc} */ diff --git a/core/lib/Drupal/Core/Controller/ControllerBase.php b/core/lib/Drupal/Core/Controller/ControllerBase.php index ce0354ff2..544e247fe 100644 --- a/core/lib/Drupal/Core/Controller/ControllerBase.php +++ b/core/lib/Drupal/Core/Controller/ControllerBase.php @@ -49,6 +49,13 @@ abstract class ControllerBase implements ContainerInjectionInterface { */ protected $entityManager; + /** + * The entity type manager. + * + * @var \Drupal\Core\Entity\EntityTypeManagerInterface + */ + protected $entityTypeManager; + /** * The entity form builder. * @@ -117,6 +124,10 @@ abstract class ControllerBase implements ContainerInjectionInterface { * * @return \Drupal\Core\Entity\EntityManagerInterface * The entity manager service. + * + * @deprecated in Drupal 8.0.0, will be removed before Drupal 9.0.0. + * Most of the time static::entityTypeManager() is supposed to be used + * instead. */ protected function entityManager() { if (!$this->entityManager) { @@ -125,6 +136,19 @@ abstract class ControllerBase implements ContainerInjectionInterface { return $this->entityManager; } + /** + * Retrieves the entity type manager. + * + * @return \Drupal\Core\Entity\EntityTypeManagerInterface + * The entity type manager. + */ + protected function entityTypeManager() { + if (!isset($this->entityTypeManager)) { + $this->entityTypeManager = $this->container()->get('entity_type.manager'); + } + return $this->entityTypeManager; + } + /** * Retrieves the entity form builder. * diff --git a/core/lib/Drupal/Core/Datetime/DateHelper.php b/core/lib/Drupal/Core/Datetime/DateHelper.php index ad49016c0..4cfc74640 100644 --- a/core/lib/Drupal/Core/Datetime/DateHelper.php +++ b/core/lib/Drupal/Core/Datetime/DateHelper.php @@ -254,14 +254,24 @@ class DateHelper { * An array of weekdays. * * @return array - * An array of weekdays reordered to match the first day of the week. + * An array of weekdays reordered to match the first day of the week. The + * keys will remain unchanged. For example, if the first day of the week is + * set to be Monday, the array keys will be [1, 2, 3, 4, 5, 6, 0]. */ public static function weekDaysOrdered($weekdays) { $first_day = \Drupal::config('system.date')->get('first_day'); if ($first_day > 0) { for ($i = 1; $i <= $first_day; $i++) { - $last = array_shift($weekdays); - array_push($weekdays, $last); + // Reset the array to the first element. + reset($weekdays); + // Retrieve the first week day value. + $last = current($weekdays); + // Store the corresponding key. + $key = key($weekdays); + // Remove this week day from the beginning of the array. + unset($weekdays[$key]); + // Add this week day to the end of the array. + $weekdays[$key] = $last; } } return $weekdays; diff --git a/core/lib/Drupal/Core/DependencyInjection/ContainerBuilder.php b/core/lib/Drupal/Core/DependencyInjection/ContainerBuilder.php index e00426fc4..1edaec363 100644 --- a/core/lib/Drupal/Core/DependencyInjection/ContainerBuilder.php +++ b/core/lib/Drupal/Core/DependencyInjection/ContainerBuilder.php @@ -72,33 +72,6 @@ class ContainerBuilder extends SymfonyContainerBuilder { parent::setParameter($name, $value); } - /** - * Synchronizes a service change. - * - * This method is a copy of the ContainerBuilder of symfony. - * - * This method updates all services that depend on the given - * service by calling all methods referencing it. - * - * @param string $id A service id - */ - private function synchronize($id) { - foreach ($this->getDefinitions() as $definitionId => $definition) { - // only check initialized services - if (!$this->initialized($definitionId)) { - continue; - } - - foreach ($definition->getMethodCalls() as $call) { - foreach ($call[1] as $argument) { - if ($argument instanceof Reference && $id == (string) $argument) { - $this->callMethod($this->get($definitionId), $call); - } - } - } - } - } - /** * A 1to1 copy of parent::callMethod. */ diff --git a/core/lib/Drupal/Core/DrupalKernel.php b/core/lib/Drupal/Core/DrupalKernel.php index 4b56db2d6..278826e0f 100644 --- a/core/lib/Drupal/Core/DrupalKernel.php +++ b/core/lib/Drupal/Core/DrupalKernel.php @@ -821,13 +821,6 @@ class DrupalKernel implements DrupalKernelInterface, TerminableInterface { // If there is no container and no cached container definition, build a new // one from scratch. if (!isset($container) && !isset($container_definition)) { - if (version_compare(phpversion(), '7.0.0-dev') >= 0) { - // The service graph implementation is prone to corruption during GC. - // Collect cycles now then disable the GC for the time of the compiler - // run. - // @see https://bugs.php.net/bug.php?id=70805 - gc_collect_cycles(); - } $container = $this->compileContainer(); // Only dump the container if dumping is allowed. This is useful for diff --git a/core/lib/Drupal/Core/Entity/Element/EntityAutocomplete.php b/core/lib/Drupal/Core/Entity/Element/EntityAutocomplete.php index 2a52b79b3..6dd6e10cf 100644 --- a/core/lib/Drupal/Core/Entity/Element/EntityAutocomplete.php +++ b/core/lib/Drupal/Core/Entity/Element/EntityAutocomplete.php @@ -10,10 +10,10 @@ namespace Drupal\Core\Entity\Element; use Drupal\Component\Utility\Crypt; use Drupal\Component\Utility\Tags; use Drupal\Core\Entity\EntityInterface; +use Drupal\Core\Entity\EntityReferenceSelection\SelectionWithAutocreateInterface; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Render\Element\Textfield; use Drupal\Core\Site\Settings; -use Drupal\user\EntityOwnerInterface; /** * Provides an entity autocomplete form element. @@ -147,7 +147,7 @@ class EntityAutocomplete extends Textfield { 'handler_settings' => $element['#selection_settings'], ); $handler = \Drupal::service('plugin.manager.entity_reference_selection')->getInstance($options); - $autocreate = (bool) $element['#autocreate']; + $autocreate = (bool) $element['#autocreate'] && $handler instanceof SelectionWithAutocreateInterface; $input_values = $element['#tags'] ? Tags::explode($element['#value']) : array($element['#value']); foreach ($input_values as $input) { @@ -167,13 +167,14 @@ class EntityAutocomplete extends Textfield { // Auto-create item. See an example of how this is handled in // \Drupal\Core\Field\Plugin\Field\FieldType\EntityReferenceItem::presave(). $value[] = array( - 'entity' => static::createNewEntity($element['#target_type'], $element['#autocreate']['bundle'], $input, $element['#autocreate']['uid']) + 'entity' => $handler->createNewEntity($element['#target_type'], $element['#autocreate']['bundle'], $input, $element['#autocreate']['uid']), ); } } // Check that the referenced entities are valid, if needed. - if ($element['#validate_reference'] && !$autocreate && !empty($value)) { + if ($element['#validate_reference'] && !empty($value)) { + // Validate existing entities. $ids = array_reduce($value, function ($return, $item) { if (isset($item['target_id'])) { $return[] = $item['target_id']; @@ -189,6 +190,30 @@ class EntityAutocomplete extends Textfield { } } } + + // Validate newly created entities. + $new_entities = array_reduce($value, function ($return, $item) { + if (isset($item['entity'])) { + $return[] = $item['entity']; + } + return $return; + }); + + if ($new_entities) { + if ($autocreate) { + $valid_new_entities = $handler->validateReferenceableNewEntities($new_entities); + $invalid_new_entities = array_diff_key($new_entities, $valid_new_entities); + } + else { + // If the selection handler does not support referencing newly + // created entities, all of them should be invalidated. + $invalid_new_entities = $new_entities; + } + + foreach ($invalid_new_entities as $entity) { + $form_state->setError($element, t('This entity (%type: %label) cannot be referenced.', array('%type' => $element['#target_type'], '%label' => $entity->label()))); + } + } } // Use only the last value if the form element does not support multiple @@ -310,37 +335,4 @@ class EntityAutocomplete extends Textfield { return $match; } - /** - * Creates a new entity from a label entered in the autocomplete input. - * - * @param string $entity_type_id - * The entity type ID. - * @param string $bundle - * The bundle name. - * @param string $label - * The entity label. - * @param int $uid - * The entity owner ID. - * - * @return \Drupal\Core\Entity\EntityInterface - */ - protected static function createNewEntity($entity_type_id, $bundle, $label, $uid) { - $entity_manager = \Drupal::entityManager(); - - $entity_type = $entity_manager->getDefinition($entity_type_id); - $bundle_key = $entity_type->getKey('bundle'); - $label_key = $entity_type->getKey('label'); - - $entity = $entity_manager->getStorage($entity_type_id)->create(array( - $bundle_key => $bundle, - $label_key => $label, - )); - - if ($entity instanceof EntityOwnerInterface) { - $entity->setOwnerId($uid); - } - - return $entity; - } - } diff --git a/core/lib/Drupal/Core/Entity/Entity.php b/core/lib/Drupal/Core/Entity/Entity.php index 2a4b199ee..8164d7c1a 100644 --- a/core/lib/Drupal/Core/Entity/Entity.php +++ b/core/lib/Drupal/Core/Entity/Entity.php @@ -72,11 +72,26 @@ abstract class Entity implements EntityInterface { * Gets the entity manager. * * @return \Drupal\Core\Entity\EntityManagerInterface + * + * @deprecated in Drupal 8.0.0 and will be removed before Drupal 9.0.0. + * Use \Drupal::entityTypeManager() instead in most cases. If the needed + * method is not on \Drupal\Core\Entity\EntityTypeManagerInterface, see the + * deprecated \Drupal\Core\Entity\EntityManager to find the + * correct interface or service. */ protected function entityManager() { return \Drupal::entityManager(); } + /** + * Gets the entity type manager. + * + * @return \Drupal\Core\Entity\EntityTypeManagerInterface + */ + protected function entityTypeManager() { + return \Drupal::entityTypeManager(); + } + /** * Gets the language manager. * @@ -158,6 +173,13 @@ abstract class Entity implements EntityInterface { * {@inheritdoc} */ public function urlInfo($rel = 'canonical', array $options = []) { + return $this->toUrl($rel, $options); + } + + /** + * {@inheritdoc} + */ + public function toUrl($rel = 'canonical', array $options = []) { if ($this->id() === NULL) { throw new EntityMalformedException(sprintf('The "%s" entity cannot have a URI as it does not have an ID', $this->getEntityTypeId())); } @@ -237,26 +259,33 @@ abstract class Entity implements EntityInterface { * {@inheritdoc} */ public function link($text = NULL, $rel = 'canonical', array $options = []) { - if (is_null($text)) { + return $this->toLink($text, $rel, $options)->toString(); + } + + /** + * {@inheritdoc} + */ + public function toLink($text = NULL, $rel = 'canonical', array $options = []) { + if (!isset($text)) { $text = $this->label(); } - $url = $this->urlInfo($rel); + $url = $this->toUrl($rel); $options += $url->getOptions(); $url->setOptions($options); - return (new Link($text, $url))->toString(); + return new Link($text, $url); } /** * {@inheritdoc} */ public function url($rel = 'canonical', $options = array()) { - // While self::urlInfo() will throw an exception if the entity is new, + // While self::toUrl() will throw an exception if the entity has no id, // the expected result for a URL is always a string. - if ($this->isNew() || !$this->hasLinkTemplate($rel)) { + if ($this->id() === NULL || !$this->hasLinkTemplate($rel)) { return ''; } - $uri = $this->urlInfo($rel); + $uri = $this->toUrl($rel); $options += $uri->getOptions(); $uri->setOptions($options); return $uri->toString(); diff --git a/core/lib/Drupal/Core/Entity/EntityInterface.php b/core/lib/Drupal/Core/Entity/EntityInterface.php index 1f476e583..62a8f4476 100644 --- a/core/lib/Drupal/Core/Entity/EntityInterface.php +++ b/core/lib/Drupal/Core/Entity/EntityInterface.php @@ -101,7 +101,29 @@ interface EntityInterface extends AccessibleInterface, CacheableDependencyInterf public function label(); /** - * Gets the URI elements of the entity. + * Gets the URL object for the entity. + * + * @param string $rel + * The link relationship type, for example: canonical or edit-form. + * @param array $options + * See \Drupal\Core\Routing\UrlGeneratorInterface::generateFromRoute() for + * the available options. + * + * @return \Drupal\Core\Url + * The URL object. + * + * @deprecated in Drupal 8.0.0, intended to be removed in Drupal 9.0.0 + * Use toUrl() instead. + * + * @see \Drupal\Core\Entity\EntityInterface::toUrl + */ + public function urlInfo($rel = 'canonical', array $options = array()); + + /** + * Gets the URL object for the entity. + * + * The entity must have an id already. Content entities usually get their IDs + * by saving them. * * URI templates might be set in the links array in an annotation, for * example: @@ -128,8 +150,12 @@ interface EntityInterface extends AccessibleInterface, CacheableDependencyInterf * the available options. * * @return \Drupal\Core\Url + * The URL object. + * + * @throws \Drupal\Core\Entity\EntityMalformedException + * @throws \Drupal\Core\Entity\Exception\UndefinedLinkTemplateException */ - public function urlInfo($rel = 'canonical', array $options = array()); + public function toUrl($rel = 'canonical', array $options = array()); /** * Gets the public URL for this entity. @@ -142,9 +168,36 @@ interface EntityInterface extends AccessibleInterface, CacheableDependencyInterf * * @return string * The URL for this entity. + * + * @deprecated in Drupal 8.0.0, intended to be removed in Drupal 9.0.0 + * Please use toUrl() instead. + * + * @see \Drupal\Core\Entity\EntityInterface::toUrl */ public function url($rel = 'canonical', $options = array()); + /** + * Deprecated way of generating a link to the entity. See toLink(). + * + * @param string|null $text + * (optional) The link text for the anchor tag as a translated string. + * If NULL, it will use the entity's label. Defaults to NULL. + * @param string $rel + * (optional) The link relationship type. Defaults to 'canonical'. + * @param array $options + * See \Drupal\Core\Routing\UrlGeneratorInterface::generateFromRoute() for + * the available options. + * + * @return string + * An HTML string containing a link to the entity. + * + * @deprecated in Drupal 8.0.0, intended to be removed in Drupal 9.0.0 + * Please use toLink() instead. + * + * @see \Drupal\Core\Entity\EntityInterface::toLink + */ + public function link($text = NULL, $rel = 'canonical', array $options = []); + /** * Generates the HTML for a link to this entity. * @@ -157,10 +210,13 @@ interface EntityInterface extends AccessibleInterface, CacheableDependencyInterf * See \Drupal\Core\Routing\UrlGeneratorInterface::generateFromRoute() for * the available options. * - * @return string - * An HTML string containing a link to the entity. + * @return \Drupal\Core\Link + * A Link to the entity. + * + * @throws \Drupal\Core\Entity\EntityMalformedException + * @throws \Drupal\Core\Entity\Exception\UndefinedLinkTemplateException */ - public function link($text = NULL, $rel = 'canonical', array $options = []); + public function toLink($text = NULL, $rel = 'canonical', array $options = []); /** * Indicates if a link template exists for a given key. diff --git a/core/lib/Drupal/Core/Entity/EntityReferenceSelection/SelectionInterface.php b/core/lib/Drupal/Core/Entity/EntityReferenceSelection/SelectionInterface.php index 83120d195..132b9a7b2 100644 --- a/core/lib/Drupal/Core/Entity/EntityReferenceSelection/SelectionInterface.php +++ b/core/lib/Drupal/Core/Entity/EntityReferenceSelection/SelectionInterface.php @@ -30,7 +30,7 @@ interface SelectionInterface extends PluginFormInterface { public function getReferenceableEntities($match = NULL, $match_operator = 'CONTAINS', $limit = 0); /** - * Counts entities that are referenceable by a given field. + * Counts entities that are referenceable. * * @return int * The number of referenceable entities. @@ -38,7 +38,7 @@ interface SelectionInterface extends PluginFormInterface { public function countReferenceableEntities($match = NULL, $match_operator = 'CONTAINS'); /** - * Validates that entities can be referenced by this field. + * Validates which existing entities can be referenced. * * @return array * An array of valid entity IDs. diff --git a/core/lib/Drupal/Core/Entity/EntityReferenceSelection/SelectionWithAutocreateInterface.php b/core/lib/Drupal/Core/Entity/EntityReferenceSelection/SelectionWithAutocreateInterface.php new file mode 100644 index 000000000..7010b91ad --- /dev/null +++ b/core/lib/Drupal/Core/Entity/EntityReferenceSelection/SelectionWithAutocreateInterface.php @@ -0,0 +1,52 @@ +bundleInfo = $this->moduleHandler->invokeAll('entity_bundle_info'); - // First look for entity types that act as bundles for others, load them - // and add them as bundles. foreach ($this->entityTypeManager->getDefinitions() as $type => $entity_type) { - if ($entity_type->getBundleOf()) { - foreach ($this->entityTypeManager->getStorage($type)->loadMultiple() as $entity) { - $this->bundleInfo[$entity_type->getBundleOf()][$entity->id()]['label'] = $entity->label(); + // First look for entity types that act as bundles for others, load them + // and add them as bundles. + if ($bundle_entity_type = $entity_type->getBundleEntityType()) { + foreach ($this->entityTypeManager->getStorage($bundle_entity_type)->loadMultiple() as $entity) { + $this->bundleInfo[$type][$entity->id()]['label'] = $entity->label(); } } - } - foreach ($this->entityTypeManager->getDefinitions() as $type => $entity_type) { - // If no bundles are provided, use the entity type name and label. - if (!isset($this->bundleInfo[$type])) { + // If entity type bundles are not supported and + // hook_entity_bundle_info() has not already set up bundle + // information, use the entity type name and label. + elseif (!isset($this->bundleInfo[$type])) { $this->bundleInfo[$type][$type]['label'] = $entity_type->getLabel(); } } diff --git a/core/lib/Drupal/Core/Entity/Plugin/EntityReferenceSelection/DefaultSelection.php b/core/lib/Drupal/Core/Entity/Plugin/EntityReferenceSelection/DefaultSelection.php index e25b92496..59d502bdb 100644 --- a/core/lib/Drupal/Core/Entity/Plugin/EntityReferenceSelection/DefaultSelection.php +++ b/core/lib/Drupal/Core/Entity/Plugin/EntityReferenceSelection/DefaultSelection.php @@ -11,6 +11,7 @@ use Drupal\Component\Utility\Html; use Drupal\Core\Database\Query\AlterableInterface; use Drupal\Core\Database\Query\SelectInterface; use Drupal\Core\Entity\EntityManagerInterface; +use Drupal\Core\Entity\EntityReferenceSelection\SelectionWithAutocreateInterface; use Drupal\Core\Extension\ModuleHandlerInterface; use Drupal\Core\Field\Plugin\Field\FieldType\EntityReferenceItem; use Drupal\Core\Form\FormStateInterface; @@ -18,6 +19,7 @@ use Drupal\Core\Entity\EntityReferenceSelection\SelectionInterface; use Drupal\Core\Plugin\ContainerFactoryPluginInterface; use Drupal\Core\Plugin\PluginBase; use Drupal\Core\Session\AccountInterface; +use Drupal\user\EntityOwnerInterface; use Symfony\Component\DependencyInjection\ContainerInterface; /** @@ -40,7 +42,7 @@ use Symfony\Component\DependencyInjection\ContainerInterface; * deriver = "Drupal\Core\Entity\Plugin\Derivative\DefaultSelectionDeriver" * ) */ -class DefaultSelection extends PluginBase implements SelectionInterface, ContainerFactoryPluginInterface { +class DefaultSelection extends PluginBase implements SelectionInterface, SelectionWithAutocreateInterface, ContainerFactoryPluginInterface { /** * The entity manager. @@ -288,6 +290,38 @@ class DefaultSelection extends PluginBase implements SelectionInterface, Contain return $result; } + /** + * {@inheritdoc} + */ + public function createNewEntity($entity_type_id, $bundle, $label, $uid) { + $entity_type = $this->entityManager->getDefinition($entity_type_id); + $bundle_key = $entity_type->getKey('bundle'); + $label_key = $entity_type->getKey('label'); + + $entity = $this->entityManager->getStorage($entity_type_id)->create(array( + $bundle_key => $bundle, + $label_key => $label, + )); + + if ($entity instanceof EntityOwnerInterface) { + $entity->setOwnerId($uid); + } + + return $entity; + } + + /** + * {@inheritdoc} + */ + public function validateReferenceableNewEntities(array $entities) { + return array_filter($entities, function ($entity) { + if (isset($this->configuration['handler_settings']['target_bundles'])) { + return in_array($entity->bundle(), $this->configuration['handler_settings']['target_bundles']); + } + return TRUE; + }); + } + /** * Builds an EntityQuery to get referenceable entities. * diff --git a/core/lib/Drupal/Core/Entity/Plugin/Validation/Constraint/ValidReferenceConstraint.php b/core/lib/Drupal/Core/Entity/Plugin/Validation/Constraint/ValidReferenceConstraint.php index bf8658aa6..f27c22d17 100644 --- a/core/lib/Drupal/Core/Entity/Plugin/Validation/Constraint/ValidReferenceConstraint.php +++ b/core/lib/Drupal/Core/Entity/Plugin/Validation/Constraint/ValidReferenceConstraint.php @@ -26,10 +26,24 @@ class ValidReferenceConstraint extends Constraint { * * @var string */ - public $message = 'The referenced entity (%type: %id) does not exist.'; + public $message = 'This entity (%type: %id) cannot be referenced.'; /** - * Validation message when the target_id is empty. + * Violation message when the entity does not exist. + * + * @var string + */ + public $nonExistingMessage = 'The referenced entity (%type: %id) does not exist.'; + + /** + * Violation message when a new entity ("autocreate") is invalid. + * + * @var string + */ + public $invalidAutocreateMessage = 'This entity (%type: %label) cannot be referenced.'; + + /** + * Violation message when the target_id is empty. * * @var string */ diff --git a/core/lib/Drupal/Core/Entity/Plugin/Validation/Constraint/ValidReferenceConstraintValidator.php b/core/lib/Drupal/Core/Entity/Plugin/Validation/Constraint/ValidReferenceConstraintValidator.php index 8f704c1c7..f228bbcef 100644 --- a/core/lib/Drupal/Core/Entity/Plugin/Validation/Constraint/ValidReferenceConstraintValidator.php +++ b/core/lib/Drupal/Core/Entity/Plugin/Validation/Constraint/ValidReferenceConstraintValidator.php @@ -7,39 +7,142 @@ namespace Drupal\Core\Entity\Plugin\Validation\Constraint; +use Drupal\Core\DependencyInjection\ContainerInjectionInterface; +use Drupal\Core\Entity\EntityReferenceSelection\SelectionPluginManagerInterface; +use Drupal\Core\Entity\EntityReferenceSelection\SelectionWithAutocreateInterface; +use Drupal\Core\Entity\EntityTypeManagerInterface; +use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\Validator\Constraint; use Symfony\Component\Validator\ConstraintValidator; /** * Checks if referenced entities are valid. */ -class ValidReferenceConstraintValidator extends ConstraintValidator { +class ValidReferenceConstraintValidator extends ConstraintValidator implements ContainerInjectionInterface { + + /** + * The selection plugin manager. + * + * @var \Drupal\Core\Entity\EntityReferenceSelection\SelectionPluginManagerInterface + */ + protected $selectionManager; + + /** + * The entity type manager. + * + * @var \Drupal\Core\Entity\EntityTypeManagerInterface + */ + protected $entityTypeManager; + + /** + * Constructs a ValidReferenceConstraintValidator object. + * + * @param \Drupal\Core\Entity\EntityReferenceSelection\SelectionPluginManagerInterface $selection_manager + * The selection plugin manager. + * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager + * The entity type manager. + */ + public function __construct(SelectionPluginManagerInterface $selection_manager, EntityTypeManagerInterface $entity_type_manager) { + $this->selectionManager = $selection_manager; + $this->entityTypeManager = $entity_type_manager; + } + + /** + * {@inheritdoc} + */ + public static function create(ContainerInterface $container) { + return new static( + $container->get('plugin.manager.entity_reference_selection'), + $container->get('entity_type.manager') + ); + } /** * {@inheritdoc} */ public function validate($value, Constraint $constraint) { - /** @var \Drupal\Core\Field\FieldItemInterface $value */ + /** @var \Drupal\Core\Field\FieldItemListInterface $value */ /** @var ValidReferenceConstraint $constraint */ if (!isset($value)) { return; } - // We don't use a regular NotNull constraint for the target_id property as - // a NULL value is valid if the entity property contains an unsaved entity. - // @see \Drupal\Core\TypedData\DataReferenceTargetDefinition::getConstraints - if (!$value->isEmpty() && $value->target_id === NULL && !$value->entity->isNew()) { - $this->context->addViolation($constraint->nullMessage); + + // Collect new entities and IDs of existing entities across the field items. + $new_entities = []; + $target_ids = []; + foreach ($value as $delta => $item) { + $target_id = $item->target_id; + // We don't use a regular NotNull constraint for the target_id property as + // NULL is allowed if the entity property contains an unsaved entity. + // @see \Drupal\Core\TypedData\DataReferenceTargetDefinition::getConstraints() + if (!$item->isEmpty() && $target_id === NULL) { + if (!$item->entity->isNew()) { + $this->context->buildViolation($constraint->nullMessage) + ->atPath((string) $delta) + ->addViolation(); + return; + } + $new_entities[$delta] = $item->entity; + } + + // '0' or NULL are considered valid empty references. + if (!empty($target_id)) { + $target_ids[$delta] = $target_id; + } + } + + // Early opt-out if nothing to validate. + if (!$new_entities && !$target_ids) { return; } - $id = $value->get('target_id')->getValue(); - // '0' or NULL are considered valid empty references. - if (empty($id)) { - return; + + /** @var \Drupal\Core\Entity\EntityReferenceSelection\SelectionInterface $handler * */ + $handler = $this->selectionManager->getSelectionHandler($value->getFieldDefinition()); + $target_type_id = $value->getFieldDefinition()->getSetting('target_type'); + + // Add violations on deltas with a new entity that is not valid. + if ($new_entities) { + if ($handler instanceof SelectionWithAutocreateInterface) { + $valid_new_entities = $handler->validateReferenceableNewEntities($new_entities); + $invalid_new_entities = array_diff_key($new_entities, $valid_new_entities); + } + else { + // If the selection handler does not support referencing newly created + // entities, all of them should be invalidated. + $invalid_new_entities = $new_entities; + } + + foreach ($invalid_new_entities as $delta => $entity) { + $this->context->buildViolation($constraint->invalidAutocreateMessage) + ->setParameter('%type', $target_type_id) + ->setParameter('%label', $entity->label()) + ->atPath((string) $delta . '.entity') + ->setInvalidValue($entity) + ->addViolation(); + } } - $referenced_entity = $value->get('entity')->getValue(); - if (!$referenced_entity) { - $type = $value->getFieldDefinition()->getSetting('target_type'); - $this->context->addViolation($constraint->message, array('%type' => $type, '%id' => $id)); + + // Add violations on deltas with a target_id that is not valid. + if ($target_ids) { + $valid_target_ids = $handler->validateReferenceableEntities($target_ids); + if ($invalid_target_ids = array_diff($target_ids, $valid_target_ids)) { + // For accuracy of the error message, differentiate non-referenceable + // and non-existent entities. + $target_type = $this->entityTypeManager->getDefinition($target_type_id); + $existing_ids = $this->entityTypeManager->getStorage($target_type_id)->getQuery() + ->condition($target_type->getKey('id'), $invalid_target_ids, 'IN') + ->execute(); + foreach ($invalid_target_ids as $delta => $target_id) { + $message = in_array($target_id, $existing_ids) ? $constraint->message : $constraint->nonExistingMessage; + $this->context->buildViolation($message) + ->setParameter('%type', $target_type_id) + ->setParameter('%id', $target_id) + ->atPath((string) $delta . '.target_id') + ->setInvalidValue($target_id) + ->addViolation(); + } + } } } + } diff --git a/core/lib/Drupal/Core/Entity/Routing/DefaultHtmlRouteProvider.php b/core/lib/Drupal/Core/Entity/Routing/DefaultHtmlRouteProvider.php index f0b5907de..6a8ed399a 100644 --- a/core/lib/Drupal/Core/Entity/Routing/DefaultHtmlRouteProvider.php +++ b/core/lib/Drupal/Core/Entity/Routing/DefaultHtmlRouteProvider.php @@ -7,7 +7,11 @@ namespace Drupal\Core\Entity\Routing; +use Drupal\Core\Entity\EntityHandlerInterface; +use Drupal\Core\Entity\EntityManagerInterface; use Drupal\Core\Entity\EntityTypeInterface; +use Drupal\Core\Entity\FieldableEntityInterface; +use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\Routing\Route; use Symfony\Component\Routing\RouteCollection; @@ -24,7 +28,33 @@ use Symfony\Component\Routing\RouteCollection; * * @internal */ -class DefaultHtmlRouteProvider implements EntityRouteProviderInterface { +class DefaultHtmlRouteProvider implements EntityRouteProviderInterface, EntityHandlerInterface { + + /** + * The entity manager. + * + * @var \Drupal\Core\Entity\EntityManagerInterface + */ + protected $entityManager; + + /** + * Constructs a new DefaultHtmlRouteProvider. + * + * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager + * The entity manager. + */ + public function __construct(EntityManagerInterface $entity_manager) { + $this->entityManager = $entity_manager; + } + + /** + * {@inheritdoc} + */ + public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type) { + return new static( + $container->get('entity.manager') + ); + } /** * {@inheritdoc} @@ -71,6 +101,12 @@ class DefaultHtmlRouteProvider implements EntityRouteProviderInterface { ->setOption('parameters', [ $entity_type_id => ['type' => 'entity:' . $entity_type_id], ]); + + // Entity types with serial IDs can specify this in their route + // requirements, improving the matching process. + if ($this->getEntityTypeIdKeyType($entity_type) === 'integer') { + $route->setRequirement($entity_type_id, '\d+'); + } return $route; } } @@ -102,6 +138,12 @@ class DefaultHtmlRouteProvider implements EntityRouteProviderInterface { ->setOption('parameters', [ $entity_type_id => ['type' => 'entity:' . $entity_type_id], ]); + + // Entity types with serial IDs can specify this in their route + // requirements, improving the matching process. + if ($this->getEntityTypeIdKeyType($entity_type) === 'integer') { + $route->setRequirement($entity_type_id, '\d+'); + } return $route; } } @@ -128,8 +170,33 @@ class DefaultHtmlRouteProvider implements EntityRouteProviderInterface { ->setOption('parameters', [ $entity_type_id => ['type' => 'entity:' . $entity_type_id], ]); + + // Entity types with serial IDs can specify this in their route + // requirements, improving the matching process. + if ($this->getEntityTypeIdKeyType($entity_type) === 'integer') { + $route->setRequirement($entity_type_id, '\d+'); + } return $route; } } + /** + * Gets the type of the ID key for a given entity type. + * + * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type + * An entity type. + * + * @return string|null + * The type of the ID key for a given entity type, or NULL if the entity + * type does not support fields. + */ + protected function getEntityTypeIdKeyType(EntityTypeInterface $entity_type) { + if (!$entity_type->isSubclassOf(FieldableEntityInterface::class)) { + return NULL; + } + + $field_storage_definitions = $this->entityManager->getFieldStorageDefinitions($entity_type->id()); + return $field_storage_definitions[$entity_type->getKey('id')]->getType(); + } + } diff --git a/core/lib/Drupal/Core/Entity/entity.api.php b/core/lib/Drupal/Core/Entity/entity.api.php index 8883f78d0..077c48473 100644 --- a/core/lib/Drupal/Core/Entity/entity.api.php +++ b/core/lib/Drupal/Core/Entity/entity.api.php @@ -1916,16 +1916,16 @@ function hook_entity_extra_field_info() { // Visibility of the ordering of the language selector is the same as on the // node/add form. if ($module_language_enabled) { - $configuration = ContentLanguageSettings::loadByEntityTypeBundle('node', $bundle->type); + $configuration = ContentLanguageSettings::loadByEntityTypeBundle('node', $bundle->id()); if ($configuration->isLanguageAlterable()) { - $extra['node'][$bundle->type]['form']['language'] = array( + $extra['node'][$bundle->id()]['form']['language'] = array( 'label' => t('Language'), 'description' => $description, 'weight' => 0, ); } } - $extra['node'][$bundle->type]['display']['language'] = array( + $extra['node'][$bundle->id()]['display']['language'] = array( 'label' => t('Language'), 'description' => $description, 'weight' => 0, @@ -1948,8 +1948,8 @@ function hook_entity_extra_field_info() { function hook_entity_extra_field_info_alter(&$info) { // Force node title to always be at the top of the list by default. foreach (NodeType::loadMultiple() as $bundle) { - if (isset($info['node'][$bundle->type]['form']['title'])) { - $info['node'][$bundle->type]['form']['title']['weight'] = -20; + if (isset($info['node'][$bundle->id()]['form']['title'])) { + $info['node'][$bundle->id()]['form']['title']['weight'] = -20; } } } diff --git a/core/lib/Drupal/Core/EventSubscriber/ContentControllerSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/ContentControllerSubscriber.php deleted file mode 100644 index f6f30fe9c..000000000 --- a/core/lib/Drupal/Core/EventSubscriber/ContentControllerSubscriber.php +++ /dev/null @@ -1,48 +0,0 @@ -getRequest(); - - if ($request->attributes->has('_form')) { - $request->attributes->set('_controller', 'controller.form:getContentResult'); - } - } - - /** - * Registers the methods in this class that should be listeners. - * - * @return array - * An array of event listener definitions. - */ - static function getSubscribedEvents() { - $events[KernelEvents::REQUEST][] = array('onRequestDeriveFormWrapper', 25); - - return $events; - } - -} diff --git a/core/lib/Drupal/Core/EventSubscriber/DefaultExceptionHtmlSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/DefaultExceptionHtmlSubscriber.php index 770b96f79..2ae21143b 100644 --- a/core/lib/Drupal/Core/EventSubscriber/DefaultExceptionHtmlSubscriber.php +++ b/core/lib/Drupal/Core/EventSubscriber/DefaultExceptionHtmlSubscriber.php @@ -147,7 +147,12 @@ class DefaultExceptionHtmlSubscriber extends HttpExceptionSubscriberBase { } $response = $this->httpKernel->handle($sub_request, HttpKernelInterface::SUB_REQUEST); - $response->setStatusCode($status_code); + // Only 2xx responses should have their status code overridden; any + // other status code should be passed on: redirects (3xx), error (5xx)… + // @see https://www.drupal.org/node/2603788#comment-10504916 + if ($response->isSuccessful()) { + $response->setStatusCode($status_code); + } // Persist any special HTTP headers that were set on the exception. if ($exception instanceof HttpExceptionInterface) { diff --git a/core/lib/Drupal/Core/EventSubscriber/HtmlResponsePlaceholderStrategySubscriber.php b/core/lib/Drupal/Core/EventSubscriber/HtmlResponsePlaceholderStrategySubscriber.php index 943b08bd1..c67f531cc 100644 --- a/core/lib/Drupal/Core/EventSubscriber/HtmlResponsePlaceholderStrategySubscriber.php +++ b/core/lib/Drupal/Core/EventSubscriber/HtmlResponsePlaceholderStrategySubscriber.php @@ -48,10 +48,6 @@ class HtmlResponsePlaceholderStrategySubscriber implements EventSubscriberInterf * The event to process. */ public function onRespond(FilterResponseEvent $event) { - if (!$event->isMasterRequest()) { - return; - } - $response = $event->getResponse(); if (!$response instanceof HtmlResponse) { return; diff --git a/core/lib/Drupal/Core/EventSubscriber/HtmlResponseSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/HtmlResponseSubscriber.php index 6fada86d8..be64602ad 100644 --- a/core/lib/Drupal/Core/EventSubscriber/HtmlResponseSubscriber.php +++ b/core/lib/Drupal/Core/EventSubscriber/HtmlResponseSubscriber.php @@ -42,10 +42,6 @@ class HtmlResponseSubscriber implements EventSubscriberInterface { * The event to process. */ public function onRespond(FilterResponseEvent $event) { - if (!$event->isMasterRequest()) { - return; - } - $response = $event->getResponse(); if (!$response instanceof HtmlResponse) { return; diff --git a/core/lib/Drupal/Core/Extension/ThemeHandler.php b/core/lib/Drupal/Core/Extension/ThemeHandler.php index 1988a143d..c3d868428 100644 --- a/core/lib/Drupal/Core/Extension/ThemeHandler.php +++ b/core/lib/Drupal/Core/Extension/ThemeHandler.php @@ -483,4 +483,18 @@ class ThemeHandler implements ThemeHandlerInterface { throw new \InvalidArgumentException(sprintf('The theme %s does not exist.', $name)); } + /** + * {@inheritdoc} + */ + public function hasUi($name) { + $themes = $this->listInfo(); + if (isset($themes[$name])) { + if (!empty($themes[$name]->info['hidden'])) { + $theme_config = $this->configFactory->get('system.theme'); + return $name == $theme_config->get('default') || $name == $theme_config->get('admin'); + } + return TRUE; + } + return FALSE; + } } diff --git a/core/lib/Drupal/Core/Extension/ThemeHandlerInterface.php b/core/lib/Drupal/Core/Extension/ThemeHandlerInterface.php index c46f96a00..8b59ae3b8 100644 --- a/core/lib/Drupal/Core/Extension/ThemeHandlerInterface.php +++ b/core/lib/Drupal/Core/Extension/ThemeHandlerInterface.php @@ -208,4 +208,18 @@ interface ThemeHandlerInterface { */ public function getTheme($name); + /** + * Determines if a theme should be shown in the user interface. + * + * To be shown in the UI the theme has to be installed. If the theme is hidden + * it will not be shown unless it is the default or admin theme. + * + * @param string $name + * The name of the theme to check. + * + * @return bool + * TRUE if the theme should be shown in the UI, FALSE if not. + */ + public function hasUi($name); + } diff --git a/core/lib/Drupal/Core/Field/EntityReferenceFieldItemList.php b/core/lib/Drupal/Core/Field/EntityReferenceFieldItemList.php index 4217b2ea9..cd221d24b 100644 --- a/core/lib/Drupal/Core/Field/EntityReferenceFieldItemList.php +++ b/core/lib/Drupal/Core/Field/EntityReferenceFieldItemList.php @@ -15,6 +15,16 @@ use Drupal\Core\Form\FormStateInterface; */ class EntityReferenceFieldItemList extends FieldItemList implements EntityReferenceFieldItemListInterface { + /** + * {@inheritdoc} + */ + public function getConstraints() { + $constraints = parent::getConstraints(); + $constraint_manager = $this->getTypedDataManager()->getValidationConstraintManager(); + $constraints[] = $constraint_manager->create('ValidReference', []); + return $constraints; + } + /** * {@inheritdoc} */ diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/EntityReferenceItem.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/EntityReferenceItem.php index 9e76afbd2..9ad1a9d29 100644 --- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/EntityReferenceItem.php +++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/EntityReferenceItem.php @@ -40,9 +40,6 @@ use Drupal\Core\Validation\Plugin\Validation\Constraint\AllowedValuesConstraint; * default_widget = "entity_reference_autocomplete", * default_formatter = "entity_reference_label", * list_class = "\Drupal\Core\Field\EntityReferenceFieldItemList", - * default_widget = "entity_reference_autocomplete", - * default_formatter = "entity_reference_label", - * constraints = {"ValidReference" = {}} * ) */ class EntityReferenceItem extends FieldItemBase implements OptionsProviderInterface, PreconfiguredFieldUiOptionsInterface { @@ -165,20 +162,6 @@ class EntityReferenceItem extends FieldItemBase implements OptionsProviderInterf unset($constraints[$key]); } } - list($current_handler) = explode(':', $this->getSetting('handler'), 2); - if ($current_handler === 'default') { - $handler_settings = $this->getSetting('handler_settings'); - if (isset($handler_settings['target_bundles'])) { - $constraint_manager = \Drupal::typedDataManager()->getValidationConstraintManager(); - $constraints[] = $constraint_manager->create('ComplexData', [ - 'entity' => [ - 'Bundle' => [ - 'bundle' => $handler_settings['target_bundles'], - ], - ], - ]); - } - } return $constraints; } diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/UriItem.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/UriItem.php index 1481d884e..9d62405a1 100644 --- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/UriItem.php +++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/UriItem.php @@ -7,6 +7,8 @@ namespace Drupal\Core\Field\Plugin\Field\FieldType; +use Drupal\Component\Utility\Unicode; +use Drupal\Core\Field\FieldDefinitionInterface; use Drupal\Core\Field\FieldStorageDefinitionInterface; use Drupal\Core\TypedData\DataDefinition; @@ -77,4 +79,16 @@ class UriItem extends StringItem { return parent::isEmpty(); } + /** + * {@inheritdoc} + */ + public static function generateSampleValue(FieldDefinitionInterface $field_definition) { + $values = parent::generateSampleValue($field_definition); + $suffix_length = $field_definition->getSetting('max_length') - 7; + foreach ($values as $key => $value) { + $values[$key] = 'http://' . Unicode::substr($value, 0, $suffix_length); + } + return $values; + } + } diff --git a/core/lib/Drupal/Core/Menu/LocalTaskManager.php b/core/lib/Drupal/Core/Menu/LocalTaskManager.php index 512ccfea9..1791efebe 100644 --- a/core/lib/Drupal/Core/Menu/LocalTaskManager.php +++ b/core/lib/Drupal/Core/Menu/LocalTaskManager.php @@ -304,7 +304,9 @@ class LocalTaskManager extends DefaultPluginManager implements LocalTaskManagerI } // Pre-fetch all routes involved in the tree. This reduces the number // of SQL queries that would otherwise be triggered by the access manager. - $routes = $route_names ? $this->routeProvider->getRoutesByNames($route_names) : array(); + if ($route_names) { + $this->routeProvider->getRoutesByNames($route_names); + } foreach ($tree as $level => $instances) { /** @var $instances \Drupal\Core\Menu\LocalTaskInterface[] */ diff --git a/core/lib/Drupal/Core/Menu/MenuLinkManager.php b/core/lib/Drupal/Core/Menu/MenuLinkManager.php index 106407b2b..beb0d95f7 100644 --- a/core/lib/Drupal/Core/Menu/MenuLinkManager.php +++ b/core/lib/Drupal/Core/Menu/MenuLinkManager.php @@ -351,8 +351,11 @@ class MenuLinkManager implements MenuLinkManagerInterface { * {@inheritdoc} */ public function addDefinition($id, array $definition) { - if ($this->treeStorage->load($id) || $id === '') { - throw new PluginException("The ID $id already exists as a plugin definition or is not valid"); + if ($this->treeStorage->load($id)) { + throw new PluginException("The menu link ID $id already exists as a plugin definition"); + } + elseif ($id === '') { + throw new PluginException("The menu link ID cannot be empty"); } // Add defaults, so there is no requirement to specify everything. $this->processDefinition($definition, $id); diff --git a/core/lib/Drupal/Core/Menu/MenuLinkTree.php b/core/lib/Drupal/Core/Menu/MenuLinkTree.php index 5b3aee85f..3c71930f3 100644 --- a/core/lib/Drupal/Core/Menu/MenuLinkTree.php +++ b/core/lib/Drupal/Core/Menu/MenuLinkTree.php @@ -177,6 +177,7 @@ class MenuLinkTree implements MenuLinkTreeInterface { // Add the theme wrapper for outer markup. // Allow menu-specific theme overrides. $build['#theme'] = 'menu__' . strtr($menu_name, '-', '_'); + $build['#menu_name'] = $menu_name; $build['#items'] = $items; // Set cache tag. $build['#cache']['tags'][] = 'config:system.menu.' . $menu_name; diff --git a/core/lib/Drupal/Core/Path/AliasStorage.php b/core/lib/Drupal/Core/Path/AliasStorage.php index 899c39e08..8caae97e6 100644 --- a/core/lib/Drupal/Core/Path/AliasStorage.php +++ b/core/lib/Drupal/Core/Path/AliasStorage.php @@ -11,9 +11,14 @@ use Drupal\Core\Cache\Cache; use Drupal\Core\Database\Connection; use Drupal\Core\Extension\ModuleHandlerInterface; use Drupal\Core\Language\LanguageInterface; +use Drupal\Core\Database\Query\Condition; /** * Provides a class for CRUD operations on path aliases. + * + * All queries perform case-insensitive matching on the 'source' and 'alias' + * fields, so the aliases '/test-alias' and '/test-Alias' are considered to be + * the same, and will both refer to the same internal system path. */ class AliasStorage implements AliasStorageInterface { /** @@ -98,7 +103,13 @@ class AliasStorage implements AliasStorageInterface { public function load($conditions) { $select = $this->connection->select('url_alias'); foreach ($conditions as $field => $value) { - $select->condition($field, $value); + if ($field == 'source' || $field == 'alias') { + // Use LIKE for case-insensitive matching. + $select->condition($field, $this->connection->escapeLike($value), 'LIKE'); + } + else { + $select->condition($field, $value); + } } return $select ->fields('url_alias') @@ -115,7 +126,13 @@ class AliasStorage implements AliasStorageInterface { $path = $this->load($conditions); $query = $this->connection->delete('url_alias'); foreach ($conditions as $field => $value) { - $query->condition($field, $value); + if ($field == 'source' || $field == 'alias') { + // Use LIKE for case-insensitive matching. + $query->condition($field, $this->connection->escapeLike($value), 'LIKE'); + } + else { + $query->condition($field, $value); + } } $deleted = $query->execute(); // @todo Switch to using an event for this instead of a hook. @@ -128,90 +145,101 @@ class AliasStorage implements AliasStorageInterface { * {@inheritdoc} */ public function preloadPathAlias($preloaded, $langcode) { - $args = array( - ':system[]' => $preloaded, - ':langcode' => $langcode, - ':langcode_undetermined' => LanguageInterface::LANGCODE_NOT_SPECIFIED, - ); + $langcode_list = [$langcode, LanguageInterface::LANGCODE_NOT_SPECIFIED]; + $select = $this->connection->select('url_alias') + ->fields('url_alias', ['source', 'alias']); + + if (!empty($preloaded)) { + $conditions = new Condition('OR'); + foreach ($preloaded as $preloaded_item) { + $conditions->condition('source', $this->connection->escapeLike($preloaded_item), 'LIKE'); + } + $select->condition($conditions); + } + // Always get the language-specific alias before the language-neutral one. // For example 'de' is less than 'und' so the order needs to be ASC, while // 'xx-lolspeak' is more than 'und' so the order needs to be DESC. We also // order by pid ASC so that fetchAllKeyed() returns the most recently // created alias for each source. Subsequent queries using fetchField() must - // use pid DESC to have the same effect. For performance reasons, the query - // builder is not used here. + // use pid DESC to have the same effect. if ($langcode == LanguageInterface::LANGCODE_NOT_SPECIFIED) { - // Prevent PDO from complaining about a token the query doesn't use. - unset($args[':langcode']); - $result = $this->connection->query('SELECT source, alias FROM {url_alias} WHERE source IN ( :system[] ) AND langcode = :langcode_undetermined ORDER BY pid ASC', $args); + array_pop($langcode_list); } elseif ($langcode < LanguageInterface::LANGCODE_NOT_SPECIFIED) { - $result = $this->connection->query('SELECT source, alias FROM {url_alias} WHERE source IN ( :system[] ) AND langcode IN (:langcode, :langcode_undetermined) ORDER BY langcode ASC, pid ASC', $args); + $select->orderBy('langcode', 'ASC'); } else { - $result = $this->connection->query('SELECT source, alias FROM {url_alias} WHERE source IN ( :system[] ) AND langcode IN (:langcode, :langcode_undetermined) ORDER BY langcode DESC, pid ASC', $args); + $select->orderBy('langcode', 'DESC'); } - return $result->fetchAllKeyed(); + $select->orderBy('pid', 'ASC'); + $select->condition('langcode', $langcode_list, 'IN'); + return $select->execute()->fetchAllKeyed(); } /** * {@inheritdoc} */ public function lookupPathAlias($path, $langcode) { - $args = array( - ':source' => $path, - ':langcode' => $langcode, - ':langcode_undetermined' => LanguageInterface::LANGCODE_NOT_SPECIFIED, - ); - // See the queries above. + $source = $this->connection->escapeLike($path); + $langcode_list = [$langcode, LanguageInterface::LANGCODE_NOT_SPECIFIED]; + + // See the queries above. Use LIKE for case-insensitive matching. + $select = $this->connection->select('url_alias') + ->fields('url_alias', ['alias']) + ->condition('source', $source, 'LIKE'); if ($langcode == LanguageInterface::LANGCODE_NOT_SPECIFIED) { - unset($args[':langcode']); - $alias = $this->connection->query("SELECT alias FROM {url_alias} WHERE source = :source AND langcode = :langcode_undetermined ORDER BY pid DESC", $args)->fetchField(); + array_pop($langcode_list); } elseif ($langcode > LanguageInterface::LANGCODE_NOT_SPECIFIED) { - $alias = $this->connection->query("SELECT alias FROM {url_alias} WHERE source = :source AND langcode IN (:langcode, :langcode_undetermined) ORDER BY langcode DESC, pid DESC", $args)->fetchField(); + $select->orderBy('langcode', 'DESC'); } else { - $alias = $this->connection->query("SELECT alias FROM {url_alias} WHERE source = :source AND langcode IN (:langcode, :langcode_undetermined) ORDER BY langcode ASC, pid DESC", $args)->fetchField(); + $select->orderBy('langcode', 'ASC'); } - return $alias; + $select->orderBy('pid', 'DESC'); + $select->condition('langcode', $langcode_list, 'IN'); + return $select->execute()->fetchField(); } /** * {@inheritdoc} */ public function lookupPathSource($path, $langcode) { - $args = array( - ':alias' => $path, - ':langcode' => $langcode, - ':langcode_undetermined' => LanguageInterface::LANGCODE_NOT_SPECIFIED, - ); - // See the queries above. + $alias = $this->connection->escapeLike($path); + $langcode_list = [$langcode, LanguageInterface::LANGCODE_NOT_SPECIFIED]; + + // See the queries above. Use LIKE for case-insensitive matching. + $select = $this->connection->select('url_alias') + ->fields('url_alias', ['source']) + ->condition('alias', $alias, 'LIKE'); if ($langcode == LanguageInterface::LANGCODE_NOT_SPECIFIED) { - unset($args[':langcode']); - $result = $this->connection->query("SELECT source FROM {url_alias} WHERE alias = :alias AND langcode = :langcode_undetermined ORDER BY pid DESC", $args); + array_pop($langcode_list); } elseif ($langcode > LanguageInterface::LANGCODE_NOT_SPECIFIED) { - $result = $this->connection->query("SELECT source FROM {url_alias} WHERE alias = :alias AND langcode IN (:langcode, :langcode_undetermined) ORDER BY langcode DESC, pid DESC", $args); + $select->orderBy('langcode', 'DESC'); } else { - $result = $this->connection->query("SELECT source FROM {url_alias} WHERE alias = :alias AND langcode IN (:langcode, :langcode_undetermined) ORDER BY langcode ASC, pid DESC", $args); + $select->orderBy('langcode', 'ASC'); } - return $result->fetchField(); + $select->orderBy('pid', 'DESC'); + $select->condition('langcode', $langcode_list, 'IN'); + return $select->execute()->fetchField(); } /** * {@inheritdoc} */ public function aliasExists($alias, $langcode, $source = NULL) { + // Use LIKE and NOT LIKE for case-insensitive matching. $query = $this->connection->select('url_alias') - ->condition('alias', $alias) + ->condition('alias', $this->connection->escapeLike($alias), 'LIKE') ->condition('langcode', $langcode); if (!empty($source)) { - $query->condition('source', $source, '<>'); + $query->condition('source', $this->connection->escapeLike($source), 'NOT LIKE'); } $query->addExpression('1'); $query->range(0, 1); diff --git a/core/lib/Drupal/Core/Path/AliasStorageInterface.php b/core/lib/Drupal/Core/Path/AliasStorageInterface.php index 5ac77a3ef..3b9c4eecd 100644 --- a/core/lib/Drupal/Core/Path/AliasStorageInterface.php +++ b/core/lib/Drupal/Core/Path/AliasStorageInterface.php @@ -44,6 +44,9 @@ interface AliasStorageInterface { /** * Fetches a specific URL alias from the database. * + * The default implementation performs case-insensitive matching on the + * 'source' and 'alias' strings. + * * @param array $conditions * An array of query conditions. * @@ -60,6 +63,9 @@ interface AliasStorageInterface { /** * Deletes a URL alias. * + * The default implementation performs case-insensitive matching on the + * 'source' and 'alias' strings. + * * @param array $conditions * An array of criteria. */ @@ -82,6 +88,9 @@ interface AliasStorageInterface { /** * Returns an alias of Drupal system URL. * + * The default implementation performs case-insensitive matching on the + * 'source' and 'alias' strings. + * * @param string $path * The path to investigate for corresponding path aliases. * @param string $langcode @@ -96,6 +105,9 @@ interface AliasStorageInterface { /** * Returns Drupal system URL of an alias. * + * The default implementation performs case-insensitive matching on the + * 'source' and 'alias' strings. + * * @param string $path * The path to investigate for corresponding system URLs. * @param string $langcode @@ -110,6 +122,9 @@ interface AliasStorageInterface { /** * Checks if alias already exists. * + * The default implementation performs case-insensitive matching on the + * 'source' and 'alias' strings. + * * @param string $alias * Alias to check against. * @param string $langcode @@ -135,8 +150,9 @@ interface AliasStorageInterface { * * @param array $header * Table header. - * @param string[]|null $keys - * (optional) Search keys. + * @param string|null $keys + * (optional) Search keyword that may include one or more '*' as wildcard + * values. * * @return array * Array of items to be displayed on the current page. diff --git a/core/lib/Drupal/Core/PathProcessor/OutboundPathProcessorInterface.php b/core/lib/Drupal/Core/PathProcessor/OutboundPathProcessorInterface.php index 59f2d0c51..cad93c269 100644 --- a/core/lib/Drupal/Core/PathProcessor/OutboundPathProcessorInterface.php +++ b/core/lib/Drupal/Core/PathProcessor/OutboundPathProcessorInterface.php @@ -21,8 +21,27 @@ interface OutboundPathProcessorInterface { * @param string $path * The path to process, with a leading slash. * @param array $options - * An array of options such as would be passed to the generator's - * generateFromRoute() method. + * (optional) An associative array of additional options, with the following + * elements: + * - 'query': An array of query key/value-pairs (without any URL-encoding) + * to append to the URL. + * - 'fragment': A fragment identifier (named anchor) to append to the URL. + * Do not include the leading '#' character. + * - 'absolute': Defaults to FALSE. Whether to force the output to be an + * absolute link (beginning with http:). Useful for links that will be + * displayed outside the site, such as in an RSS feed. + * - 'language': An optional language object used to look up the alias + * for the URL. If $options['language'] is omitted, it defaults to the + * current language for the language type LanguageInterface::TYPE_URL. + * - 'https': Whether this URL should point to a secure location. If not + * defined, the current scheme is used, so the user stays on HTTP or HTTPS + * respectively. TRUE enforces HTTPS and FALSE enforces HTTP. + * - 'base_url': Only used internally by a path processor, for example, to + * modify the base URL when a language dependent URL requires so. + * - 'prefix': Only used internally, to modify the path when a language + * dependent URL requires so. + * - 'route': The route object for the given path. It will be set by + * \Drupal\Core\Routing\UrlGenerator::generateFromRoute(). * @param \Symfony\Component\HttpFoundation\Request $request * The HttpRequest object representing the current request. * @param \Drupal\Core\Render\BubbleableMetadata $bubbleable_metadata diff --git a/core/lib/Drupal/Core/Render/Element/RenderElement.php b/core/lib/Drupal/Core/Render/Element/RenderElement.php index 47c84024c..b6f95bcd6 100644 --- a/core/lib/Drupal/Core/Render/Element/RenderElement.php +++ b/core/lib/Drupal/Core/Render/Element/RenderElement.php @@ -269,6 +269,11 @@ abstract class RenderElement extends PluginBase implements ElementInterface { return $element; } + // Add a data attribute to disable automatic refocus after ajax call. + if (!empty($element['#ajax']['disable-refocus'])) { + $element['#attributes']['data-disable-refocus'] = "true"; + } + // Add a reasonable default event handler if none was specified. if (isset($element['#ajax']) && !isset($element['#ajax']['event'])) { switch ($element['#type']) { diff --git a/core/lib/Drupal/Core/Routing/Enhancer/FormRouteEnhancer.php b/core/lib/Drupal/Core/Routing/Enhancer/FormRouteEnhancer.php new file mode 100644 index 000000000..863accad9 --- /dev/null +++ b/core/lib/Drupal/Core/Routing/Enhancer/FormRouteEnhancer.php @@ -0,0 +1,33 @@ +hasDefault('_form') && !$route->hasDefault('_controller'); + } + + /** + * {@inheritdoc} + */ + public function enhance(array $defaults, Request $request) { + $defaults['_controller'] = 'controller.form:getContentResult'; + return $defaults; + } + +} diff --git a/core/lib/Drupal/Core/Routing/Enhancer/ParamConversionEnhancer.php b/core/lib/Drupal/Core/Routing/Enhancer/ParamConversionEnhancer.php index 3c1d282ec..a476006e5 100644 --- a/core/lib/Drupal/Core/Routing/Enhancer/ParamConversionEnhancer.php +++ b/core/lib/Drupal/Core/Routing/Enhancer/ParamConversionEnhancer.php @@ -44,8 +44,12 @@ class ParamConversionEnhancer implements RouteEnhancerInterface, EventSubscriber * {@inheritdoc} */ public function enhance(array $defaults, Request $request) { - $defaults['_raw_variables'] = $this->copyRawVariables($defaults); - return $this->paramConverterManager->convert($defaults); + // Just run the parameter conversion once per request. + if (!isset($defaults['_raw_variables'])) { + $defaults['_raw_variables'] = $this->copyRawVariables($defaults); + $defaults = $this->paramConverterManager->convert($defaults); + } + return $defaults; } /** diff --git a/core/lib/Drupal/Core/Routing/RouteProvider.php b/core/lib/Drupal/Core/Routing/RouteProvider.php index 937cff71f..ac8188790 100644 --- a/core/lib/Drupal/Core/Routing/RouteProvider.php +++ b/core/lib/Drupal/Core/Routing/RouteProvider.php @@ -246,7 +246,7 @@ class RouteProvider implements PreloadableRouteProviderInterface, PagedRouteProv * @return array * An array of outlines that could match the specified path parts. */ - public function getCandidateOutlines(array $parts) { + protected function getCandidateOutlines(array $parts) { $number_parts = count($parts); $ancestors = array(); $length = $number_parts - 1; @@ -355,7 +355,7 @@ class RouteProvider implements PreloadableRouteProviderInterface, PagedRouteProv /** * Comparison function for usort on routes. */ - public function routeProviderRouteCompare(array $a, array $b) { + protected function routeProviderRouteCompare(array $a, array $b) { if ($a['fit'] == $b['fit']) { return strcmp($a['name'], $b['name']); } diff --git a/core/lib/Drupal/Core/Routing/UrlGenerator.php b/core/lib/Drupal/Core/Routing/UrlGenerator.php index f3d1275b2..62ece640d 100644 --- a/core/lib/Drupal/Core/Routing/UrlGenerator.php +++ b/core/lib/Drupal/Core/Routing/UrlGenerator.php @@ -309,6 +309,9 @@ class UrlGenerator implements UrlGeneratorInterface { $name = $this->getRouteDebugMessage($name); $this->processRoute($name, $route, $parameters, $generated_url); $path = $this->getInternalPathFromRoute($name, $route, $parameters, $query_params); + // Outbound path processors might need the route object for the path, e.g. + // to get the path pattern. + $options['route'] = $route; $path = $this->processPath($path, $options, $generated_url); if (!empty($options['prefix'])) { diff --git a/core/lib/Drupal/Core/Routing/UrlGeneratorInterface.php b/core/lib/Drupal/Core/Routing/UrlGeneratorInterface.php index 7c33fd4b6..eb77445c8 100644 --- a/core/lib/Drupal/Core/Routing/UrlGeneratorInterface.php +++ b/core/lib/Drupal/Core/Routing/UrlGeneratorInterface.php @@ -77,6 +77,10 @@ interface UrlGeneratorInterface extends VersatileGeneratorInterface { * @throws \Symfony\Component\Routing\Exception\InvalidParameterException * Thrown when a parameter value for a placeholder is not correct because it * does not match the requirement. + * + * @internal + * Should not be used in user code. + * Use \Drupal\Core\Url instead. */ public function generateFromRoute($name, $parameters = array(), $options = array(), $collect_bubbleable_metadata = FALSE); diff --git a/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php b/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php index db8019b18..514cad3e0 100644 --- a/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php +++ b/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php @@ -47,28 +47,41 @@ class ReverseProxyMiddleware implements HttpKernelInterface { */ public function handle(Request $request, $type = self::MASTER_REQUEST, $catch = TRUE) { // Initialize proxy settings. - if ($this->settings->get('reverse_proxy', FALSE)) { - $ip_header = $this->settings->get('reverse_proxy_header', 'X_FORWARDED_FOR'); + static::setSettingsOnRequest($request, $this->settings); + return $this->httpKernel->handle($request, $type, $catch); + } + + /** + * Sets reverse proxy settings on Request object. + * + * @param \Symfony\Component\HttpFoundation\Request $request + * A Request instance. + * @param \Drupal\Core\Site\Settings $settings + * The site settings. + */ + public static function setSettingsOnRequest(Request $request, Settings $settings) { + // Initialize proxy settings. + if ($settings->get('reverse_proxy', FALSE)) { + $ip_header = $settings->get('reverse_proxy_header', 'X_FORWARDED_FOR'); $request::setTrustedHeaderName($request::HEADER_CLIENT_IP, $ip_header); - $proto_header = $this->settings->get('reverse_proxy_proto_header', 'X_FORWARDED_PROTO'); + $proto_header = $settings->get('reverse_proxy_proto_header', 'X_FORWARDED_PROTO'); $request::setTrustedHeaderName($request::HEADER_CLIENT_PROTO, $proto_header); - $host_header = $this->settings->get('reverse_proxy_host_header', 'X_FORWARDED_HOST'); + $host_header = $settings->get('reverse_proxy_host_header', 'X_FORWARDED_HOST'); $request::setTrustedHeaderName($request::HEADER_CLIENT_HOST, $host_header); - $port_header = $this->settings->get('reverse_proxy_port_header', 'X_FORWARDED_PORT'); + $port_header = $settings->get('reverse_proxy_port_header', 'X_FORWARDED_PORT'); $request::setTrustedHeaderName($request::HEADER_CLIENT_PORT, $port_header); - $forwarded_header = $this->settings->get('reverse_proxy_forwarded_header', 'FORWARDED'); + $forwarded_header = $settings->get('reverse_proxy_forwarded_header', 'FORWARDED'); $request::setTrustedHeaderName($request::HEADER_FORWARDED, $forwarded_header); - $proxies = $this->settings->get('reverse_proxy_addresses', array()); + $proxies = $settings->get('reverse_proxy_addresses', array()); if (count($proxies) > 0) { $request::setTrustedProxies($proxies); } } - return $this->httpKernel->handle($request, $type, $catch); } } diff --git a/core/lib/Drupal/Core/StringTranslation/TranslationManager.php b/core/lib/Drupal/Core/StringTranslation/TranslationManager.php index e9962d6eb..872d57f63 100644 --- a/core/lib/Drupal/Core/StringTranslation/TranslationManager.php +++ b/core/lib/Drupal/Core/StringTranslation/TranslationManager.php @@ -134,6 +134,11 @@ class TranslationManager implements TranslationInterface, TranslatorInterface { * The translated string. */ protected function doTranslate($string, array $options = array()) { + // If a NULL langcode has been provided, unset it. + if (!isset($options['langcode']) && array_key_exists('langcode', $options)) { + unset($options['langcode']); + } + // Merge in options defaults. $options = $options + [ 'langcode' => $this->defaultLangcode, diff --git a/core/lib/Drupal/Core/Template/Attribute.php b/core/lib/Drupal/Core/Template/Attribute.php index 26a1793cd..8aaac3bb0 100644 --- a/core/lib/Drupal/Core/Template/Attribute.php +++ b/core/lib/Drupal/Core/Template/Attribute.php @@ -117,10 +117,11 @@ class Attribute implements \ArrayAccess, \IteratorAggregate, MarkupInterface { * An AttributeValueBase representation of the attribute's value. */ protected function createAttributeValue($name, $value) { - // If the value is already an AttributeValueBase object, return it - // straight away. + // If the value is already an AttributeValueBase object, + // return a new instance of the same class, but with the new name. if ($value instanceof AttributeValueBase) { - return $value; + $class = get_class($value); + return new $class($name, $value->value()); } // An array value or 'class' attribute name are forced to always be an // AttributeArray value for consistency. diff --git a/core/lib/Drupal/Core/Theme/MissingThemeDependencyException.php b/core/lib/Drupal/Core/Theme/MissingThemeDependencyException.php new file mode 100644 index 000000000..0708450f8 --- /dev/null +++ b/core/lib/Drupal/Core/Theme/MissingThemeDependencyException.php @@ -0,0 +1,47 @@ +theme = $theme; + } + + /** + * Gets the machine name of the missing theme. + * + * @return string + * The machine name of the theme that is missing. + */ + public function getMissingThemeName() { + return $this->theme; + } + +} diff --git a/core/lib/Drupal/Core/Theme/ThemeInitialization.php b/core/lib/Drupal/Core/Theme/ThemeInitialization.php index 95f27a9d0..d0c91662e 100644 --- a/core/lib/Drupal/Core/Theme/ThemeInitialization.php +++ b/core/lib/Drupal/Core/Theme/ThemeInitialization.php @@ -109,6 +109,16 @@ class ThemeInitialization implements ThemeInitializationInterface { $ancestor = $theme_name; while ($ancestor && isset($themes[$ancestor]->base_theme)) { $ancestor = $themes[$ancestor]->base_theme; + if (!$this->themeHandler->themeExists($ancestor)) { + if ($ancestor == 'stable') { + // Themes that depend on Stable will be fixed by system_update_8014(). + // There is no harm in not adding it as an ancestor since at worst + // some people might experience slight visual regressions on + // update.php. + continue; + } + throw new MissingThemeDependencyException(sprintf('Base theme %s has not been installed.', $ancestor), $ancestor); + } $base_themes[] = $themes[$ancestor]; } diff --git a/core/lib/Drupal/Core/Theme/ThemeInitializationInterface.php b/core/lib/Drupal/Core/Theme/ThemeInitializationInterface.php index f2b1547ed..a3b54df0b 100644 --- a/core/lib/Drupal/Core/Theme/ThemeInitializationInterface.php +++ b/core/lib/Drupal/Core/Theme/ThemeInitializationInterface.php @@ -34,6 +34,9 @@ interface ThemeInitializationInterface { * * @return \Drupal\Core\Theme\ActiveTheme * An active theme object instance for the given theme. + * + * @throws \Drupal\Core\Theme\MissingThemeDependencyException + * Thrown when base theme for installed theme is not installed. */ public function getActiveThemeByName($theme_name); @@ -54,8 +57,8 @@ interface ThemeInitializationInterface { * @param \Drupal\Core\Extension\Extension $theme * The theme extension object. * @param \Drupal\Core\Extension\Extension[] $base_themes - * An array of extension objects of base theme and its bases. It is ordered - * by 'oldest first', meaning the top level of the chain will be first. + * An array of extension objects of base theme and its bases. It is ordered + * by 'next parent first', meaning the top level of the chain will be first. * * @return \Drupal\Core\Theme\ActiveTheme * The active theme instance for the passed in $theme. diff --git a/core/lib/Drupal/Core/Utility/LinkGeneratorInterface.php b/core/lib/Drupal/Core/Utility/LinkGeneratorInterface.php index 10aa8c6fc..8029d7093 100644 --- a/core/lib/Drupal/Core/Utility/LinkGeneratorInterface.php +++ b/core/lib/Drupal/Core/Utility/LinkGeneratorInterface.php @@ -72,6 +72,9 @@ interface LinkGeneratorInterface { * @throws \Symfony\Component\Routing\Exception\InvalidParameterException * Thrown when a parameter value for a placeholder is not correct because it * does not match the requirement. + * + * @internal + * Should not be used in user code. Use \Drupal\Core\Link instead. */ public function generate($text, Url $url); @@ -84,6 +87,10 @@ interface LinkGeneratorInterface { * @return \Drupal\Core\GeneratedLink * A GeneratedLink object containing a link to the given route and * parameters and bubbleable metadata. + * + * @internal + * Should not be used in user code. + * Use \Drupal\Core\Link instead. */ public function generateFromLink(Link $link); diff --git a/core/misc/ajax.js b/core/misc/ajax.js index 2a6616dc7..b63bc0344 100644 --- a/core/misc/ajax.js +++ b/core/misc/ajax.js @@ -735,9 +735,36 @@ } $(this.element).prop('disabled', false); + // Save element's ancestors tree so if the element is removed from the dom + // we can try to refocus one of its parents. Using addBack reverse the + // result array, meaning that index 0 is the highest parent in the hierarchy + // in this situation it is usually a
element. + var elementParents = $(this.element).parents('[data-drupal-selector]').addBack().toArray(); + + // Track if any command is altering the focus so we can avoid changing the + // focus set by the Ajax command. + var focusChanged = false; for (var i in response) { if (response.hasOwnProperty(i) && response[i].command && this.commands[response[i].command]) { this.commands[response[i].command](this, response[i], status); + if (response[i].command === 'invoke' && response[i].method === 'focus') { + focusChanged = true; + } + } + } + + // If the focus hasn't be changed by the ajax commands, try to refocus the + // triggering element or one of its parents if that element does not exist + // anymore. + if (!focusChanged && this.element && !$(this.element).data('disable-refocus')) { + var target = false; + + for (var n = elementParents.length - 1; !target && n > 0; n--) { + target = document.querySelector('[data-drupal-selector="' + elementParents[n].getAttribute('data-drupal-selector') + '"]'); + } + + if (target) { + $(target).trigger('focus'); } } diff --git a/core/misc/drupalSettingsLoader.js b/core/misc/drupalSettingsLoader.js index da61b7edd..7ff292efb 100644 --- a/core/misc/drupalSettingsLoader.js +++ b/core/misc/drupalSettingsLoader.js @@ -7,7 +7,8 @@ 'use strict'; - var settingsElement = document.querySelector('script[type="application/json"][data-drupal-selector="drupal-settings-json"]'); + // Use direct child elements to harden against XSS exploits when CSP is on. + var settingsElement = document.querySelector('head > script[type="application/json"][data-drupal-selector="drupal-settings-json"], body > script[type="application/json"][data-drupal-selector="drupal-settings-json"]'); /** * Variable generated by Drupal with all the configuration created from PHP. diff --git a/core/misc/progress.js b/core/misc/progress.js index bf678f55b..26757518e 100644 --- a/core/misc/progress.js +++ b/core/misc/progress.js @@ -120,6 +120,7 @@ type: this.method, url: uri, data: '', + dataType: 'json', success: function (progress) { // Display errors. if (progress.status === 0) { diff --git a/core/misc/tabledrag.js b/core/misc/tabledrag.js index aa512acea..6a27d8fb2 100644 --- a/core/misc/tabledrag.js +++ b/core/misc/tabledrag.js @@ -236,14 +236,10 @@ // Add event bindings to the document. The self variable is passed along // as event handlers do not have direct access to the tableDrag object. - if (Modernizr.touchevents) { - $(document).on('touchmove', function (event) { return self.dragRow(event.originalEvent.touches[0], self); }); - $(document).on('touchend', function (event) { return self.dropRow(event.originalEvent.touches[0], self); }); - } - else { - $(document).on('mousemove', function (event) { return self.dragRow(event, self); }); - $(document).on('mouseup', function (event) { return self.dropRow(event, self); }); - } + $(document).on('touchmove', function (event) { return self.dragRow(event.originalEvent.touches[0], self); }); + $(document).on('touchend', function (event) { return self.dropRow(event.originalEvent.touches[0], self); }); + $(document).on('mousemove pointermove', function (event) { return self.dragRow(event, self); }); + $(document).on('mouseup pointerup', function (event) { return self.dropRow(event, self); }); // React to localStorage event showing or hiding weight columns. $(window).on('storage', $.proxy(function (e) { @@ -460,19 +456,13 @@ $item.find('td').eq(0).prepend(handle); } - if (Modernizr.touchevents) { - handle.on('touchstart', function (event) { - event.preventDefault(); + handle.on('mousedown touchstart pointerdown', function (event) { + event.preventDefault(); + if (event.originalEvent.type === 'touchstart') { event = event.originalEvent.touches[0]; - self.dragStart(event, self, item); - }); - } - else { - handle.on('mousedown', function (event) { - event.preventDefault(); - self.dragStart(event, self, item); - }); - } + } + self.dragStart(event, self, item); + }); // Prevent the anchor tag from jumping us to the top of the page. handle.on('click', function (e) { diff --git a/core/modules/aggregator/src/Tests/Migrate/MigrateAggregatorStubTest.php b/core/modules/aggregator/src/Tests/Migrate/MigrateAggregatorStubTest.php new file mode 100644 index 000000000..d620259a5 --- /dev/null +++ b/core/modules/aggregator/src/Tests/Migrate/MigrateAggregatorStubTest.php @@ -0,0 +1,63 @@ +installEntitySchema('aggregator_feed'); + $this->installEntitySchema('aggregator_item'); + } + + /** + * Tests creation of aggregator feed stubs. + */ + public function testFeedStub() { + $this->performStubTest('aggregator_feed'); + } + + /** + * Tests creation of aggregator feed items. + */ + public function testItemStub() { + try { + // We expect an exception, because there's no feed to reference. + $this->performStubTest('aggregator_item'); + $this->fail('Expected exception has not been thrown.'); + } + catch (MigrateException $e) { + $this->assertIdentical($e->getMessage(), + 'Stubbing failed, unable to generate value for field fid'); + } + + // The stub should pass when there's a feed to point to. + $this->createStub('aggregator_feed'); + $this->performStubTest('aggregator_item'); + } + +} diff --git a/core/modules/block/block.module b/core/modules/block/block.module index 29c6e16bf..0b6ca2631 100644 --- a/core/modules/block/block.module +++ b/core/modules/block/block.module @@ -89,7 +89,10 @@ function block_page_top(array &$page_top) { */ function block_themes_installed($theme_list) { foreach ($theme_list as $theme) { - block_theme_initialize($theme); + // Don't initialize themes that are not displayed in the UI. + if (\Drupal::service('theme_handler')->hasUi($theme)) { + block_theme_initialize($theme); + } } } diff --git a/core/modules/block/src/Controller/BlockController.php b/core/modules/block/src/Controller/BlockController.php index 2779a9b57..effa84266 100644 --- a/core/modules/block/src/Controller/BlockController.php +++ b/core/modules/block/src/Controller/BlockController.php @@ -11,6 +11,7 @@ use Drupal\Component\Utility\Html; use Drupal\Core\Controller\ControllerBase; use Drupal\Core\Extension\ThemeHandlerInterface; use Symfony\Component\DependencyInjection\ContainerInterface; +use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * Controller routines for admin block routes. @@ -53,6 +54,10 @@ class BlockController extends ControllerBase { * A #type 'page' render array containing the block region demo. */ public function demo($theme) { + if (!$this->themeHandler->hasUi($theme)) { + throw new NotFoundHttpException(); + } + $page = [ '#title' => Html::escape($this->themeHandler->getName($theme)), '#type' => 'page', diff --git a/core/modules/block/src/Controller/BlockListController.php b/core/modules/block/src/Controller/BlockListController.php index 72aa445c0..6185c9097 100644 --- a/core/modules/block/src/Controller/BlockListController.php +++ b/core/modules/block/src/Controller/BlockListController.php @@ -8,13 +8,42 @@ namespace Drupal\block\Controller; use Drupal\Core\Entity\Controller\EntityListController; +use Drupal\Core\Extension\ThemeHandlerInterface; +use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * Defines a controller to list blocks. */ class BlockListController extends EntityListController { + /** + * The theme handler. + * + * @var \Drupal\Core\Extension\ThemeHandlerInterface + */ + protected $themeHandler; + + /** + * Constructs the BlockListController. + * + * @param \Drupal\Core\Extension\ThemeHandlerInterface $theme_handler + * The theme handler. + */ + public function __construct(ThemeHandlerInterface $theme_handler) { + $this->themeHandler = $theme_handler; + } + + /** + * {@inheritdoc} + */ + public static function create(ContainerInterface $container) { + return new static( + $container->get('theme_handler') + ); + } + /** * Shows the block administration page. * @@ -28,6 +57,10 @@ class BlockListController extends EntityListController { */ public function listing($theme = NULL, Request $request = NULL) { $theme = $theme ?: $this->config('system.theme')->get('default'); + if (!$this->themeHandler->hasUi($theme)) { + throw new NotFoundHttpException(); + } + return $this->entityManager()->getListBuilder('block')->render($theme, $request); } diff --git a/core/modules/block/src/Plugin/Derivative/ThemeLocalTask.php b/core/modules/block/src/Plugin/Derivative/ThemeLocalTask.php index 4e337db7b..ed9d09544 100644 --- a/core/modules/block/src/Plugin/Derivative/ThemeLocalTask.php +++ b/core/modules/block/src/Plugin/Derivative/ThemeLocalTask.php @@ -50,7 +50,7 @@ class ThemeLocalTask extends DeriverBase implements ContainerDeriverInterface { $default_theme = $this->themeHandler->getDefault(); foreach ($this->themeHandler->listInfo() as $theme_name => $theme) { - if ($theme->status) { + if ($this->themeHandler->hasUi($theme_name)) { $this->derivatives[$theme_name] = $base_plugin_definition; $this->derivatives[$theme_name]['title'] = $theme->info['name']; $this->derivatives[$theme_name]['route_parameters'] = array('theme' => $theme_name); diff --git a/core/modules/block/src/Tests/BlockHiddenRegionTest.php b/core/modules/block/src/Tests/BlockHiddenRegionTest.php index a6af2ce5e..bb42dceea 100644 --- a/core/modules/block/src/Tests/BlockHiddenRegionTest.php +++ b/core/modules/block/src/Tests/BlockHiddenRegionTest.php @@ -56,7 +56,9 @@ class BlockHiddenRegionTest extends WebTestBase { // Install "block_test_theme" and set it as the default theme. $theme = 'block_test_theme'; - \Drupal::service('theme_handler')->install(array($theme)); + // We need to install a non-hidden theme so that there is more than one + // local task. + \Drupal::service('theme_handler')->install(array($theme, 'stark')); $this->config('system.theme') ->set('default', $theme) ->save(); diff --git a/core/modules/block/src/Tests/BlockTest.php b/core/modules/block/src/Tests/BlockTest.php index c98b042de..261c3ae6d 100644 --- a/core/modules/block/src/Tests/BlockTest.php +++ b/core/modules/block/src/Tests/BlockTest.php @@ -197,9 +197,9 @@ class BlockTest extends BlockTestBase { */ public function testBlockThemeSelector() { // Install all themes. - \Drupal::service('theme_handler')->install(array('bartik', 'seven')); + \Drupal::service('theme_handler')->install(['bartik', 'seven', 'stark']); $theme_settings = $this->config('system.theme'); - foreach (array('bartik', 'classy', 'seven') as $theme) { + foreach (['bartik', 'seven', 'stark'] as $theme) { $this->drupalGet('admin/structure/block/list/' . $theme); $this->assertTitle(t('Block layout') . ' | Drupal'); // Select the 'Powered by Drupal' block to be placed. diff --git a/core/modules/block/src/Tests/BlockUiTest.php b/core/modules/block/src/Tests/BlockUiTest.php index 25b7942a5..4d0f03a1e 100644 --- a/core/modules/block/src/Tests/BlockUiTest.php +++ b/core/modules/block/src/Tests/BlockUiTest.php @@ -90,6 +90,10 @@ class BlockUiTest extends WebTestBase { \Drupal::service('theme_handler')->install(array('test_theme')); $this->drupalGet('admin/structure/block/demo/test_theme'); $this->assertEscaped('Test theme'); + + \Drupal::service('theme_handler')->install(['stable']); + $this->drupalGet('admin/structure/block/demo/stable'); + $this->assertResponse(404, 'Hidden themes that are not the default theme are not supported by the block demo screen'); } /** @@ -136,6 +140,28 @@ class BlockUiTest extends WebTestBase { $this->drupalGet('admin/structure/block'); $element = $this->xpath('//tr[contains(@class, :class)]', [':class' => 'region-title-header']); $this->assertTrue(!empty($element)); + + // Ensure hidden themes do not appear in the UI. Enable another non base + // theme and place the local tasks block. + $this->assertTrue(\Drupal::service('theme_handler')->themeExists('classy'), 'The classy base theme is enabled'); + $this->drupalPlaceBlock('local_tasks_block', ['region' => 'header']); + \Drupal::service('theme_installer')->install(['stable', 'stark']); + $this->drupalGet('admin/structure/block'); + $theme_handler = \Drupal::service('theme_handler'); + $this->assertLink($theme_handler->getName('classy')); + $this->assertLink($theme_handler->getName('stark')); + $this->assertNoLink($theme_handler->getName('stable')); + + $this->drupalGet('admin/structure/block/list/stable'); + $this->assertResponse(404, 'Placing blocks through UI is not possible for a hidden base theme.'); + + \Drupal::configFactory()->getEditable('system.theme')->set('admin', 'stable')->save(); + \Drupal::service('router.builder')->rebuildIfNeeded(); + $this->drupalPlaceBlock('local_tasks_block', ['region' => 'header', 'theme' => 'stable']); + $this->drupalGet('admin/structure/block'); + $this->assertLink($theme_handler->getName('stable')); + $this->drupalGet('admin/structure/block/list/stable'); + $this->assertResponse(200, 'Placing blocks through UI is possible for a hidden base theme that is the admin theme.'); } /** diff --git a/core/modules/block/src/Tests/NewDefaultThemeBlocksTest.php b/core/modules/block/src/Tests/NewDefaultThemeBlocksTest.php index 68592c84f..6d14eedb6 100644 --- a/core/modules/block/src/Tests/NewDefaultThemeBlocksTest.php +++ b/core/modules/block/src/Tests/NewDefaultThemeBlocksTest.php @@ -65,6 +65,14 @@ class NewDefaultThemeBlocksTest extends WebTestBase { unset($new_blocks[str_replace($default_theme . '_', $new_theme . '_', $default_block_name)]); } $this->assertTrue(empty($new_blocks), 'The new theme has exactly the same blocks as the previous default theme.'); + + // Install a hidden base theme and ensure blocks are not copied. + $base_theme = 'test_basetheme'; + \Drupal::service('theme_handler')->install([$base_theme]); + $new_blocks = $this->container->get('entity.query')->get('block') + ->condition('theme', $base_theme) + ->execute(); + $this->assertTrue(empty($new_blocks), 'Installing a hidden base theme does not copy blocks from the default theme.'); } } diff --git a/core/modules/block/tests/src/Unit/Menu/BlockLocalTasksTest.php b/core/modules/block/tests/src/Unit/Menu/BlockLocalTasksTest.php index f70a57cf7..632091754 100644 --- a/core/modules/block/tests/src/Unit/Menu/BlockLocalTasksTest.php +++ b/core/modules/block/tests/src/Unit/Menu/BlockLocalTasksTest.php @@ -27,7 +27,11 @@ class BlockLocalTasksTest extends LocalTaskIntegrationTestBase { $themes = array(); $themes['test_a'] = (object) array( - 'status' => 0, + 'status' => 1, + 'info' => array( + 'name' => 'test_a', + 'hidden' => TRUE, + ), ); $themes['test_b'] = (object) array( 'status' => 1, @@ -45,6 +49,13 @@ class BlockLocalTasksTest extends LocalTaskIntegrationTestBase { $theme_handler->expects($this->any()) ->method('listInfo') ->will($this->returnValue($themes)); + $theme_handler->expects($this->any()) + ->method('hasUi') + ->willReturnMap([ + ['test_a', FALSE], + ['test_b', TRUE], + ['test_c', TRUE], + ]); $container = new ContainerBuilder(); $container->set('config.factory', $config_factory); diff --git a/core/modules/block_content/block_content.routing.yml b/core/modules/block_content/block_content.routing.yml index 8e4f649cc..75ea9b29d 100644 --- a/core/modules/block_content/block_content.routing.yml +++ b/core/modules/block_content/block_content.routing.yml @@ -44,6 +44,7 @@ entity.block_content.canonical: _admin_route: TRUE requirements: _entity_access: 'block_content.update' + block_content: \d+ entity.block_content.edit_form: path: '/block/{block_content}' @@ -53,6 +54,7 @@ entity.block_content.edit_form: _admin_route: TRUE requirements: _entity_access: 'block_content.update' + block_content: \d+ entity.block_content.delete_form: path: '/block/{block_content}/delete' @@ -63,6 +65,7 @@ entity.block_content.delete_form: _admin_route: TRUE requirements: _entity_access: 'block_content.delete' + block_content: \d+ block_content.type_add: path: '/admin/structure/block/block-content/types/add' diff --git a/core/modules/block_content/src/Tests/BlockContentTypeTest.php b/core/modules/block_content/src/Tests/BlockContentTypeTest.php index e669a72e3..d1405b9ee 100644 --- a/core/modules/block_content/src/Tests/BlockContentTypeTest.php +++ b/core/modules/block_content/src/Tests/BlockContentTypeTest.php @@ -185,17 +185,15 @@ class BlockContentTypeTest extends BlockContentTestBase { ->getStorage('block_content'); // Install all themes. - \Drupal::service('theme_handler')->install(array('bartik', 'seven')); - $themes = array('bartik', 'seven', 'classy'); + \Drupal::service('theme_handler')->install(['bartik', 'seven', 'stark']); $theme_settings = $this->config('system.theme'); - foreach ($themes as $default_theme) { + foreach (['bartik', 'seven', 'stark'] as $default_theme) { // Change the default theme. $theme_settings->set('default', $default_theme)->save(); \Drupal::service('router.builder')->rebuild(); // For each installed theme, go to its block page and test the redirects. - $themes = array('bartik', 'classy', 'seven'); - foreach ($themes as $theme) { + foreach (['bartik', 'seven', 'stark'] as $theme) { // Test that adding a block from the 'place blocks' form sends you to the // block configure form. $path = $theme == $default_theme ? 'admin/structure/block' : "admin/structure/block/list/$theme"; diff --git a/core/modules/block_content/src/Tests/Migrate/MigrateBlockContentStubTest.php b/core/modules/block_content/src/Tests/Migrate/MigrateBlockContentStubTest.php new file mode 100644 index 000000000..5b28c3705 --- /dev/null +++ b/core/modules/block_content/src/Tests/Migrate/MigrateBlockContentStubTest.php @@ -0,0 +1,63 @@ +installEntitySchema('block_content'); + } + + /** + * Tests creation of block content stubs with no block_content_type available. + */ + public function testStubFailure() { + $message = 'Expected MigrateException thrown when no bundles exist.'; + try { + $this->createStub('block_content'); + $this->fail($message); + } + catch (MigrateException $e) { + $this->pass($message); + $this->assertEqual('Stubbing failed, no bundles available for entity type: block_content', $e->getMessage()); + } + } + + /** + * Tests creation of block content stubs when there is a block_content_type. + */ + public function testStubSuccess() { + BlockContentType::create([ + 'id' => 'test_block_content_type', + 'label' => 'Test block content type', + ])->save(); + $this->performStubTest('block_content'); + } + +} diff --git a/core/modules/book/book.routing.yml b/core/modules/book/book.routing.yml index 9b8f32293..772a6cf39 100644 --- a/core/modules/book/book.routing.yml +++ b/core/modules/book/book.routing.yml @@ -29,6 +29,7 @@ book.export: requirements: _permission: 'access printer-friendly version' _entity_access: 'node.view' + node: \d+ entity.node.book_outline_form: path: '/node/{node}/outline' @@ -38,6 +39,7 @@ entity.node.book_outline_form: requirements: _permission: 'administer book outlines' _entity_access: 'node.view' + node: \d+ options: _node_operation_route: TRUE @@ -62,3 +64,4 @@ entity.node.book_remove_form: _permission: 'administer book outlines' _entity_access: 'node.view' _access_book_removable: 'TRUE' + node: \d+ diff --git a/core/modules/ckeditor/js/plugins/drupallink/plugin.js b/core/modules/ckeditor/js/plugins/drupallink/plugin.js index dfb7c875a..9f0abcd98 100644 --- a/core/modules/ckeditor/js/plugins/drupallink/plugin.js +++ b/core/modules/ckeditor/js/plugins/drupallink/plugin.js @@ -9,6 +9,27 @@ 'use strict'; + function parseAttributes(element) { + var parsedAttributes = {}; + + var domElement = element.$; + var attribute = null; + var attributeName; + for (var attrIndex = 0; attrIndex < domElement.attributes.length; attrIndex++) { + attribute = domElement.attributes.item(attrIndex); + attributeName = attribute.nodeName.toLowerCase(); + // Don't consider data-cke-saved- attributes; they're just there to work + // around browser quirks. + if (attributeName.substring(0, 15) === 'data-cke-saved-') { + continue; + } + // Store the value for this attribute, unless there's a data-cke-saved- + // alternative for it, which will contain the quirk-free, original value. + parsedAttributes[attributeName] = element.data('cke-saved-' + attributeName) || attribute.nodeValue; + } + return parsedAttributes; + } + CKEDITOR.plugins.add('drupallink', { init: function (editor) { // Add the commands for link and unlink. @@ -16,8 +37,7 @@ allowedContent: { a: { attributes: { - '!href': true, - 'target': true + '!href': true }, classes: {} } @@ -34,35 +54,16 @@ var drupalImageUtils = CKEDITOR.plugins.drupalimage; var focusedImageWidget = drupalImageUtils && drupalImageUtils.getFocusedWidget(editor); var linkElement = getSelectedLink(editor); - var linkDOMElement = null; // Set existing values based on selected element. var existingValues = {}; if (linkElement && linkElement.$) { - linkDOMElement = linkElement.$; - - // Populate an array with the link's current attributes. - var attribute = null; - var attributeName; - for (var attrIndex = 0; attrIndex < linkDOMElement.attributes.length; attrIndex++) { - attribute = linkDOMElement.attributes.item(attrIndex); - attributeName = attribute.nodeName.toLowerCase(); - // Don't consider data-cke-saved- attributes; they're just there - // to work around browser quirks. - if (attributeName.substring(0, 15) === 'data-cke-saved-') { - continue; - } - // Store the value for this attribute, unless there's a - // data-cke-saved- alternative for it, which will contain the - // quirk-free, original value. - existingValues[attributeName] = linkElement.data('cke-saved-' + attributeName) || attribute.nodeValue; - } + existingValues = parseAttributes(linkElement); } // Or, if an image widget is focused, we're editing a link wrapping // an image widget. else if (focusedImageWidget && focusedImageWidget.data.link) { - var url = focusedImageWidget.data.link.url; - existingValues.href = url.protocol + url.url; + existingValues = CKEDITOR.tools.clone(focusedImageWidget.data.link); } // Prepare a save callback to be used upon saving the dialog. @@ -70,14 +71,7 @@ // If an image widget is focused, we're not editing an independent // link, but we're wrapping an image widget in a link. if (focusedImageWidget) { - var urlMatch = returnValues.attributes.href.match(urlRegex); - focusedImageWidget.setData('link', { - type: 'url', - url: { - protocol: urlMatch[1], - url: urlMatch[2] - } - }); + focusedImageWidget.setData('link', CKEDITOR.tools.extend(returnValues.attributes, focusedImageWidget.data.link)); editor.fire('saveSnapshot'); return; } @@ -97,11 +91,6 @@ range.selectNodeContents(text); } - // Ignore a disabled target attribute. - if (returnValues.attributes.target === 0) { - delete returnValues.attributes.target; - } - // Create the new link by applying a style to the new text. var style = new CKEDITOR.style({element: 'a', attributes: returnValues.attributes}); style.type = CKEDITOR.STYLE_INLINE; @@ -150,8 +139,7 @@ allowedContent: { a: { attributes: { - '!href': true, - 'target': true + '!href': true } } }, @@ -280,8 +268,6 @@ return null; } - var urlRegex = /^((?:http|https):\/\/)?(.*)$/; - /** * The image2 plugin is currently tightly coupled to the link plugin: it * calls CKEDITOR.plugins.link.parseLinkAttributes(). @@ -296,28 +282,20 @@ */ CKEDITOR.plugins.link = CKEDITOR.plugins.link || { parseLinkAttributes: function (editor, element) { - var href = (element && (element.data('cke-saved-href') || element.getAttribute('href'))) || ''; - var urlMatch = href.match(urlRegex); - return { - type: 'url', - url: { - protocol: urlMatch[1], - url: urlMatch[2] - } - }; + return parseAttributes(element); }, getLinkAttributes: function (editor, data) { var set = {}; - - var protocol = (data.url && typeof data.url.protocol !== 'undefined') ? data.url.protocol : 'http://'; - var url = (data.url && CKEDITOR.tools.trim(data.url.url)) || ''; - set['data-cke-saved-href'] = (url.indexOf('/') === 0) ? url : protocol + url; - - // Browser need the "href" fro copy/paste link to work. (#6641) - if (set['data-cke-saved-href']) { - set.href = set['data-cke-saved-href']; + for (var attributeName in data) { + if (data.hasOwnProperty(attributeName)) { + set[attributeName] = data[attributeName]; + } } + // CKEditor tracks the *actual* saved href in a data-cke-saved-* attribute + // to work around browser quirks. We need to update it. + set['data-cke-saved-href'] = set.href; + // Remove all attributes which are not currently set. var removed = {}; for (var s in set) { diff --git a/core/modules/comment/comment.routing.yml b/core/modules/comment/comment.routing.yml index 967cb3f08..3d698b837 100644 --- a/core/modules/comment/comment.routing.yml +++ b/core/modules/comment/comment.routing.yml @@ -23,6 +23,7 @@ entity.comment.edit_form: _entity_form: 'comment.default' requirements: _entity_access: 'comment.update' + comment: \d+ comment.approve: path: '/comment/{comment}/approve' @@ -33,6 +34,7 @@ comment.approve: requirements: _entity_access: 'comment.approve' _csrf_token: 'TRUE' + comment: \d+ entity.comment.canonical: path: '/comment/{comment}' @@ -41,6 +43,7 @@ entity.comment.canonical: _controller: '\Drupal\comment\Controller\CommentController::commentPermalink' requirements: _entity_access: 'comment.view' + comment: \d+ entity.comment.delete_form: path: '/comment/{comment}/delete' @@ -49,6 +52,7 @@ entity.comment.delete_form: _entity_form: 'comment.delete' requirements: _entity_access: 'comment.delete' + comment: \d+ comment.reply: path: '/comment/reply/{entity_type}/{entity}/{field_name}/{pid}' @@ -77,6 +81,7 @@ comment.node_redirect: requirements: _entity_access: 'node.view' _module_dependencies: 'node' + node: \d+ entity.comment_type.collection: path: '/admin/structure/comment' diff --git a/core/modules/comment/src/Plugin/EntityReferenceSelection/CommentSelection.php b/core/modules/comment/src/Plugin/EntityReferenceSelection/CommentSelection.php index c8bc4a701..b053170fc 100644 --- a/core/modules/comment/src/Plugin/EntityReferenceSelection/CommentSelection.php +++ b/core/modules/comment/src/Plugin/EntityReferenceSelection/CommentSelection.php @@ -39,6 +39,34 @@ class CommentSelection extends DefaultSelection { return $query; } + /** + * {@inheritdoc} + */ + public function createNewEntity($entity_type_id, $bundle, $label, $uid) { + $comment = parent::createNewEntity($entity_type_id, $bundle, $label, $uid); + + // In order to create a referenceable comment, it needs to published. + /** @var \Drupal\comment\CommentInterface $comment */ + $comment->setPublished(TRUE); + + return $comment; + } + + /** + * {@inheritdoc} + */ + public function validateReferenceableNewEntities(array $entities) { + $entities = parent::validateReferenceableNewEntities($entities); + // Mirror the conditions checked in buildEntityQuery(). + if (!$this->currentUser->hasPermission('administer comments')) { + $entities = array_filter($entities, function ($comment) { + /** @var \Drupal\comment\CommentInterface $comment */ + return $comment->isPublished(); + }); + } + return $entities; + } + /** * {@inheritdoc} */ diff --git a/core/modules/comment/src/Plugin/migrate/destination/EntityComment.php b/core/modules/comment/src/Plugin/migrate/destination/EntityComment.php index 477cdcd0c..7ebbc8338 100644 --- a/core/modules/comment/src/Plugin/migrate/destination/EntityComment.php +++ b/core/modules/comment/src/Plugin/migrate/destination/EntityComment.php @@ -10,6 +10,7 @@ namespace Drupal\comment\Plugin\migrate\destination; use Drupal\Core\Entity\EntityManagerInterface; use Drupal\Core\Entity\EntityStorageInterface; use Drupal\Core\Entity\Query\QueryFactory; +use Drupal\Core\Field\FieldTypePluginManagerInterface; use Drupal\Core\State\StateInterface; use Drupal\migrate\Entity\MigrationInterface; use Drupal\migrate\MigrateException; @@ -62,13 +63,15 @@ class EntityComment extends EntityContentBase { * The list of bundles this entity type has. * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager * The entity manager service. + * @param \Drupal\Core\Field\FieldTypePluginManagerInterface $field_type_manager + * The field type plugin manager service. * @param \Drupal\Core\State\StateInterface $state * The state storage object. * @param \Drupal\Core\Entity\Query\QueryFactory $entity_query * The query object that can query the given entity type. */ - public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, EntityStorageInterface $storage, array $bundles, EntityManagerInterface $entity_manager, StateInterface $state, QueryFactory $entity_query) { - parent::__construct($configuration, $plugin_id, $plugin_definition, $migration, $storage, $bundles, $entity_manager); + public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, EntityStorageInterface $storage, array $bundles, EntityManagerInterface $entity_manager, FieldTypePluginManagerInterface $field_type_manager, StateInterface $state, QueryFactory $entity_query) { + parent::__construct($configuration, $plugin_id, $plugin_definition, $migration, $storage, $bundles, $entity_manager, $field_type_manager); $this->state = $state; $this->entityQuery = $entity_query; } @@ -86,6 +89,7 @@ class EntityComment extends EntityContentBase { $container->get('entity.manager')->getStorage($entity_type), array_keys($container->get('entity.manager')->getBundleInfo($entity_type)), $container->get('entity.manager'), + $container->get('plugin.manager.field.field_type'), $container->get('state'), $container->get('entity.query') ); @@ -110,32 +114,9 @@ class EntityComment extends EntityContentBase { */ protected function processStubRow(Row $row) { parent::processStubRow($row); - $stub_commented_entity_type = $row->getDestinationProperty('entity_type'); - - // While parent::getEntity() fills the bundle property for stub entities - // if it's still empty, here we must also make sure entity_id/entity_type - // are filled (so $comment->getCommentedEntity() always returns a value). - if (empty($this->stubCommentedEntityIds[$stub_commented_entity_type])) { - // Fill stub entity id. Any id will do, as long as it exists. - $entity_type = $this->entityManager->getDefinition($stub_commented_entity_type); - $id_key = $entity_type->getKey('id'); - $result = $this->entityQuery - ->get($stub_commented_entity_type) - ->range(0, 1) - ->execute(); - if ($result) { - $this->stubCommentedEntityIds[$stub_commented_entity_type] = array_pop($result); - $row->setSourceProperty($id_key, $this->stubCommentedEntityIds[$stub_commented_entity_type]); - } - else { - throw new MigrateException(t('Could not find parent entity to use for comment %id', ['%id' => implode(':', $row->getSourceIdValues())]), MigrationInterface::MESSAGE_ERROR); - } - } - - $row->setDestinationProperty('entity_id', $this->stubCommentedEntityIds[$stub_commented_entity_type]); - $row->setDestinationProperty('entity_type', $stub_commented_entity_type); - $row->setDestinationProperty('created', REQUEST_TIME); - $row->setDestinationProperty('changed', REQUEST_TIME); + // Neither uid nor name is required in itself, but it is required to set one + // of them. + $row->setDestinationProperty('name', 'anonymous_stub'); } } diff --git a/core/modules/comment/src/Tests/CommentValidationTest.php b/core/modules/comment/src/Tests/CommentValidationTest.php index 62acec0b1..5c30d893d 100644 --- a/core/modules/comment/src/Tests/CommentValidationTest.php +++ b/core/modules/comment/src/Tests/CommentValidationTest.php @@ -39,7 +39,7 @@ class CommentValidationTest extends EntityUnitTestBase { */ public function testValidation() { // Add a user. - $user = User::create(array('name' => 'test')); + $user = User::create(array('name' => 'test', 'status' => TRUE)); $user->save(); // Add comment type. diff --git a/core/modules/comment/src/Tests/Migrate/MigrateCommentStubTest.php b/core/modules/comment/src/Tests/Migrate/MigrateCommentStubTest.php new file mode 100644 index 000000000..22818f585 --- /dev/null +++ b/core/modules/comment/src/Tests/Migrate/MigrateCommentStubTest.php @@ -0,0 +1,78 @@ +installEntitySchema('comment'); + $this->installEntitySchema('node'); + // Make sure uid 0 is created (default uid for comments is 0). + $storage = \Drupal::entityManager()->getStorage('user'); + // Insert a row for the anonymous user. + $storage + ->create(array( + 'uid' => 0, + 'status' => 0, + 'name' => '', + )) + ->save(); + // Need at least one node type and comment type present. + NodeType::create([ + 'type' => 'testnodetype', + 'name' => 'Test node type', + ])->save(); + CommentType::create([ + 'id' => 'testcommenttype', + 'label' => 'Test comment type', + 'target_entity_type_id' => 'node', + ])->save(); + } + + /** + * Tests creation of comment stubs. + */ + public function testStub() { + try { + // We expect an exception, because there's no node to reference. + $this->performStubTest('comment'); + $this->fail('Expected exception has not been thrown.'); + } + catch (MigrateException $e) { + $this->assertIdentical($e->getMessage(), + 'Stubbing failed, unable to generate value for field entity_id'); + } + + // The stub should pass when there's a node to point to. + $this->createStub('node'); + $this->performStubTest('comment'); + } + +} diff --git a/core/modules/comment/src/Tests/Migrate/d6/MigrateCommentTest.php b/core/modules/comment/src/Tests/Migrate/d6/MigrateCommentTest.php index 4545e4626..7219d9548 100644 --- a/core/modules/comment/src/Tests/Migrate/d6/MigrateCommentTest.php +++ b/core/modules/comment/src/Tests/Migrate/d6/MigrateCommentTest.php @@ -22,13 +22,7 @@ class MigrateCommentTest extends MigrateDrupal6TestBase { /** * {@inheritdoc} */ - public static $modules = [ - 'comment', - // Directly testing that a stub comment's entity_id is populated upon - // importing is not straightforward, but RDF module serves as an implicit - // test - its hook_comment_storage_load() references a stubbed comment. - 'rdf', - ]; + public static $modules = ['comment']; /** * {@inheritdoc} diff --git a/core/modules/config/src/Tests/ConfigImportInstallProfileTest.php b/core/modules/config/src/Tests/ConfigImportInstallProfileTest.php index 19ef2eec0..e15d3acbf 100644 --- a/core/modules/config/src/Tests/ConfigImportInstallProfileTest.php +++ b/core/modules/config/src/Tests/ConfigImportInstallProfileTest.php @@ -67,6 +67,7 @@ class ConfigImportInstallProfileTest extends WebTestBase { $core['module']['testing_config_import'] = 0; unset($core['module']['syslog']); unset($core['theme']['stark']); + $core['theme']['stable'] = 0; $core['theme']['classy'] = 0; $sync->write('core.extension', $core); $sync->deleteAll('syslog.'); diff --git a/core/modules/config/src/Tests/ConfigInstallProfileOverrideTest.php b/core/modules/config/src/Tests/ConfigInstallProfileOverrideTest.php index b5409bec6..e10dfe0b1 100644 --- a/core/modules/config/src/Tests/ConfigInstallProfileOverrideTest.php +++ b/core/modules/config/src/Tests/ConfigInstallProfileOverrideTest.php @@ -92,12 +92,12 @@ class ConfigInstallProfileOverrideTest extends WebTestBase { } // Install the config_test module and ensure that the override from the - // install profile is not used. Optional configuration can not override + // install profile is used. Optional configuration can override // configuration in a modules config/install directory. $this->container->get('module_installer')->install(['config_test']); $this->rebuildContainer(); $config_test_storage = \Drupal::entityManager()->getStorage('config_test'); - $this->assertEqual($config_test_storage->load('dotted.default')->label(), 'Default', 'The config_test entity is not overridden by the profile optional configuration.'); + $this->assertEqual($config_test_storage->load('dotted.default')->label(), 'Default install profile override', 'The config_test entity is overridden by the profile optional configuration.'); // Test that override of optional configuration does work. $this->assertEqual($config_test_storage->load('override')->label(), 'Override', 'The optional config_test entity is overridden by the profile optional configuration.'); // Test that override of optional configuration which introduces an unmet diff --git a/core/modules/config/src/Tests/ConfigInstallProfileUnmetDependenciesTest.php b/core/modules/config/src/Tests/ConfigInstallProfileUnmetDependenciesTest.php index e7e8f6cab..59683af60 100644 --- a/core/modules/config/src/Tests/ConfigInstallProfileUnmetDependenciesTest.php +++ b/core/modules/config/src/Tests/ConfigInstallProfileUnmetDependenciesTest.php @@ -95,6 +95,7 @@ class ConfigInstallProfileUnmetDependenciesTest extends InstallerTestBase { else { $this->fail('Expected Drupal\Core\Config\UnmetDependenciesException exception thrown'); } + $this->assertErrorLogged('Configuration objects (system.action.user_block_user_action) provided by user have unmet dependencies in'); } } diff --git a/core/modules/contact/contact.routing.yml b/core/modules/contact/contact.routing.yml index d81bb9fc2..59779868d 100644 --- a/core/modules/contact/contact.routing.yml +++ b/core/modules/contact/contact.routing.yml @@ -54,3 +54,4 @@ entity.user.contact_form: _controller: '\Drupal\contact\Controller\ContactController::contactPersonalPage' requirements: _access_contact_personal_tab: 'TRUE' + user: \d+ diff --git a/core/modules/content_translation/content_translation.install b/core/modules/content_translation/content_translation.install index 0bfe4149e..d44b2d112 100644 --- a/core/modules/content_translation/content_translation.install +++ b/core/modules/content_translation/content_translation.install @@ -29,3 +29,19 @@ function content_translation_enable() { $message = t('Enable translation for content types, taxonomy vocabularies, accounts, or any other element you wish to translate.', $t_args); drupal_set_message($message, 'warning'); } + +/** + * @addtogroup updates-8.0.0-rc + * @{ + */ + +/** + * Rebuild the routes as the content translation routes have now new names. + */ +function content_translation_update_8001() { + \Drupal::service('router.builder')->rebuild(); +} + +/** + * @} End of "addtogroup updates-8.0.0-rc". + */ diff --git a/core/modules/content_translation/content_translation.module b/core/modules/content_translation/content_translation.module index ff1b34ddf..b354e9549 100644 --- a/core/modules/content_translation/content_translation.module +++ b/core/modules/content_translation/content_translation.module @@ -53,7 +53,7 @@ function content_translation_help($route_name, RouteMatchInterface $route_match) */ function content_translation_module_implements_alter(&$implementations, $hook) { switch ($hook) { - // Move some of our hook implementations to the end of the list. + // Move our hook_entity_type_alter() implementation to the end of the list. case 'entity_type_alter': $group = $implementations['content_translation']; unset($implementations['content_translation']); @@ -140,7 +140,11 @@ function content_translation_entity_type_alter(array &$entity_types) { if ($entity_type->hasLinkTemplate('canonical')) { // Provide default route names for the translation paths. if (!$entity_type->hasLinkTemplate('drupal:content-translation-overview')) { - $entity_type->setLinkTemplate('drupal:content-translation-overview', $entity_type->getLinkTemplate('canonical') . '/translations'); + $translations_path = $entity_type->getLinkTemplate('canonical') . '/translations'; + $entity_type->setLinkTemplate('drupal:content-translation-overview', $translations_path); + $entity_type->setLinkTemplate('drupal:content-translation-add', $translations_path . '/add/{source}/{target}'); + $entity_type->setLinkTemplate('drupal:content-translation-edit', $translations_path . '/edit/{language}'); + $entity_type->setLinkTemplate('drupal:content-translation-delete', $translations_path . '/delete/{language}'); } // @todo Remove this as soon as menu access checks rely on the // controller. See https://www.drupal.org/node/2155787. diff --git a/core/modules/content_translation/src/ContentTranslationHandler.php b/core/modules/content_translation/src/ContentTranslationHandler.php index d7eb42ab3..1b8d77df9 100644 --- a/core/modules/content_translation/src/ContentTranslationHandler.php +++ b/core/modules/content_translation/src/ContentTranslationHandler.php @@ -652,7 +652,7 @@ class ContentTranslationHandler implements ContentTranslationHandlerInterface, E $source = $form_state->getValue(array('source_langcode', 'source')); $entity_type_id = $entity->getEntityTypeId(); - $form_state->setRedirect('content_translation.translation_add_' . $entity_type_id, array( + $form_state->setRedirect("entity.$entity_type_id.content_translation_add", array( $entity_type_id => $entity->id(), 'source' => $source, 'target' => $form_object->getFormLangcode($form_state), @@ -689,7 +689,7 @@ class ContentTranslationHandler implements ContentTranslationHandlerInterface, E $form_state->setRedirectUrl($entity->urlInfo('delete-form')); } else { - $form_state->setRedirect('content_translation.translation_delete_' . $entity_type_id, [ + $form_state->setRedirect("entity.$entity_type_id.content_translation_delete", [ $entity_type_id => $entity->id(), 'language' => $form_object->getFormLangcode($form_state), ]); diff --git a/core/modules/content_translation/src/Controller/ContentTranslationController.php b/core/modules/content_translation/src/Controller/ContentTranslationController.php index 9c6879ac9..8c19de141 100644 --- a/core/modules/content_translation/src/Controller/ContentTranslationController.php +++ b/core/modules/content_translation/src/Controller/ContentTranslationController.php @@ -127,7 +127,7 @@ class ContentTranslationController extends ControllerBase { $langcode = $language->getId(); $add_url = new Url( - 'content_translation.translation_add_' . $entity_type_id, + "entity.$entity_type_id.content_translation_add", array( 'source' => $original, 'target' => $language->getId(), @@ -138,7 +138,7 @@ class ContentTranslationController extends ControllerBase { ) ); $edit_url = new Url( - 'content_translation.translation_edit_' . $entity_type_id, + "entity.$entity_type_id.content_translation_edit", array( 'language' => $language->getId(), $entity_type_id => $entity->id(), @@ -148,7 +148,7 @@ class ContentTranslationController extends ControllerBase { ) ); $delete_url = new Url( - 'content_translation.translation_delete_' . $entity_type_id, + "entity.$entity_type_id.content_translation_delete", array( 'language' => $language->getId(), $entity_type_id => $entity->id(), diff --git a/core/modules/content_translation/src/Routing/ContentTranslationRouteSubscriber.php b/core/modules/content_translation/src/Routing/ContentTranslationRouteSubscriber.php index a2b54a8a2..ebdf5626a 100644 --- a/core/modules/content_translation/src/Routing/ContentTranslationRouteSubscriber.php +++ b/core/modules/content_translation/src/Routing/ContentTranslationRouteSubscriber.php @@ -112,7 +112,7 @@ class ContentTranslationRouteSubscriber extends RouteSubscriberBase { '_admin_route' => $is_admin, ) ); - $collection->add("content_translation.translation_add_$entity_type_id", $route); + $collection->add("entity.$entity_type_id.content_translation_add", $route); $route = new Route( $path . '/edit/{language}', @@ -137,7 +137,7 @@ class ContentTranslationRouteSubscriber extends RouteSubscriberBase { '_admin_route' => $is_admin, ) ); - $collection->add("content_translation.translation_edit_$entity_type_id", $route); + $collection->add("entity.$entity_type_id.content_translation_edit", $route); $route = new Route( $path . '/delete/{language}', @@ -162,7 +162,7 @@ class ContentTranslationRouteSubscriber extends RouteSubscriberBase { '_admin_route' => $is_admin, ) ); - $collection->add("content_translation.translation_delete_$entity_type_id", $route); + $collection->add("entity.$entity_type_id.content_translation_delete", $route); } } diff --git a/core/modules/content_translation/src/Tests/ContentTranslationEnableTest.php b/core/modules/content_translation/src/Tests/ContentTranslationEnableTest.php index 9af869807..926a60e4a 100644 --- a/core/modules/content_translation/src/Tests/ContentTranslationEnableTest.php +++ b/core/modules/content_translation/src/Tests/ContentTranslationEnableTest.php @@ -19,7 +19,7 @@ class ContentTranslationEnableTest extends WebTestBase { /** * {@inheritdoc} */ - public static $modules = ['entity_test', 'menu_link_content']; + public static $modules = ['entity_test', 'menu_link_content', 'node']; /** * Tests that entity schemas are up-to-date after enabling translation. @@ -39,6 +39,9 @@ class ContentTranslationEnableTest extends WebTestBase { $requirement_value = $this->cssSelect("tr.system-status-report__entry th:contains('Entity/field definitions') + td"); $this->assertEqual(t('Up to date'), trim((string) $requirement_value[0])); + $this->drupalGet('admin/config/regional/content-language'); + // The node entity type should not be an option because it has no bundles. + $this->assertNoRaw('entity_types[node]'); // Enable content translation on entity types that have will have a // content_translation_uid. $edit = [ @@ -47,12 +50,23 @@ class ContentTranslationEnableTest extends WebTestBase { 'entity_types[entity_test_mul]' => TRUE, 'settings[entity_test_mul][entity_test_mul][translatable]' => TRUE, ]; - $this->drupalPostForm('admin/config/regional/content-language', $edit, t('Save configuration')); + $this->drupalPostForm(NULL, $edit, t('Save configuration')); // No pending updates should be available. $this->drupalGet('admin/reports/status'); $requirement_value = $this->cssSelect("tr.system-status-report__entry th:contains('Entity/field definitions') + td"); $this->assertEqual(t('Up to date'), trim((string) $requirement_value[0])); + + // Create a node type and check the content translation settings are now + // available for nodes. + $edit = array( + 'name' => 'foo', + 'title_label' => 'title for foo', + 'type' => 'foo', + ); + $this->drupalPostForm('admin/structure/types/add', $edit, t('Save content type')); + $this->drupalGet('admin/config/regional/content-language'); + $this->assertRaw('entity_types[node]'); } } diff --git a/core/modules/content_translation/src/Tests/ContentTranslationUITestBase.php b/core/modules/content_translation/src/Tests/ContentTranslationUITestBase.php index 33d936a46..1b79d1313 100644 --- a/core/modules/content_translation/src/Tests/ContentTranslationUITestBase.php +++ b/core/modules/content_translation/src/Tests/ContentTranslationUITestBase.php @@ -107,7 +107,8 @@ abstract class ContentTranslationUITestBase extends ContentTranslationTestBase { $language = ConfigurableLanguage::load($langcode); $values[$langcode] = $this->getNewEntityValues($langcode); - $add_url = Url::fromRoute('content_translation.translation_add_' . $entity->getEntityTypeId(), [ + $entity_type_id = $entity->getEntityTypeId(); + $add_url = Url::fromRoute("entity.$entity_type_id.content_translation_add", [ $entity->getEntityTypeId() => $entity->id(), 'source' => $default_langcode, 'target' => $langcode @@ -167,7 +168,8 @@ abstract class ContentTranslationUITestBase extends ContentTranslationTestBase { $language = ConfigurableLanguage::load($langcode); $source_langcode = 'it'; $edit = array('source_langcode[source]' => $source_langcode); - $add_url = Url::fromRoute('content_translation.translation_add_' . $entity->getEntityTypeId(), [ + $entity_type_id = $entity->getEntityTypeId(); + $add_url = Url::fromRoute("entity.$entity_type_id.content_translation_add", [ $entity->getEntityTypeId() => $entity->id(), 'source' => $default_langcode, 'target' => $langcode @@ -180,7 +182,8 @@ abstract class ContentTranslationUITestBase extends ContentTranslationTestBase { // Add another translation and mark the other ones as outdated. $values[$langcode] = $this->getNewEntityValues($langcode); $edit = $this->getEditValues($values, $langcode) + array('content_translation[retranslate]' => TRUE); - $add_url = Url::fromRoute('content_translation.translation_add_' . $entity->getEntityTypeId(), [ + $entity_type_id = $entity->getEntityTypeId(); + $add_url = Url::fromRoute("entity.$entity_type_id.content_translation_add", [ $entity->getEntityTypeId() => $entity->id(), 'source' => $source_langcode, 'target' => $langcode @@ -207,13 +210,15 @@ abstract class ContentTranslationUITestBase extends ContentTranslationTestBase { */ protected function doTestTranslationOverview() { $entity = entity_load($this->entityTypeId, $this->entityId, TRUE); - $this->drupalGet($entity->urlInfo('drupal:content-translation-overview')); + $translate_url = $entity->urlInfo('drupal:content-translation-overview'); + $this->drupalGet($translate_url); + $translate_url->setAbsolute(FALSE); foreach ($this->langcodes as $langcode) { if ($entity->hasTranslation($langcode)) { $language = new Language(array('id' => $langcode)); - $view_path = $entity->url('canonical', array('language' => $language)); - $elements = $this->xpath('//table//a[@href=:href]', array(':href' => $view_path)); + $view_url = $entity->url('canonical', ['language' => $language]); + $elements = $this->xpath('//table//a[@href=:href]', [':href' => $view_url]); $this->assertEqual((string) $elements[0], $entity->getTranslation($langcode)->label(), format_string('Label correctly shown for %language translation.', array('%language' => $langcode))); $edit_path = $entity->url('edit-form', array('language' => $language)); $elements = $this->xpath('//table//ul[@class="dropbutton"]/li/a[@href=:href]', array(':href' => $edit_path)); @@ -343,7 +348,7 @@ abstract class ContentTranslationUITestBase extends ContentTranslationTestBase { // Check that the translator cannot delete the original translation. $args = [$this->entityTypeId => $entity->id(), 'language' => 'en']; - $this->drupalGet(Url::fromRoute('content_translation.translation_delete_' . $this->entityTypeId, $args)); + $this->drupalGet(Url::fromRoute("entity.$this->entityTypeId.content_translation_delete", $args)); $this->assertResponse(403); } diff --git a/core/modules/content_translation/src/Tests/ContentTranslationWorkflowsTest.php b/core/modules/content_translation/src/Tests/ContentTranslationWorkflowsTest.php index 9d8a052e4..63c1963d0 100644 --- a/core/modules/content_translation/src/Tests/ContentTranslationWorkflowsTest.php +++ b/core/modules/content_translation/src/Tests/ContentTranslationWorkflowsTest.php @@ -73,7 +73,7 @@ class ContentTranslationWorkflowsTest extends ContentTranslationTestBase { // Create a translation. $this->drupalLogin($this->translator); - $add_translation_url = Url::fromRoute('content_translation.translation_add_' . $this->entityTypeId, [$this->entityTypeId => $this->entity->id(), 'source' => $default_langcode, 'target' => $this->langcodes[2]]); + $add_translation_url = Url::fromRoute("entity.$this->entityTypeId.content_translation_add", [$this->entityTypeId => $this->entity->id(), 'source' => $default_langcode, 'target' => $this->langcodes[2]]); $this->drupalPostForm($add_translation_url, array(), t('Save')); $this->rebuildContainer(); } @@ -175,7 +175,7 @@ class ContentTranslationWorkflowsTest extends ContentTranslationTestBase { $this->assertResponse($expected_status['overview'], SafeMarkup::format('The @user_label has the expected translation overview access.', $args)); // Check whether the user is allowed to create a translation. - $add_translation_url = Url::fromRoute('content_translation.translation_add_' . $this->entityTypeId, [$this->entityTypeId => $this->entity->id(), 'source' => $default_langcode, 'target' => $langcode], $options); + $add_translation_url = Url::fromRoute("entity.$this->entityTypeId.content_translation_add", [$this->entityTypeId => $this->entity->id(), 'source' => $default_langcode, 'target' => $langcode], $options); if ($expected_status['add_translation'] == 200) { $this->clickLink('Add'); $this->assertUrl($add_translation_url->toString(), [], 'The translation overview points to the translation form when creating translations.'); @@ -193,7 +193,7 @@ class ContentTranslationWorkflowsTest extends ContentTranslationTestBase { // Check whether the user is allowed to edit a translation. $langcode = $this->langcodes[2]; $options['language'] = $languages[$langcode]; - $edit_translation_url = Url::fromRoute('content_translation.translation_edit_' . $this->entityTypeId, [$this->entityTypeId => $this->entity->id(), 'language' => $langcode], $options); + $edit_translation_url = Url::fromRoute("entity.$this->entityTypeId.content_translation_edit", [$this->entityTypeId => $this->entity->id(), 'language' => $langcode], $options); if ($expected_status['edit_translation'] == 200) { $this->drupalGet($translations_url); $editor = $expected_status['edit'] == 200; @@ -221,7 +221,7 @@ class ContentTranslationWorkflowsTest extends ContentTranslationTestBase { // Check whether the user is allowed to delete a translation. $langcode = $this->langcodes[2]; $options['language'] = $languages[$langcode]; - $delete_translation_url = Url::fromRoute('content_translation.translation_delete_' . $this->entityTypeId, [$this->entityTypeId => $this->entity->id(), 'language' => $langcode], $options); + $delete_translation_url = Url::fromRoute("entity.$this->entityTypeId.content_translation_delete", [$this->entityTypeId => $this->entity->id(), 'language' => $langcode], $options); if ($expected_status['delete_translation'] == 200) { $this->drupalGet($translations_url); $editor = $expected_status['delete'] == 200; diff --git a/core/modules/editor/editor.module b/core/modules/editor/editor.module index e83d49a97..a2c3219e8 100644 --- a/core/modules/editor/editor.module +++ b/core/modules/editor/editor.module @@ -464,7 +464,11 @@ function _editor_get_file_uuids_by_field(EntityInterface $entity) { $formatted_text_fields = _editor_get_formatted_text_fields($entity); foreach ($formatted_text_fields as $formatted_text_field) { - $text = $entity->get($formatted_text_field)->value; + $text = ''; + $field_items = $entity->get($formatted_text_field); + foreach ($field_items as $field_item) { + $text .= $field_item->value; + } $uuids[$formatted_text_field] = _editor_parse_file_uuids($text); } return $uuids; diff --git a/core/modules/editor/src/Annotation/Editor.php b/core/modules/editor/src/Annotation/Editor.php index 58d2450c1..e0b28059c 100644 --- a/core/modules/editor/src/Annotation/Editor.php +++ b/core/modules/editor/src/Annotation/Editor.php @@ -14,11 +14,43 @@ use Drupal\Component\Annotation\Plugin; * * Plugin Namespace: Plugin\Editor * + * Text editor plugin implementations need to define a plugin definition array + * through annotation. These definition arrays may be altered through + * hook_editor_info_alter(). The definition includes the following keys: + * + * - id: The unique, system-wide identifier of the text editor. Typically named + * the same as the editor library. + * - label: The human-readable name of the text editor, translated. + * - supports_content_filtering: Whether the editor supports "allowed content + * only" filtering. + * - supports_inline_editing: Whether the editor supports the inline editing + * provided by the Edit module. + * - is_xss_safe: Whether this text editor is not vulnerable to XSS attacks. + * - supported_element_types: On which form element #types this text editor is + * capable of working. + * + * A complete sample plugin definition should be defined as in this example: + * + * @code + * @Editor( + * id = "myeditor", + * label = @Translation("My Editor"), + * supports_content_filtering = FALSE, + * supports_inline_editing = FALSE, + * is_xss_safe = FALSE, + * supported_element_types = { + * "textarea", + * "textfield", + * } + * ) + * @endcode + * * For a working example, see \Drupal\ckeditor\Plugin\Editor\CKEditor * * @see \Drupal\editor\Plugin\EditorPluginInterface * @see \Drupal\editor\Plugin\EditorBase * @see \Drupal\editor\Plugin\EditorManager + * @see hook_editor_info_alter() * @see plugin_api * * @Annotation diff --git a/core/modules/editor/src/EditorController.php b/core/modules/editor/src/EditorController.php index fd605cd78..73d5dad0e 100644 --- a/core/modules/editor/src/EditorController.php +++ b/core/modules/editor/src/EditorController.php @@ -60,6 +60,9 @@ class EditorController extends ControllerBase { * @return \Symfony\Component\HttpFoundation\JsonResponse * A JSON response containing the XSS-filtered value. * + * @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException + * Thrown if no value to filter is specified. + * * @see editor_filter_xss() */ public function filterXss(Request $request, FilterFormatInterface $filter_format) { diff --git a/core/modules/editor/src/Plugin/EditorBase.php b/core/modules/editor/src/Plugin/EditorBase.php index cc39c18a4..514a32cd4 100644 --- a/core/modules/editor/src/Plugin/EditorBase.php +++ b/core/modules/editor/src/Plugin/EditorBase.php @@ -17,30 +17,8 @@ use Drupal\editor\Entity\Editor; * This class provides default implementations of the EditorPluginInterface so * that classes extending this one do not need to implement every method. * - * Plugins extending this class need to define a plugin definition array through - * annotation. These definition arrays may be altered through - * hook_editor_info_alter(). The definition includes the following keys: - * - * - id: The unique, system-wide identifier of the text editor. Typically named - * the same as the editor library. - * - label: The human-readable name of the text editor, translated. - * - supports_content_filtering: Whether the editor supports "allowed content - * only" filtering. - * - supports_inline_editing: Whether the editor supports the inline editing - * provided by the Edit module. - * - is_xss_safe: Whether this text editor is not vulnerable to XSS attacks. - * - * A complete sample plugin definition should be defined as in this example: - * - * @code - * @Editor( - * id = "myeditor", - * label = @Translation("My Editor"), - * supports_content_filtering = FALSE, - * supports_inline_editing = FALSE, - * is_xss_safe = FALSE - * ) - * @endcode + * Plugins extending this class need to specify an annotation containing the + * plugin definition so the plugin can be discovered. * * @see \Drupal\editor\Annotation\Editor * @see \Drupal\editor\Plugin\EditorPluginInterface diff --git a/core/modules/editor/src/Tests/EditorFileUsageTest.php b/core/modules/editor/src/Tests/EditorFileUsageTest.php index 7b5210e50..6e291d434 100644 --- a/core/modules/editor/src/Tests/EditorFileUsageTest.php +++ b/core/modules/editor/src/Tests/EditorFileUsageTest.php @@ -8,6 +8,8 @@ namespace Drupal\editor\Tests; use Drupal\system\Tests\Entity\EntityUnitTestBase; +use Drupal\field\Entity\FieldStorageConfig; +use Drupal\Core\Field\FieldStorageDefinitionInterface; /** * Tests tracking of file usage by the Text Editor module. @@ -39,6 +41,11 @@ class EditorFileUsageTest extends EntityUnitTestBase { )); $filtered_html_format->save(); + // Set cardinality for body field. + FieldStorageConfig::loadByName('node', 'body') + ->setCardinality(FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED) + ->save(); + // Set up text editor. $editor = entity_create('editor', array( 'format' => 'filtered_html', @@ -56,33 +63,56 @@ class EditorFileUsageTest extends EntityUnitTestBase { * Tests the configurable text editor manager. */ public function testEditorEntityHooks() { - $image = entity_create('file'); - $image->setFileUri('core/misc/druplicon.png'); - $image->setFilename(drupal_basename($image->getFileUri())); - $image->save(); - $file_usage = $this->container->get('file.usage'); - $this->assertIdentical(array(), $file_usage->listUsage($image), 'The image has zero usages.'); + $image_paths = array( + 0 => 'core/misc/druplicon.png', + 1 => 'core/misc/tree.png', + 2 => 'core/misc/help.png', + ); + + $image_entities = array(); + foreach ($image_paths as $key => $image_path) { + $image = entity_create('file'); + $image->setFileUri($image_path); + $image->setFilename(drupal_basename($image->getFileUri())); + $image->save(); + + $file_usage = $this->container->get('file.usage'); + $this->assertIdentical(array(), $file_usage->listUsage($image), 'The image ' . $image_paths[$key] . ' has zero usages.'); + + $image_entities[] = $image; + } + + $body = array(); + foreach ($image_entities as $key => $image_entity) { + // Don't be rude, say hello. + $body_value = '

Hello, world!

'; + // Test handling of a valid image entry. + $body_value .= ''; + // Test handling of an invalid data-entity-uuid attribute. + $body_value .= ''; + // Test handling of an invalid data-entity-type attribute. + $body_value .= ''; + // Test handling of a non-existing UUID. + $body_value .= ''; + + $body[] = array( + 'value' => $body_value, + 'format' => 'filtered_html', + ); + } - $body_value = '

Hello, world!

'; - // Test handling of an invalid data-entity-uuid attribute. - $body_value .= ''; - // Test handling of an invalid data-entity-type attribute. - $body_value .= ''; - // Test handling of a non-existing UUID. - $body_value .= ''; // Test editor_entity_insert(): increment. $this->createUser(); $node = entity_create('node', array( 'type' => 'page', 'title' => 'test', - 'body' => array( - 'value' => $body_value, - 'format' => 'filtered_html', - ), + 'body' => $body, 'uid' => 1, )); $node->save(); - $this->assertIdentical(array('editor' => array('node' => array(1 => '1'))), $file_usage->listUsage($image), 'The image has 1 usage.'); + foreach ($image_entities as $key => $image_entity) { + $this->assertIdentical(array('editor' => array('node' => array(1 => '1'))), $file_usage->listUsage($image_entity), 'The image ' . $image_paths[$key] . ' has 1 usage.'); + } // Test editor_entity_update(): increment, twice, by creating new revisions. $node->setNewRevision(TRUE); @@ -90,45 +120,68 @@ class EditorFileUsageTest extends EntityUnitTestBase { $second_revision_id = $node->getRevisionId(); $node->setNewRevision(TRUE); $node->save(); - $this->assertIdentical(array('editor' => array('node' => array(1 => '3'))), $file_usage->listUsage($image), 'The image has 3 usages.'); + foreach ($image_entities as $key => $image_entity) { + $this->assertIdentical(array('editor' => array('node' => array(1 => '3'))), $file_usage->listUsage($image_entity), 'The image ' . $image_paths[$key] . ' has 3 usages.'); + } // Test hook_entity_update(): decrement, by modifying the last revision: // remove the data-entity-type attribute from the body field. - $body = $node->get('body')->first()->get('value'); - $original_value = $body->getValue(); - $new_value = str_replace('data-entity-type', 'data-entity-type-modified', $original_value); - $body->setValue($new_value); + $original_values = array(); + for ($i = 0; $i < count($image_entities); $i++) { + $original_value = $node->body[$i]->value; + $new_value = str_replace('data-entity-type', 'data-entity-type-modified', $original_value); + $node->body[$i]->value = $new_value; + $original_values[$i] = $original_value; + } $node->save(); - $this->assertIdentical(array('editor' => array('node' => array(1 => '2'))), $file_usage->listUsage($image), 'The image has 2 usages.'); + foreach ($image_entities as $key => $image_entity) { + $this->assertIdentical(array('editor' => array('node' => array(1 => '2'))), $file_usage->listUsage($image_entity), 'The image ' . $image_paths[$key] . ' has 2 usages.'); + } // Test editor_entity_update(): increment again by creating a new revision: // read the data- attributes to the body field. $node->setNewRevision(TRUE); - $node->get('body')->first()->get('value')->setValue($original_value); + foreach ($original_values as $key => $original_value) { + $node->body[$key]->value = $original_value; + } $node->save(); - $this->assertIdentical(array('editor' => array('node' => array(1 => '3'))), $file_usage->listUsage($image), 'The image has 3 usages.'); + foreach ($image_entities as $key => $image_entity) { + $this->assertIdentical(array('editor' => array('node' => array(1 => '3'))), $file_usage->listUsage($image_entity), 'The image ' . $image_paths[$key] . ' has 3 usages.'); + } // Test hook_entity_update(): decrement, by modifying the last revision: // remove the data-entity-uuid attribute from the body field. - $body = $node->get('body')->first()->get('value'); - $new_value = str_replace('data-entity-uuid', 'data-entity-uuid-modified', $original_value); - $body->setValue($new_value); + foreach ($original_values as $key => $original_value) { + $original_value = $node->body[$key]->value; + $new_value = str_replace('data-entity-type', 'data-entity-type-modified', $original_value); + $node->body[$key]->value = $new_value; + } $node->save(); - $this->assertIdentical(array('editor' => array('node' => array(1 => '2'))), $file_usage->listUsage($image), 'The image has 2 usages.'); + foreach ($image_entities as $key => $image_entity) { + $this->assertIdentical(array('editor' => array('node' => array(1 => '2'))), $file_usage->listUsage($image_entity), 'The image ' . $image_paths[$key] . ' has 2 usages.'); + } // Test hook_entity_update(): increment, by modifying the last revision: // read the data- attributes to the body field. - $node->get('body')->first()->get('value')->setValue($original_value); + foreach ($original_values as $key => $original_value) { + $node->body[$key]->value = $original_value; + } $node->save(); - $this->assertIdentical(array('editor' => array('node' => array(1 => '3'))), $file_usage->listUsage($image), 'The image has 3 usages.'); + foreach ($image_entities as $key => $image_entity) { + $this->assertIdentical(array('editor' => array('node' => array(1 => '3'))), $file_usage->listUsage($image_entity), 'The image ' . $image_paths[$key] . ' has 3 usages.'); + } // Test editor_entity_revision_delete(): decrement, by deleting a revision. entity_revision_delete('node', $second_revision_id); - $this->assertIdentical(array('editor' => array('node' => array(1 => '2'))), $file_usage->listUsage($image), 'The image has 2 usages.'); + foreach ($image_entities as $key => $image_entity) { + $this->assertIdentical(array('editor' => array('node' => array(1 => '2'))), $file_usage->listUsage($image_entity), 'The image ' . $image_paths[$key] . ' has 2 usages.'); + } // Test editor_entity_delete(). $node->delete(); - $this->assertIdentical(array(), $file_usage->listUsage($image), 'The image has zero usages again.'); + foreach ($image_entities as $key => $image_entity) { + $this->assertIdentical(array(), $file_usage->listUsage($image_entity), 'The image ' . $image_paths[$key] . ' has zero usages again.'); + } } } diff --git a/core/modules/field/src/Plugin/migrate/source/d6/FieldInstance.php b/core/modules/field/src/Plugin/migrate/source/d6/FieldInstance.php index bddfc271b..923590319 100644 --- a/core/modules/field/src/Plugin/migrate/source/d6/FieldInstance.php +++ b/core/modules/field/src/Plugin/migrate/source/d6/FieldInstance.php @@ -40,7 +40,7 @@ class FieldInstance extends DrupalSqlBase { public function fields() { return array( 'field_name' => $this->t('The machine name of field.'), - 'type_name' => $this->t('Content type where is used this field.'), + 'type_name' => $this->t('Content type where this field is in use.'), 'weight' => $this->t('Weight.'), 'label' => $this->t('A name to show.'), 'widget_type' => $this->t('Widget type.'), diff --git a/core/modules/field/src/Tests/EntityReference/EntityReferenceItemTest.php b/core/modules/field/src/Tests/EntityReference/EntityReferenceItemTest.php index f8a934855..f629ce8cc 100644 --- a/core/modules/field/src/Tests/EntityReference/EntityReferenceItemTest.php +++ b/core/modules/field/src/Tests/EntityReference/EntityReferenceItemTest.php @@ -7,6 +7,8 @@ namespace Drupal\field\Tests\EntityReference; +use Drupal\comment\Entity\Comment; +use Drupal\Component\Render\FormattableMarkup; use Drupal\Component\Utility\Unicode; use Drupal\Core\Field\FieldItemListInterface; use Drupal\Core\Field\FieldItemInterface; @@ -17,8 +19,11 @@ use Drupal\entity_test\Entity\EntityTestStringId; use Drupal\field\Entity\FieldConfig; use Drupal\field\Entity\FieldStorageConfig; use Drupal\field\Tests\FieldUnitTestBase; +use Drupal\file\Entity\File; +use Drupal\node\Entity\Node; use Drupal\taxonomy\Entity\Term; use Drupal\taxonomy\Entity\Vocabulary; +use Drupal\user\Entity\User; /** @@ -35,7 +40,7 @@ class EntityReferenceItemTest extends FieldUnitTestBase { * * @var array */ - public static $modules = ['taxonomy', 'text', 'filter', 'views', 'field']; + public static $modules = ['node', 'comment', 'file', 'taxonomy', 'text', 'filter', 'views', 'field']; /** * The taxonomy vocabulary to test with. @@ -66,6 +71,11 @@ class EntityReferenceItemTest extends FieldUnitTestBase { $this->installEntitySchema('entity_test_string_id'); $this->installEntitySchema('taxonomy_term'); + $this->installEntitySchema('node'); + $this->installEntitySchema('comment'); + $this->installEntitySchema('file'); + + $this->installSchema('comment', ['comment_entity_statistics']); $this->vocabulary = entity_create('taxonomy_vocabulary', array( 'name' => $this->randomMachineName(), @@ -90,6 +100,10 @@ class EntityReferenceItemTest extends FieldUnitTestBase { $this->createEntityReferenceField('entity_test', 'entity_test', 'field_test_taxonomy_term', 'Test content entity reference', 'taxonomy_term'); $this->createEntityReferenceField('entity_test', 'entity_test', 'field_test_entity_test_string_id', 'Test content entity reference with string ID', 'entity_test_string_id'); $this->createEntityReferenceField('entity_test', 'entity_test', 'field_test_taxonomy_vocabulary', 'Test config entity reference', 'taxonomy_vocabulary'); + $this->createEntityReferenceField('entity_test', 'entity_test', 'field_test_node', 'Test node entity reference', 'node'); + $this->createEntityReferenceField('entity_test', 'entity_test', 'field_test_user', 'Test user entity reference', 'user'); + $this->createEntityReferenceField('entity_test', 'entity_test', 'field_test_comment', 'Test comment entity reference', 'comment'); + $this->createEntityReferenceField('entity_test', 'entity_test', 'field_test_file', 'Test file entity reference', 'file'); } /** @@ -333,9 +347,9 @@ class EntityReferenceItemTest extends FieldUnitTestBase { } /** - * Tests validation constraint. + * Tests ValidReferenceConstraint with newly created and unsaved entities. */ - public function testValidation() { + public function testAutocreateValidation() { // The term entity is unsaved here. $term = Term::create(array( 'name' => $this->randomMachineName(), @@ -367,6 +381,100 @@ class EntityReferenceItemTest extends FieldUnitTestBase { $entity->save(); $errors = $entity->validate(); $this->assertEqual(0, count($errors)); + + // Test with an unpublished and unsaved node. + $title = $this->randomString(); + $node = Node::create([ + 'title' => $title, + 'type' => 'node', + 'status' => NODE_NOT_PUBLISHED, + ]); + + $entity = EntityTest::create([ + 'field_test_node' => [ + 'entity' => $node, + ], + ]); + + $errors = $entity->validate(); + $this->assertEqual(1, count($errors)); + $this->assertEqual($errors[0]->getMessage(), new FormattableMarkup('This entity (%type: %label) cannot be referenced.', ['%type' => 'node', '%label' => $title])); + $this->assertEqual($errors[0]->getPropertyPath(), 'field_test_node.0.entity'); + + // Publish the node and try again. + $node->setPublished(TRUE); + $errors = $entity->validate(); + $this->assertEqual(0, count($errors)); + + // Test with an unpublished and unsaved comment. + $title = $this->randomString(); + $comment = Comment::create([ + 'subject' => $title, + 'comment_type' => 'comment', + 'status' => 0, + ]); + + $entity = EntityTest::create([ + 'field_test_comment' => [ + 'entity' => $comment, + ], + ]); + + $errors = $entity->validate(); + $this->assertEqual(1, count($errors)); + $this->assertEqual($errors[0]->getMessage(), new FormattableMarkup('This entity (%type: %label) cannot be referenced.', ['%type' => 'comment', '%label' => $title])); + $this->assertEqual($errors[0]->getPropertyPath(), 'field_test_comment.0.entity'); + + // Publish the comment and try again. + $comment->setPublished(TRUE); + $errors = $entity->validate(); + $this->assertEqual(0, count($errors)); + + // Test with an inactive and unsaved user. + $name = $this->randomString(); + $user = User::create([ + 'name' => $name, + 'status' => 0, + ]); + + $entity = EntityTest::create([ + 'field_test_user' => [ + 'entity' => $user, + ], + ]); + + $errors = $entity->validate(); + $this->assertEqual(1, count($errors)); + $this->assertEqual($errors[0]->getMessage(), new FormattableMarkup('This entity (%type: %label) cannot be referenced.', ['%type' => 'user', '%label' => $name])); + $this->assertEqual($errors[0]->getPropertyPath(), 'field_test_user.0.entity'); + + // Activate the user and try again. + $user->activate(); + $errors = $entity->validate(); + $this->assertEqual(0, count($errors)); + + // Test with a temporary and unsaved file. + $filename = $this->randomMachineName() . '.txt'; + $file = File::create([ + 'filename' => $filename, + 'status' => 0, + ]); + + $entity = EntityTest::create([ + 'field_test_file' => [ + 'entity' => $file, + ], + ]); + + $errors = $entity->validate(); + $this->assertEqual(1, count($errors)); + $this->assertEqual($errors[0]->getMessage(), new FormattableMarkup('This entity (%type: %label) cannot be referenced.', ['%type' => 'file', '%label' => $filename])); + $this->assertEqual($errors[0]->getPropertyPath(), 'field_test_file.0.entity'); + + // Set the file as permanent and try again. + $file->setPermanent(); + $errors = $entity->validate(); + $this->assertEqual(0, count($errors)); } } diff --git a/core/modules/field/src/Tests/Uri/UriItemTest.php b/core/modules/field/src/Tests/Uri/UriItemTest.php index 46ffe0ad5..9dc50a2c6 100644 --- a/core/modules/field/src/Tests/Uri/UriItemTest.php +++ b/core/modules/field/src/Tests/Uri/UriItemTest.php @@ -68,6 +68,11 @@ class UriItemTest extends FieldUnitTestBase { 'type' => 'uri', ]) ->save(); + + // Test the generateSampleValue() method. + $entity = entity_create('entity_test'); + $entity->$field_name->generateSampleItems(); + $this->entityValidateAndSave($entity); } } diff --git a/core/modules/file/config/schema/file.destination.schema.yml b/core/modules/file/config/schema/file.destination.schema.yml index 5d494f701..c6b197ffe 100644 --- a/core/modules/file/config/schema/file.destination.schema.yml +++ b/core/modules/file/config/schema/file.destination.schema.yml @@ -5,3 +5,6 @@ migrate.destination.entity:file: source_path_property: type: string label: 'Source path' + urlencode: + type: boolean + label: 'Whether to urlencode incoming file paths' diff --git a/core/modules/file/file.field.inc b/core/modules/file/file.field.inc index 6c065758a..bbfc2b23e 100644 --- a/core/modules/file/file.field.inc +++ b/core/modules/file/file.field.inc @@ -9,27 +9,6 @@ use Drupal\Core\Field\FieldDefinitionInterface; use Drupal\Core\Field\FieldFilteredMarkup; use Drupal\Core\Render\Element; -/** - * Returns HTML for an individual file upload widget. - * - * Default template: file-widget.html.twig. - * - * @param array $variables - * An associative array containing: - * - element: A render element representing the file. - */ -function template_preprocess_file_widget(&$variables) { - $element = $variables['element']; - if (!empty($element['fids']['#value'])) { - // Add the file size after the file name. - $file = reset($element['#files']); - $element['file_' . $file->id()]['filename']['#suffix'] = ' (' . format_size($file->getSize()) . ') '; - } - $variables['element'] = $element; - // The "js-form-managed-file" class is required for proper Ajax functionality. - $variables['attributes'] = array('class' => array('file-widget', 'js-form-managed-file', 'form-managed-file', 'clearfix')); -} - /** * Prepares variables for multi file form widget templates. * diff --git a/core/modules/file/file.js b/core/modules/file/file.js index 30cf2450e..8ed377eec 100644 --- a/core/modules/file/file.js +++ b/core/modules/file/file.js @@ -110,10 +110,10 @@ */ Drupal.behaviors.filePreviewLinks = { attach: function (context) { - $(context).find('div.js-form-managed-file .file a, .file-widget .file a').on('click', Drupal.file.openInNewWindow); + $(context).find('div.js-form-managed-file .file a').on('click', Drupal.file.openInNewWindow); }, detach: function (context) { - $(context).find('div.js-form-managed-file .file a, .file-widget .file a').off('click', Drupal.file.openInNewWindow); + $(context).find('div.js-form-managed-file .file a').off('click', Drupal.file.openInNewWindow); } }; diff --git a/core/modules/file/file.module b/core/modules/file/file.module index d48b23209..26c35ac53 100644 --- a/core/modules/file/file.module +++ b/core/modules/file/file.module @@ -555,10 +555,6 @@ function file_theme() { ), // From file.field.inc. - 'file_widget' => array( - 'render element' => 'element', - 'file' => 'file.field.inc', - ), 'file_widget_multiple' => array( 'render element' => 'element', 'file' => 'file.field.inc', diff --git a/core/modules/file/migration_templates/d6_file.yml b/core/modules/file/migration_templates/d6_file.yml index 07a9cc2d3..a4693cf11 100644 --- a/core/modules/file/migration_templates/d6_file.yml +++ b/core/modules/file/migration_templates/d6_file.yml @@ -23,3 +23,4 @@ process: uid: uid destination: plugin: entity:file + urlencode: true diff --git a/core/modules/file/migration_templates/d7_file.yml b/core/modules/file/migration_templates/d7_file.yml index ea8f647f1..b10cca614 100644 --- a/core/modules/file/migration_templates/d7_file.yml +++ b/core/modules/file/migration_templates/d7_file.yml @@ -23,3 +23,4 @@ process: destination: plugin: entity:file source_path_property: filepath + urlencode: true diff --git a/core/modules/file/src/Plugin/EntityReferenceSelection/FileSelection.php b/core/modules/file/src/Plugin/EntityReferenceSelection/FileSelection.php index e789154d2..01fb8cd8a 100644 --- a/core/modules/file/src/Plugin/EntityReferenceSelection/FileSelection.php +++ b/core/modules/file/src/Plugin/EntityReferenceSelection/FileSelection.php @@ -27,8 +27,41 @@ class FileSelection extends DefaultSelection { */ protected function buildEntityQuery($match = NULL, $match_operator = 'CONTAINS') { $query = parent::buildEntityQuery($match, $match_operator); - $query->condition('status', FILE_STATUS_PERMANENT); + // Allow referencing : + // - files with status "permanent" + // - or files uploaded by the current user (since newly uploaded files only + // become "permanent" after the containing entity gets validated and + // saved.) + $query->condition($query->orConditionGroup() + ->condition('status', FILE_STATUS_PERMANENT) + ->condition('uid', $this->currentUser->id())); return $query; } + /** + * {@inheritdoc} + */ + public function createNewEntity($entity_type_id, $bundle, $label, $uid) { + $file = parent::createNewEntity($entity_type_id, $bundle, $label, $uid); + + // In order to create a referenceable file, it needs to have a "permanent" + // status. + /** @var \Drupal\file\FileInterface $file */ + $file->setPermanent(); + + return $file; + } + + /** + * {@inheritdoc} + */ + public function validateReferenceableNewEntities(array $entities) { + $entities = parent::validateReferenceableNewEntities($entities); + $entities = array_filter($entities, function ($file) { + /** @var \Drupal\file\FileInterface $file */ + return $file->isPermanent() || $file->getOwnerId() === $this->currentUser->id(); + }); + return $entities; + } + } diff --git a/core/modules/file/src/Plugin/Field/FieldType/FileItem.php b/core/modules/file/src/Plugin/Field/FieldType/FileItem.php index 1633147b2..ba50903ae 100644 --- a/core/modules/file/src/Plugin/Field/FieldType/FileItem.php +++ b/core/modules/file/src/Plugin/Field/FieldType/FileItem.php @@ -28,7 +28,7 @@ use Drupal\Core\TypedData\DataDefinition; * default_widget = "file_generic", * default_formatter = "file_default", * list_class = "\Drupal\file\Plugin\Field\FieldType\FileFieldItemList", - * constraints = {"ValidReference" = {}, "ReferenceAccess" = {}} + * constraints = {"ReferenceAccess" = {}, "FileValidation" = {}} * ) */ class FileItem extends EntityReferenceItem { diff --git a/core/modules/file/src/Plugin/Field/FieldWidget/FileWidget.php b/core/modules/file/src/Plugin/Field/FieldWidget/FileWidget.php index bd511c8cf..3570c3506 100644 --- a/core/modules/file/src/Plugin/Field/FieldWidget/FileWidget.php +++ b/core/modules/file/src/Plugin/Field/FieldWidget/FileWidget.php @@ -18,8 +18,9 @@ use Drupal\Core\Plugin\ContainerFactoryPluginInterface; use Drupal\Core\Render\Element; use Drupal\Core\Render\ElementInfoManagerInterface; use Drupal\file\Element\ManagedFile; -use Symfony\Component\DependencyInjection\ContainerInterface; use Drupal\file\Entity\File; +use Symfony\Component\DependencyInjection\ContainerInterface; +use Symfony\Component\Validator\ConstraintViolationListInterface; /** * Plugin implementation of the 'file_generic' widget. @@ -369,11 +370,6 @@ class FileWidget extends WidgetBase implements ContainerFactoryPluginInterface { $item = $element['#value']; $item['fids'] = $element['fids']['#value']; - // Prevent the file widget from overriding the image widget. - if (!isset($element['#theme'])) { - $element['#theme'] = 'file_widget'; - } - // Add the display field if enabled. if ($element['#display_field']) { $element['display'] = array( @@ -575,4 +571,15 @@ class FileWidget extends WidgetBase implements ContainerFactoryPluginInterface { static::setWidgetState($parents, $field_name, $form_state, $field_state); } + /** + * {@inheritdoc} + */ + public function flagErrors(FieldItemListInterface $items, ConstraintViolationListInterface $violations, array $form, FormStateInterface $form_state) { + // Never flag validation errors for the remove button. + $clicked_button = end($form_state->getTriggeringElement()['#parents']); + if ($clicked_button !== 'remove_button') { + parent::flagErrors($items, $violations, $form, $form_state); + } + } + } diff --git a/core/modules/file/src/Plugin/Validation/Constraint/FileValidationConstraint.php b/core/modules/file/src/Plugin/Validation/Constraint/FileValidationConstraint.php new file mode 100644 index 000000000..3b14feea0 --- /dev/null +++ b/core/modules/file/src/Plugin/Validation/Constraint/FileValidationConstraint.php @@ -0,0 +1,22 @@ +get('entity')->getTarget()->getValue(); + // Get the validators. + $validators = $value->getUploadValidators(); + // Checks that a file meets the criteria specified by the validators. + if ($errors = file_validate($file, $validators)) { + foreach ($errors as $error) { + $this->context->addViolation($error); + } + } + } + +} diff --git a/core/modules/file/src/Plugin/migrate/destination/EntityFile.php b/core/modules/file/src/Plugin/migrate/destination/EntityFile.php index c5e898948..38c3f8716 100644 --- a/core/modules/file/src/Plugin/migrate/destination/EntityFile.php +++ b/core/modules/file/src/Plugin/migrate/destination/EntityFile.php @@ -7,8 +7,11 @@ namespace Drupal\file\Plugin\migrate\destination; +use Drupal\Component\Utility\Unicode; use Drupal\Core\Entity\EntityManagerInterface; use Drupal\Core\Entity\EntityStorageInterface; +use Drupal\Core\Field\FieldTypePluginManagerInterface; +use Drupal\Core\Field\Plugin\Field\FieldType\UriItem; use Drupal\Core\File\FileSystemInterface; use Drupal\Core\StreamWrapper\LocalStream; use Drupal\Core\StreamWrapper\StreamWrapperManagerInterface; @@ -41,7 +44,7 @@ class EntityFile extends EntityContentBase { /** * {@inheritdoc} */ - public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, EntityStorageInterface $storage, array $bundles, EntityManagerInterface $entity_manager, StreamWrapperManagerInterface $stream_wrappers, FileSystemInterface $file_system) { + public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, EntityStorageInterface $storage, array $bundles, EntityManagerInterface $entity_manager, FieldTypePluginManagerInterface $field_type_manager, StreamWrapperManagerInterface $stream_wrappers, FileSystemInterface $file_system) { $configuration += array( 'source_base_path' => '', 'source_path_property' => 'filepath', @@ -49,7 +52,7 @@ class EntityFile extends EntityContentBase { 'move' => FALSE, 'urlencode' => FALSE, ); - parent::__construct($configuration, $plugin_id, $plugin_definition, $migration, $storage, $bundles, $entity_manager); + parent::__construct($configuration, $plugin_id, $plugin_definition, $migration, $storage, $bundles, $entity_manager, $field_type_manager); $this->streamWrapperManager = $stream_wrappers; $this->fileSystem = $file_system; @@ -68,6 +71,7 @@ class EntityFile extends EntityContentBase { $container->get('entity.manager')->getStorage($entity_type), array_keys($container->get('entity.manager')->getBundleInfo($entity_type)), $container->get('entity.manager'), + $container->get('plugin.manager.field.field_type'), $container->get('stream_wrapper_manager'), $container->get('file_system') ); @@ -77,6 +81,12 @@ class EntityFile extends EntityContentBase { * {@inheritdoc} */ protected function getEntity(Row $row, array $old_destination_id_values) { + // For stub rows, there is no real file to deal with, let the stubbing + // process take its default path. + if ($row->isStub()) { + return parent::getEntity($row, $old_destination_id_values); + } + $destination = $row->getDestinationProperty($this->configuration['destination_path_property']); $entity = $this->storage->loadByProperties(['uri' => $destination]); if ($entity) { @@ -91,6 +101,12 @@ class EntityFile extends EntityContentBase { * {@inheritdoc} */ public function import(Row $row, array $old_destination_id_values = array()) { + // For stub rows, there is no real file to deal with, let the stubbing + // process create the stub entity. + if ($row->isStub()) { + return parent::import($row, $old_destination_id_values); + } + $file = $row->getSourceProperty($this->configuration['source_path_property']); $destination = $row->getDestinationProperty($this->configuration['destination_path_property']); $source = $this->configuration['source_base_path'] . $file; @@ -256,4 +272,30 @@ class EntityFile extends EntityContentBase { return $filename; } + /** + * {@inheritdoc} + */ + protected function processStubRow(Row $row) { + // We stub the uri value ourselves so we can create a real stub file for it. + if (!$row->getDestinationProperty('uri')) { + $field_definitions = $this->entityManager + ->getFieldDefinitions($this->storage->getEntityTypeId(), + $this->getKey('bundle')); + $value = UriItem::generateSampleValue($field_definitions['uri']); + if (empty($value)) { + throw new MigrateException('Stubbing failed, unable to generate value for field uri'); + } + // generateSampleValue() wraps the value in an array. + $value = reset($value); + // Make it into a proper public file uri, stripping off the existing + // scheme if present. + $value = 'public://' . preg_replace('|^[a-z]+://|i', '', $value); + $value = Unicode::substr($value, 0, $field_definitions['uri']->getSetting('max_length')); + // Create a real file, so File::preSave() can do filesize() on it. + touch($value); + $row->setDestinationProperty('uri', $value); + } + parent::processStubRow($row); + } + } diff --git a/core/modules/file/src/Plugin/migrate/process/d6/FileUri.php b/core/modules/file/src/Plugin/migrate/process/d6/FileUri.php index b464ee004..912371c25 100644 --- a/core/modules/file/src/Plugin/migrate/process/d6/FileUri.php +++ b/core/modules/file/src/Plugin/migrate/process/d6/FileUri.php @@ -24,6 +24,11 @@ class FileUri extends ProcessPluginBase { * {@inheritdoc} */ public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) { + // If we're stubbing a file entity, return a uri of NULL so it will get + // stubbed by the general process. + if ($row->isStub()) { + return NULL; + } list($filepath, $file_directory_path, $temp_directory_path, $is_public) = $value; // Specific handling using $temp_directory_path for temporary files. diff --git a/core/modules/file/src/Tests/FileFieldValidateTest.php b/core/modules/file/src/Tests/FileFieldValidateTest.php index 291c43297..12fe92552 100644 --- a/core/modules/file/src/Tests/FileFieldValidateTest.php +++ b/core/modules/file/src/Tests/FileFieldValidateTest.php @@ -159,4 +159,35 @@ class FileFieldValidateTest extends FileFieldTestBase { $this->assertFileEntryExists($node_file, 'File entry exists after uploading a file with extension checking.'); } + /** + * Checks that a file can always be removed if it does not pass validation. + */ + public function testFileRemoval() { + $node_storage = $this->container->get('entity.manager')->getStorage('node'); + $type_name = 'article'; + $field_name = 'file_test'; + $this->createFileField($field_name, 'node', $type_name); + + $test_file = $this->getTestFile('image'); + + // Disable extension checking. + $this->updateFileField($field_name, $type_name, array('file_extensions' => '')); + + // Check that the file can be uploaded with no extension checking. + $nid = $this->uploadNodeFile($test_file, $field_name, $type_name); + $node_storage->resetCache(array($nid)); + $node = $node_storage->load($nid); + $node_file = File::load($node->{$field_name}->target_id); + $this->assertFileExists($node_file, 'File exists after uploading a file with no extension checking.'); + $this->assertFileEntryExists($node_file, 'File entry exists after uploading a file with no extension checking.'); + + // Enable extension checking for text files. + $this->updateFileField($field_name, $type_name, array('file_extensions' => 'txt')); + + // Check that the file can still be removed. + $this->removeNodeFile($nid); + $this->assertNoText('Only files with the following extensions are allowed: txt.'); + $this->assertText('Article ' . $node->getTitle() . ' has been updated.'); + } + } diff --git a/core/modules/file/src/Tests/Migrate/MigrateFileStubTest.php b/core/modules/file/src/Tests/Migrate/MigrateFileStubTest.php new file mode 100644 index 000000000..ae7446c87 --- /dev/null +++ b/core/modules/file/src/Tests/Migrate/MigrateFileStubTest.php @@ -0,0 +1,42 @@ +installEntitySchema('file'); + } + + /** + * Tests creation of file stubs. + */ + public function testStub() { + $this->performStubTest('file'); + } + +} diff --git a/core/modules/file/templates/file-widget.html.twig b/core/modules/file/templates/file-widget.html.twig deleted file mode 100644 index 892ed3d83..000000000 --- a/core/modules/file/templates/file-widget.html.twig +++ /dev/null @@ -1,17 +0,0 @@ -{# -/** - * @file - * Default theme implementation to display a file widget. - * - * Available variables: - * - element: Form element for the managed file. - * - attributes: Remaining HTML attributes for the containing element. - * - * @see template_preprocess_file_widget() - * - * @ingroup themeable - */ -#} - - {{ element }} - diff --git a/core/modules/file/tests/src/Kernel/FileItemValidationTest.php b/core/modules/file/tests/src/Kernel/FileItemValidationTest.php new file mode 100644 index 000000000..fbfcbd18e --- /dev/null +++ b/core/modules/file/tests/src/Kernel/FileItemValidationTest.php @@ -0,0 +1,119 @@ +installEntitySchema('user'); + $this->installEntitySchema('file'); + $this->installSchema('file', 'file_usage'); + $this->installSchema('system', 'sequences'); + + $this->user = User::create([ + 'name' => 'username', + 'status' => 1, + ]); + $this->user->save(); + } + + /** + * @covers \Drupal\file\Plugin\Validation\Constraint\FileValidationConstraint + * @covers \Drupal\file\Plugin\Validation\Constraint\FileValidationConstraintValidator + * @dataProvider getFileTypes + */ + public function testFileValidationConstraint($file_type) { + $field_storage = FieldStorageConfig::create([ + 'field_name' => 'field_test_file', + 'entity_type' => 'entity_test', + 'type' => $file_type, + ]); + $field_storage->save(); + + $field = FieldConfig::create([ + 'field_name' => 'field_test_file', + 'entity_type' => 'entity_test', + 'bundle' => 'entity_test', + 'settings' => [ + 'max_filesize' => '2k', + 'file_extensions' => 'jpg|png', + ], + ]); + $field->save(); + + vfsStream::setup('drupal_root'); + vfsStream::create([ + 'sites' => [ + 'default' => [ + 'files' => [ + 'test.txt' => str_repeat('a', 3000), + ] + ] + ] + ]); + + // Test for max filesize. + $file = File::create([ + 'uri' => 'vfs://drupal_root/sites/default/files/test.txt', + ]); + $file->setPermanent(); + $file->save(); + + $entity_test = EntityTest::create([ + 'uid' => $this->user->id(), + 'field_test_file' => [ + 'target_id' => $file->id(), + ] + ]); + $result = $entity_test->validate(); + $this->assertCount(2, $result); + + $this->assertEquals('field_test_file.0', $result->get(0)->getPropertyPath()); + $this->assertEquals('The file is 2.93 KB exceeding the maximum file size of 2 KB.', (string) $result->get(0)->getMessage()); + $this->assertEquals('field_test_file.0', $result->get(1)->getPropertyPath()); + $this->assertEquals('Only files with the following extensions are allowed: jpg|png.', (string) $result->get(1)->getMessage()); + } + + /** + * Provides a list of file types to test. + */ + public function getFileTypes() { + return [['file'], ['image']]; + } + +} diff --git a/core/modules/history/history.routing.yml b/core/modules/history/history.routing.yml index f4db92a27..ff01a7c33 100644 --- a/core/modules/history/history.routing.yml +++ b/core/modules/history/history.routing.yml @@ -11,3 +11,4 @@ history.read_node: _controller: '\Drupal\history\Controller\HistoryController::readNode' requirements: _entity_access: 'node.view' + node: \d+ diff --git a/core/modules/history/src/Plugin/views/filter/HistoryUserTimestamp.php b/core/modules/history/src/Plugin/views/filter/HistoryUserTimestamp.php index 221692732..9abfe5639 100644 --- a/core/modules/history/src/Plugin/views/filter/HistoryUserTimestamp.php +++ b/core/modules/history/src/Plugin/views/filter/HistoryUserTimestamp.php @@ -81,8 +81,7 @@ class HistoryUserTimestamp extends FilterPluginBase { $clause = ''; $clause2 = ''; - if (\Drupal::moduleHandler()->moduleExists('comment')) { - $ces = $this->query->ensureTable('comment_entity_statistics', $this->relationship); + if ($ces = $this->query->ensureTable('comment_entity_statistics', $this->relationship)) { $clause = ("OR $ces.last_comment_timestamp > (***CURRENT_TIME*** - $limit)"); $clause2 = "OR $field < $ces.last_comment_timestamp"; } diff --git a/core/modules/history/src/Tests/Views/HistoryTimestampTest.php b/core/modules/history/src/Tests/Views/HistoryTimestampTest.php index 44f67f958..a76a5e804 100644 --- a/core/modules/history/src/Tests/Views/HistoryTimestampTest.php +++ b/core/modules/history/src/Tests/Views/HistoryTimestampTest.php @@ -80,5 +80,14 @@ class HistoryTimestampTest extends ViewTestBase { $this->executeView($view); $this->assertEqual(count($view->result), 1); $this->assertIdenticalResultset($view, array(array('nid' => $nodes[0]->id())), $column_map); + + // Install Comment module and make sure that content types without comment + // field will not break the view. + // See \Drupal\history\Plugin\views\filter\HistoryUserTimestamp::query() + \Drupal::service('module_installer')->install(['comment']); + $view = Views::getView('test_history'); + $view->setDisplay('page_2'); + $this->executeView($view); + } } diff --git a/core/modules/image/src/Plugin/Field/FieldType/ImageItem.php b/core/modules/image/src/Plugin/Field/FieldType/ImageItem.php index 442929fe7..9ec3b6794 100644 --- a/core/modules/image/src/Plugin/Field/FieldType/ImageItem.php +++ b/core/modules/image/src/Plugin/Field/FieldType/ImageItem.php @@ -43,7 +43,7 @@ use Drupal\file\Plugin\Field\FieldType\FileItem; * }, * }, * list_class = "\Drupal\file\Plugin\Field\FieldType\FileFieldItemList", - * constraints = {"ValidReference" = {}, "ReferenceAccess" = {}} + * constraints = {"ReferenceAccess" = {}, "FileValidation" = {}} * ) */ class ImageItem extends FileItem { @@ -346,10 +346,10 @@ class ImageItem extends FileItem { if ($path = $random->image(drupal_realpath($destination), $min_resolution, $max_resolution)) { $image = File::create(); $image->setFileUri($path); - // $image->setOwner($account); + $image->setOwnerId(\Drupal::currentUser()->id()); $image->setMimeType('image/' . pathinfo($path, PATHINFO_EXTENSION)); $image->setFileName(drupal_basename($path)); - $destination_dir = $settings['uri_scheme'] . '://' . $settings['file_directory']; + $destination_dir = static::doGetUploadLocation($settings); file_prepare_directory($destination_dir, FILE_CREATE_DIRECTORY); $destination = $destination_dir . '/' . basename($path); $file = file_move($image, $destination, FILE_CREATE_DIRECTORY); diff --git a/core/modules/language/language.install b/core/modules/language/language.install new file mode 100644 index 000000000..dcec16ae6 --- /dev/null +++ b/core/modules/language/language.install @@ -0,0 +1,13 @@ +invalidateContainer(); +} diff --git a/core/modules/language/language.services.yml b/core/modules/language/language.services.yml index fc9bba1cf..19d0f21a9 100644 --- a/core/modules/language/language.services.yml +++ b/core/modules/language/language.services.yml @@ -9,7 +9,7 @@ services: - [initLanguageManager] language.config_subscriber: class: Drupal\language\EventSubscriber\ConfigSubscriber - arguments: ['@language_manager', '@language.default', '@config.factory'] + arguments: ['@language_manager', '@language.default', '@config.factory', '@language_negotiator'] tags: - { name: event_subscriber } language.config_factory_override: diff --git a/core/modules/language/src/EventSubscriber/ConfigSubscriber.php b/core/modules/language/src/EventSubscriber/ConfigSubscriber.php index e1875ce7d..f1c758234 100644 --- a/core/modules/language/src/EventSubscriber/ConfigSubscriber.php +++ b/core/modules/language/src/EventSubscriber/ConfigSubscriber.php @@ -14,6 +14,8 @@ use Drupal\Core\Language\LanguageManagerInterface; use Drupal\Core\Config\ConfigCrudEvent; use Drupal\Core\Config\ConfigEvents; use Drupal\language\ConfigurableLanguageManager; +use Drupal\language\HttpKernel\PathProcessorLanguage; +use Drupal\language\LanguageNegotiatorInterface; use Symfony\Component\EventDispatcher\EventSubscriberInterface; /** @@ -42,6 +44,20 @@ class ConfigSubscriber implements EventSubscriberInterface { */ protected $configFactory; + /** + * The language negotiator. + * + * @var \Drupal\language\LanguageNegotiatorInterface + */ + protected $languageNegotiator; + + /** + * The language path processor. + * + * @var \Drupal\language\HttpKernel\PathProcessorLanguage + */ + protected $pathProcessorLanguage; + /** * Constructs a new class object. * @@ -51,11 +67,14 @@ class ConfigSubscriber implements EventSubscriberInterface { * The default language. * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory * The configuration factory. + * @param \Drupal\language\LanguageNegotiatorInterface $language_negotiator + * The language negotiator. */ - public function __construct(LanguageManagerInterface $language_manager, LanguageDefault $language_default, ConfigFactoryInterface $config_factory) { + public function __construct(LanguageManagerInterface $language_manager, LanguageDefault $language_default, ConfigFactoryInterface $config_factory, LanguageNegotiatorInterface $language_negotiator) { $this->languageManager = $language_manager; $this->languageDefault = $language_default; $this->configFactory = $config_factory; + $this->languageNegotiator = $language_negotiator; } /** @@ -102,6 +121,25 @@ class ConfigSubscriber implements EventSubscriberInterface { // Trigger a container rebuild on the next request by invalidating it. ConfigurableLanguageManager::rebuildServices(); } + elseif ($saved_config->getName() == 'language.types' && $event->isChanged('negotiation')) { + // If the negotiation configuration changed the language negotiator and + // the language path processor have to be reset so that they regenerate + // the method instances and also sort them accordingly to the new config. + $this->languageNegotiator->reset(); + if (isset($this->pathProcessorLanguage)) { + $this->pathProcessorLanguage->reset(); + } + } + } + + /** + * Injects the language path processors on multilingual site configuration. + * + * @param \Drupal\language\HttpKernel\PathProcessorLanguage $path_processor_language + * The language path processor. + */ + public function setPathProcessorLanguage(PathProcessorLanguage $path_processor_language) { + $this->pathProcessorLanguage = $path_processor_language; } /** diff --git a/core/modules/language/src/Form/ContentLanguageSettingsForm.php b/core/modules/language/src/Form/ContentLanguageSettingsForm.php index ebbf0fd95..4b7d4a50a 100644 --- a/core/modules/language/src/Form/ContentLanguageSettingsForm.php +++ b/core/modules/language/src/Form/ContentLanguageSettingsForm.php @@ -63,7 +63,7 @@ class ContentLanguageSettingsForm extends FormBase { $bundles = $this->entityManager->getAllBundleInfo(); $language_configuration = array(); foreach ($entity_types as $entity_type_id => $entity_type) { - if (!$entity_type instanceof ContentEntityTypeInterface || !$entity_type->hasKey('langcode')) { + if (!$entity_type instanceof ContentEntityTypeInterface || !$entity_type->hasKey('langcode') || !isset($bundles[$entity_type_id])) { continue; } $labels[$entity_type_id] = $entity_type->getLabel() ?: $entity_type_id; diff --git a/core/modules/language/src/HttpKernel/PathProcessorLanguage.php b/core/modules/language/src/HttpKernel/PathProcessorLanguage.php index caddfc0a0..aa5870915 100644 --- a/core/modules/language/src/HttpKernel/PathProcessorLanguage.php +++ b/core/modules/language/src/HttpKernel/PathProcessorLanguage.php @@ -13,6 +13,7 @@ use Drupal\Core\PathProcessor\InboundPathProcessorInterface; use Drupal\Core\PathProcessor\OutboundPathProcessorInterface; use Drupal\Core\Render\BubbleableMetadata; use Drupal\language\ConfigurableLanguageManagerInterface; +use Drupal\language\EventSubscriber\ConfigSubscriber; use Drupal\language\LanguageNegotiatorInterface; use Symfony\Component\HttpFoundation\Request; use Drupal\Core\Session\AccountInterface; @@ -57,6 +58,14 @@ class PathProcessorLanguage implements InboundPathProcessorInterface, OutboundPa */ protected $multilingual; + /** + * The language configuration event subscriber. + * + * @var \Drupal\language\EventSubscriber\ConfigSubscriber + */ + protected $configSubscriber; + + /** * Constructs a PathProcessorLanguage object. * @@ -68,12 +77,15 @@ class PathProcessorLanguage implements InboundPathProcessorInterface, OutboundPa * The language negotiator. * @param \Drupal\Core\Session\AccountInterface $current_user * The current active user. + * @param \Drupal\language\EventSubscriber\ConfigSubscriber $config_subscriber + * The language configuration event subscriber. */ - public function __construct(ConfigFactoryInterface $config, ConfigurableLanguageManagerInterface $language_manager, LanguageNegotiatorInterface $negotiator, AccountInterface $current_user) { + public function __construct(ConfigFactoryInterface $config, ConfigurableLanguageManagerInterface $language_manager, LanguageNegotiatorInterface $negotiator, AccountInterface $current_user, ConfigSubscriber $config_subscriber) { $this->config = $config; $this->languageManager = $language_manager; $this->negotiator = $negotiator; $this->negotiator->setCurrentUser($current_user); + $this->configSubscriber = $config_subscriber; } /** @@ -152,4 +164,22 @@ class PathProcessorLanguage implements InboundPathProcessorInterface, OutboundPa }); } + /** + * Initializes the injected event subscriber with the language path processor. + * + * The language path processor service is registered only on multilingual + * site configuration, thus we inject it in the event subscriber only when + * it is initialized. + */ + public function initConfigSubscriber() { + $this->configSubscriber->setPathProcessorLanguage($this); + } + + /** + * Resets the collected processors instances. + */ + public function reset() { + $this->processors = array(); + } + } diff --git a/core/modules/language/src/LanguageServiceProvider.php b/core/modules/language/src/LanguageServiceProvider.php index 2f1840c09..c3f1cd12d 100644 --- a/core/modules/language/src/LanguageServiceProvider.php +++ b/core/modules/language/src/LanguageServiceProvider.php @@ -39,7 +39,9 @@ class LanguageServiceProvider extends ServiceProviderBase { ->addArgument(new Reference('config.factory')) ->addArgument(new Reference('language_manager')) ->addArgument(new Reference('language_negotiator')) - ->addArgument(new Reference('current_user')); + ->addArgument(new Reference('current_user')) + ->addArgument(new Reference('language.config_subscriber')) + ->addMethodCall('initConfigSubscriber'); } } diff --git a/core/modules/language/src/Plugin/LanguageNegotiation/LanguageNegotiationContentEntity.php b/core/modules/language/src/Plugin/LanguageNegotiation/LanguageNegotiationContentEntity.php new file mode 100644 index 000000000..4ce022dea --- /dev/null +++ b/core/modules/language/src/Plugin/LanguageNegotiation/LanguageNegotiationContentEntity.php @@ -0,0 +1,294 @@ +entityManager = $entity_manager; + $this->paths = new \SplObjectStorage(); + } + + /** + * {@inheritdoc} + */ + public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { + return new static($container->get('entity.manager')); + } + + /** + * {@inheritdoc} + */ + public function getLangcode(Request $request = NULL) { + $langcode = $request->get(static::QUERY_PARAMETER); + + $language_enabled = array_key_exists($langcode, $this->languageManager->getLanguages()); + return $language_enabled ? $langcode : NULL; + } + + /** + * {@inheritdoc} + */ + public function processOutbound($path, &$options = [], Request $request = NULL, BubbleableMetadata $bubbleable_metadata = NULL) { + // If appropriate, process outbound to add a query parameter to the url and + // remove the language option, so that url negotiator does not rewrite the + // url. + + // First, check if processing conditions are met. + if (!($request && !empty($options['route']) && $this->hasLowerLanguageNegotiationWeight() && $this->meetsContentEntityRoutesCondition($options['route'], $request))) { + return $path; + } + + if (isset($options['language']) || $langcode = $this->getLangcode($request)) { + // If the language option is set, unset it, so that the url language + // negotiator does not rewrite the url. + if (isset($options['language'])) { + $langcode = $options['language']->getId(); + unset($options['language']); + } + + if (isset($options['query']) && is_string($options['query'])) { + $query = []; + parse_str($options['query'], $query); + $options['query'] = $query; + } + else { + $options['query'] = []; + } + + if (!isset($options['query'][static::QUERY_PARAMETER])) { + $query_addon = [static::QUERY_PARAMETER => $langcode]; + $options['query'] += $query_addon; + // @todo Remove this once https://www.drupal.org/node/2507005 lands. + $path .= (strpos($path, '?') !== FALSE ? '&' : '?') . UrlHelper::buildQuery($query_addon); + } + + if ($bubbleable_metadata) { + // Cached URLs that have been processed by this outbound path + // processor must be: + $bubbleable_metadata + // - varied by the content language query parameter. + ->addCacheContexts(['url.query_args:' . static::QUERY_PARAMETER]); + } + } + + return $path; + } + + /** + * {@inheritdoc} + */ + public function getLanguageSwitchLinks(Request $request, $type, Url $url) { + $links = []; + $query = []; + parse_str($request->getQueryString(), $query); + + foreach ($this->languageManager->getNativeLanguages() as $language) { + $langcode = $language->getId(); + $query[static::QUERY_PARAMETER] = $langcode; + $links[$langcode] = [ + 'url' => $url, + 'title' => $language->getName(), + 'attributes' => ['class' => ['language-link']], + 'query' => $query, + ]; + } + + return $links; + } + + /** + * Determines if content entity language negotiator has higher priority. + * + * The content entity language negotiator having higher priority than the url + * language negotiator, is a criteria in + * \Drupal\language\Plugin\LanguageNegotiation\LanguageNegotiationContentEntity::processOutbound(). + * + * @return bool + * TRUE if the the content entity language negotiator has higher priority + * than the url language negotiator, FALSE otherwise. + */ + protected function hasLowerLanguageNegotiationWeight() { + if (!isset($this->hasLowerLanguageNegotiationWeightResult)) { + // Only run if the LanguageNegotiationContentEntity outbound function is + // being executed before the outbound function of LanguageNegotiationUrl. + $content_method_weights = $this->config->get('language.types')->get('negotiation.language_content.enabled') ?: []; + + // Check if the content language is configured to be dependent on the + // url negotiator directly or indirectly over the interface negotiator. + if (isset($content_method_weights[LanguageNegotiationUrl::METHOD_ID]) && ($content_method_weights[static::METHOD_ID] > $content_method_weights[LanguageNegotiationUrl::METHOD_ID])) { + $this->hasLowerLanguageNegotiationWeightResult = FALSE; + } + else { + $check_interface_method = FALSE; + if (isset($content_method_weights[LanguageNegotiationUI::METHOD_ID])) { + $interface_method_weights = $this->config->get('language.types')->get('negotiation.language_interface.enabled') ?: []; + $check_interface_method = isset($interface_method_weights[LanguageNegotiationUrl::METHOD_ID]); + } + if ($check_interface_method) { + $max_weight = $content_method_weights[LanguageNegotiationUI::METHOD_ID]; + $max_weight = isset($content_method_weights[LanguageNegotiationUrl::METHOD_ID]) ? max($max_weight, $content_method_weights[LanguageNegotiationUrl::METHOD_ID]) : $max_weight; + } + else { + $max_weight = isset($content_method_weights[LanguageNegotiationUrl::METHOD_ID]) ? $content_method_weights[LanguageNegotiationUrl::METHOD_ID] : PHP_INT_MAX; + } + + $this->hasLowerLanguageNegotiationWeightResult = $content_method_weights[static::METHOD_ID] < $max_weight; + } + } + + return $this->hasLowerLanguageNegotiationWeightResult; + } + + /** + * Determines if content entity route condition is met. + * + * Requirements: currently being on an content entity route and processing + * outbound url pointing to the same content entity. + * + * @param \Symfony\Component\Routing\Route $outbound_route + * The route object for the current outbound url being processed. + * @param \Symfony\Component\HttpFoundation\Request $request + * The HttpRequest object representing the current request. + * + * @return bool + * TRUE if the content entity route condition is met, FALSE otherwise. + */ + protected function meetsContentEntityRoutesCondition(Route $outbound_route, Request $request) { + $outbound_path_pattern = $outbound_route->getPath(); + $storage = isset($this->paths[$request]) ? $this->paths[$request] : []; + if (!isset($storage[$outbound_path_pattern])) { + $storage[$outbound_path_pattern] = FALSE; + + // Check if the outbound route points to the current entity. + if ($content_entity_type_id_for_current_route = $this->getContentEntityTypeIdForCurrentRequest($request)) { + if (!empty($this->getContentEntityPaths()[$outbound_path_pattern]) && $content_entity_type_id_for_current_route == $this->getContentEntityPaths()[$outbound_path_pattern]) { + $storage[$outbound_path_pattern] = TRUE; + } + } + + $this->paths[$request] = $storage; + } + + return $storage[$outbound_path_pattern]; + } + + /** + * Returns the content entity type ID from the current request for the route. + * + * @param \Symfony\Component\HttpFoundation\Request $request + * The HttpRequest object representing the current request. + * + * @return string + * The entity type ID for the route from the request. + */ + protected function getContentEntityTypeIdForCurrentRequest(Request $request) { + $content_entity_type_id_for_current_route = ''; + + if ($current_route = $request->attributes->get(RouteObjectInterface::ROUTE_OBJECT)) { + $current_route_path = $current_route->getPath(); + $content_entity_type_id_for_current_route = isset($this->getContentEntityPaths()[$current_route_path]) ? $this->getContentEntityPaths()[$current_route_path] : ''; + } + + return $content_entity_type_id_for_current_route; + } + + /** + * Returns the paths for the link templates of all content entities. + * + * @return array + * An array of all content entity type IDs, keyed by the corresponding link + * template paths. + */ + protected function getContentEntityPaths() { + if (!isset($this->contentEntityPaths)) { + $this->contentEntityPaths = []; + $entity_types = $this->entityManager->getDefinitions(); + foreach ($entity_types as $entity_type_id => $entity_type) { + if ($entity_type->isSubclassOf(ContentEntityInterface::class)) { + $entity_paths = array_fill_keys($entity_type->getLinkTemplates(), $entity_type_id); + $this->contentEntityPaths = array_merge($this->contentEntityPaths, $entity_paths); + } + } + } + + return $this->contentEntityPaths; + } + +} diff --git a/core/modules/language/src/Tests/EntityUrlLanguageTest.php b/core/modules/language/src/Tests/EntityUrlLanguageTest.php index 915f7f605..f172b38f4 100644 --- a/core/modules/language/src/Tests/EntityUrlLanguageTest.php +++ b/core/modules/language/src/Tests/EntityUrlLanguageTest.php @@ -7,22 +7,34 @@ namespace Drupal\language\Tests; +use Drupal\Core\Language\LanguageInterface; use Drupal\entity_test\Entity\EntityTest; use Drupal\language\Entity\ConfigurableLanguage; -use Drupal\simpletest\KernelTestBase; +use Drupal\language\Plugin\LanguageNegotiation\LanguageNegotiationContentEntity; +use Drupal\language\Plugin\LanguageNegotiation\LanguageNegotiationUrl; +use Symfony\Cmf\Component\Routing\RouteObjectInterface; +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\Routing\Route; /** * Tests the language of entity URLs. * @group language */ -class EntityUrlLanguageTest extends KernelTestBase { +class EntityUrlLanguageTest extends LanguageTestBase { /** * Modules to enable. * * @var array */ - public static $modules = ['language', 'entity_test', 'user', 'system']; + public static $modules = ['entity_test', 'user']; + + /** + * The entity being used for testing. + * + * @var \Drupal\Core\Entity\ContentEntityInterface + */ + protected $entity; protected function setUp() { parent::setUp(); @@ -37,33 +49,93 @@ class EntityUrlLanguageTest extends KernelTestBase { ConfigurableLanguage::create(['id' => 'es'])->save(); ConfigurableLanguage::create(['id' => 'fr'])->save(); - $this->config('language.types')->setData([ - 'configurable' => ['language_interface'], - 'negotiation' => ['language_interface' => ['enabled' => ['language-url' => 0]]], - ])->save(); - $this->config('language.negotiation')->setData([ - 'url' => [ - 'source' => 'path_prefix', - 'prefixes' => ['en' => 'en', 'es' => 'es', 'fr' => 'fr'] - ], - ])->save(); + $config = $this->config('language.negotiation'); + $config->set('url.prefixes', ['en' => 'en', 'es' => 'es', 'fr' => 'fr']) + ->save(); $this->kernel->rebuildContainer(); - $this->container = $this->kernel->getContainer(); - \Drupal::setContainer($this->container); + + $this->createTranslatableEntity(); } /** * Ensures that entity URLs in a language have the right language prefix. */ public function testEntityUrlLanguage() { - $entity = EntityTest::create(); - $entity->addTranslation('es', ['name' => 'name spanish']); - $entity->addTranslation('fr', ['name' => 'name french']); - $entity->save(); + $this->assertTrue(strpos($this->entity->urlInfo()->toString(), '/en/entity_test/' . $this->entity->id()) !== FALSE); + $this->assertTrue(strpos($this->entity->getTranslation('es')->urlInfo()->toString(), '/es/entity_test/' . $this->entity->id()) !== FALSE); + $this->assertTrue(strpos($this->entity->getTranslation('fr')->urlInfo()->toString(), '/fr/entity_test/' . $this->entity->id()) !== FALSE); + } - $this->assertTrue(strpos($entity->urlInfo()->toString(), '/en/entity_test/' . $entity->id()) !== FALSE); - $this->assertTrue(strpos($entity->getTranslation('es')->urlInfo()->toString(), '/es/entity_test/' . $entity->id()) !== FALSE); - $this->assertTrue(strpos($entity->getTranslation('fr')->urlInfo()->toString(), '/fr/entity_test/' . $entity->id()) !== FALSE); + /** + * Ensures correct entity URLs with the method language-content-entity enabled. + * + * Test case with the method language-content-entity enabled and configured + * with higher and also with lower priority than the method language-url. + */ + public function testEntityUrlLanguageWithLanguageContentEnabled() { + // Define the method language-content-entity with a higher priority than + // language-url. + $config = $this->config('language.types'); + $config->set('configurable', [LanguageInterface::TYPE_INTERFACE, LanguageInterface::TYPE_CONTENT]); + $config->set('negotiation.language_content.enabled', [ + LanguageNegotiationContentEntity::METHOD_ID => 0, + LanguageNegotiationUrl::METHOD_ID => 1 + ]); + $config->save(); + + // Without being on an content entity route the default entity URL tests + // should still pass. + $this->testEntityUrlLanguage(); + + // Now switching to an entity route, so that the URL links are generated + // while being on an entity route. + $this->setCurrentRequestForRoute('/entity_test/{entity_test}', 'entity.entity_test.canonical'); + + // The method language-content-entity should run before language-url and + // append query parameter for the content language and prevent language-url + // from overwriting the url. + $this->assertTrue(strpos($this->entity->urlInfo('canonical')->toString(), '/en/entity_test/' . $this->entity->id() . '?' . LanguageNegotiationContentEntity::QUERY_PARAMETER . '=en') !== FALSE); + $this->assertTrue(strpos($this->entity->getTranslation('es')->urlInfo('canonical')->toString(), '/en/entity_test/' . $this->entity->id() . '?' . LanguageNegotiationContentEntity::QUERY_PARAMETER . '=es') !== FALSE); + $this->assertTrue(strpos($this->entity->getTranslation('fr')->urlInfo('canonical')->toString(), '/en/entity_test/' . $this->entity->id() . '?' . LanguageNegotiationContentEntity::QUERY_PARAMETER . '=fr') !== FALSE); + + // Define the method language-url with a higher priority than + // language-content-entity. This configuration should match the default one, + // where the language-content-entity is turned off. + $config->set('negotiation.language_content.enabled', [ + LanguageNegotiationUrl::METHOD_ID => 0, + LanguageNegotiationContentEntity::METHOD_ID => 1 + ]); + $config->save(); + + // The default entity URL tests should pass again with the current + // configuration. + $this->testEntityUrlLanguage(); + } + + /** + * Creates a translated entity. + */ + protected function createTranslatableEntity() { + $this->entity = EntityTest::create(); + $this->entity->addTranslation('es', ['name' => 'name spanish']); + $this->entity->addTranslation('fr', ['name' => 'name french']); + $this->entity->save(); + } + + /** + * Sets the current request to a specific path with the corresponding route. + * + * @param string $path + * The path for which the current request should be created. + * @param string $route_name + * The route name for which the route object for the request should be + * created. + */ + protected function setCurrentRequestForRoute($path, $route_name) { + $request = Request::create($path); + $request->attributes->set(RouteObjectInterface::ROUTE_NAME, $route_name); + $request->attributes->set(RouteObjectInterface::ROUTE_OBJECT, new Route($path)); + $this->container->get('request_stack')->push($request); } } diff --git a/core/modules/language/src/Tests/LanguageNegotiationContentEntityTest.php b/core/modules/language/src/Tests/LanguageNegotiationContentEntityTest.php new file mode 100644 index 000000000..5373096fc --- /dev/null +++ b/core/modules/language/src/Tests/LanguageNegotiationContentEntityTest.php @@ -0,0 +1,182 @@ + 'es'])->save(); + ConfigurableLanguage::create(['id' => 'fr'])->save(); + + // In order to reflect the changes for a multilingual site in the container + // we have to rebuild it. + $this->rebuildContainer(); + + $this->createTranslatableEntity(); + + $user = $this->drupalCreateUser(array('view test entity')); + $this->drupalLogin($user); + } + + /** + * Tests default with content language remaining same as interface language. + */ + public function testDefaultConfiguration() { + $translation = $this->entity; + $this->drupalGet($translation->urlInfo()); + $last = $this->container->get('state')->get('language_test.language_negotiation_last'); + $last_content_language = $last[LanguageInterface::TYPE_CONTENT]; + $last_interface_language = $last[LanguageInterface::TYPE_INTERFACE]; + $this->assertTrue(($last_interface_language == $last_content_language) && ($last_content_language == $translation->language()->getId()), new FormattableMarkup('Interface language %interface_language and Content language %content_language are the same as the translation language %translation_language of the entity.', ['%interface_language' => $last_interface_language, '%content_language' => $last_content_language, '%translation_language' => $translation->language()->getId()])); + + $translation = $this->entity->getTranslation('es'); + $this->drupalGet($translation->urlInfo()); + $last = $this->container->get('state')->get('language_test.language_negotiation_last'); + $last_content_language = $last[LanguageInterface::TYPE_CONTENT]; + $last_interface_language = $last[LanguageInterface::TYPE_INTERFACE]; + $this->assertTrue(($last_interface_language == $last_content_language) && ($last_content_language == $translation->language()->getId()), new FormattableMarkup('Interface language %interface_language and Content language %content_language are the same as the translation language %translation_language of the entity.', ['%interface_language' => $last_interface_language, '%content_language' => $last_content_language, '%translation_language' => $translation->language()->getId()])); + + $translation = $this->entity->getTranslation('fr'); + $this->drupalGet($translation->urlInfo()); + $last = $this->container->get('state')->get('language_test.language_negotiation_last'); + $last_content_language = $last[LanguageInterface::TYPE_CONTENT]; + $last_interface_language = $last[LanguageInterface::TYPE_INTERFACE]; + $this->assertTrue(($last_interface_language == $last_content_language) && ($last_content_language == $translation->language()->getId()), new FormattableMarkup('Interface language %interface_language and Content language %content_language are the same as the translation language %translation_language of the entity.', ['%interface_language' => $last_interface_language, '%content_language' => $last_content_language, '%translation_language' => $translation->language()->getId()])); + } + + /** + * Tests enabling the language negotiator language_content_entity. + */ + public function testEnabledLanguageContentNegotiator() { + // Define the method language-url with a higher priority than + // language-content-entity. This configuration should match the default one, + // where the language-content-entity is turned off. + $config = $this->config('language.types'); + $config->set('configurable', [LanguageInterface::TYPE_INTERFACE, LanguageInterface::TYPE_CONTENT]); + $config->set('negotiation.language_content.enabled', [ + LanguageNegotiationUrl::METHOD_ID => 0, + LanguageNegotiationContentEntity::METHOD_ID => 1 + ]); + $config->save(); + + // In order to reflect the changes for a multilingual site in the container + // we have to rebuild it. + $this->rebuildContainer(); + + // The tests for the default configuration should still pass. + $this->testDefaultConfiguration(); + + // Define the method language-content-entity with a higher priority than + // language-url. + $config->set('negotiation.language_content.enabled', [ + LanguageNegotiationContentEntity::METHOD_ID => 0, + LanguageNegotiationUrl::METHOD_ID => 1 + ]); + $config->save(); + + // In order to reflect the changes for a multilingual site in the container + // we have to rebuild it. + $this->rebuildContainer(); + + // The method language-content-entity should run before language-url and + // append query parameter for the content language and prevent language-url + // from overwriting the URL. + $default_site_langcode = $this->config('system.site')->get('default_langcode'); + + // Now switching to an entity route, so that the URL links are generated + // while being on an entity route. + $this->setCurrentRequestForRoute('/entity_test/{entity_test}', 'entity.entity_test.canonical'); + + $translation = $this->entity; + $this->drupalGet($translation->urlInfo()); + $last = $this->container->get('state')->get('language_test.language_negotiation_last'); + $last_content_language = $last[LanguageInterface::TYPE_CONTENT]; + $last_interface_language = $last[LanguageInterface::TYPE_INTERFACE]; + $this->assertTrue(($last_interface_language == $default_site_langcode) && ($last_interface_language == $last_content_language) && ($last_content_language == $translation->language()->getId()), 'Interface language and Content language are the same as the default translation language of the entity.'); + $this->assertTrue($last_interface_language == $default_site_langcode, 'Interface language did not change from the default site language.'); + $this->assertTrue($last_content_language == $translation->language()->getId(), 'Content language matches the current entity translation language.'); + + $translation = $this->entity->getTranslation('es'); + $this->drupalGet($translation->urlInfo()); + $last = $this->container->get('state')->get('language_test.language_negotiation_last'); + $last_content_language = $last[LanguageInterface::TYPE_CONTENT]; + $last_interface_language = $last[LanguageInterface::TYPE_INTERFACE]; + $this->assertTrue($last_interface_language == $default_site_langcode, 'Interface language did not change from the default site language.'); + $this->assertTrue($last_content_language == $translation->language()->getId(), 'Content language matches the current entity translation language.'); + + $translation = $this->entity->getTranslation('fr'); + $this->drupalGet($translation->urlInfo()); + $last = $this->container->get('state')->get('language_test.language_negotiation_last'); + $last_content_language = $last[LanguageInterface::TYPE_CONTENT]; + $last_interface_language = $last[LanguageInterface::TYPE_INTERFACE]; + $this->assertTrue($last_interface_language == $default_site_langcode, 'Interface language did not change from the default site language.'); + $this->assertTrue($last_content_language == $translation->language()->getId(), 'Content language matches the current entity translation language.'); + } + + /** + * Creates a translated entity. + */ + protected function createTranslatableEntity() { + $this->entity = EntityTest::create(); + $this->entity->addTranslation('es', ['name' => 'name spanish']); + $this->entity->addTranslation('fr', ['name' => 'name french']); + $this->entity->save(); + } + + /** + * Sets the current request to a specific path with the corresponding route. + * + * @param string $path + * The path for which the current request should be created. + * @param string $route_name + * The route name for which the route object for the request should be + * created. + */ + protected function setCurrentRequestForRoute($path, $route_name) { + $request = Request::create($path); + $request->attributes->set(RouteObjectInterface::ROUTE_NAME, $route_name); + $request->attributes->set(RouteObjectInterface::ROUTE_OBJECT, new Route($path)); + $this->container->get('request_stack')->push($request); + } + +} diff --git a/core/modules/language/src/Tests/LanguageSelectorTranslatableTest.php b/core/modules/language/src/Tests/LanguageSelectorTranslatableTest.php index 15290fdd2..7f9a72ecd 100644 --- a/core/modules/language/src/Tests/LanguageSelectorTranslatableTest.php +++ b/core/modules/language/src/Tests/LanguageSelectorTranslatableTest.php @@ -84,7 +84,7 @@ class LanguageSelectorTranslatableTest extends WebTestBase { $this->drupalGet($path); // Get en language from selector. - $elements = $this->xpath('//select[@id=:id]//option[@value=:option]', array(':id' => 'edit-settings-node-node-settings-language-langcode', ':option' => 'en')); + $elements = $this->xpath('//select[@id=:id]//option[@value=:option]', array(':id' => 'edit-settings-user-user-settings-language-langcode', ':option' => 'en')); // Check that the language text is translated. $this->assertEqual((string) $elements[0], $name_translation, 'Checking the option string English is translated to Spanish.'); diff --git a/core/modules/language/src/Tests/LanguageUILanguageNegotiationTest.php b/core/modules/language/src/Tests/LanguageUILanguageNegotiationTest.php index 4645d68bc..16ba13e46 100644 --- a/core/modules/language/src/Tests/LanguageUILanguageNegotiationTest.php +++ b/core/modules/language/src/Tests/LanguageUILanguageNegotiationTest.php @@ -221,8 +221,13 @@ class LanguageUILanguageNegotiationTest extends WebTestBase { // Unknown language prefix should return 404. $definitions = \Drupal::languageManager()->getNegotiator()->getNegotiationMethods(); + // Enable only methods, which are either not limited to a specific language + // type or are supporting the interface language type. + $language_interface_method_definitions = array_filter($definitions, function ($method_definition) { + return !isset($method_definition['types']) || (isset($method_definition['types']) && in_array(LanguageInterface::TYPE_INTERFACE, $method_definition['types'])); + }); $this->config('language.types') - ->set('negotiation.' . LanguageInterface::TYPE_INTERFACE . '.enabled', array_flip(array_keys($definitions))) + ->set('negotiation.' . LanguageInterface::TYPE_INTERFACE . '.enabled', array_flip(array_keys($language_interface_method_definitions))) ->save(); $this->drupalGet("$langcode_unknown/admin/config", array(), $http_header_browser_fallback); $this->assertResponse(404, "Unknown language path prefix should return 404"); diff --git a/core/modules/language/templates/language-negotiation-configure-form.html.twig b/core/modules/language/templates/language-negotiation-configure-form.html.twig index 12528acd4..60717314b 100644 --- a/core/modules/language/templates/language-negotiation-configure-form.html.twig +++ b/core/modules/language/templates/language-negotiation-configure-form.html.twig @@ -1,24 +1,25 @@ {# /** -* @file -* Default theme implementation for a language negotiation configuration form. -* -* Available variables: -* - language_types: A list of language negotiation types. Each language type -* contains the following: -* - type: The machine name for the negotiation type. -* - title: The language negotiation type name. -* - description: A description for how the language negotiation type operates. -* - configurable: A radio element to toggle the table. -* - table: A draggable table for the language detection methods of this type. -* - children: Remaining form items for the group. -* - attributes: A list of HTML attributes for the wrapper element. -* - children: Remaining form items for all groups. -* -* @see template_preprocess_language_negotiation_configure_form() -* -* @ingroup themeable -*/ + * @file + * Default theme implementation for a language negotiation configuration form. + * + * Available variables: + * - language_types: A list of language negotiation types. Each language type + * contains the following: + * - type: The machine name for the negotiation type. + * - title: The language negotiation type name. + * - description: A description for how the language negotiation type + * operates. + * - configurable: A radio element to toggle the table. + * - table: A draggable table for the language detection methods of this type. + * - children: Remaining form items for the group. + * - attributes: A list of HTML attributes for the wrapper element. + * - children: Remaining form items for all groups. + * + * @see template_preprocess_language_negotiation_configure_form() + * + * @ingroup themeable + */ #} {% for language_type in language_types %} {% diff --git a/core/modules/link/src/Plugin/Field/FieldType/LinkItem.php b/core/modules/link/src/Plugin/Field/FieldType/LinkItem.php index 5c21ace87..722a0c1de 100644 --- a/core/modules/link/src/Plugin/Field/FieldType/LinkItem.php +++ b/core/modules/link/src/Plugin/Field/FieldType/LinkItem.php @@ -121,25 +121,30 @@ class LinkItem extends FieldItemBase implements LinkItemInterface { * {@inheritdoc} */ public static function generateSampleValue(FieldDefinitionInterface $field_definition) { - // Set of possible top-level domains. - $tlds = array('com', 'net', 'gov', 'org', 'edu', 'biz', 'info'); - // Set random length for the domain name. - $domain_length = mt_rand(7, 15); $random = new Random(); + if ($field_definition->getItemDefinition()->getSetting('link_type') & LinkItemInterface::LINK_EXTERNAL) { + // Set of possible top-level domains. + $tlds = array('com', 'net', 'gov', 'org', 'edu', 'biz', 'info'); + // Set random length for the domain name. + $domain_length = mt_rand(7, 15); - switch ($field_definition->getSetting('title')) { - case DRUPAL_DISABLED: - $values['title'] = ''; - break; - case DRUPAL_REQUIRED: - $values['title'] = $random->sentences(4); - break; - case DRUPAL_OPTIONAL: - // In case of optional title, randomize its generation. - $values['title'] = mt_rand(0,1) ? $random->sentences(4) : ''; - break; + switch ($field_definition->getSetting('title')) { + case DRUPAL_DISABLED: + $values['title'] = ''; + break; + case DRUPAL_REQUIRED: + $values['title'] = $random->sentences(4); + break; + case DRUPAL_OPTIONAL: + // In case of optional title, randomize its generation. + $values['title'] = mt_rand(0, 1) ? $random->sentences(4) : ''; + break; + } + $values['uri'] = 'http://www.' . $random->word($domain_length) . '.' . $tlds[mt_rand(0, (sizeof($tlds) - 1))]; + } + else { + $values['uri'] = 'base:' . $random->name(mt_rand(1, 64)); } - $values['uri'] = 'http://www.' . $random->word($domain_length) . '.' . $tlds[mt_rand(0, (sizeof($tlds)-1))]; return $values; } diff --git a/core/modules/link/src/Plugin/Validation/Constraint/LinkNotExistingInternalConstraintValidator.php b/core/modules/link/src/Plugin/Validation/Constraint/LinkNotExistingInternalConstraintValidator.php index dad78ab69..98b29e0bd 100644 --- a/core/modules/link/src/Plugin/Validation/Constraint/LinkNotExistingInternalConstraintValidator.php +++ b/core/modules/link/src/Plugin/Validation/Constraint/LinkNotExistingInternalConstraintValidator.php @@ -7,6 +7,8 @@ namespace Drupal\link\Plugin\Validation\Constraint; +use Symfony\Component\Routing\Exception\InvalidParameterException; +use Symfony\Component\Routing\Exception\MissingMandatoryParametersException; use Symfony\Component\Routing\Exception\RouteNotFoundException; use Symfony\Component\Validator\Constraint; use Symfony\Component\Validator\ConstraintValidatorInterface; @@ -50,9 +52,17 @@ class LinkNotExistingInternalConstraintValidator implements ConstraintValidatorI try { $url->toString(); } + // The following exceptions are all possible during URL generation, and + // should be considered as disallowed URLs. catch (RouteNotFoundException $e) { $allowed = FALSE; } + catch (InvalidParameterException $e) { + $allowed = FALSE; + } + catch (MissingMandatoryParametersException $e) { + $allowed = FALSE; + } if (!$allowed) { $this->context->addViolation($constraint->message, array('@uri' => $value->uri)); } diff --git a/core/modules/link/src/Tests/LinkFieldTest.php b/core/modules/link/src/Tests/LinkFieldTest.php index 494936a09..eada49430 100644 --- a/core/modules/link/src/Tests/LinkFieldTest.php +++ b/core/modules/link/src/Tests/LinkFieldTest.php @@ -129,8 +129,6 @@ class LinkFieldTest extends WebTestBase { 'entity:user/1' => '- Restricted access - (1)', // URI for an entity that doesn't exist, but with a valid ID. 'entity:user/999999' => 'entity:user/999999', - // URI for an entity that doesn't exist, with an invalid ID. - 'entity:user/invalid-parameter' => 'entity:user/invalid-parameter', ); // Define some invalid URLs. @@ -146,6 +144,8 @@ class LinkFieldTest extends WebTestBase { $invalid_internal_entries = array( 'no-leading-slash' => $validation_error_2, 'entity:non_existing_entity_type/yar' => $validation_error_1, + // URI for an entity that doesn't exist, with an invalid ID. + 'entity:user/invalid-parameter' => $validation_error_1, ); // Test external and internal URLs for 'link_type' = LinkItemInterface::LINK_GENERIC. diff --git a/core/modules/link/src/Tests/LinkItemTest.php b/core/modules/link/src/Tests/LinkItemTest.php index 382a464f1..1115983f9 100644 --- a/core/modules/link/src/Tests/LinkItemTest.php +++ b/core/modules/link/src/Tests/LinkItemTest.php @@ -10,7 +10,10 @@ namespace Drupal\link\Tests; use Drupal\Component\Utility\UrlHelper; use Drupal\Core\Field\FieldItemListInterface; use Drupal\Core\Field\FieldItemInterface; +use Drupal\field\Entity\FieldConfig; +use Drupal\field\Entity\FieldStorageConfig; use Drupal\field\Tests\FieldUnitTestBase; +use Drupal\link\LinkItemInterface; /** * Tests the new entity API for the link field type. @@ -29,17 +32,40 @@ class LinkItemTest extends FieldUnitTestBase { protected function setUp() { parent::setUp(); - // Create a link field for validation. - entity_create('field_storage_config', array( + // Create a generic, external, and internal link fields for validation. + FieldStorageConfig::create([ 'field_name' => 'field_test', 'entity_type' => 'entity_test', 'type' => 'link', - ))->save(); - entity_create('field_config', array( + ])->save(); + FieldConfig::create([ 'entity_type' => 'entity_test', 'field_name' => 'field_test', 'bundle' => 'entity_test', - ))->save(); + 'settings' => ['link_type' => LinkItemInterface::LINK_GENERIC], + ])->save(); + FieldStorageConfig::create([ + 'field_name' => 'field_test_external', + 'entity_type' => 'entity_test', + 'type' => 'link', + ])->save(); + FieldConfig::create([ + 'entity_type' => 'entity_test', + 'field_name' => 'field_test_external', + 'bundle' => 'entity_test', + 'settings' => ['link_type' => LinkItemInterface::LINK_EXTERNAL], + ])->save(); + FieldStorageConfig::create([ + 'field_name' => 'field_test_internal', + 'entity_type' => 'entity_test', + 'type' => 'link', + ])->save(); + FieldConfig::create([ + 'entity_type' => 'entity_test', + 'field_name' => 'field_test_internal', + 'bundle' => 'entity_test', + 'settings' => ['link_type' => LinkItemInterface::LINK_INTERNAL], + ])->save(); } /** @@ -130,9 +156,12 @@ class LinkItemTest extends FieldUnitTestBase { $entity->field_test[0] = NULL; $this->assertNull($entity->field_test[0]->getValue()); - // Test the generateSampleValue() method. + // Test the generateSampleValue() method for generic, external, and internal + // link types. $entity = entity_create('entity_test'); $entity->field_test->generateSampleItems(); + $entity->field_test_external->generateSampleItems(); + $entity->field_test_internal->generateSampleItems(); $this->entityValidateAndSave($entity); } diff --git a/core/modules/locale/src/Tests/LocaleConfigTranslationImportTest.php b/core/modules/locale/src/Tests/LocaleConfigTranslationImportTest.php index b0450e55b..dbe831099 100644 --- a/core/modules/locale/src/Tests/LocaleConfigTranslationImportTest.php +++ b/core/modules/locale/src/Tests/LocaleConfigTranslationImportTest.php @@ -78,6 +78,10 @@ class LocaleConfigTranslationImportTest extends WebTestBase { $this->container->get('module_installer')->install(['block', 'config_translation']); $this->resetAll(); + // The testing profile overrides locale.settings to disable translation + // import. Test that this override is in place. + $this->assertFalse($this->config('locale.settings')->get('translation.import_enabled'), 'Translations imports are disabled by default in the Testing profile.'); + $admin_user = $this->drupalCreateUser(array('administer modules', 'administer site configuration', 'administer languages', 'access administration pages', 'administer permissions', 'translate configuration')); $this->drupalLogin($admin_user); diff --git a/core/modules/locale/src/Tests/LocalePluralFormatTest.php b/core/modules/locale/src/Tests/LocalePluralFormatTest.php index ba5cf84a2..a8dfa453e 100644 --- a/core/modules/locale/src/Tests/LocalePluralFormatTest.php +++ b/core/modules/locale/src/Tests/LocalePluralFormatTest.php @@ -144,6 +144,66 @@ class LocalePluralFormatTest extends WebTestBase { } } + /** + * Tests plural editing of DateFormatter strings + */ + public function testPluralEditDateFormatter() { + + // Import some .po files with formulas to set up the environment. + // These will also add the languages to the system. + $this->importPoFile($this->getPoFileWithSimplePlural(), array( + 'langcode' => 'fr', + )); + + // Set French as the site default language. + $this->config('system.site')->set('default_langcode', 'fr')->save(); + + // Visit User Info page before updating translation strings. + $this->drupalGet('user'); + + // Member for time should be translated. + $this->assertText("seconde", "'Member for' text is translated."); + + $path = 'admin/config/regional/translate/'; + $search = array( + 'langcode' => 'fr', + // Limit to only translated strings to ensure that database ordering does + // not break the test. + 'translation' => 'translated', + ); + $this->drupalPostForm($path, $search, t('Filter')); + // Plural values for the langcode fr. + $this->assertText('@count seconde'); + $this->assertText('@count secondes'); + + // Inject a plural source string to the database. We need to use a specific + // langcode here because the language will be English by default and will + // not save our source string for performance optimization if we do not ask + // specifically for a language. + \Drupal::translation()->formatPlural(1, '1 second', '@count seconds', array(), array('langcode' => 'fr'))->render(); + $lid = db_query("SELECT lid FROM {locales_source} WHERE source = :source AND context = ''", array(':source' => "1 second" . LOCALE_PLURAL_DELIMITER . "@count seconds"))->fetchField(); + // Look up editing page for this plural string and check fields. + $search = array( + 'string' => '1 second', + 'langcode' => 'fr', + ); + $this->drupalPostForm('admin/config/regional/translate', $search, t('Filter')); + + // Save complete translations for the string in langcode fr. + $edit = array( + "strings[$lid][translations][0]" => '1 seconde updated', + "strings[$lid][translations][1]" => '@count secondes updated', + ); + $this->drupalPostForm($path, $edit, t('Save translations')); + + // User interface input for translating seconds should not be duplicated + $this->assertUniqueText('@count seconds', 'Interface translation input for @count seconds only appears once.'); + + // Member for time should be translated. + $this->drupalGet('user'); + $this->assertText("seconde", "'Member for' text is translated."); + } + /** * Tests plural editing and export functionality. */ @@ -308,6 +368,11 @@ msgid_plural "@count hours" msgstr[0] "@count heure" msgstr[1] "@count heures" +msgid "1 second" +msgid_plural "@count seconds" +msgstr[0] "@count seconde" +msgstr[1] "@count secondes" + msgid "Monday" msgstr "lundi" EOF; diff --git a/core/modules/menu_link_content/src/Tests/Migrate/MigrateMenuLinkContentStubTest.php b/core/modules/menu_link_content/src/Tests/Migrate/MigrateMenuLinkContentStubTest.php new file mode 100644 index 000000000..47e94d134 --- /dev/null +++ b/core/modules/menu_link_content/src/Tests/Migrate/MigrateMenuLinkContentStubTest.php @@ -0,0 +1,42 @@ +installEntitySchema('menu_link_content'); + } + + /** + * Tests creation of menu link content stubs. + */ + public function testStub() { + $this->performStubTest('menu_link_content'); + } + +} diff --git a/core/modules/migrate/src/MigrateExecutable.php b/core/modules/migrate/src/MigrateExecutable.php index 2749313d3..a3706239e 100644 --- a/core/modules/migrate/src/MigrateExecutable.php +++ b/core/modules/migrate/src/MigrateExecutable.php @@ -401,8 +401,8 @@ class MigrateExecutable implements MigrateExecutableInterface { $multiple = $multiple || $plugin->multiple(); } } - // No plugins means do not set. - if ($plugins) { + // No plugins or no value means do not set. + if ($plugins && !is_null($value)) { $row->setDestinationProperty($destination, $value); } // Reset the value. diff --git a/core/modules/migrate/src/Plugin/MigrateSourceInterface.php b/core/modules/migrate/src/Plugin/MigrateSourceInterface.php index efcf89861..3620e6777 100644 --- a/core/modules/migrate/src/Plugin/MigrateSourceInterface.php +++ b/core/modules/migrate/src/Plugin/MigrateSourceInterface.php @@ -44,10 +44,14 @@ interface MigrateSourceInterface extends \Countable, \Iterator, PluginInspection public function __toString(); /** - * Get the source ids. + * Defines the source fields uniquely identifying a source row. None of these + * fields should contain a NULL value - if necessary, use prepareRow() or + * hook_migrate_prepare_row() to rewrite NULL values to appropriate empty + * values (such as '' or 0). * * @return array - * The source ids. + * Array keyed by source field name, with values being a schema array + * describing the field (such as ['type' => 'string]). */ public function getIds(); diff --git a/core/modules/migrate/src/Plugin/migrate/destination/Entity.php b/core/modules/migrate/src/Plugin/migrate/destination/Entity.php index 64123d6d4..f7a6a1e93 100644 --- a/core/modules/migrate/src/Plugin/migrate/destination/Entity.php +++ b/core/modules/migrate/src/Plugin/migrate/destination/Entity.php @@ -136,19 +136,6 @@ abstract class Entity extends DestinationBase implements ContainerFactoryPluginI return $row->getDestinationProperty($this->getKey('id')); } - /** - * Process the stub values. - * - * @param \Drupal\migrate\Row $row - * The row of data. - */ - protected function processStubRow(Row $row) { - $bundle_key = $this->getKey('bundle'); - if ($bundle_key && empty($row->getDestinationProperty($bundle_key))) { - $row->setDestinationProperty($bundle_key, reset($this->bundles)); - } - } - /** * Returns a specific entity key. * diff --git a/core/modules/migrate/src/Plugin/migrate/destination/EntityContentBase.php b/core/modules/migrate/src/Plugin/migrate/destination/EntityContentBase.php index ae3030a11..e2320cd75 100644 --- a/core/modules/migrate/src/Plugin/migrate/destination/EntityContentBase.php +++ b/core/modules/migrate/src/Plugin/migrate/destination/EntityContentBase.php @@ -7,12 +7,17 @@ namespace Drupal\migrate\Plugin\migrate\destination; +use Drupal\Component\Utility\Random; +use Drupal\Component\Utility\Unicode; use Drupal\Core\Entity\ContentEntityInterface; use Drupal\Core\Entity\EntityInterface; use Drupal\Core\Entity\EntityManagerInterface; use Drupal\Core\Entity\EntityStorageInterface; +use Drupal\Core\Field\FieldTypePluginManagerInterface; use Drupal\Core\TypedData\TypedDataInterface; +use Drupal\link\LinkItemInterface; use Drupal\migrate\Entity\MigrationInterface; +use Drupal\migrate\MigrateException; use Drupal\migrate\Plugin\MigrateIdMapInterface; use Drupal\migrate\Row; use Symfony\Component\DependencyInjection\ContainerInterface; @@ -29,6 +34,13 @@ class EntityContentBase extends Entity { */ protected $entityManager; + /** + * Field type plugin manager. + * + * @var \Drupal\Core\Field\FieldTypePluginManagerInterface + */ + protected $fieldTypeManager; + /** * Constructs a content entity. * @@ -46,10 +58,13 @@ class EntityContentBase extends Entity { * The list of bundles this entity type has. * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager * The entity manager service. + * @param \Drupal\Core\Field\FieldTypePluginManagerInterface $field_type_manager + * The field type plugin manager service. */ - public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, EntityStorageInterface $storage, array $bundles, EntityManagerInterface $entity_manager) { + public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, EntityStorageInterface $storage, array $bundles, EntityManagerInterface $entity_manager, FieldTypePluginManagerInterface $field_type_manager) { parent::__construct($configuration, $plugin_id, $plugin_definition, $migration, $storage, $bundles); $this->entityManager = $entity_manager; + $this->fieldTypeManager = $field_type_manager; } /** @@ -64,7 +79,8 @@ class EntityContentBase extends Entity { $migration, $container->get('entity.manager')->getStorage($entity_type), array_keys($container->get('entity.manager')->getBundleInfo($entity_type)), - $container->get('entity.manager') + $container->get('entity.manager'), + $container->get('plugin.manager.field.field_type') ); } @@ -74,6 +90,9 @@ class EntityContentBase extends Entity { public function import(Row $row, array $old_destination_id_values = array()) { $this->rollbackAction = MigrateIdMapInterface::ROLLBACK_DELETE; $entity = $this->getEntity($row, $old_destination_id_values); + if (!$entity) { + throw new MigrateException('Unable to get entity'); + } return $this->save($entity, $old_destination_id_values); } @@ -132,4 +151,47 @@ class EntityContentBase extends Entity { $this->setRollbackAction($row->getIdMap()); } + /** + * Do as much population of the stub row as we can. + * + * @param \Drupal\migrate\Row $row + * The row of data. + */ + protected function processStubRow(Row $row) { + $bundle_key = $this->getKey('bundle'); + if ($bundle_key && empty($row->getDestinationProperty($bundle_key))) { + if (empty($this->bundles)) { + throw new MigrateException('Stubbing failed, no bundles available for entity type: ' . $this->storage->getEntityTypeId()); + } + $row->setDestinationProperty($bundle_key, reset($this->bundles)); + } + + // Populate any required fields not already populated. + $fields = $this->entityManager + ->getFieldDefinitions($this->storage->getEntityTypeId(), $bundle_key); + foreach ($fields as $field_name => $field_definition) { + if ($field_definition->isRequired() && is_null($row->getDestinationProperty($field_name))) { + // Use the configured default value for this specific field, if any. + if ($default_value = $field_definition->getDefaultValueLiteral()) { + $values[] = $default_value; + } + else { + // Otherwise, ask the field type to generate a sample value. + $field_type = $field_definition->getType(); + /** @var \Drupal\Core\Field\FieldItemInterface $field_type_class */ + $field_type_class = $this->fieldTypeManager + ->getPluginClass($field_definition->getType()); + $values = $field_type_class::generateSampleValue($field_definition); + if (is_null($values)) { + // Handle failure to generate a sample value. + throw new MigrateException('Stubbing failed, unable to generate value for field ' . $field_name); + break; + } + } + + $row->setDestinationProperty($field_name, $values); + } + } + } + } diff --git a/core/modules/migrate/src/Plugin/migrate/id_map/Sql.php b/core/modules/migrate/src/Plugin/migrate/id_map/Sql.php index 1e47d1ae4..7f9746406 100644 --- a/core/modules/migrate/src/Plugin/migrate/id_map/Sql.php +++ b/core/modules/migrate/src/Plugin/migrate/id_map/Sql.php @@ -287,6 +287,7 @@ class Sql extends PluginBase implements MigrateIdMapInterface, ContainerFactoryP foreach ($this->migration->getSourcePlugin()->getIds() as $id_definition) { $mapkey = 'sourceid' . $count++; $source_id_schema[$mapkey] = $this->getFieldSchema($id_definition); + $source_id_schema[$mapkey]['not null'] = TRUE; // With InnoDB, utf8mb4-based primary keys can't be over 191 characters. // Use ASCII-based primary keys instead. diff --git a/core/modules/migrate/src/Plugin/migrate/source/SourcePluginBase.php b/core/modules/migrate/src/Plugin/migrate/source/SourcePluginBase.php index a7e3e89b9..a222eee32 100644 --- a/core/modules/migrate/src/Plugin/migrate/source/SourcePluginBase.php +++ b/core/modules/migrate/src/Plugin/migrate/source/SourcePluginBase.php @@ -136,6 +136,7 @@ abstract class SourcePluginBase extends PluginBase implements MigrateSourceInter $this->skipCount = !empty($configuration['skip_count']); $this->cacheKey = !empty($configuration['cache_key']) ? !empty($configuration['cache_key']) : NULL; $this->trackChanges = !empty($configuration['track_changes']) ? $configuration['track_changes'] : FALSE; + $this->idMap = $this->migration->getIdMap(); // Pull out the current highwater mark if we have a highwater property. if ($this->highWaterProperty = $this->migration->get('highWaterProperty')) { @@ -256,7 +257,6 @@ abstract class SourcePluginBase extends PluginBase implements MigrateSourceInter * source records. */ public function rewind() { - $this->idMap = $this->migration->getIdMap(); $this->getIterator()->rewind(); $this->next(); } diff --git a/core/modules/migrate/src/Row.php b/core/modules/migrate/src/Row.php index e055c1d4c..4e788afec 100644 --- a/core/modules/migrate/src/Row.php +++ b/core/modules/migrate/src/Row.php @@ -73,7 +73,7 @@ class Row { * * @see getRawDestination() */ - protected $rawDestination; + protected $rawDestination = []; /** * TRUE when this row is a stub. @@ -222,6 +222,17 @@ class Row { NestedArray::setValue($this->destination, explode(static::PROPERTY_SEPARATOR, $property), $value, TRUE); } + /** + * Removes destination property. + * + * @param string $property + * The name of the destination property. + */ + public function removeDestinationProperty($property) { + unset($this->rawDestination[$property]); + NestedArray::unsetValue($this->destination, explode(static::PROPERTY_SEPARATOR, $property)); + } + /** * Returns the whole destination array. * diff --git a/core/modules/migrate/tests/src/Unit/MigrateSourceTest.php b/core/modules/migrate/tests/src/Unit/MigrateSourceTest.php index 051e9174e..502c9e7aa 100644 --- a/core/modules/migrate/tests/src/Unit/MigrateSourceTest.php +++ b/core/modules/migrate/tests/src/Unit/MigrateSourceTest.php @@ -9,8 +9,12 @@ namespace Drupal\Tests\migrate\Unit; use Drupal\Core\Cache\CacheBackendInterface; use Drupal\Core\DependencyInjection\ContainerBuilder; +use Drupal\Core\Extension\ModuleHandlerInterface; use Drupal\migrate\MigrateExecutable; +use Drupal\migrate\MigrateSkipRowException; +use Drupal\migrate\Plugin\migrate\source\SourcePluginBase; use Drupal\migrate\Plugin\MigrateIdMapInterface; +use Drupal\migrate\Row; /** * @coversDefaultClass \Drupal\migrate\Plugin\migrate\source\SourcePluginBase @@ -128,6 +132,7 @@ class MigrateSourceTest extends MigrateTestCase { } /** + * @covers ::__construct * @expectedException \Drupal\migrate\MigrateException */ public function testHighwaterTrackChangesIncompatible() { @@ -138,6 +143,8 @@ class MigrateSourceTest extends MigrateTestCase { /** * Test that the source count is correct. + * + * @covers ::count */ public function testCount() { // Mock the cache to validate set() receives appropriate arguments. @@ -221,6 +228,144 @@ class MigrateSourceTest extends MigrateTestCase { $this->assertTrue(is_a($source->current(), 'Drupal\migrate\Row'), 'Incoming row timestamp is greater than current highwater mark so we have a row.'); } + /** + * Test basic row preparation. + * + * @covers ::prepareRow + */ + public function testPrepareRow() { + $this->migrationConfiguration['id'] = 'test_migration'; + + // Get a new migration with an id. + $migration = $this->getMigration(); + $source = new StubSourcePlugin([], '', [], $migration); + $row = new Row([], []); + + $module_handler = $this->prophesize(ModuleHandlerInterface::class); + $module_handler->invokeAll('migrate_prepare_row', [$row, $source, $migration]) + ->willReturn([TRUE, TRUE]) + ->shouldBeCalled(); + $module_handler->invokeAll('migrate_' . $migration->id() . '_prepare_row', [$row, $source, $migration]) + ->willReturn([TRUE, TRUE]) + ->shouldBeCalled(); + $source->setModuleHandler($module_handler->reveal()); + + // Ensure we don't log this to the mapping table. + $this->idMap->expects($this->never()) + ->method('saveIdMapping'); + + $this->assertTrue($source->prepareRow($row)); + + // Track_changes... + $source = new StubSourcePlugin(['track_changes' => TRUE], '', [], $migration); + $row2 = $this->prophesize(Row::class); + $row2->rehash() + ->shouldBeCalled(); + $module_handler->invokeAll('migrate_prepare_row', [$row2, $source, $migration]) + ->willReturn([TRUE, TRUE]) + ->shouldBeCalled(); + $module_handler->invokeAll('migrate_' . $migration->id() . '_prepare_row', [$row2, $source, $migration]) + ->willReturn([TRUE, TRUE]) + ->shouldBeCalled(); + $source->setModuleHandler($module_handler->reveal()); + $this->assertTrue($source->prepareRow($row2->reveal())); + } + + /** + * Test that global prepare hooks can skip rows. + * + * @covers ::prepareRow + */ + public function testPrepareRowGlobalPrepareSkip() { + $this->migrationConfiguration['id'] = 'test_migration'; + + $migration = $this->getMigration(); + $source = new StubSourcePlugin([], '', [], $migration); + $row = new Row([], []); + + $module_handler = $this->prophesize(ModuleHandlerInterface::class); + // Return a failure from a prepare row hook. + $module_handler->invokeAll('migrate_prepare_row', [$row, $source, $migration]) + ->willReturn([TRUE, FALSE, TRUE]) + ->shouldBeCalled(); + $module_handler->invokeAll('migrate_' . $migration->id() . '_prepare_row', [$row, $source, $migration]) + ->willReturn([TRUE, TRUE]) + ->shouldBeCalled(); + $source->setModuleHandler($module_handler->reveal()); + + $this->idMap->expects($this->once()) + ->method('saveIdMapping') + ->with($row, [], MigrateIdMapInterface::STATUS_IGNORED); + + $this->assertFalse($source->prepareRow($row)); + } + + /** + * Test that migrate specific prepare hooks can skip rows. + * + * @covers ::prepareRow + */ + public function testPrepareRowMigratePrepareSkip() { + $this->migrationConfiguration['id'] = 'test_migration'; + + $migration = $this->getMigration(); + $source = new StubSourcePlugin([], '', [], $migration); + $row = new Row([], []); + + $module_handler = $this->prophesize(ModuleHandlerInterface::class); + // Return a failure from a prepare row hook. + $module_handler->invokeAll('migrate_prepare_row', [$row, $source, $migration]) + ->willReturn([TRUE, TRUE]) + ->shouldBeCalled(); + $module_handler->invokeAll('migrate_' . $migration->id() . '_prepare_row', [$row, $source, $migration]) + ->willReturn([TRUE, FALSE, TRUE]) + ->shouldBeCalled(); + $source->setModuleHandler($module_handler->reveal()); + + $this->idMap->expects($this->once()) + ->method('saveIdMapping') + ->with($row, [], MigrateIdMapInterface::STATUS_IGNORED); + + $this->assertFalse($source->prepareRow($row)); + } + + /** + * Test that a skip exception during prepare hooks correctly skips. + * + * @covers ::prepareRow + */ + public function testPrepareRowPrepareException() { + $this->migrationConfiguration['id'] = 'test_migration'; + + $migration = $this->getMigration(); + $source = new StubSourcePlugin([], '', [], $migration); + $row = new Row([], []); + + $module_handler = $this->prophesize(ModuleHandlerInterface::class); + // Return a failure from a prepare row hook. + $module_handler->invokeAll('migrate_prepare_row', [$row, $source, $migration]) + ->willReturn([TRUE, TRUE]) + ->shouldBeCalled(); + $module_handler->invokeAll('migrate_' . $migration->id() . '_prepare_row', [$row, $source, $migration]) + ->willThrow(new MigrateSkipRowException()) + ->shouldBeCalled(); + $source->setModuleHandler($module_handler->reveal()); + + // This will only be called on the first prepare because the second + // explicitly avoids it. + $this->idMap->expects($this->once()) + ->method('saveIdMapping') + ->with($row, [], MigrateIdMapInterface::STATUS_IGNORED); + $this->assertFalse($source->prepareRow($row)); + + // Throw an exception the second time that avoids mapping. + $e = new MigrateSkipRowException('', FALSE); + $module_handler->invokeAll('migrate_' . $migration->id() . '_prepare_row', [$row, $source, $migration]) + ->willThrow($e) + ->shouldBeCalled(); + $this->assertFalse($source->prepareRow($row)); + } + /** * Get a mock executable for the test. * @@ -239,3 +384,46 @@ class MigrateSourceTest extends MigrateTestCase { } } + +/** + * Stubbed source plugin for testing base class implementations. + */ +class StubSourcePlugin extends SourcePluginBase { + + /** + * Helper for setting internal module handler implementation. + * + * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler + */ + function setModuleHandler(ModuleHandlerInterface $module_handler) { + $this->moduleHandler = $module_handler; + } + + /** + * {@inheritdoc} + */ + public function fields() { + return []; + } + + /** + * {@inheritdoc} + */ + public function __toString() { + return ''; + } + + /** + * {@inheritdoc} + */ + public function getIds() { + return []; + } + + /** + * {@inheritdoc} + */ + protected function initializeIterator() { + return []; + } +} diff --git a/core/modules/migrate/tests/src/Unit/MigrateTestCase.php b/core/modules/migrate/tests/src/Unit/MigrateTestCase.php index 768e0fcc7..e3a253a59 100644 --- a/core/modules/migrate/tests/src/Unit/MigrateTestCase.php +++ b/core/modules/migrate/tests/src/Unit/MigrateTestCase.php @@ -19,6 +19,11 @@ abstract class MigrateTestCase extends UnitTestCase { protected $migrationConfiguration = []; + /** + * @var \Drupal\migrate\Plugin\MigrateIdMapInterface|\PHPUnit_Framework_MockObject_MockObject + */ + protected $idMap; + /** * Local store for mocking setStatus()/getStatus(). * diff --git a/core/modules/migrate/tests/src/Unit/Plugin/migrate/destination/EntityContentBaseTest.php b/core/modules/migrate/tests/src/Unit/Plugin/migrate/destination/EntityContentBaseTest.php new file mode 100644 index 000000000..220cbe84e --- /dev/null +++ b/core/modules/migrate/tests/src/Unit/Plugin/migrate/destination/EntityContentBaseTest.php @@ -0,0 +1,118 @@ +migration = $this->prophesize(MigrationInterface::class); + $this->storage = $this->prophesize(EntityStorageInterface::class); + $this->entityManager = $this->prophesize(EntityManagerInterface::class); + } + + /** + * Test basic entity save. + * + * @covers ::import + */ + public function testImport() { + $bundles = []; + $destination = new EntityTestDestination([], '', [], + $this->migration->reveal(), + $this->storage->reveal(), + $bundles, + $this->entityManager->reveal(), + $this->prophesize(FieldTypePluginManagerInterface::class)->reveal()); + $entity = $this->prophesize(ContentEntityInterface::class); + // Assert that save is called. + $entity->save() + ->shouldBeCalledTimes(1); + // Set an id for the entity + $entity->id() + ->willReturn(5); + $destination->setEntity($entity->reveal()); + // Ensure the id is saved entity id is returned from import. + $this->assertEquals([5], $destination->import(new Row([], []))); + // Assert that import set the rollback action. + $this->assertEquals(MigrateIdMapInterface::ROLLBACK_DELETE, $destination->rollbackAction()); + } + + /** + * Test row skipping when we can't get an entity to save. + * + * @covers ::import + * @expectedException \Drupal\migrate\MigrateException + * @expectedExceptionMessage Unable to get entity + */ + public function testImportEntityLoadFailure() { + $bundles = []; + $destination = new EntityTestDestination([], '', [], + $this->migration->reveal(), + $this->storage->reveal(), + $bundles, + $this->entityManager->reveal(), + $this->prophesize(FieldTypePluginManagerInterface::class)->reveal()); + $destination->setEntity(FALSE); + $destination->import(new Row([], [])); + } + +} + +/** + * Stub class for testing EntityContentBase methods. + * + * We want to test things without testing the base class implementations. + */ +class EntityTestDestination extends EntityContentBase { + + private $entity = NULL; + + public function setEntity($entity) { + $this->entity = $entity; + } + + protected function getEntity(Row $row, array $old_destination_id_values) { + return $this->entity; + } +} diff --git a/core/modules/migrate/tests/src/Unit/destination/EntityRevisionTest.php b/core/modules/migrate/tests/src/Unit/destination/EntityRevisionTest.php index d5f71a072..2db5d9e8e 100644 --- a/core/modules/migrate/tests/src/Unit/destination/EntityRevisionTest.php +++ b/core/modules/migrate/tests/src/Unit/destination/EntityRevisionTest.php @@ -36,6 +36,11 @@ class EntityRevisionTest extends UnitTestCase { */ protected $entityManager; + /** + * @var \Drupal\Core\Field\FieldTypePluginManagerInterface + */ + protected $fieldTypeManager; + public function setUp() { parent::setUp(); @@ -43,6 +48,7 @@ class EntityRevisionTest extends UnitTestCase { $this->migration = $this->prophesize('\Drupal\migrate\Entity\MigrationInterface'); $this->storage = $this->prophesize('\Drupal\Core\Entity\EntityStorageInterface'); $this->entityManager = $this->prophesize('\Drupal\Core\Entity\EntityManagerInterface'); + $this->fieldTypeManager = $this->prophesize('\Drupal\Core\Field\FieldTypePluginManagerInterface'); } /** @@ -183,7 +189,9 @@ class EntityRevisionTest extends UnitTestCase { $this->migration->reveal(), $this->storage->reveal(), [], - $this->entityManager->reveal()); + $this->entityManager->reveal(), + $this->fieldTypeManager->reveal() + ); } } diff --git a/core/modules/migrate_drupal/src/Tests/StubTestTrait.php b/core/modules/migrate_drupal/src/Tests/StubTestTrait.php new file mode 100644 index 000000000..1e028bfff --- /dev/null +++ b/core/modules/migrate_drupal/src/Tests/StubTestTrait.php @@ -0,0 +1,80 @@ +createStub($entity_type_id); + $this->assertTrue($entity_id, 'Stub successfully created'); + if ($entity_id) { + $violations = $this->validateStub($entity_type_id, $entity_id); + if (!$this->assertIdentical(count($violations), 0, 'Stub is a valid entity')) { + foreach ($violations as $violation) { + $this->fail((string) $violation->getMessage()); + } + } + } + } + + /** + * Create a stub of the given entity type. + * + * @param string $entity_type_id + * The entity type we are stubbing. + * + * @return int + * ID of the created entity. + */ + protected function createStub($entity_type_id) { + // Create a dummy migration to pass to the destination plugin. + $config = [ + 'id' => 'dummy', + 'migration_tags' => ['Stub test'], + 'source' => ['plugin' => 'empty'], + 'process' => [], + 'destination' => ['plugin' => 'entity:' . $entity_type_id], + ]; + $migration = Migration::create($config); + $destination_plugin = $migration->getDestinationPlugin(TRUE); + $stub_row = new Row([], [], TRUE); + $destination_ids = $destination_plugin->import($stub_row); + return reset($destination_ids); + } + + /** + * Perform validation on a stub entity. + * + * @param string $entity_type_id + * The entity type we are stubbing. + * @param string $entity_id + * ID of the stubbed entity to validate. + * + * @return \Drupal\Core\Entity\EntityConstraintViolationListInterface + * List of constraint violations identified. + */ + protected function validateStub($entity_type_id, $entity_id) { + $controller = \Drupal::entityManager()->getStorage($entity_type_id); + /** @var \Drupal\Core\Entity\ContentEntityInterface $stub_entity */ + $stub_entity = $controller->load($entity_id); + return $stub_entity->validate(); + } + +} diff --git a/core/modules/migrate_drupal/tests/fixtures/drupal7.php b/core/modules/migrate_drupal/tests/fixtures/drupal7.php index c1480c186..78651e4be 100644 --- a/core/modules/migrate_drupal/tests/fixtures/drupal7.php +++ b/core/modules/migrate_drupal/tests/fixtures/drupal7.php @@ -41539,10 +41539,30 @@ $connection->insert('variable') 'name' => 'tracker_batch_size', 'value' => 'i:999;', )) +->values(array( + 'name' => 'update_check_frequency', + 'value' => 'i:1;', +)) +->values(array( + 'name' => 'update_fetch_url', + 'value' => 's:23:"http://127.0.0.1/update";', +)) ->values(array( 'name' => 'update_last_check', 'value' => 'i:1444944973;', )) +->values(array( + 'name' => 'update_max_fetch_attempts', + 'value' => 'i:3;', +)) +->values(array( + 'name' => 'update_notification_threshold', + 'value' => 's:3:"all";', +)) +->values(array( + 'name' => 'update_notify_emails', + 'value' => 'a:1:{i:0;s:19:"webmaster@127.0.0.1";}', +)) ->values(array( 'name' => 'user_admin_role', 'value' => 's:1:"3";', diff --git a/core/modules/node/node.module b/core/modules/node/node.module index 896c4f888..a54fc0a2c 100644 --- a/core/modules/node/node.module +++ b/core/modules/node/node.module @@ -1064,6 +1064,14 @@ function node_query_node_access_alter(AlterableInterface $query) { // Update the query for the given storage method. \Drupal::service('node.grant_storage')->alterQuery($query, $tables, $op, $account, $base_table); + + // Bubble the 'user.node_grants:$op' cache context to the current render + // context. + $renderer = \Drupal::service('renderer'); + if ($renderer->hasRenderContext()) { + $build = ['#cache' => ['contexts' => ['user.node_grants:' . $op]]]; + $renderer->render($build); + } } /** diff --git a/core/modules/node/node.routing.yml b/core/modules/node/node.routing.yml index 187e8521a..7c942a2c1 100644 --- a/core/modules/node/node.routing.yml +++ b/core/modules/node/node.routing.yml @@ -47,6 +47,7 @@ entity.node.version_history: _controller: '\Drupal\node\Controller\NodeController::revisionOverview' requirements: _access_node_revision: 'view' + node: \d+ options: _node_operation_route: TRUE @@ -57,6 +58,7 @@ entity.node.revision: _title_callback: '\Drupal\node\Controller\NodeController::revisionPageTitle' requirements: _access_node_revision: 'view' + node: \d+ node.revision_revert_confirm: path: '/node/{node}/revisions/{node_revision}/revert' @@ -65,6 +67,7 @@ node.revision_revert_confirm: _title: 'Revert to earlier revision' requirements: _access_node_revision: 'update' + node: \d+ options: _node_operation_route: TRUE @@ -75,6 +78,7 @@ node.revision_revert_translation_confirm: _title: 'Revert to earlier revision of a translation' requirements: _access_node_revision: 'update' + node: \d+ options: _node_operation_route: TRUE @@ -85,6 +89,7 @@ node.revision_delete_confirm: _title: 'Delete earlier revision' requirements: _access_node_revision: 'delete' + node: \d+ options: _node_operation_route: TRUE diff --git a/core/modules/node/src/Controller/NodeController.php b/core/modules/node/src/Controller/NodeController.php index a43bb53a8..3c534f2ea 100644 --- a/core/modules/node/src/Controller/NodeController.php +++ b/core/modules/node/src/Controller/NodeController.php @@ -187,7 +187,7 @@ class NodeController extends ControllerBase implements ContainerInjectionInterfa if ($revision->hasTranslation($langcode) && $revision->getTranslation($langcode)->isRevisionTranslationAffected()) { $username = [ '#theme' => 'username', - '#account' => $revision->uid->entity, + '#account' => $revision->getRevisionAuthor(), ]; // Use revision link to link to revisions that are not active. diff --git a/core/modules/node/src/Entity/NodeRouteProvider.php b/core/modules/node/src/Entity/NodeRouteProvider.php index fa1c02d7f..7bfc9820d 100644 --- a/core/modules/node/src/Entity/NodeRouteProvider.php +++ b/core/modules/node/src/Entity/NodeRouteProvider.php @@ -27,6 +27,7 @@ class NodeRouteProvider implements EntityRouteProviderInterface { '_controller' => '\Drupal\node\Controller\NodeViewController::view', '_title_callback' => '\Drupal\node\Controller\NodeViewController::title', ]) + ->setRequirement('node', '\d+') ->setRequirement('_entity_access', 'node.view'); $route_collection->add('entity.node.canonical', $route); @@ -35,6 +36,7 @@ class NodeRouteProvider implements EntityRouteProviderInterface { '_entity_form' => 'node.delete', '_title' => 'Delete', ]) + ->setRequirement('node', '\d+') ->setRequirement('_entity_access', 'node.delete') ->setOption('_node_operation_route', TRUE); $route_collection->add('entity.node.delete_form', $route); @@ -42,6 +44,7 @@ class NodeRouteProvider implements EntityRouteProviderInterface { $route = (new Route('/node/{node}/edit')) ->setDefault('_entity_form', 'node.edit') ->setRequirement('_entity_access', 'node.update') + ->setRequirement('node', '\d+') ->setOption('_node_operation_route', TRUE); $route_collection->add('entity.node.edit_form', $route); diff --git a/core/modules/node/src/Plugin/EntityReferenceSelection/NodeSelection.php b/core/modules/node/src/Plugin/EntityReferenceSelection/NodeSelection.php index 276c795b6..a42fa60ec 100644 --- a/core/modules/node/src/Plugin/EntityReferenceSelection/NodeSelection.php +++ b/core/modules/node/src/Plugin/EntityReferenceSelection/NodeSelection.php @@ -48,4 +48,32 @@ class NodeSelection extends DefaultSelection { return $query; } + /** + * {@inheritdoc} + */ + public function createNewEntity($entity_type_id, $bundle, $label, $uid) { + $node = parent::createNewEntity($entity_type_id, $bundle, $label, $uid); + + // In order to create a referenceable node, it needs to published. + /** @var \Drupal\node\NodeInterface $node */ + $node->setPublished(TRUE); + + return $node; + } + + /** + * {@inheritdoc} + */ + public function validateReferenceableNewEntities(array $entities) { + $entities = parent::validateReferenceableNewEntities($entities); + // Mirror the conditions checked in buildEntityQuery(). + if (!$this->currentUser->hasPermission('bypass node access') && !count($this->moduleHandler->getImplementations('node_grants'))) { + $entities = array_filter($entities, function ($node) { + /** @var \Drupal\node\NodeInterface $node */ + return $node->isPublished(); + }); + } + return $entities; + } + } diff --git a/core/modules/node/src/Plugin/views/wizard/Node.php b/core/modules/node/src/Plugin/views/wizard/Node.php index f7a43ecf8..5f560c568 100644 --- a/core/modules/node/src/Plugin/views/wizard/Node.php +++ b/core/modules/node/src/Plugin/views/wizard/Node.php @@ -199,7 +199,9 @@ class Node extends WizardPluginBase { protected function buildFilters(&$form, FormStateInterface $form_state) { parent::buildFilters($form, $form_state); - $selected_bundle = static::getSelected($form_state, array('show', 'type'), 'all', $form['displays']['show']['type']); + if (isset($form['displays']['show']['type'])) { + $selected_bundle = static::getSelected($form_state, array('show', 'type'), 'all', $form['displays']['show']['type']); + } // Add the "tagged with" filter to the view. diff --git a/core/modules/node/src/Tests/Migrate/MigrateNodeStubTest.php b/core/modules/node/src/Tests/Migrate/MigrateNodeStubTest.php new file mode 100644 index 000000000..22d140bf3 --- /dev/null +++ b/core/modules/node/src/Tests/Migrate/MigrateNodeStubTest.php @@ -0,0 +1,48 @@ +installEntitySchema('node'); + // Need at least one node type present. + NodeType::create([ + 'type' => 'testnodetype', + 'name' => 'Test node type', + ])->save(); + } + + /** + * Tests creation of node stubs. + */ + public function testStub() { + $this->performStubTest('node'); + } + +} diff --git a/core/modules/node/src/Tests/NodeAccessAutoBubblingTest.php b/core/modules/node/src/Tests/NodeAccessAutoBubblingTest.php new file mode 100644 index 000000000..908567239 --- /dev/null +++ b/core/modules/node/src/Tests/NodeAccessAutoBubblingTest.php @@ -0,0 +1,72 @@ +drupalCreateNode(); + $this->drupalCreateNode(); + $this->drupalCreateNode(); + $this->drupalCreateNode(); + } + + /** + * Tests that the node grants cache context is auto-added, only when needed. + * + * @see node_query_node_access_alter() + */ + public function testNodeAccessCacheabilitySafeguard() { + $this->dumpHeaders = TRUE; + + // The node grants cache context should be added automatically. + $this->drupalGet(new Url('node_access_test_auto_bubbling')); + $this->assertCacheContext('user.node_grants:view'); + + // The root user has the 'bypass node access' permission, which means the + // node grants cache context is not necessary. + $this->drupalLogin($this->rootUser); + $this->drupalGet(new Url('node_access_test_auto_bubbling')); + $this->assertNoCacheContext('user.node_grants:view'); + $this->drupalLogout(); + + // Uninstall the module with the only hook_node_grants() implementation. + $this->container->get('module_installer')->uninstall(['node_access_test']); + $this->rebuildContainer(); + + // Because there are no node grants defined, there also is no need for the + // node grants cache context to be bubbled. + $this->drupalGet(new Url('node_access_test_auto_bubbling')); + $this->assertNoCacheContext('user.node_grants:view'); + } + +} diff --git a/core/modules/node/src/Tests/NodeRevisionsTest.php b/core/modules/node/src/Tests/NodeRevisionsTest.php index 2e3114576..45fa06d58 100644 --- a/core/modules/node/src/Tests/NodeRevisionsTest.php +++ b/core/modules/node/src/Tests/NodeRevisionsTest.php @@ -21,7 +21,19 @@ use Drupal\node\NodeInterface; * @group node */ class NodeRevisionsTest extends NodeTestBase { + + /** + * An array of node revisions. + * + * @var \Drupal\node\NodeInterface[] + */ protected $nodes; + + /** + * Revision log messages. + * + * @var array + */ protected $revisionLogs; /** @@ -93,6 +105,16 @@ class NodeRevisionsTest extends NodeTestBase { ); $node->untranslatable_string_field->value = $this->randomString(); $node->setNewRevision(); + + // Edit the 2nd revision with a different user. + if ($i == 1) { + $editor = $this->drupalCreateUser(); + $node->setRevisionAuthorId($editor->id()); + } + else { + $node->setRevisionAuthorId($web_user->id()); + } + $node->save(); $node = Node::load($node->id()); // Make sure we get revision information. @@ -123,6 +145,11 @@ class NodeRevisionsTest extends NodeTestBase { foreach ($logs as $revision_log) { $this->assertText($revision_log, 'Revision log message found.'); } + // Original author, and editor names should appear on revisions overview. + $web_user = $nodes[0]->revision_uid->entity; + $this->assertText(t('by @name', ['@name' => $web_user->getAccountName()])); + $editor = $nodes[2]->revision_uid->entity; + $this->assertText(t('by @name', ['@name' => $editor->getAccountName()])); // Confirm that this is the default revision. $this->assertTrue($node->isDefaultRevision(), 'Third node revision is the default one.'); diff --git a/core/modules/node/src/Tests/NodeTranslationUITest.php b/core/modules/node/src/Tests/NodeTranslationUITest.php index b42eb76b4..0bb81c071 100644 --- a/core/modules/node/src/Tests/NodeTranslationUITest.php +++ b/core/modules/node/src/Tests/NodeTranslationUITest.php @@ -94,7 +94,8 @@ class NodeTranslationUITest extends ContentTranslationUITestBase { $language = ConfigurableLanguage::load($langcode); $values[$langcode] = array('title' => array(array('value' => $this->randomMachineName()))); - $add_url = Url::fromRoute('content_translation.translation_add_' . $entity->getEntityTypeId(), [ + $entity_type_id = $entity->getEntityTypeId(); + $add_url = Url::fromRoute("entity.$entity_type_id.content_translation_add", [ $entity->getEntityTypeId() => $entity->id(), 'source' => $default_langcode, 'target' => $langcode diff --git a/core/modules/node/src/Tests/NodeTypeTest.php b/core/modules/node/src/Tests/NodeTypeTest.php index a8fa54d98..07117f709 100644 --- a/core/modules/node/src/Tests/NodeTypeTest.php +++ b/core/modules/node/src/Tests/NodeTypeTest.php @@ -218,6 +218,9 @@ class NodeTypeTest extends NodeTestBase { * Tests for when there are no content types defined. */ public function testNodeTypeNoContentType() { + /** @var \Drupal\Core\Entity\EntityTypeBundleInfoInterface $bundle_info */ + $bundle_info = \Drupal::service('entity_type.bundle.info'); + $this->assertEqual(2, count($bundle_info->getBundleInfo('node')), 'The bundle information service has 2 bundles for the Node entity type.'); $web_user = $this->drupalCreateUser(['administer content types']); $this->drupalLogin($web_user); @@ -231,6 +234,9 @@ class NodeTypeTest extends NodeTestBase { $this->assertRaw(t('No content types available. Add content type.', [ ':link' => Url::fromRoute('node.type_add')->toString() ]), 'Empty text when there are no content types in the system is correct.'); + + $bundle_info->clearCachedBundles(); + $this->assertEqual(0, count($bundle_info->getBundleInfo('node')), 'The bundle information service has 0 bundles for the Node entity type.'); } } diff --git a/core/modules/node/tests/node_access_test_auto_bubbling/node_access_test_auto_bubbling.info.yml b/core/modules/node/tests/node_access_test_auto_bubbling/node_access_test_auto_bubbling.info.yml new file mode 100644 index 000000000..49a990d75 --- /dev/null +++ b/core/modules/node/tests/node_access_test_auto_bubbling/node_access_test_auto_bubbling.info.yml @@ -0,0 +1,6 @@ +name: 'Node module access automatic cacheability bubbling tests' +type: module +description: 'Support module for node permission testing. Provides a route which does a node access query without explicitly specifying the corresponding cache context.' +package: Testing +version: VERSION +core: 8.x diff --git a/core/modules/node/tests/node_access_test_auto_bubbling/node_access_test_auto_bubbling.routing.yml b/core/modules/node/tests/node_access_test_auto_bubbling/node_access_test_auto_bubbling.routing.yml new file mode 100644 index 000000000..34fd420b3 --- /dev/null +++ b/core/modules/node/tests/node_access_test_auto_bubbling/node_access_test_auto_bubbling.routing.yml @@ -0,0 +1,6 @@ +node_access_test_auto_bubbling: + path: '/node_access_test_auto_bubbling' + defaults: + _controller: '\Drupal\node_access_test_auto_bubbling\Controller\NodeAccessTestAutoBubblingController::latest' + requirements: + _access: 'TRUE' diff --git a/core/modules/node/tests/node_access_test_auto_bubbling/src/Controller/NodeAccessTestAutoBubblingController.php b/core/modules/node/tests/node_access_test_auto_bubbling/src/Controller/NodeAccessTestAutoBubblingController.php new file mode 100644 index 000000000..1fcaa4b03 --- /dev/null +++ b/core/modules/node/tests/node_access_test_auto_bubbling/src/Controller/NodeAccessTestAutoBubblingController.php @@ -0,0 +1,61 @@ +entityQuery = $entity_query; + } + + /** + * {@inheritdoc} + */ + public static function create(ContainerInterface $container) { + return new static( + $container->get('entity.query') + ); + } + + /** + * Lists the three latest published node IDs. + * + * @return array + * A render array. + */ + public function latest() { + $nids = $this->entityQuery->get('node') + ->condition('status', NODE_PUBLISHED) + ->sort('created', 'DESC') + ->range(0, 3) + ->execute(); + return ['#markup' => $this->t('The three latest nodes are: @nids.', ['@nids' => implode(', ', $nids)])]; + } + +} diff --git a/core/modules/path/src/Form/PathFormBase.php b/core/modules/path/src/Form/PathFormBase.php index 8c8484167..95d261ac7 100644 --- a/core/modules/path/src/Form/PathFormBase.php +++ b/core/modules/path/src/Form/PathFormBase.php @@ -180,8 +180,22 @@ abstract class PathFormBase extends FormBase { $langcode = $form_state->getValue('langcode', LanguageInterface::LANGCODE_NOT_SPECIFIED); if ($this->aliasStorage->aliasExists($alias, $langcode, $this->path['source'])) { - $form_state->setErrorByName('alias', t('The alias %alias is already in use in this language.', array('%alias' => $alias))); + $stored_alias = $this->aliasStorage->load(['alias' => $alias, 'langcode' => $langcode]); + if ($stored_alias['alias'] !== $alias) { + // The alias already exists with different capitalization as the default + // implementation of AliasStorageInterface::aliasExists is + // case-insensitive. + $form_state->setErrorByName('alias', t('The alias %alias could not be added because it is already in use in this language with different capitalization: %stored_alias.', [ + '%alias' => $alias, + '%stored_alias' => $stored_alias['alias'], + ])); + } + else { + $form_state->setErrorByName('alias', t('The alias %alias is already in use in this language.', ['%alias' => $alias])); + } } + + if (!$this->pathValidator->isValid(trim($source, '/'))) { $form_state->setErrorByName('source', t("The path '@link_path' is either invalid or you do not have access to it.", array('@link_path' => $source))); } diff --git a/core/modules/path/src/Tests/PathAliasTest.php b/core/modules/path/src/Tests/PathAliasTest.php index 651c11f9e..7e85cda03 100644 --- a/core/modules/path/src/Tests/PathAliasTest.php +++ b/core/modules/path/src/Tests/PathAliasTest.php @@ -7,7 +7,9 @@ namespace Drupal\path\Tests; +use Drupal\Component\Utility\Unicode; use Drupal\Core\Cache\Cache; +use Drupal\Core\Database\Database; /** * Add, edit, delete, and change alias and verify its consistency in the @@ -75,25 +77,45 @@ class PathAliasTest extends PathTestBase { // Create alias. $edit = array(); $edit['source'] = '/node/' . $node1->id(); - $edit['alias'] = '/' . $this->randomMachineName(8); + $edit['alias'] = '/' . $this->getRandomGenerator()->word(8); $this->drupalPostForm('admin/config/search/path/add', $edit, t('Save')); // Confirm that the alias works. $this->drupalGet($edit['alias']); $this->assertText($node1->label(), 'Alias works.'); $this->assertResponse(200); + // Confirm that the alias works in a case-insensitive way. + $this->assertTrue(ctype_lower(ltrim($edit['alias'], '/'))); + $this->drupalGet($edit['alias']); + $this->assertText($node1->label(), 'Alias works lower case.'); + $this->assertResponse(200); + $this->drupalGet(Unicode::strtoupper($edit['alias'])); + $this->assertText($node1->label(), 'Alias works upper case.'); + $this->assertResponse(200); // Change alias to one containing "exotic" characters. $pid = $this->getPID($edit['alias']); $previous = $edit['alias']; - $edit['alias'] = "/- ._~!$'\"()*@[]?&+%#,;=:" . // "Special" ASCII characters. - "%23%25%26%2B%2F%3F" . // Characters that look like a percent-escaped string. - "éøïвβ中國書۞"; // Characters from various non-ASCII alphabets. + $edit['alias'] = '/alias' . // Lower-case letters. + // "Special" ASCII characters. + "- ._~!$'\"()*@[]?&+%#,;=:" . + // Characters that look like a percent-escaped string. + "%23%25%26%2B%2F%3F" . + // Characters from various non-ASCII alphabets. + "中國書۞"; + $connection = Database::getConnection(); + if ($connection->databaseType() != 'sqlite') { + // When using LIKE for case-insensitivity, the SQLite driver is + // currently unable to find the upper-case versions of non-ASCII + // characters. + // @todo fix this in https://www.drupal.org/node/2607432 + $edit['alias'] .= "ïвβéø"; + } $this->drupalPostForm('admin/config/search/path/edit/' . $pid, $edit, t('Save')); // Confirm that the alias works. - $this->drupalGet($edit['alias']); + $this->drupalGet(Unicode::strtoupper($edit['alias'])); $this->assertText($node1->label(), 'Changed alias works.'); $this->assertResponse(200); @@ -114,6 +136,14 @@ class PathAliasTest extends PathTestBase { // Confirm no duplicate was created. $this->assertRaw(t('The alias %alias is already in use in this language.', array('%alias' => $edit['alias'])), 'Attempt to move alias was rejected.'); + $edit_upper = $edit; + $edit_upper['alias'] = Unicode::strtoupper($edit['alias']); + $this->drupalPostForm('admin/config/search/path/add', $edit_upper, t('Save')); + $this->assertRaw(t('The alias %alias could not be added because it is already in use in this language with different capitalization: %stored_alias.', [ + '%alias' => $edit_upper['alias'], + '%stored_alias' => $edit['alias'], + ]), 'Attempt to move upper-case alias was rejected.'); + // Delete alias. $this->drupalPostForm('admin/config/search/path/edit/' . $pid, array(), t('Delete')); $this->drupalPostForm(NULL, array(), t('Confirm')); @@ -217,15 +247,27 @@ class PathAliasTest extends PathTestBase { $elements = $this->xpath("//link[contains(@rel, 'shortlink') and contains(@href, 'node/" . $node1->id() . "')]"); $this->assertTrue(!empty($elements), 'Page contains shortlink URL.'); - // Change alias to one containing "exotic" characters. $previous = $edit['path[0][alias]']; - $edit['path[0][alias]'] = "/- ._~!$'\"()*@[]?&+%#,;=:" . // "Special" ASCII characters. - "%23%25%26%2B%2F%3F" . // Characters that look like a percent-escaped string. - "éøïвβ中國書۞"; // Characters from various non-ASCII alphabets. + // Change alias to one containing "exotic" characters. + $edit['path[0][alias]'] = '/alias' . // Lower-case letters. + // "Special" ASCII characters. + "- ._~!$'\"()*@[]?&+%#,;=:" . + // Characters that look like a percent-escaped string. + "%23%25%26%2B%2F%3F" . + // Characters from various non-ASCII alphabets. + "中國書۞"; + $connection = Database::getConnection(); + if ($connection->databaseType() != 'sqlite') { + // When using LIKE for case-insensitivity, the SQLite driver is + // currently unable to find the upper-case versions of non-ASCII + // characters. + // @todo fix this in https://www.drupal.org/node/2607432 + $edit['path[0][alias]'] .= "ïвβéø"; + } $this->drupalPostForm('node/' . $node1->id() . '/edit', $edit, t('Save')); // Confirm that the alias works. - $this->drupalGet($edit['path[0][alias]']); + $this->drupalGet(Unicode::strtoupper($edit['path[0][alias]'])); $this->assertText($node1->label(), 'Changed alias works.'); $this->assertResponse(200); diff --git a/core/modules/rest/src/Plugin/views/display/RestExport.php b/core/modules/rest/src/Plugin/views/display/RestExport.php index 427becfac..68bd407cd 100644 --- a/core/modules/rest/src/Plugin/views/display/RestExport.php +++ b/core/modules/rest/src/Plugin/views/display/RestExport.php @@ -151,7 +151,7 @@ class RestExport extends PathPluginBase implements ResponseDisplayPluginInterfac * {@inheritdoc} */ public function usesExposed() { - return FALSE; + return TRUE; } /** diff --git a/core/modules/rest/src/Tests/Views/StyleSerializerTest.php b/core/modules/rest/src/Tests/Views/StyleSerializerTest.php index 5f378ee2f..e3b8d263c 100644 --- a/core/modules/rest/src/Tests/Views/StyleSerializerTest.php +++ b/core/modules/rest/src/Tests/Views/StyleSerializerTest.php @@ -50,7 +50,7 @@ class StyleSerializerTest extends PluginTestBase { * * @var array */ - public static $testViews = array('test_serializer_display_field', 'test_serializer_display_entity', 'test_serializer_node_display_field'); + public static $testViews = array('test_serializer_display_field', 'test_serializer_display_entity', 'test_serializer_node_display_field', 'test_serializer_node_exposed_filter'); /** * A user with administrative privileges to look at test entity and configure views. @@ -609,4 +609,64 @@ class StyleSerializerTest extends PluginTestBase { } $this->assertEqual($serializer->serialize($expected, 'json'), (string) $renderer->renderRoot($build)); } + + /** + * Tests the exposed filter works. + * + * There is an exposed filter on the title field which takes a title query + * parameter. This is set to filter nodes by those whose title starts with + * the value provided. + */ + public function testRestViewExposedFilter() { + $this->drupalCreateContentType(array('type' => 'page')); + $node0 = $this->drupalCreateNode(array('title' => 'Node 1')); + $node1 = $this->drupalCreateNode(array('title' => 'Node 11')); + $node2 = $this->drupalCreateNode(array('title' => 'Node 111')); + + // Test that no filter brings back all three nodes. + $result = $this->drupalGetJSON('test/serialize/node-exposed-filter'); + + $expected = array( + 0 => array( + 'nid' => $node0->id(), + 'body' => $node0->body->processed, + ), + 1 => array( + 'nid' => $node1->id(), + 'body' => $node1->body->processed, + ), + 2 => array( + 'nid' => $node2->id(), + 'body' => $node2->body->processed, + ), + ); + + $this->assertEqual($result, $expected, 'Querying a view with no exposed filter returns all nodes.'); + + // Test that title starts with 'Node 11' query finds 2 of the 3 nodes. + $result = $this->drupalGetJSON('test/serialize/node-exposed-filter', ['query' => ['title' => 'Node 11']]); + + $expected = array( + 0 => array( + 'nid' => $node1->id(), + 'body' => $node1->body->processed, + ), + 1 => array( + 'nid' => $node2->id(), + 'body' => $node2->body->processed, + ), + ); + + $cache_contexts = [ + 'languages:language_content', + 'languages:language_interface', + 'theme', + 'request_format', + 'user.node_grants:view', + 'url', + ]; + + $this->assertEqual($result, $expected, 'Querying a view with a starts with exposed filter on the title returns nodes whose title starts with value provided.'); + $this->assertCacheContexts($cache_contexts); + } } diff --git a/core/modules/rest/tests/modules/rest_test_views/test_views/views.view.test_serializer_node_exposed_filter.yml b/core/modules/rest/tests/modules/rest_test_views/test_views/views.view.test_serializer_node_exposed_filter.yml new file mode 100644 index 000000000..b5af1e96b --- /dev/null +++ b/core/modules/rest/tests/modules/rest_test_views/test_views/views.view.test_serializer_node_exposed_filter.yml @@ -0,0 +1,172 @@ +langcode: en +status: true +dependencies: + config: + - field.storage.node.body + module: + - field + - node + - rest + - rest_test_views + - user +id: test_serializer_node_exposed_filter +label: 'Test serializer display for exposed filters' +module: rest_test_views +description: '' +tag: '' +base_table: node_field_data +base_field: nid +core: 8.x +display: + default: + display_plugin: default + id: default + display_title: Master + position: null + display_options: + access: + type: perm + options: + perm: 'access content' + cache: + type: tag + query: + type: views_query + exposed_form: + type: basic + style: + type: serializer + row: + type: data_field + fields: + nid: + id: nid + table: node + field: nid + plugin_id: field + entity_type: node + entity_field: nid + body: + id: body + table: node__body + field: body + relationship: none + group_type: group + admin_label: '' + label: Body + exclude: false + alter: + alter_text: false + text: '' + make_link: false + path: '' + absolute: false + external: false + replace_spaces: false + path_case: none + trim_whitespace: false + alt: '' + rel: '' + link_class: '' + prefix: '' + suffix: '' + target: '' + nl2br: false + max_length: 0 + word_boundary: true + ellipsis: true + more_link: false + more_link_text: '' + more_link_path: '' + strip_tags: false + trim: false + preserve_tags: '' + html: false + element_type: '' + element_class: '' + element_label_type: '' + element_label_class: '' + element_label_colon: true + element_wrapper_type: '' + element_wrapper_class: '' + element_default_classes: true + empty: '' + hide_empty: false + empty_zero: false + hide_alter_empty: true + click_sort_column: value + type: text_default + settings: { } + group_column: value + group_columns: { } + group_rows: true + delta_limit: 0 + delta_offset: 0 + delta_reversed: false + delta_first_last: false + multi_type: separator + separator: ', ' + field_api_classes: false + plugin_id: field + entity_type: node + entity_field: body + filters: + title: + id: title + table: node_field_data + field: title + relationship: none + group_type: group + admin_label: '' + operator: starts + value: '' + group: 1 + exposed: true + expose: + operator_id: title_op + label: Title + description: '' + use_operator: false + operator: title_op + identifier: title + required: false + remember: false + multiple: false + remember_roles: + authenticated: authenticated + anonymous: '0' + administrator: '0' + is_grouped: false + group_info: + label: '' + description: '' + identifier: '' + optional: true + widget: select + multiple: false + remember: false + default_group: All + default_group_multiple: { } + group_items: { } + entity_type: node + entity_field: title + plugin_id: string + title: 'Test serialize' + arguments: { } + rest_export_1: + display_plugin: rest_export + id: rest_export_1 + display_title: serializer + position: null + display_options: + defaults: + access: false + style: false + row: false + path: test/serialize/node-exposed-filter + access: + type: none + style: + type: serializer + row: + type: data_field diff --git a/core/modules/search/migration_templates/d7_search_settings.yml b/core/modules/search/migration_templates/d7_search_settings.yml index ec272141a..57db8b945 100644 --- a/core/modules/search/migration_templates/d7_search_settings.yml +++ b/core/modules/search/migration_templates/d7_search_settings.yml @@ -12,6 +12,7 @@ source: - search_cron_limit - search_tag_weights - search_and_or_limit + - search_default_module process: 'index/minimum_word_size': minimum_word_size 'index/overlap_cjk': overlap_cjk @@ -19,6 +20,13 @@ process: 'index/tag_weights': search_tag_weights and_or_limit: search_and_or_limit logging: 'constants/status' + default_page: + plugin: static_map + source: + - search_default_module + map: + node: node_search + user: user_search destination: plugin: config config_name: search.settings diff --git a/core/modules/search/src/Tests/Migrate/d7/MigrateSearchSettingsTest.php b/core/modules/search/src/Tests/Migrate/d7/MigrateSearchSettingsTest.php index 5adff4108..ac0e4c0ea 100644 --- a/core/modules/search/src/Tests/Migrate/d7/MigrateSearchSettingsTest.php +++ b/core/modules/search/src/Tests/Migrate/d7/MigrateSearchSettingsTest.php @@ -31,6 +31,7 @@ class MigrateSearchSettingsTest extends MigrateDrupal7TestBase { */ public function testSearchSettings() { $config = $this->config('search.settings'); + $this->assertIdentical('node_search', $config->get('default_page')); $this->assertIdentical(4, $config->get('index.minimum_word_size')); $this->assertTrue($config->get('index.overlap_cjk')); $this->assertIdentical(100, $config->get('index.cron_limit')); diff --git a/core/modules/serialization/src/Tests/NormalizerTestBase.php b/core/modules/serialization/src/Tests/NormalizerTestBase.php index c38c55433..50e3c870c 100644 --- a/core/modules/serialization/src/Tests/NormalizerTestBase.php +++ b/core/modules/serialization/src/Tests/NormalizerTestBase.php @@ -7,7 +7,9 @@ namespace Drupal\serialization\Tests; -use Drupal\simpletest\KernelTestBase; +use Drupal\KernelTests\KernelTestBase; +use Drupal\field\Entity\FieldConfig; +use Drupal\field\Entity\FieldStorageConfig; abstract class NormalizerTestBase extends KernelTestBase { @@ -29,14 +31,14 @@ abstract class NormalizerTestBase extends KernelTestBase { \Drupal::moduleHandler()->invoke('rest', 'install'); // Auto-create a field for testing. - entity_create('field_storage_config', array( + FieldstorageConfig::create(array( 'entity_type' => 'entity_test_mulrev', 'field_name' => 'field_test_text', 'type' => 'text', 'cardinality' => 1, 'translatable' => FALSE, ))->save(); - entity_create('field_config', array( + FieldConfig::create(array( 'entity_type' => 'entity_test_mulrev', 'field_name' => 'field_test_text', 'bundle' => 'entity_test_mulrev', diff --git a/core/modules/shortcut/shortcut.routing.yml b/core/modules/shortcut/shortcut.routing.yml index d6c0e1ad2..113335756 100644 --- a/core/modules/shortcut/shortcut.routing.yml +++ b/core/modules/shortcut/shortcut.routing.yml @@ -61,6 +61,7 @@ entity.shortcut.canonical: _title: 'Edit' requirements: _entity_access: 'shortcut.update' + shortcut: \d+ entity.shortcut.edit_form: path: '/admin/config/user-interface/shortcut/link/{shortcut}' @@ -69,6 +70,7 @@ entity.shortcut.edit_form: _title: 'Edit' requirements: _entity_access: 'shortcut.update' + shortcut: \d+ entity.shortcut.link_delete_inline: path: '/admin/config/user-interface/shortcut/link/{shortcut}/delete-inline' @@ -77,6 +79,7 @@ entity.shortcut.link_delete_inline: requirements: _entity_access: 'shortcut.delete' _csrf_token: 'TRUE' + shortcut: \d+ entity.shortcut.delete_form: path: '/admin/config/user-interface/shortcut/link/{shortcut}/delete' @@ -85,6 +88,7 @@ entity.shortcut.delete_form: _title: 'Delete' requirements: _entity_access: 'shortcut.delete' + shortcut: \d+ shortcut.set_switch: path: '/user/{user}/shortcuts' @@ -95,3 +99,4 @@ shortcut.set_switch: _custom_access: 'Drupal\shortcut\Form\SwitchShortcutSet::checkAccess' options: _admin_route: TRUE + user: \d+ diff --git a/core/modules/shortcut/src/Tests/Migrate/MigrateShortcutStubTest.php b/core/modules/shortcut/src/Tests/Migrate/MigrateShortcutStubTest.php new file mode 100644 index 000000000..ba9a0002e --- /dev/null +++ b/core/modules/shortcut/src/Tests/Migrate/MigrateShortcutStubTest.php @@ -0,0 +1,44 @@ +installEntitySchema('shortcut'); + // Make sure the 'default' shortcut_set is installed. + $this->installConfig(['shortcut']); + } + + /** + * Tests creation of shortcut stubs. + */ + public function testStub() { + $this->performStubTest('shortcut'); + } + +} diff --git a/core/modules/simpletest/simpletest.module b/core/modules/simpletest/simpletest.module index b99435222..74d348e92 100644 --- a/core/modules/simpletest/simpletest.module +++ b/core/modules/simpletest/simpletest.module @@ -170,17 +170,20 @@ function simpletest_run_tests($test_list) { * @param $unescaped_test_classnames * An array of test class names, including full namespaces, to be passed as * a regular expression to PHPUnit's --filter option. + * @param int $status + * (optional) The exit status code of the PHPUnit process will be assigned to + * this variable. * * @return array * The parsed results of PHPUnit's JUnit XML output, in the format of * {simpletest}'s schema. */ -function simpletest_run_phpunit_tests($test_id, array $unescaped_test_classnames) { +function simpletest_run_phpunit_tests($test_id, array $unescaped_test_classnames, &$status = NULL) { $phpunit_file = simpletest_phpunit_xml_filepath($test_id); - $ret = simpletest_phpunit_run_command($unescaped_test_classnames, $phpunit_file); - // A return value of 0 = passed test, 1 = failed test, > 1 indicates segfault + simpletest_phpunit_run_command($unescaped_test_classnames, $phpunit_file, $status); + // A $status of 0 = passed test, 1 = failed test, > 1 indicates segfault // timeout, or other type of failure. - if ($ret > 1) { + if ($status > 1) { // Something broke during the execution of phpunit. // Return an error record of all failed classes. $rows[] = [ @@ -251,11 +254,14 @@ function simpletest_phpunit_configuration_filepath() { * a regular expression to PHPUnit's --filter option. * @param string $phpunit_file * A filepath to use for PHPUnit's --log-junit option. + * @param int $status + * (optional) The exit status code of the PHPUnit process will be assigned to + * this variable. * * @return string * The results as returned by exec(). */ -function simpletest_phpunit_run_command(array $unescaped_test_classnames, $phpunit_file) { +function simpletest_phpunit_run_command(array $unescaped_test_classnames, $phpunit_file, &$status = NULL) { // Setup an environment variable containing the database connection so that // functional tests can connect to the database. putenv('SIMPLETEST_DB=' . Database::getConnectionInfoAsUrl()); @@ -292,7 +298,8 @@ function simpletest_phpunit_run_command(array $unescaped_test_classnames, $phpun // exec in a subshell so that the environment is isolated when running tests // via the simpletest UI. - exec(join($command, " "), $output, $ret); + $ret = exec(join($command, " "), $output, $status); + chdir($old_cwd); putenv('SIMPLETEST_DB='); return $ret; diff --git a/core/modules/simpletest/src/TestBase.php b/core/modules/simpletest/src/TestBase.php index b255dea49..60ad26095 100644 --- a/core/modules/simpletest/src/TestBase.php +++ b/core/modules/simpletest/src/TestBase.php @@ -821,7 +821,7 @@ abstract class TestBase { * @return bool * TRUE if the assertion succeeded, FALSE otherwise. * - * @see TestBase::prepareEnvironment() + * @see \Drupal\simpletest\TestBase::prepareEnvironment() * @see \Drupal\Core\DrupalKernel::bootConfiguration() */ protected function assertNoErrorsLogged() { @@ -830,6 +830,42 @@ abstract class TestBase { return $this->assertFalse(file_exists(DRUPAL_ROOT . '/' . $this->siteDirectory . '/error.log'), 'PHP error.log is empty.'); } + /** + * Asserts that a specific error has been logged to the PHP error log. + * + * @param string $error_message + * The expected error message. + * + * @return bool + * TRUE if the assertion succeeded, FALSE otherwise. + * + * @see \Drupal\simpletest\TestBase::prepareEnvironment() + * @see \Drupal\Core\DrupalKernel::bootConfiguration() + */ + protected function assertErrorLogged($error_message) { + $error_log_filename = DRUPAL_ROOT . '/' . $this->siteDirectory . '/error.log'; + if (!file_exists($error_log_filename)) { + $this->error('No error logged yet.'); + } + + $content = file_get_contents($error_log_filename); + $rows = explode(PHP_EOL, $content); + + // We iterate over the rows in order to be able to remove the logged error + // afterwards. + $found = FALSE; + foreach ($rows as $row_index => $row) { + if (strpos($content, $error_message) !== FALSE) { + $found = TRUE; + unset($rows[$row_index]); + } + } + + file_put_contents($error_log_filename, implode("\n", $rows)); + + return $this->assertTrue($found, sprintf('The %s error message was logged.', $error_message)); + } + /** * Fire an assertion that is always positive. * diff --git a/core/modules/system/src/Controller/ThemeController.php b/core/modules/system/src/Controller/ThemeController.php index 5f56052b3..d54cd9141 100644 --- a/core/modules/system/src/Controller/ThemeController.php +++ b/core/modules/system/src/Controller/ThemeController.php @@ -29,27 +29,17 @@ class ThemeController extends ControllerBase { */ protected $themeHandler; - /** - * The route builder service. - * - * @var \Drupal\Core\Routing\RouteBuilderInterface - */ - protected $routeBuilder; - /** * Constructs a new ThemeController. * * @param \Drupal\Core\Extension\ThemeHandlerInterface $theme_handler * The theme handler. - * @param \Drupal\Core\Routing\RouteBuilderInterface $route_builder - * The route builder. * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory * The config factory. */ - public function __construct(ThemeHandlerInterface $theme_handler, RouteBuilderInterface $route_builder, ConfigFactoryInterface $config_factory) { + public function __construct(ThemeHandlerInterface $theme_handler,ConfigFactoryInterface $config_factory) { $this->themeHandler = $theme_handler; $this->configFactory = $config_factory; - $this->routeBuilder = $route_builder; } /** @@ -58,7 +48,6 @@ class ThemeController extends ControllerBase { public static function create(ContainerInterface $container) { return new static( $container->get('theme_handler'), - $container->get('router.builder'), $container->get('config.factory') ); } @@ -183,8 +172,6 @@ class ThemeController extends ControllerBase { // Set the default theme. $config->set('default', $theme)->save(); - $this->routeBuilder->setRebuildNeeded(); - // The status message depends on whether an admin theme is currently in // use: a value of 0 means the admin theme is set to be the default // theme. diff --git a/core/modules/system/src/Form/ThemeSettingsForm.php b/core/modules/system/src/Form/ThemeSettingsForm.php index 395c74359..7f02517d0 100644 --- a/core/modules/system/src/Form/ThemeSettingsForm.php +++ b/core/modules/system/src/Form/ThemeSettingsForm.php @@ -108,13 +108,11 @@ class ThemeSettingsForm extends ConfigFormBase { $themes = $this->themeHandler->listInfo(); - // Deny access if the theme is not installed or not found. - if (!empty($theme) && (empty($themes[$theme]) || !$themes[$theme]->status)) { - throw new NotFoundHttpException(); - } - // Default settings are defined in theme_get_setting() in includes/theme.inc if ($theme) { + if (!$this->themeHandler->hasUi($theme)) { + throw new NotFoundHttpException(); + } $var = 'theme_' . $theme . '_settings'; $config_key = $theme . '.settings'; $themes = $this->themeHandler->listInfo(); diff --git a/core/modules/system/src/Plugin/Derivative/ThemeLocalTask.php b/core/modules/system/src/Plugin/Derivative/ThemeLocalTask.php index 9c9de198e..7193ea5c4 100644 --- a/core/modules/system/src/Plugin/Derivative/ThemeLocalTask.php +++ b/core/modules/system/src/Plugin/Derivative/ThemeLocalTask.php @@ -48,7 +48,7 @@ class ThemeLocalTask extends DeriverBase implements ContainerDeriverInterface { */ public function getDerivativeDefinitions($base_plugin_definition) { foreach ($this->themeHandler->listInfo() as $theme_name => $theme) { - if ($theme->status) { + if ($this->themeHandler->hasUi($theme_name)) { $this->derivatives[$theme_name] = $base_plugin_definition; $this->derivatives[$theme_name]['title'] = $theme->info['name']; $this->derivatives[$theme_name]['route_parameters'] = array('theme' => $theme_name); diff --git a/core/modules/system/src/SystemConfigSubscriber.php b/core/modules/system/src/SystemConfigSubscriber.php index 204d68538..76ae5731e 100644 --- a/core/modules/system/src/SystemConfigSubscriber.php +++ b/core/modules/system/src/SystemConfigSubscriber.php @@ -7,8 +7,10 @@ namespace Drupal\system; +use Drupal\Core\Config\ConfigCrudEvent; use Drupal\Core\Config\ConfigEvents; use Drupal\Core\Config\ConfigImporterEvent; +use Drupal\Core\Routing\RouteBuilderInterface; use Drupal\Core\StringTranslation\StringTranslationTrait; use Symfony\Component\EventDispatcher\EventSubscriberInterface; @@ -18,6 +20,35 @@ use Symfony\Component\EventDispatcher\EventSubscriberInterface; class SystemConfigSubscriber implements EventSubscriberInterface { use StringTranslationTrait; + /** + * The router builder. + * + * @var \Drupal\Core\Routing\RouteBuilderInterface + */ + protected $routerBuilder; + + /** + * Constructs the SystemConfigSubscriber. + * + * @param \Drupal\Core\Routing\RouteBuilderInterface $route_builder + * The router builder service. + */ + public function __construct(RouteBuilderInterface $router_builder) { + $this->routerBuilder = $router_builder; + } + + /** + * Rebuilds the router when the default or admin theme is changed. + * + * @param \Drupal\Core\Config\ConfigCrudEvent $event + */ + public function onConfigSave(ConfigCrudEvent $event) { + $saved_config = $event->getConfig(); + if ($saved_config->getName() == 'system.theme' && ($event->isChanged('admin') || $event->isChanged('default'))) { + $this->routerBuilder->setRebuildNeeded(); + } + } + /** * Checks that the configuration synchronization is valid. * @@ -55,6 +86,7 @@ class SystemConfigSubscriber implements EventSubscriberInterface { * {@inheritdoc} */ public static function getSubscribedEvents() { + $events[ConfigEvents::SAVE][] = array('onConfigSave', 0); // The empty check has a high priority so that is can stop propagation if // there is no configuration to import. $events[ConfigEvents::IMPORT_VALIDATE][] = array('onConfigImporterValidateNotEmpty', 512); diff --git a/core/modules/system/src/Tests/Entity/Element/EntityAutocompleteElementFormTest.php b/core/modules/system/src/Tests/Entity/Element/EntityAutocompleteElementFormTest.php index 0fdd9af97..3e0386ce4 100644 --- a/core/modules/system/src/Tests/Entity/Element/EntityAutocompleteElementFormTest.php +++ b/core/modules/system/src/Tests/Entity/Element/EntityAutocompleteElementFormTest.php @@ -137,6 +137,7 @@ class EntityAutocompleteElementFormTest extends EntityUnitTestBase implements Fo $form['single_autocreate_no_validate'] = array( '#type' => 'entity_autocomplete', '#target_type' => 'entity_test', + '#validate_reference' => FALSE, '#autocreate' => array( 'bundle' => 'entity_test', ), diff --git a/core/modules/system/src/Tests/Entity/EntityFieldTest.php b/core/modules/system/src/Tests/Entity/EntityFieldTest.php index 6fae79b31..5c9161e3c 100644 --- a/core/modules/system/src/Tests/Entity/EntityFieldTest.php +++ b/core/modules/system/src/Tests/Entity/EntityFieldTest.php @@ -691,8 +691,8 @@ class EntityFieldTest extends EntityUnitTestBase { ->setSetting('target_type', 'node') ->setSetting('handler_settings', ['target_bundles' => ['article' => 'article']]); $reference_field = \Drupal::TypedDataManager()->create($definition); - $reference = $reference_field->appendItem(array('entity' => $node)); - $violations = $reference->validate(); + $reference_field->appendItem(array('entity' => $node)); + $violations = $reference_field->validate(); $this->assertEqual($violations->count(), 1); $node = entity_create('node', array( @@ -701,8 +701,8 @@ class EntityFieldTest extends EntityUnitTestBase { 'title' => $this->randomString(), )); $node->save(); - $reference->setValue($node); - $violations = $reference->validate(); + $reference_field->entity = $node; + $violations = $reference_field->validate(); $this->assertEqual($violations->count(), 0); } diff --git a/core/modules/system/src/Tests/Entity/EntityReferenceFieldTest.php b/core/modules/system/src/Tests/Entity/EntityReferenceFieldTest.php index 8e64386a5..aa49b84de 100644 --- a/core/modules/system/src/Tests/Entity/EntityReferenceFieldTest.php +++ b/core/modules/system/src/Tests/Entity/EntityReferenceFieldTest.php @@ -113,7 +113,7 @@ class EntityReferenceFieldTest extends EntityUnitTestBase { $entity->{$this->fieldName}->target_id = $referenced_entity->id(); $violations = $entity->{$this->fieldName}->validate(); $this->assertEqual($violations->count(), 1, 'Validation throws a violation.'); - $this->assertEqual($violations[0]->getMessage(), t('The entity must be of bundle %bundle.', array('%bundle' => $this->bundle))); + $this->assertEqual($violations[0]->getMessage(), t('This entity (%type: %id) cannot be referenced.', array('%type' => $this->referencedEntityType, '%id' => $referenced_entity->id()))); } /** diff --git a/core/modules/system/src/Tests/File/HtaccessUnitTest.php b/core/modules/system/src/Tests/File/HtaccessUnitTest.php index c8599b3af..9f5273c25 100644 --- a/core/modules/system/src/Tests/File/HtaccessUnitTest.php +++ b/core/modules/system/src/Tests/File/HtaccessUnitTest.php @@ -40,8 +40,7 @@ class HtaccessUnitTest extends KernelTestBase { $this->assertTrue(strpos($content, "SetHandler Drupal_Security_Do_Not_Remove_See_SA_2006_006") !== FALSE); $this->assertFalse(strpos($content, "Require all denied") !== FALSE); $this->assertFalse(strpos($content, "Deny from all") !== FALSE); - $this->assertTrue(strpos($content, "Options None") !== FALSE); - $this->assertTrue(strpos($content, "Options +FollowSymLinks") !== FALSE); + $this->assertTrue(strpos($content, "Options -Indexes -ExecCGI -Includes -MultiViews") !== FALSE); $this->assertTrue(strpos($content, "SetHandler Drupal_Security_Do_Not_Remove_See_SA_2013_003") !== FALSE); $this->assertFilePermissions($public . '/.htaccess', 0444); @@ -54,8 +53,7 @@ class HtaccessUnitTest extends KernelTestBase { $this->assertTrue(strpos($content, "SetHandler Drupal_Security_Do_Not_Remove_See_SA_2006_006") !== FALSE); $this->assertTrue(strpos($content, "Require all denied") !== FALSE); $this->assertTrue(strpos($content, "Deny from all") !== FALSE); - $this->assertTrue(strpos($content, "Options None") !== FALSE); - $this->assertTrue(strpos($content, "Options +FollowSymLinks") !== FALSE); + $this->assertTrue(strpos($content, "Options -Indexes -ExecCGI -Includes -MultiViews") !== FALSE); $this->assertTrue(strpos($content, "SetHandler Drupal_Security_Do_Not_Remove_See_SA_2013_003") !== FALSE); $this->assertFilePermissions($private . '/.htaccess', 0444); @@ -68,8 +66,7 @@ class HtaccessUnitTest extends KernelTestBase { $this->assertTrue(strpos($content,"SetHandler Drupal_Security_Do_Not_Remove_See_SA_2006_006") !== FALSE); $this->assertTrue(strpos($content, "Require all denied") !== FALSE); $this->assertTrue(strpos($content,"Deny from all") !== FALSE); - $this->assertTrue(strpos($content,"Options None") !== FALSE); - $this->assertTrue(strpos($content,"Options +FollowSymLinks") !== FALSE); + $this->assertTrue(strpos($content,"Options -Indexes -ExecCGI -Includes -MultiViews") !== FALSE); $this->assertTrue(strpos($content, "SetHandler Drupal_Security_Do_Not_Remove_See_SA_2013_003") !== FALSE); $this->assertFilePermissions($stream . '/.htaccess', 0444); diff --git a/core/modules/system/src/Tests/Installer/StandardInstallerTest.php b/core/modules/system/src/Tests/Installer/StandardInstallerTest.php index 184e07b65..dfe920b9c 100644 --- a/core/modules/system/src/Tests/Installer/StandardInstallerTest.php +++ b/core/modules/system/src/Tests/Installer/StandardInstallerTest.php @@ -40,6 +40,19 @@ class StandardInstallerTest extends ConfigAfterInstallerTestBase { parent::setUpSite(); } + /** + * {@inheritdoc} + */ + protected function curlExec($curl_options, $redirect = FALSE) { + // Ensure that we see the classy progress CSS on the batch page. + // Batch processing happens as part of HTTP redirects, so we can access the + // HTML of the batch page. + if (strpos($curl_options[CURLOPT_URL], '&id=1&op=do_nojs') !== FALSE) { + $this->assertRaw('themes/classy/css/components/progress.css'); + } + return parent::curlExec($curl_options, $redirect); + } + /** * Ensures that the exported standard configuration is up to date. */ diff --git a/core/modules/system/src/Tests/Menu/MenuRouterTest.php b/core/modules/system/src/Tests/Menu/MenuRouterTest.php index 42332e06c..7ea4e0f5c 100644 --- a/core/modules/system/src/Tests/Menu/MenuRouterTest.php +++ b/core/modules/system/src/Tests/Menu/MenuRouterTest.php @@ -204,6 +204,7 @@ class MenuRouterTest extends WebTestBase { "éøïвβ中國書۞"; // Characters from various non-ASCII alphabets. $this->drupalGet($path); $this->assertRaw('This is the menuTestCallback content.'); + $this->assertNoText(t('The website encountered an unexpected error. Please try again later.')); } /** diff --git a/core/modules/system/src/Tests/Routing/RouteProviderTest.php b/core/modules/system/src/Tests/Routing/RouteProviderTest.php index c1d24ff33..cbe8b0981 100644 --- a/core/modules/system/src/Tests/Routing/RouteProviderTest.php +++ b/core/modules/system/src/Tests/Routing/RouteProviderTest.php @@ -115,7 +115,7 @@ class RouteProviderTest extends KernelTestBase { public function testCandidateOutlines() { $connection = Database::getConnection(); - $provider = new RouteProvider($connection, $this->state, $this->currentPath, $this->cache, $this->pathProcessor, $this->cacheTagsInvalidator, 'test_routes'); + $provider = new TestRouteProvider($connection, $this->state, $this->currentPath, $this->cache, $this->pathProcessor, $this->cacheTagsInvalidator, 'test_routes'); $parts = array('node', '5', 'edit'); @@ -532,7 +532,7 @@ class RouteProviderTest extends KernelTestBase { */ public function testGetRoutesByPatternWithLongPatterns() { $connection = Database::getConnection(); - $provider = new RouteProvider($connection, $this->state, $this->currentPath, $this->cache, $this->pathProcessor, $this->cacheTagsInvalidator, 'test_routes'); + $provider = new TestRouteProvider($connection, $this->state, $this->currentPath, $this->cache, $this->pathProcessor, $this->cacheTagsInvalidator, 'test_routes'); $this->fixtures->createTables($connection); // This pattern has only 3 parts, so we will get candidates, but no routes, @@ -613,3 +613,11 @@ class RouteProviderTest extends KernelTestBase { } } + +class TestRouteProvider extends RouteProvider { + + public function getCandidateOutlines(array $parts) { + return parent::getCandidateOutlines($parts); + } + +} diff --git a/core/modules/system/src/Tests/System/DefaultMobileMetaTagsTest.php b/core/modules/system/src/Tests/System/DefaultMobileMetaTagsTest.php index 31d404d40..ae2d3f4ff 100644 --- a/core/modules/system/src/Tests/System/DefaultMobileMetaTagsTest.php +++ b/core/modules/system/src/Tests/System/DefaultMobileMetaTagsTest.php @@ -44,11 +44,6 @@ class DefaultMobileMetaTagsTest extends WebTestBase { * Verifies that the default mobile meta tags can be removed. */ public function testRemovingDefaultMetaTags() { - // @todo remove once PHP7 on Drupal CI has the fix. - if (version_compare(phpversion(), '7.0.0-dev') >= 0) { - // @see https://bugs.php.net/bug.php?id=70808 - return; - } \Drupal::service('module_installer')->install(array('system_module_test')); $this->drupalGet(''); foreach ($this->defaultMetaTags as $name => $metatag) { diff --git a/core/modules/system/src/Tests/System/ErrorHandlerTest.php b/core/modules/system/src/Tests/System/ErrorHandlerTest.php index 2cea2b766..07f2aacfb 100644 --- a/core/modules/system/src/Tests/System/ErrorHandlerTest.php +++ b/core/modules/system/src/Tests/System/ErrorHandlerTest.php @@ -100,6 +100,7 @@ class ErrorHandlerTest extends WebTestBase { $this->assertErrorMessage($error_warning); $this->assertErrorMessage($error_user_notice); $this->assertNoRaw('
', 'Did not find pre element with backtrace class.');
+    $this->assertErrorLogged($fatal_error['@message']);
 
     // Set error reporting to not collect notices.
     $config->set('error_level', ERROR_REPORTING_DISPLAY_SOME)->save();
diff --git a/core/modules/system/src/Tests/System/ThemeTest.php b/core/modules/system/src/Tests/System/ThemeTest.php
index 8b2836b75..278353db5 100644
--- a/core/modules/system/src/Tests/System/ThemeTest.php
+++ b/core/modules/system/src/Tests/System/ThemeTest.php
@@ -52,6 +52,9 @@ class ThemeTest extends WebTestBase {
     $this->assertResponse(404, 'The theme settings form URL for a uninstalled theme could not be found.');
     $this->drupalGet('admin/appearance/settings/' . $this->randomMachineName());
     $this->assertResponse(404, 'The theme settings form URL for a non-existent theme could not be found.');
+    $this->assertTrue(\Drupal::service('theme_installer')->install(['stable']));
+    $this->drupalGet('admin/appearance/settings/stable');
+    $this->assertResponse(404, 'The theme settings form URL for a hidden theme is unavailable.');
 
     // Specify a filesystem path to be used for the logo.
     $file = current($this->drupalGetTestFiles('image'));
@@ -190,6 +193,23 @@ class ThemeTest extends WebTestBase {
     // The logo field should only be present on the global theme settings form.
     $this->assertNoFieldByName('logo_path');
     $this->drupalPostForm(NULL, [], t('Save configuration'));
+
+    // Ensure only valid themes are listed in the local tasks.
+    $this->drupalPlaceBlock('local_tasks_block', ['region' => 'header']);
+    $this->drupalGet('admin/appearance/settings');
+    $theme_handler = \Drupal::service('theme_handler');
+    $this->assertLink($theme_handler->getName('classy'));
+    $this->assertLink($theme_handler->getName('bartik'));
+    $this->assertNoLink($theme_handler->getName('stable'));
+
+    // If a hidden theme is an admin theme it should be viewable.
+    \Drupal::configFactory()->getEditable('system.theme')->set('admin', 'stable')->save();
+    \Drupal::service('router.builder')->rebuildIfNeeded();
+    $this->drupalPlaceBlock('local_tasks_block', ['region' => 'header', 'theme' => 'stable']);
+    $this->drupalGet('admin/appearance/settings');
+    $this->assertLink($theme_handler->getName('stable'));
+    $this->drupalGet('admin/appearance/settings/stable');
+    $this->assertResponse(200, 'The theme settings form URL for a hidden theme that is the admin theme is available.');
   }
 
   /**
@@ -255,8 +275,14 @@ class ThemeTest extends WebTestBase {
    * Test switching the default theme.
    */
   function testSwitchDefaultTheme() {
+    /** @var \Drupal\Core\Extension\ThemeHandlerInterface $theme_handler */
+    $theme_handler = \Drupal::service('theme_handler');
+    // First, install Stark and set it as the default theme programmatically.
+    $theme_handler->install(array('stark'));
+    $theme_handler->setDefault('stark');
+
     // Install Bartik and set it as the default theme.
-    \Drupal::service('theme_handler')->install(array('bartik'));
+    $theme_handler->install(array('bartik'));
     $this->drupalGet('admin/appearance');
     $this->clickLink(t('Set as default'));
     $this->assertEqual($this->config('system.theme')->get('default'), 'bartik');
@@ -266,10 +292,10 @@ class ThemeTest extends WebTestBase {
     $this->assertText('Bartik(' . t('active tab') . ')', 'Default local task on blocks admin page is the default theme.');
     // Switch back to Stark and test again to test that the menu cache is cleared.
     $this->drupalGet('admin/appearance');
-    // Classy is the first 'Set as default' link.
-    $this->clickLink(t('Set as default'), 0);
+    // Stark is the first 'Set as default' link.
+    $this->clickLink(t('Set as default'));
     $this->drupalGet('admin/structure/block');
-    $this->assertText('Classy(' . t('active tab') . ')', 'Default local task on blocks admin page has changed.');
+    $this->assertText('Stark(' . t('active tab') . ')', 'Default local task on blocks admin page has changed.');
   }
 
   /**
@@ -328,8 +354,8 @@ class ThemeTest extends WebTestBase {
     // base theme of bartik.
     $this->assertNoRaw('Uninstall Classy theme', 'A link to uninstall the Classy theme does not appear on the theme settings page.');
 
-    // Change the default theme to stark, stark is third in the list.
-    $this->clickLink(t('Set as default'), 2);
+    // Change the default theme to stark, stark is second in the list.
+    $this->clickLink(t('Set as default'), 1);
 
     // Check that bartik can be uninstalled now.
     $this->assertRaw('Uninstall Bartik theme', 'A link to uninstall the Bartik theme does appear on the theme settings page.');
@@ -344,9 +370,9 @@ class ThemeTest extends WebTestBase {
     // Seven is the second in the list.
     $this->clickLink(t('Uninstall'));
     $this->assertRaw('The Seven theme has been uninstalled');
-    // Now uninstall classy.
-    $this->clickLink(t('Uninstall'));
-    $this->assertRaw('The Classy theme has been uninstalled');
+
+    // Check that the classy theme still can't be uninstalled as it is hidden.
+    $this->assertNoRaw('Uninstall Classy theme', 'A link to uninstall the Classy theme does not appear on the theme settings page.');
   }
 
   /**
diff --git a/core/modules/system/src/Tests/System/UncaughtExceptionTest.php b/core/modules/system/src/Tests/System/UncaughtExceptionTest.php
index 8c87ebf46..3a67ae873 100644
--- a/core/modules/system/src/Tests/System/UncaughtExceptionTest.php
+++ b/core/modules/system/src/Tests/System/UncaughtExceptionTest.php
@@ -87,6 +87,7 @@ class UncaughtExceptionTest extends WebTestBase {
     $this->assertResponse(500);
     $this->assertText('The website encountered an unexpected error. Please try again later.');
     $this->assertText($this->expectedExceptionMessage);
+    $this->assertErrorLogged($this->expectedExceptionMessage);
   }
 
   /**
@@ -122,6 +123,7 @@ class UncaughtExceptionTest extends WebTestBase {
 
     $this->assertRaw('The website encountered an unexpected error.');
     $this->assertRaw($this->expectedExceptionMessage);
+    $this->assertErrorLogged($this->expectedExceptionMessage);
   }
 
   /**
@@ -178,6 +180,7 @@ class UncaughtExceptionTest extends WebTestBase {
     $this->assertResponse(500);
 
     $this->assertRaw($this->expectedExceptionMessage);
+    $this->assertErrorLogged($this->expectedExceptionMessage);
   }
 
   /**
@@ -199,6 +202,7 @@ class UncaughtExceptionTest extends WebTestBase {
 
     $this->assertRaw('The website encountered an unexpected error');
     $this->assertRaw($this->expectedExceptionMessage);
+    $this->assertErrorLogged($this->expectedExceptionMessage);
   }
 
   /**
@@ -233,6 +237,7 @@ class UncaughtExceptionTest extends WebTestBase {
     $this->drupalGet('');
     $this->assertResponse(500);
     $this->assertRaw('PDOException');
+    $this->assertErrorLogged($this->expectedExceptionMessage);
   }
 
   /**
@@ -252,7 +257,8 @@ class UncaughtExceptionTest extends WebTestBase {
 
     // Find fatal error logged to the simpletest error.log
     $errors = file(\Drupal::root() . '/' . $this->siteDirectory . '/error.log');
-    $this->assertIdentical(count($errors), 1, 'Exactly one line logged to the PHP error log');
+    $this->assertIdentical(count($errors), 2, 'The error + the error that the logging service is broken has been written to the error log.');
+    $this->assertTrue(strpos($errors[0], 'Failed to log error') !== FALSE, 'The error handling logs when an error could not be logged to the logger.');
 
     $expected_path = \Drupal::root() . '/core/modules/system/tests/modules/error_service_test/src/MonkeysInTheControlRoom.php';
     $expected_line = 63;
diff --git a/core/modules/system/src/Tests/Theme/StableLibraryOverrideTest.php b/core/modules/system/src/Tests/Theme/StableLibraryOverrideTest.php
new file mode 100644
index 000000000..526be51c1
--- /dev/null
+++ b/core/modules/system/src/Tests/Theme/StableLibraryOverrideTest.php
@@ -0,0 +1,185 @@
+themeManager = $this->container->get('theme.manager');
+    $this->themeInitialization = $this->container->get('theme.initialization');
+    $this->libraryDiscovery = $this->container->get('library.discovery');
+
+    $this->container->get('theme_installer')->install(['stable']);
+
+    // Enable all core modules.
+    $all_modules = system_rebuild_module_data();
+    $all_modules = array_filter($all_modules, function ($module) {
+      // Filter contrib, hidden, already enabled modules and modules in the
+      // Testing package.
+      if ($module->origin !== 'core' || !empty($module->info['hidden']) || $module->status == TRUE || $module->info['package'] == 'Testing') {
+        return FALSE;
+      }
+      return TRUE;
+    });
+    $this->allModules = array_keys($all_modules);
+    sort($this->allModules);
+    $this->enableModules($this->allModules);
+  }
+
+  /**
+   * Ensures that Stable overrides all relevant core library assets.
+   */
+  public function testStableLibraryOverrides() {
+    // First get the clean library definitions with no active theme.
+    $libraries_before = $this->getAllLibraries();
+    $libraries_before = $this->removeVendorAssets($libraries_before);
+
+    $this->themeManager->setActiveTheme($this->themeInitialization->getActiveThemeByName('stable'));
+    $this->libraryDiscovery->clearCachedDefinitions();
+
+    // Now get the library definitions with Stable as the active theme.
+    $libraries_after = $this->getAllLibraries();
+    $libraries_after = $this->removeVendorAssets($libraries_after);
+
+    $root = \Drupal::root();
+    foreach ($libraries_before as $extension => $libraries) {
+      foreach ($libraries as $library_name => $library) {
+        // Allow skipping libraries.
+        if (in_array("$extension/$library_name", $this->librariesToSkip)) {
+          continue;
+        }
+        $library_after = $libraries_after[$extension][$library_name];
+
+        // Check that all the CSS assets are overridden.
+        foreach ($library['css'] as $index => $asset) {
+          $clean_path = $asset['data'];
+          $stable_path = $library_after['css'][$index]['data'];
+          // Make core/misc assets look like they are coming from a "core"
+          // module.
+          $replacements = [
+            'core/misc/' => "core/modules/core/css/",
+          ];
+          $expected_path = strtr($clean_path, $replacements);
+
+          // Adjust the module asset paths to correspond with the Stable folder
+          // structure.
+          $expected_path = str_replace("core/modules/$extension/css/", "core/themes/stable/css/$extension/", $expected_path);
+          $assert_path = str_replace("core/modules/$extension/", '', $clean_path);
+
+          $this->assertEqual($expected_path, $stable_path, "$assert_path from the $extension/$library_name library is overridden in Stable.");
+        }
+      }
+    }
+  }
+
+  /**
+   * Removes all vendor libraries and assets from the library definitions.
+   *
+   * @param array[] $all_libraries
+   *   An associative array of libraries keyed by extension, then by library
+   *   name, and so on.
+   *
+   * @return array[]
+   *   The reduced array of libraries.
+   */
+  protected function removeVendorAssets($all_libraries) {
+    foreach ($all_libraries as $extension => $libraries) {
+      foreach ($libraries as $library_name => $library) {
+        if (isset($library['remote'])) {
+          unset($all_libraries[$extension][$library_name]);
+        }
+        foreach (['css', 'js'] as $asset_type) {
+          foreach ($library[$asset_type] as $index => $asset) {
+            if (strpos($asset['data'], 'core/assets/vendor') !== FALSE) {
+              unset($all_libraries[$extension][$library_name][$asset_type][$index]);
+              // Re-key the array of assets. This is needed because
+              // libraries-override doesn't always preserve the order.
+              if (!empty($all_libraries[$extension][$library_name][$asset_type])) {
+                $all_libraries[$extension][$library_name][$asset_type] = array_values($all_libraries[$extension][$library_name][$asset_type]);
+              }
+            }
+          }
+        }
+      }
+    }
+    return $all_libraries;
+  }
+
+  /**
+   * Gets all libraries for core and all installed modules.
+   *
+   * @return array[]
+   *   An associative array of libraries keyed by extension, then by library
+   *   name, and so on.
+   */
+  protected function getAllLibraries() {
+    $modules = \Drupal::moduleHandler()->getModuleList();
+    $module_list = array_keys($modules);
+    sort($module_list);
+    $this->assertEqual($this->allModules, $module_list, 'All core modules are installed.');
+
+    $libraries['core'] = $this->libraryDiscovery->getLibrariesByExtension('core');
+
+    $root = \Drupal::root();
+    foreach ($modules as $module_name => $module) {
+      $library_file = $module->getPath() . '/' . $module_name . '.libraries.yml';
+      if (is_file($root . '/' . $library_file)) {
+        $libraries[$module_name] = $this->libraryDiscovery->getLibrariesByExtension($module_name);
+      }
+    }
+    return $libraries;
+  }
+
+}
diff --git a/core/modules/system/src/Tests/Update/UpdatePathRC1TestBaseFilledTest.php b/core/modules/system/src/Tests/Update/UpdatePathRC1TestBaseFilledTest.php
index 956849c0e..fa1499970 100644
--- a/core/modules/system/src/Tests/Update/UpdatePathRC1TestBaseFilledTest.php
+++ b/core/modules/system/src/Tests/Update/UpdatePathRC1TestBaseFilledTest.php
@@ -30,8 +30,7 @@ class UpdatePathRC1TestBaseFilledTest extends UpdatePathRC1TestBaseTest {
    * Tests that the content and configuration were properly updated.
    */
   public function testUpdatedSite() {
-    // @todo there are no updates to run.
-    //$this->runUpdates();
+    $this->runUpdates();
 
     $spanish = \Drupal::languageManager()->getLanguage('es');
 
diff --git a/core/modules/system/src/Tests/Update/UpdatePathRC1TestBaseTest.php b/core/modules/system/src/Tests/Update/UpdatePathRC1TestBaseTest.php
index 47e70b17e..54c2d1e93 100644
--- a/core/modules/system/src/Tests/Update/UpdatePathRC1TestBaseTest.php
+++ b/core/modules/system/src/Tests/Update/UpdatePathRC1TestBaseTest.php
@@ -34,6 +34,8 @@ class UpdatePathRC1TestBaseTest extends UpdatePathTestBase {
    * Tests that the database was properly loaded.
    */
   public function testDatabaseLoaded() {
+    $extensions = \Drupal::service('config.storage')->read('core.extension');
+    $this->assertFalse(isset($extensions['theme']['stable']), 'Stable is not installed before updating.');
     $hook_updates = [
       'user' => '8000',
       'node' => '8003',
@@ -57,11 +59,14 @@ class UpdatePathRC1TestBaseTest extends UpdatePathTestBase {
       $this->assertEqual($existing_updates[$expected_update], 1, new FormattableMarkup("@expected_update exists in 'existing_updates' key and only appears once.", ['@expected_update' => $expected_update]));
     }
 
-    // @todo there are no updates to run.
-    // $this->runUpdates();
+    $this->runUpdates();
     $this->assertEqual(\Drupal::config('system.site')->get('name'), 'Site-Install');
     $this->drupalGet('');
     $this->assertText('Site-Install');
+    $extensions = \Drupal::service('config.storage')->read('core.extension');
+    $this->assertTrue(isset($extensions['theme']['stable']), 'Stable is installed after updating.');
+    $blocks = \Drupal::entityManager()->getStorage('block')->loadByProperties(['theme' => 'stable']);
+    $this->assertTrue(empty($blocks), 'No blocks have been placed for Stable.');
   }
 
 }
diff --git a/core/modules/system/system.install b/core/modules/system/system.install
index 69044a1ed..c9e81754e 100644
--- a/core/modules/system/system.install
+++ b/core/modules/system/system.install
@@ -1464,6 +1464,7 @@ function system_update_8005() {
         break;
 
       case 'classy':
+      case 'stable':
         // Don't place any blocks or trigger custom themes installed warning.
         break;
 
@@ -1541,6 +1542,7 @@ function system_update_8006() {
 
       case 'seven':
       case 'classy':
+      case 'stable':
         // Don't place any blocks or trigger custom themes installed warning.
         break;
       default:
@@ -1805,23 +1807,6 @@ function system_update_8011() {
   _system_update_create_block($name, $theme_name, $values);
 }
 
-/**
- * Install the Stable base theme if needed.
- */
-function system_update_8012() {
-  $theme_handler = \Drupal::service('theme_handler');
-  // Ensure we have fresh info.
-  $theme_handler->rebuildThemeData();
-  foreach ($theme_handler->listInfo() as $theme) {
-    // We first check that a base theme is set because if it's set to false then
-    // it's unset in \Drupal\Core\Extension\ThemeHandler::rebuildThemeData().
-    if (isset($theme->info['base theme']) && $theme->info['base theme'] == 'stable') {
-      $theme_handler->install(['stable']);
-      return;
-    }
-  }
-}
-
 /**
  * Enable automated cron module and move the config into it.
  */
@@ -1847,3 +1832,31 @@ function system_update_8013() {
 /**
  * @} End of "addtogroup updates-8.0.0-beta".
  */
+
+/**
+ * @addtogroup updates-8.0.0-rc
+ * @{
+ */
+
+/**
+ * Install the Stable base theme if needed.
+ */
+function system_update_8014() {
+  $theme_handler = \Drupal::service('theme_handler');
+  if ($theme_handler->themeExists('stable')) {
+    return;
+  }
+  $theme_handler->refreshInfo();
+  foreach ($theme_handler->listInfo() as $theme) {
+    // We first check that a base theme is set because if it's set to false then
+    // it's unset in \Drupal\Core\Extension\ThemeHandler::rebuildThemeData().
+    if (isset($theme->info['base theme']) && $theme->info['base theme'] == 'stable') {
+      $theme_handler->install(['stable']);
+      return;
+    }
+  }
+}
+
+/**
+ * @} End of "addtogroup updates-8.0.0-rc".
+ */
diff --git a/core/modules/system/system.services.yml b/core/modules/system/system.services.yml
index 0f816d6fe..c70889d3f 100644
--- a/core/modules/system/system.services.yml
+++ b/core/modules/system/system.services.yml
@@ -35,6 +35,7 @@ services:
       - { name: theme_negotiator, priority: 100 }
   system.config_subscriber:
     class: Drupal\system\SystemConfigSubscriber
+    arguments: ['@router.builder']
     tags:
       - { name: event_subscriber }
   system.config_cache_tag:
diff --git a/core/modules/system/templates/block--local-actions-block.html.twig b/core/modules/system/templates/block--local-actions-block.html.twig
index 65d57be1f..3e660c514 100644
--- a/core/modules/system/templates/block--local-actions-block.html.twig
+++ b/core/modules/system/templates/block--local-actions-block.html.twig
@@ -1,4 +1,4 @@
-{% extends "@block/block.html.twig" %}
+{% extends "block.html.twig" %}
 {#
 /**
  * @file
diff --git a/core/modules/system/tests/fixtures/update/drupal-8-rc1.bare.standard.php.gz b/core/modules/system/tests/fixtures/update/drupal-8-rc1.bare.standard.php.gz
new file mode 100644
index 0000000000000000000000000000000000000000..db046bea9472fdb0591a592aca17ef2cac4fae95
GIT binary patch
literal 119576
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

Vul~8+Z1(<7 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¥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

-5I26PWgF$gKSN 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 literal 0 HcmV?d00001 diff --git a/core/modules/system/tests/fixtures/update/drupal-8-rc1.filled.standard.php.gz b/core/modules/system/tests/fixtures/update/drupal-8-rc1.filled.standard.php.gz new file mode 100644 index 0000000000000000000000000000000000000000..615b88a7d45e4c5fbc65105b1f26ae98e637792f GIT binary patch literal 623241 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�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

^KGA>EUgjk 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%0Ak zS8@@F8Y_xVE;0|y6@9+1|4ZWANM>t+%m*d&epdL)<@Ilx#J>A1^Mk8rx7>=f5{gpS zWj%jYEOhOYzA1)PO_Ed3SEc9uym#@-jY*SKZ#}e&5Ef0EJaywdzwFec zsmnXEOWyS@ON}z0r>6eCvwlge&JVAff*U5rvGdwgfi~b?33Xb)eOTA}s?83C6i3#d zdqchJza|w3zddJIwBz-@pYzj79XfN(x&PW0DK9&4Yudw)OGF!Gb@OK!>dOkA?#Pc< zUCmR~u!Qko$<@r;6&JjtC#{O|_21bokf)$ocsJ8_iTvHn?!|_@i>l9Zn7@e8>Cmiy zHYfH>POvU#-7@CeS7a6YPKL$o-nv&+`E}*%nFeX!ax6PH_z9T5+Uxsl-nQqCO0TlOA1)$u>rW&W?9Z(jX9`dfaU%HPS03U;kn8e^y3!c3jg}t&Sd%I>r*yAy~nVZ zW$m}7BfL?~zLAWl)F%E(4Akd0^E=5parZp_OAmEl9(LKzcQSTP<+t3`rwisD(o4SP z>@wLgihrtViNE0G?#Yd9tK0TYak#0MR6F&s=3IMiu|~mIHnk7~4wdcBuU`16FHpC0 zel2Uc^$o_P2ib z<)TnIK@qk|f|V!Do?p8l5f*Q7^5DgC+fONzg3BlEeKKjX%=9-Oo=10Zt!~;iMR)EF z*2O&GPBq)!R%(g7-Ew)~-s?*@e{tHeNqpk;{U%3sbT4&E{xwQcJmr2r`}zm(vh(84Jo)E*t6)O^tyB}2CE2lW<~L6h+b(W@t8C@EZT2hH zJfHf*^XQG>th+U~>sLNmmm??eep_63-JUPA7OW}{TK?{fe)sNG(|0d8@lJo!moFPr zX8*r#>vE|#>8I4w?~H~&tfr@zxh$Wyjcv#DKPjgcq?Z3z%=TBi;bV0^Mo0gj`A^o= zfzh&wX8hT z^3=*bX5YLF&32wXv3uFO>uHbAN_H$;|FU-9N7HF3XQJ=$#j=NQtC&=yYOk@I@ln=# z9hF-ZcONQBnyM*O9h;{2?(UtP#la%i9sbl_2rR5!W2{B<`$#b?UlzguG%KF;!u-{_K6 z^sZ@Xw9jnsQ|mM3KMGA>_TYc|``F#L-6oklXrxg5J~uA9m8^eJx9rYu)*`ML^?Y@k3{O zbE7+44e?GM;Zk=0b)q zfs-E0{&M*I`Rj?I#Y)SV!x_2mTt|M32Rd-Ln; z4o6S6=_Ty}LMb1Eb9A4xpZKQCWqy3y0?C!-TTCba3Y(BtdFOIm zEavRX)DhUQ`jJve$;ZM;FYNb5zq(quH~FW`GTW`H-lp@In;T}=mLAsBR*d-n@Sgwm zyxLS>mc{3Jd!)8Ut$e6zbke!#tG3zolRvNRkT-n3t&+V~;C9+BEtXGP*yROpy|xPc zCE|8oHQ;$>jJbi!sR-w!ySHaq#1xxMt?j>f>|1=^o{wQaRL$G7*KbT=%jYwjcm8#W zT=w+oHq#pxFHcEoNK%}aWFos&O`pl#%5CrE^@c9{9qWq&vlgCY+{b*|bcf;L7pwkB zvnwB8V*1%53zi)(wQCh>lw_%%QYyTjPo-LH0soC+ z#&RpGXH#$g_$~65y;bi;P|bG9xb-^qo3o}p*vaCvRoLmaYo**!Ma=qI4UJ`Vr?xue##dwPNobO7OYzKE@=$H09+FKPPrg|0yko ze~YKZB}U2eg{2lYRp;y7cDp69a@7a+4>t|%<-9m|hO4iO6yWR*iCh%&>)v;1gYAuK zCmdL%x%kcJIBc96d+}Q8yyW)nYfh>~&ePmJwOTLH{^N!N$8SoyXG{8iD%z!)`TAH9 z>*R`@yko3Jx=U4rtFs+09(||SAb5$lxK#SJf~&=^t)fXcgw&?U8&4IV`TWkz>Jv*& z7wJ4wRlP8Me)84NBFk4CewJJye!IW!$#x0;qM*8^|BmE*TA-kLP%NY(x?S`kp(xA`bC+-&?)o z<`iCi-}ceg(G;;N`vrtsiR2XCp6mWaR7nlsMM3|cjNA6*kTDvU1vk$L4k?cU?+XjC4%b zYPs|xc=D#!%Y3{_=gc{QVIo%3X*&VIhJ_oa}P zSiDF=XZK)@Dq>6ok@BXJ?5(aI~otIo&W7v6Q@Sr z{S=AcnvYKRBy09~H0?NdWta91EA~q52j=2}-b}F!Dr*eyZZ`CgO?d9{Ah{kGWZM+3OaBt_`)<%?&=fo z-ny@U%(R#Jw(`|GJH#_rz1CkFK!boRf|?+riN#QWq;U+mq5l4d?nmA#_fU*<7w z;NPP>rE=vRmlr>+4!k;l{8*aLs~L_HIQHgC+|SK9w zO}Mka%;ozE-P;1s`ckt}bGN1(+blItf8&*a-KnQ4o&U~Qub8OyA@0Nt+r0d@=3EI6 zTJI+pen{EkuJUooaRBWFV^gKaQO0E=*pMkMEASeo4mChEe%u>z4qQ-FuCuanEgZp zNgly0u3pXq-?vq1bc@`q-D%vuPJ`3Gip{-uZpgie7k3M)Czu@c>HSnSSzy@;&Wr-z z6J@(^CEq^T9@ERv@8C3l-JJ>U%O}Kcd*r@)`omN8rarHKJ{Jm`y5-4(TMnE>=VLrK z-*#U2sUxp7`kF}o!nak~UK=mFPE!dmXIuQ6*qD4&ySsbd`US7l()yWLV{8r^Ic&LoOX28qp*10LN5gFUw$1Z7 z=vJM&(c!yQ)z@_`Ub!Xf&xU-{5B~mPi`?E#_7AHMWPiEd_~{6z+CQ`2!&%Cvl{U(L zW?5pQPgZ&sT>RX6U8?(fQTUhDmdzDSYc+B&bZ@)3&(&AOT=?<)H|{qs-pzTTb~n4{ z^AyJuIX&^Rv+Y9+w^nVty5i5nzc18R6;=tJ-L+^3TX$xjW#*Uub9d4e_gXWt6!5H{ zBXarg#81frd~?eeD89+bX=}M%_u$W#do4G8{nV5%#7$OM-4wsV#yFe9;bwyQfxV5> z?J|Po-YTdz9KE>keNjiDp+UpNovF+R+~RMQt8qT!(v)AZ#=52A(leRe(%pM(i;YrW zK5&d|-}&ELVSS|2zPfKG^uMobSb8knC34?|&%95PUEb^c$m0EUlV8oXJXDGcbxYx*% zS{pBR;Uxc=j^yBwX;s=WqH{eSuk$_Q6%xlTe|++aeQc+$1EAsD(I6Z$t!fbvFdn?xyIM`bqg*{ z&SnqfzZmh>!D+`W%_Zj_ioSGZsrhtbVIRx23Hv()s#rsFU&@?n%r;(=x$O#{p^S&Y z4c}0eMN>IWt~h&N&aTo(fls@8=eA8jH==^By|`)NTFJLHR$}MG<^~pw0&)`|alyBKvrp5)!W)-sS56}E1mAf>5 zp5@}lA_>WRcSZ*8TooL(%BQL+-d=6V{k!}BzJH;2b>ZWi0R{BH`NwRQ|2udF}TFp67}?^NK@L9>obhs>z!?6vAy7NbK8EYD<>jFxL=$% zx&6+|Zj&>siTd9BC#(3s&i0b=NO&+?OXKtut%d}>1$B4zOy@K9>T<(`(gpu_ zq$j`LAG0Bay^^ISqHSAUk!*(V-u=naZVNW_*~-1``d1dU&i(tRPeIeRFZ;XgsmKE5 z&K+`VCR?fX=u`=2XFg$2{yr`_+L!^@-oH}}hvgNOI`F1mZNbhg>|W6$`{@9+Qj+5N|5*J;zgq+htc z=kxCuw)-~tJU86`V7ufN{>e_tGG&X8GOdkWcsyp_xmz4_()+dLs!$kQ=TuqxK!ua`W2g=Kdt>2YQ0MJ;nu&!im)5o1T3virHLZl5%iZl7Q}V86@9#1HI{K>j z9CzNPeOBP=q~sm!CsP#W9WGCf$$TL7$;0wqm$!V_zU?0}@7|C2w&fLjcU-mJwZJ7s zOBdetbQ7DR>Qu;J9(VAk#NvaEeZ3!C_D@=Ra^)v`FR$n?;cna7F8){IJC!(5xo6wT zq|)<|O{@O%%*e45oU+vOxcxi#ck0XMoSW)!hv9v%<&Gt`b~_`DY)iB1qI1eEZ$x~U z^`txBCc)k>XxFwPm#OReWc1xx_NNxzzq2Z*x_;t;bL;dc>{i$nVs%Sqo5Z@m#?!hq z-?MPC*S@P1J@@#-j`zBMmACI_ll8o>C~MpLAc1>xu0pw%^S(*3$Ohqj{*dU}6n`R%q7 z4h(ZCX?kP(&12#0lxtsfR~`@8)9~l1rgm@H{g@^Coz|@iZ~q9@l?Ej>^FIFmZ}A)n z*c(!*vc6%{>-@1g2 zZw-tmCR~|bJx9-Lv+IHdX>FgEt!W9ldd4x1f$7m?qjdlKi=!j=9r^o2@7vx)MQfiY zu2c4XpY?v@%Isd=c@o@NYdXIx**JeX89#sS!p5%8+7DhTOYxLLozdbN8D0!*iq^VCG1LTDC<`nUAY+F_!?bmU3 z^Nhoc@8TL{7JO4XQqlUJ@wBz~*<8sNYorouMVk<_@@`On{|)v zN_`*LlhE3GKLUZ$wgY{zPc|Uh#bVb%g zUi)xB%J_2H4NZlUL8n|8YQ=X+7{uLM5unELjcH%B|Cq;P844tDIc1 zZIeMtq{Vt;_hq3ySO1;-^OXIEeaxJIy<1rv)Na_;to-lv=|_^*+s)IiaUGo6eEiJW zrOEe`#d`m4T>ri6+^MD6IWKp_|6P92a-R69*NztZ?5FJW_Nwz=;4rJ@({{hTy5|^` z9?Wt&JtLDLf?by5RCk{2kNxKL(<;^4ez$I{uV8eKpJtQOk(}zX)+TDoTaReRhg<#! z+=>=IGjpc2vHjg5UvsnXepx4<)$Kj$(0Kn)@9hWff9El=3uXOZ)0>_2wk6%>?T2Fv zbiyny-w$3W(KkhI?I%k;#}EBAl^5S}*)CPp-I1POU-A9*?;96`*=~uR*?8M>cH*0z zPuK5rif@o+Y&iRh^^@)-?_HyxQB4T+DCf`{u8#GN{W^4Mp#Dg{a&YfnP zrF2N8jA8fk{p$+aFTUPxmB-1u`HZ%lyb{Y!_c-e1&}+PR5g$HVN8Vw!zZwnR8= zwbXe$dyZcWgRfW5&dD+B*Uk*h)pyFW`qyUGclPJ6=y?)RHrZTv&XwK_<fM&fKdvZ?9zW3J{ZQ+)nBNlN zCAV{LWv3WjfBMi+==waz7<-4Wou`~wH+vu8l3KpW$83|l^R;wfSqrSw^dT(hs?c~hKV_|t5s@4 znQEICZ~ZbOMS^GPUbgEO{~G0}weX7nu2J{&m{{~a&&I5&W3spSp%arXnV6P}96ROp zW}9@dwPcjbjtTrf1s?wY^1?K#>Bsy1+N*ah+mc(bV&c`usGgSgFUFG8qo<4P3S@xGgW7$Y|aa;Hx%yup3$j$Y5kou%D4W;=YOdG!5hxK zW#j+X)qmvwo%H$p<tV4`#5tUijlw3Dj9d`WF zHECPW`!r2%QrniVQsGXWQnM#(dw!T^-NPbgrqO;qHg{?3 zW=78ik2QnNF~&HBFFImU;ASZ!9)BctsZLnYD$h5Yd^Sb0O|@k_!nOS9@+)UnCC`aD zCcg4(_=GT)1>Xy%n?+lmoEB4aJ~HA%<1)jX+Sd=KuqdwDc-8#c7qjkN#pEJb7ttar2|{X9m@@ zmER*y&Aj$c_F9NE@3L6A2fq{wc@9*}{Bz*U)=f4KS4f@u?R&XrbNGelE1&I~_gna+ zHm{iUvq`hB+$n9(z0puN>C%a__2q_#7V}w9jaDMo3`qHifFtSA`o>oO2~z?GAfPL=6ajA zL{we5O?&jBZI2EmIvZ}5@<}?CBOxbz$uD}^Pu7g1|4pT9mv{Bn@7TTB#F^=QG7krb zwbj+G9q#wNP1t3g9-jN-cyNT%p9P0@Jp5nri|hGf`-A7M{QYPm-e-Tw=H=T%^8VQm z1s>~ih&}0F@p0Q4{%hN6g+H+`oYg*r_lha|o( zQ8Ij%duGjB-OqlrT@H9mbBeXS^;09CdEuPijE4(8y39|{oyR7uCupWHjdjVlr8}q9 zb_W!1*m-M>(gnuQv_lv7GGw)|aSAo<3>3O~xL?(&*3!UvZoNX3a|(ml>L)fu(F%_m zmA6h6IoBEdE_}+@O!L%*O`YbycPZ^WwdvXc+tmjZ+TD^P4hnWHJo-XyMuPtJn+3XQ zb-Aybe{(Z_)^%`cUf=f3#l1z~Zc^t{=E`rM*fv+EExgJhwP~WzIX{cX^D5sM#Qam) z_iToW`CZ6v_Idm=i`Lz z-#HJT9q$zWe#9arDbdc?JXWCPb{zB8bT11pJBO0mHpiO^#aq6uOHyZEBouHi>fBk* zTR(d1&%9d`{k5XoMeajzEO)7M?U?|j@d91-nwWoek%M=aM5X0sr??j*7+Nm-1ZyD$E`d3R??dz+K zhwRw4zwIM`PyB_I>bxo{b{~4BE*I|iTzP}vK*T%1C2|XkcSp5__g+8VTN7t|dUo?6 z^FqgIA=ZJXu6Z%NHeSiROzZQEf^3(kOWr7X-1wVp!?|Ajt*GLSePX%Mdw0~&Hw^iGtoMKUZ`=RVmMD8Tf6bPWdv`uUfw|-0K1&O+*Jl<9)*MLQ zFMacTug%RvcHs16(#chL6joGteK82?XYh_NF z)lJ>rdCcM7-`rbTvmbJO*t?HGB2wX9RriutmZhc_bKUx*`B~OjEt|8mOvamO`Qbqn3T!tf{eQb9 zEBL^nwy8Q1Yx|#ll8sr{v2O1lHs)y>`j=js3+z#=>&dYWQGN36jBer6?+4DMMwK+) zVdvESeXnElS)Yeau5ZJm+@&8{ee~nl;blc75##`>zWZP>w@dB=QK#>8mY zE1k^A3n;QRZMz!N_Uq+s#wQE&CVpk+%&g3l=kZ*6CjN%dYj&XHEYKBNyO$(hP zuEUl!J8}9%x9V-zN}m>QX8j=_mcPP(!ZKSo<%>zd$};tgAA`4CsJn1RbM3mx31@WO zcRo!j)_E#pcJ7axI{zL{(`A!O%(wf!zjea-PVTzi#@Kf^W4P9|99vy&zPT>{|L%BU zyEO%NE?(mKRW-6_*w@vEa{s#0C3dPx6!EiaEi;Loh7~Faa|>gcFE4`el#^4-e?IsC0nV7%Y5>d36~ zGp_uf{hQ&Ev1!z9zSqfX4!>Aw^g;GWPa<2>lf6HZBhNo(%8K1?XS3}tgU}t(;^64K zJ-yGpU3MIDl=E5;@xS+8yhdk}Yw9Jn-MQB{mb-wHKj04Ogf^EeDN(K6SZbynT zZp@frX!#&V{#$95nBby@`s{B>$xD~Kdhq6;pFdB|`8K6T=itwyX~!Cu zcu#!yNlCZL&$wl)>dc)PO1$gNuHAk@kGpnPmyxG*te5}d8&Y|USuYQM5c&U$iR8;Q8Bf_ zeB=8qzX`qW3}KS**)6B&?lk|tz}_Noj_dauS6=3DigZrj&{@F$>HFkOE}S=tK0jDc zZ5tw|JblXXGu^z$7Oq@Wsi>XJ_v1&JO5TEpx-*50H{Wv9;;j8~%l>`Uv+`=@Wy|mI zGv&YZwh)MSdEUUX{`f^{1()*fXIFBJKF{}0Pk*eDyZkrHqQl!SH8}|RyV%}1rngPF zVdk!!u9D;#wQYL*0k8R9U(&sH@TX7wyVK=LVf#)yKHYO`XWf(yd5-5o9hba0by+V) z{@$#YD$9&!6rD<8aLL}aq4$NNx6=vT6kDftaZ<32x__dB3i>6e^ zGS5iXmHVUDJGn08ueM_8HuB&&=l@b<%Z;pO+xM>a6gYmpmfP~w{fe*WPc5D%QT&jF z-#V?+=z8n*H|v`J&ywbsIV%40YiOkU?o($t`H#FicCRusdBZ=uGYgU(@BiknahFz$ zzw+!r{(|S`KaWQ<5#4s&YSi7#rTW<+t6-1qtvyK_dxt+u}d%H z?`}Hu&vo(jr<=MSPMw^z%l^__0Zzxxd0z!*9=IG(x2$EspNJ*@99`BdzkhSW^yiM3 zv`=w)UhsSo-}00pfOVtpw3^$oN(WW%^RrC8Z}2S5^2O#`UJK0f6nEZ=_BLDMHhW`k z(1Se9C!5)%j{1JKvoedn7NyVAJpCW9m-#xyM`~|nP0tzMC^@C=t|Rb#(@X=QR)b4{ zj+<`q=CS<^>S$?-vfo)_qhK~+YufqzFfY?7UqZ`!Q(yP&+Sa-4_mNnRZ+Geo#CQ4a zwBL1m!R})p9!ymZH~Mtx=ZyvaGa}=~Qx~PkiCMD<>uvKXoN)a$8o)ASZ%tUs2w>zgKz= z&oHz3wwBrX^2Yt z%h$54`@uhP%C0UBGnq1_hq~+bROnyX@>b&Nz6Uomr!uF0U%bD-h1<98*^JWpsN`3|9g;`Uur%VXu@2BP3O1D$5IMf>r`tSS6YxX!hvMBpRUXzlzny}MC#l2mZcZ+uO6Ssq! z;%XOj@4OOz5vP36f&KD^#}7Od)tz(_{11Ich4Wpeo&=yCgc1* z5%v3NMk*XDD@CSVSnId*=MwAdQ;x2Ge^xGNRmja3JJTDNtXpYq?q7Yp>km^}hWF3g zw-`7BPgS)@?UY#BmbS9w-@kPa^VhT_{HjrP>J-h9y;jm%cPe|v+%*wT1HBf=JP=a+ zF8;Sry6(uXNpI$7yo|YYBXSqRhTZK#Q$9c6Z2VaN+-bAR&!*ICD4BJ?UeTF;Ytj-u zk=VwY?Pgc~s%)nyOm*Kp%`zu2A*B4MgkwU4riREXah{mtJZ3d*x0g93-k-uWC%k*g zsVyI+XI5)8cNAP^xNTGzncR9;$#2n@*CtQ7e!SqgpK|0lYx9M*Sr=X}U%fHu@E_H` zQGv2KbIoG!nI)^mwyytXKiBbyd81b3=ew@@r~WLBOFGN+`fRM-gzXzmc1x}Ld~-ST z%VhUulJ3j%{TFL{WgQkcQ=T6DYSKle7oWKPF}hkM95}XMne2lZCwB#;o9`48KBxAF z>qk<<+Tu470hww$bE7srJAL>2O~u5ej=p!@wLWlXZ(jJ@TIAd82W~9B>qQSu*x1pS zoWlO z&3ydBYgeniFLvKt_EmN2jxQ$Og2FY9%<{kYWdxd?`u?z8XieC>-prd%J5w(;*qs!4 zK4VF3@`Q&nzGwH;9Namx?%x-_=PKvbesp|%cfaa|*;7YP0i(sU|M&cPzF0f<(7USd z-K*B@vRT(0qG>Z_!p`LdYDqW6*bYu*Zsu2wSy#WYG0rGJc5%*M6_>a3Gbc>(k4(A6 z7S42VpZ4?OV?6Hj?dSZtU-(5&d)N9Bu6_N>FCO3g;=k5v#T&Kpz29$c(VJa#&29e- z=c{w(oqDv?Z^KdFmC3LB1637`Pnq-_Wh(x7S@lm+$oHm(ilY53_3?Xu|M)!pe7b#Y zRi%7==r%#2Ki}T$VmxwEXI@(6wO37(<-8JZJ-!m5!c%jDZ>vYFp$*qD!Pl(bT|!Nk z_IWS9T-adUGU0#AEd$lGq{gzlYuY3YXY5LE{O;EuC44W^`rxzftxDdUDo=sMYEuc{nh5c z%G8=K&YTack3H2~=*qq9UdJ|}$MfRVTM7<7XctizjShO0Tk@t`Hu1%jHM3*a`{u|q zY&AO2-PP>Qc(nOjSIp$jqg^6)JvTS1Y~2ua=h3CVbv2H6CYA2ZDBrWRE5(;JZ~nRq z`<8nM+`TLleN{Ad_P6b2g_~CFyM9M*rYG0t&>!dY?=jRh?96V^lI-Yyam`16dh7JZ zYc8u!bN)8hVZ-Sik|*cs{}B=jx_pf(|IIE*=c#rHdB;kM^KvfkW4`(B#{8PQ3o^O# z#oo>o?b|AAp39nTeq+TgDG$%ywhbQZHga75d64scXkHvYWx0=&&fz+fU_b>M&#o0y=-MhOxlVvvh6(lcWQ5jY^;>3ykqj;%<1!%_N_;b)_l>@ zUKS94H|;@Xqx;WKc6)wLU94pPM83rPqWr0d6l41^z1^+aw_J~xh99jgNsqerQv7$^ zlV5QUvYZR_Hf65#-&pYLPm>Yj!>Q@wFSa(D6qox{FB8-0zkc+O{gex*r>$+#@b&Xk z6z-|*nBuyAC)XFI#j+XE?R6;)U%optR@+o{tBaUwx@jadl^ebJ{)l7eJF}XimDe8I zO*wGl`ME%eZE~9#T;CmK=$dvpFH^BDbK=(%@@f7@Om5VD(QCc*$Wu-{!aBA4Wb&(R zQ+yW-F5dRS+l_J6Bss4i&u_a$O{uxO_2Qh=J4q+k*s#v#5mL4MZ*)eZRhV^mR-nb~ z&-$nO+FMH6HdOci?9(jiy);c@j)c#v%zmyjp1pAgpKe%u?SYdTuIvA-*GS zMfgjXn_?acvC`%qr&cq?+!9#3T+T})b`Jl(_8)tbZnx%c3R-L`yQ1~Wu5HTa6XrAZ zT73Ah)VO%>DS>PJzUGsSRL`F-d&hF*zJTBw+mnYj7R@ocY_+&$XW$*>t0{XN`cvmG zeWlmNB5Zg5jP1Mm&$y?&-O$4RkE7h@NVfpPWUa&nyb6;`(oG*Njb1(Z+mEG7woGlk z9;Y$GZS53R@05aoWNu%+%}o5l8FynDq8K=Nraa|t`z@?KA>O6@h0|8{t?s9aSa+W- zIy?25)ryRj-9i3+nR|Y^>^#X zQXC(OBU==%OygI*qsMf@Gc+~v^`G2jA(3yzvho{z^pCw?D-~)%NixO8I zkoS`HWPMn;NIq}UgRQph6+R2^iJvl3J;lPk=gq?4!UnC5uWMa}cRbbR7VcTl%(*P) zLEf4JiMhJU>^mmh;s4wsczlmd%|l)JoF)ER{hnRZ1WXlYXj@$Ww(h{`qK{AQ>}}4U z=G-Fpe&M52r#cthlHSw#AZ0?-hMik@SFxQ z4NE;5IhgkHT)cbixluzz(#@@JUQW-oH1*q&C*sXCZ(ik}*i)MeF8B2Hov4uB{!i~( z$^Fvf|Mhk$e4oOub5U%G=QZ8KJrR#|UbydZIk~W1MU z%ej5V-eY$Zr`kqwZuqIWPwDZ^W8O~}2Qj65o6N16vp3~6-$xm3?M;1KSgqqOXs*@? ze6#nYkf!izoe$Iez9Xc-Vt)%Z??c{ru+VXmKlZL*FKT)g?>g+vOh_ zdNZDhQ`!A(mys&Z(^*aPyRr-#RgKP0UEA5RbW2vj6V-w{u7^UCWDUC3Uq1DN`Bt%h zgr2_JdfnXE{PvaN%Iz=mYC8qxrO&H{G;TVqy-+K6n!~lWP48}Hd8jfRp3|_&fz#v> z%P-~j-I8}LJN8Ytx}Fhlqq5{_de4j&!&gGrCOu`{u%ch(!;_mgqf-@)g57#w7%bs? zQD{W18(UC9Y)h+p7a<;)|y@C|6Sa*ZTen^>HNxC z`5L*I>l;E3D0WH|r7WzvbCiwIZJW^jYU$Xyi-l)3dM}8II`&^<;&ZVdW{q32eL_XT zHmz=Yx?auU2uC@Whh$>^$xUq{bHDvL;j{Kdfq~tHZZ_v960Z{6*FVyn=(6)lN9n0A zmEYw(GY%TBx&5T*BwMp@N<@HSO^9Bmu&nVfq`xoy& zw6B6u#jt+)+~48rX4Nvrn*Q^vxXo3yau%<1OR2)P_=0J3I|Z(9xU!}$@~~Ac!;7}c z{|@5UOV1oHIWq0Q-_>RB=efWB(4S{^`XQT;_L_hHZ^oMM782OZvc~dP+g{0aFZw6H zzNlR!VV?fw)-^rP4?gd=nHidWUnIF+=y(zLxr8_C`=88Pb%SBm`u;1mR!Q!m;68g>z*q&>-T28^WPIh7A^~Z zbEJ0Wv(&9B97!|Tv!?y>IMliCzwh)1YgN6|^{!vIcvvTWv&~~Kp8rXCb#oJZw6Z%> z&;Qsu`!V0PYrz&3x-FuTi5oMFCgdp2u{&`7={%*vdDkw?nfor}_r>{-t+cJbvoBd< z&^LW%gi&<4boAP3OgpwNj0(wKC(Ls7_?cCSCoQF1%KPq~Jrp7NIi<+RZ1&Nu+vhQF z%t*=GcYeoggLgK1&tg}s%kEe4Ss{EsICt^))1lLzyt-C+F{ky#oiJm@o0c&$ansHw z&bm|E`1in~wd)kfpK!d_wTZ9KQyX4yQnalECuev8w0mdOSSUACXz z`=Zm=@ySJ4-UwBn3$GzQMXjakkRo)#gg6?nD{VmN`=Q#6bV#~xMtJ2r6 za*KTA`@54>?&>0@nRcHY&kLWL;}jyCGTZ;^vD0o@n?7IqGqE{Np_Au<#WfIUhFo8&7>E^ruboYI}Uv`igqvavP!F+b^!3zhJ{DJxwV_qsI|@ zH>h3CnCx@vQ&WT0s-J(|mA-6txwIxTcbT}Sk*^b6~nd>o&_v6PLI;Pxn4{J6dU_)O3?D&C2<2 z+NW(Tdvax4{@tqPt973qzWMXw?(V;0R+p}6KiyvzDQGNux9Cn3x4_G(54OsmdU45u zOZY+KsUZ2YPc*rfOj#W6F#qMfYFQ`yhYQSp&AeRkb9L9j*-k4|TrKj&#E-?FUKA5I zdDSf~kHmvtwSM>qM+>jyxpHc0(>sm|;pfjH{w=RJaDV=V<1C-!CU2j_t%s+&?>_N$ zedpe#X_ar>^Iz#@yB||*a^RcCJco0!s*%;IGwJSA?)@~>JM%v{&+e~BmSoOPh1Xlw zJTIL1*Z6CR5!XAP$6ChITIaAH*Pl9bc7W{p?>*b9J!8XmeEvKoQoB=R%0A}V%Nthq ze0;@M-!dUJ`OBuKPTy=>xw)_3ta+Fb_hRy`V#Ny8!y7*-XI032yE%E?y$qWm-=&^c zD~YQjH)m}Knj^$KL#I!9#tEA%OoEd8V=JmF-if3fp8EKdkdowMhQEhiz3thQ z@o>vi4J%IdckdG(7ze9T=<10ggqJ}mw5}uO+0>e+SNF|jUPj0 z6<;1StmENg@-_Q?>;=cI4J$q=EZMxhZ@Kt}wG6f#y9{hjOch>L9A-Ny;iMn0j&#PV z5-t|!#3$YikG>ady}j@9t7A$>(^9X?(k6h7m{p;~F=FX`r zgVI@^_@Dp9cz^lNdluieZ7evrVXlQzs`c4BOe>x5*evm!dR~Kb>*=L62lgfKwja5^K~=fkJP6OVs2t>y`S zvr1u=;M@1w_ADDW>Q@O}j#hVx=3UwLI*gUcr}akg#TN{oT!F0tYoE$_Mm(u&zPHWc z&`On$c01PD2Cq?Ry(G4~YyVWyi2-N!|GTo_OsnkGzwhh*zP(dE(|%#Cn}AZr6HFmwi8x<>bFJLT9fSyBh?s6dzB~7Z*61%Rl#Goj{XmnTyGh7yB+f zpLfk&UiMO$$D{WTrwZx_s5Ne9cT{u_eDUJl;TMXAv+v5-#7C8Q&X()EkSCULT>hJu z=E7a~XBZo#uU}dow#M!j7ss)W?kl{^+XU7=W@zo)e!$a8oAciDjxB!|v98E`uch^? zV*0UC###}kD|#I_K5S_dzO`2BjLkadP`&wu3mKWUR8bQ;p zuThW9mGjNSyQ(&8dY_-nAYq_5oni8kozW6oc$~65}nMX|*c27{t$<*v$ zX(?VV`rzipYfr`gn?}5QwXx;iyY&;!x!>HmQD*8@0p)!WnTvc>envQX1*cgUwsoJ5 zE}6UGxX^{4GfvNqXE2&w7b2#$)tJe@dAH`BjV7tTSdDa6*ngf9{oIT_G^pqjrl#9H)A&}tX;cjuj-aJ3I`8WlrLV#%3t{W z{gw@dOf0%)SN1V?+8zC}QY zjQj3YKiBh0ZWjr7ygqNWfpgs9!xy&~JX_!Tn8OybO=h^&8bPb zuXCx=mtEh1Pj&;daf!LUsjc;PTMhB2My|Jlrhk6C?$fPeCE@xz9b0yV^tnqk_hdozuHw`4V z9XC29X;Un|`SRT0mAY>~+z6Pa-Z(Mwq3NdU4zAw{m=+!N*?X8jf0|wG%%#hivWsUP zP0M7Kzq(E1Vz0Z>oNLFJS6&jzI=nqMc>i0ci2-LkuEkHU^nYaXMJj1?)AI{&8Mu;a zPl(L%&^+`xr{!>spy*oZ=HF5Vb$v{y%32%+D2;IbG(T% zYz2N9iow&TA5fIn5dIv&WdEP(orry@PJ%*#g*`{=&+J>r%xr&6jDGoUqFeP9G0vQ; zes2UstFI&;Uu^X1`x&{m*?a9DM6zb{Ncmr7(K}nE#`$jd5^FzBud^Y=HVRD>zD|}) z+NNr`8lZdv;dZi%`_$Q|lGAuvv(o=m$VQYfuATOeaV4)x_R;Ew z1yAZqF7d73?#h)J=5VCx_Pq@!k1=jlowhRVXx)*sPipyCy_HwnIvkv|Z%y3XV*c9| zr6CbF*tYdGu%5Wc_Al<&R-EBniKTlo%FmmU!ugBao1h*ec z-Zmq=XU>A{YQ3`iyej`>D`o#^P?Vi=gS|9a>%~IGAG}#dEswUUKHj0m!1~C(GHTwp zi$&KXKd&vQaHv_re=e~~eD&0=^4m)C)>wF2JapvC#0AN-u2xc3UiR(h{FrOyT#lZ_F`YXL8Ftf>U0LZ=2ur zr>gv7NwVKc?Y&Ze&%JNuSN=Tx^loA4*!9y>ufH*Lh~NF-^F|gYUW*eJ`5pP@F2BDY z7ur*L_GI7=Mjo5(Q<+)(FVuhJRBTK+Kf%FAsv-1Zk1+2f%ioH#7p|S`v3|>`d6Psv z%Vw%Ze13WN)7I}RS=NcJh^Y#C{zppFq4Sgdk$IDLF $Vw9wt>%WL$dlF~aYpG_p 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%0APm`B(9){X>)pBnKy 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

sNAVfF88+89=c$GsK2dZlg4^p_c^00 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ǵRCVVj%?wog$n`o!eP?~o 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

PQXlcc;BemzGS9>Rzx;=`VCv`?i zHnMl(>p9{UCtE%gOs{&X_gK1CF6m|yTl}RmS>@1On++*PeLjh*=WkAZ zAsE_|sIRkO&BaeAH26B&?$+-;#v_`#JVW50|B)$jp{v}Ia>ZWQY>MdpyD;}`X@gH- z%uT7frbErCM(3w3IMflaf5+;FUws?Wtr^6Ex<2ko{HWZJTmsDT3 zYL$|=x8+af)4@3ty5*-DK5~~5`TwB#iI0=BkIA3Ev*UMfIdOZ#htILR8TB*HT0ibQ zYn``H^v2hVhTry>C|fW{?VC3%UunvflFRWgpPcGh__)d~M*hK{tFaGsS317qUwMen z&qL(!D#v&K?>wD&Vn>VD|d z<%F;2_Jox_XbyC~68yxpN#p3BANp-YM^|;WvR=CI`JJnBci5Rr6L&J6zg$%({m3*q zWl8wy+XCxCb%L0rZhlJ%TjDD$^<_cu&Ce^H1s8WL+A5V@cQ-P$=AR55Wsb{_-Y5Jv%j5c|zQN?E&fh85a_hv7 zi`iT*cr(B5U&$QZaMz6MpJ%p3+MhbN+34Eo%ox+$D0gX}qnG}e=6}lU>vsOMO6%fL zl`XS>`ZUkaPCD#$HR0L%A2&M`s%|xliwrrh6sz; zsv9zC>h3dYW}5as)+mknSN>|v+V$JMy|7PsJzwR_OIH!I&91EVi`MSZcZgp0=lp3t z-|Y2zLBG;&%=m9Cdg)y5!ydcdozqlq8lCNyU30~3?p7Ylqi+)fT$PTPFR(MZAFFiw z+Km0Ie(!8AJABOVs9Z5|7w;vro&F9-ck_g=nY8=a|CQVLFC1H)`={;SSA{KAQ3oG0 zxyD^y^P)KS^TTBvYg>{c-XB_9;b?q>dCIxxM;Z-{%Q-*H@#&ouTG=({#i2j1o*L~n zd2O`zY)|@iJ;ptXtKS*(mhO))y8lUg=Wpkqq;tQIdft0w#?<*zga(S54tFF zGFQ#>@>wy?uR7nkIv!m2_SfYHQsZrx4wwzgktCo5A`#Wy9t8!K=_FWFEtmITy``M`pkDmY32#i+W zaw^S2v4m(xkpSYBJN{dxKwowks>!Yks}^Cs zr>?wJz*Nz8(zivEwwYb%WPi~bdG!m|6_Kd6a&^l|@uxJ-&CK`gVp!?lcT@R^)Y79H zRy4|o6ti=D-la45{=GF$vo3u7I&q5RRpZNAAH>?XD=nKTnV+Rn?wWQn>E802I&Y_xe|A?{bRRdS)r?^tVn<*mwD6SV|nf?R~a$n`WKx5Ae)d zbFxr1f3eQp&NXgrJRhQDBHL^?B<%PhomrLRxBgYr@zp1eUOuSzB=>N2zp?4U@Y!zu zujWkZ*s6DaOVsqoy^n?KSQ($#-shL7TQL8P;)jm{>a#2(|BFi{?0ults{die|LjSB z^gX%P|Fz0aw=P)uKq>CR<*q+#%1{1jHOZ;zn7_)({_Mu=fZK9aPA2R<_w-U#Ufg0x z^n85evD2ij_O~v7(R(c)6)MV+W_C`}Y|`_r>!F!3Z>7%eJ*YcnYRlHl%g=hwSbdTW zn$`1hn%7U^&2ML$t`?4{Uu&{y^~#NFJl^LjyuEPp*4o28#&$clwwtm35xrx+EW~H# z*_T!m_p~l`YGaq5v16_8*&Wes$tT#BcNteUd|+z&QB+}bX*nnh_SUp40QMuCWbnRMiaL`e<(I)jGQx@hI6|_S{6C6}mGgS}sl#OLWaP^|5c>_Dakp zdwczCRo}Q%bDwjEin2~y^W5{?BqQ7NtS8-H8*Yern)B#TZ1w(VscQL%WnxW7R?m`c zW0zXYAE)|=hhHZ$SwtyD;oy-oUnkA&{%0{|@>x0ew41KG+_Jv<2E3iBabWMU$s%_e zdP7c1Ilud&Z8=Zz-nABu)~Edznk^b#&Q`TEvkzYrEB1L=^waIISSe?CQGsF3rkt}O zr_8r~TP1YD=`quJj@uSGd2;()SzfOU&E4BrnJ#{%xB0!^@5e$B(nqIp|D30864Vo+ z{Yi;M=g)?F7pF0>o;$|*|Ky(_FXhTfYiE`9MwXuS6@I(wt*D>em6FT3yHs~Abqi#< z(|&2P@Qx2RRXKhN-h1Ubo3&!&iGo8PueRuE?<>$2S$_A>oZ7I%7aT3u#^ug`5&ULT zeI^?=m~Nf-hR1Ri0k3 zhShb!fo;Yav-=lL5888ZZp*juS0P8ar-`y=eLkb}QO1z*$5Y;|Gnb$EA|kzDV)S_y zbB-f=ALHK}wXjbV&e-RA=fhsD!#{cVN?&2{JXg3VB~|iT(7p;~pCFNUZ&k~JsshVm zzW;dAv{cbA$ET^`)7gi&eRc%!%#V4`cDj(`@!j@1PhHMO`<>@Zj$6Iy%TYHgu`hkD zUsrw@(p;)W#SOiV{8{T_&K#Ss#yOksyXrYk zuZ8UTZ|j$dmh!26&|B`cp>p|5L!O%3`_?_L$TclV`(J4KVxLSDr|RQ^H$Ttj9Diqe zc)>~2=HKRbBcps*$WDBm9qxEH;uQz?v4mK6p|vwIXMWxDk?X>ls0m({ZHuZpXU%<* z|LAw&lUW`eX5W_1c^JM;+NM75-tG4XPJ6BPyj!!;{ohyh3(^l2CJQX#C@EiLpOf_= z$m9K*`5RZVJNeF&`_wU;o8M;NDakMV^7jv{Uooeg{aMV4=R2}P?z~v>zdmjg_y1gSiXSS%6 z#q@R4WP{Ih?Q^Xf$udD?}P z8O_e>jP|ITCw_CKa_{DuGkg>H<1=Q9=`C$#{dr2zDZnVycEZVud4Cdhc1_mF-EDQv zaa~AA{@#aYUUxs4x6$pii1_2_lX~wOnthhj+xLCemJ?F{uTO4^p2~0Ufr;x(){{UwD1evx8q2Ff{lz_y%q&YBXOOw!U`z!meq#Ts-&d zHSHC}J~wP$w0GGb$=R29*3Le5dh<^I8#_N6)h@gmaCw6#bMA|Jibt`Z3OpUEY4QFg{zF^jK4A=T3-O`j0X zyo=><{+kypA6S{@ez@7-^3vw-K}$mL5N)-kwc3+!u8#Ds$oW z$z}cDlu!R*zaHB1$RYEH>9SJht&PP7-pmWmFlwG* z*;#3-x9;GgOtp-i7V9tXY0|G?R!zL_9CanqYX75%>cc7@;{*4XtG&2zx=6b7e$A)a z&J*?rb~2Z);rb(5fAa+Q$J0J%UcOPAveCva>Ul69>fQDttF61-qpnB2nqzD7s^iYbW1rk~*3|U+ADktpv+JPPA)5rV zyB{JQwr_2`H2cc+nv!c9TUM{TyUuUhbFtv7@!~%{)2f~XGOt*8modNlOUaX$&rXWC zCp){oRa9ZcTuNl*Yg#b44aZ3Ppo;(u_wUfU+3df%t60C zKWVt0a$Nnd?3bl;cjZ>|-dGl`xj1^y+@pPps)lzC=LyW&^(|Uc?{4*M>(7sV|9v~L z@67?PjNHjsu#!FK^#h^7ES9be(!T z1&uAU8^8Xsx+dHA)6QP$UeAje*UR2G`Om!eFw??&;dA%gr7LA${JyNImB8`FYtDqY z(ueuNYYk7PU5*x9TVeA)nD>cL+?KFq8+OTFJXQI_?rMf!Q};Cs+kcBb*|mtTmH58D zB+C2Fhee{?d+ukl=st8^9r66?+K#ZE8^>pg@$u?My}eper@iRvpH*(X!f{)|{`@+7 zwsc}@dhzbx^|NEvYHp~K>&`8CGqtO8hno*eK*Q(RSwRi=UB4V= zOP-g#MV)<0uu=@KgSpTtXTMIN_a`1RaQ;-c zrf8#U(>ZddN1i-9tLSKYme}ng)fa7Q|Et?fu6xcBf7o8QMEQzAU$4_HPo}x6q~@-C zxBqT^`Il#n+LJxKPu0rE*VPrr&g+$a_HTZ6jL!a);I^F}dEq-E*nY<8JX+_*aGys_ z+~@B!uXEC?SAQ*-vGu^pIU%L&t0sm1`@ivf-PuAJ&v_3H?|Hl2BXPR(DLw|)AYY~& z({=$5uQzHQJPclobGKexw2CRzGbMG}Cw_;F{PVx8?;M_S_x8Rsr*F=9d(-yqo!c*F ze^IymFDy7S@`DcJs}Gmn-B@#W73Tu2yT*qOA3l7z-d;YOD`9JFr^VCWy;r7df9sW; zpZuGjNh4*(nWI65dm?<(zA5kMHPq=p^VhfWb#i!;N9EDJ)2k;XR&G~zzWMXb<8$dJ zmHuXI&ay6)e^bw3|Il7&olC`3xA-}S#0u9(h9vAL@jmcRIq&wP*p;3y|FsB2E^P8o zKkM;E+0W?v)7@*C%xhCSE04q<|2VZ^huk7w!?hXpg$(@#;d@=S7!;NGvp62l`t#3v zNA=WO3lFQ^yKWTD(Y5?{q<`k6xN=1~wHL;EY7b`aliYViy6%CPk*uV1~c zlC3@(@Vj^Up8}56U2XYVnc^<11hou!mbU(}DG2zg>Lh*0=Eyc?P4}d8l}bNC|I9Vq z_T*!hOPJG*x;zu{AD!3h*nTl2u^;|4{kOR8O!-j1kE;uh8|?Bgzgv0O;(ifZvVV7k z1w$AixjI8hH+vWO9;Et$C6Lu*5qhGpMrrx%h+oN2jV6uCM;Kv@ba#QJtiLIUN z>wn(K`5Cm^^MOo8qLO#z#uKw=9uY1mn(9A8#OvV)RYR7917$4-XLLWdmf@NHtSh-P zScySvenGeN<)zzB1a$~1SiS#bx+6Ylg5UCb=cgSqjus4anVpj6&9r-yt-$HM&r@`3 zU&|y*iw%Aob!NTnIqm)OgnVVel50&86Yf23y0$IFtmv0Vl2OG&t*%--g|pi`%v3j} z96bE*>G}UtYMOR_FA7vYZSNwczau(@L2XWKn9t*H&Nrsc^0ZIpIRCq3(w)O!#ca(r z0@(#R?iY$GZSMK{a%1|J;1t%j2$pH00fKs8=X{IVR&p|6y01p}^9!{RQck|U87u~?-*^3*8N9YSVi8w$be>wg@=ddRp^{n4 z_U(S~mj8pA(kA_B2VPbjQ8q}~*y7)#6QxuWy-!Yi#?{|lg#kW?4@D%*UAKR?P}<+4 zrd5S^ly&F4NOI2#TAszSA+jQh{juK($+S?e!x#AYzCH5!?CF}Y@siS?Gl3D7r`ToA zPy5knys5(ZU6hWDsi}GnQ?;Jj9;Q7Ko=lp)CQZ%neyUwcvDEva_p&C%daA(d`(GF4 z?{yPgP+Zp9P!J+xWAMyXHdRk)(%%Jv%shS(AHO7Nm}m*Kbe<{yCRFXadl%DusbZPO zi8~In9EjMJQP;CUV9uO5n>Lyh=7|Qs)YH#x=Tz)#D$C0h@MTj}O!E$MVPW%n{&dP) z<9%H9@liTzH!5D`9s7BF!mg*c#lPQK#qlPlqjcFa(YeRD?_^BPUKRN1f^L8Mn@+K^ zi`F(v^WKX|&P&c#Y`ish>fu8udeRrgpuyVMsLvi>CF z!~W%0u1)Q{X}Gwi>}cH6?Qh&YyzAe5;7n&)V8tT3_n?`PP2of5^qGp0rx$IB<`JC# z!F|5LU4=boukOj1;WKsXuIKNj|4HOf=VH2}dAFtR)r^%Nck|v`f2D+B&YB-~eYd|sq;3vY?W zqVu1G-i391aTD3gyXz01rB3ebEtNA~m;30hyIkD0Z7yHNjP>z?7uTEL;JJ2q)n0A0 zMdcB9&dqic(`s?mWhy!|C(z1Mi7|M;W95_60f9$mzE-UhS#>-qSyfwsdy$)dYU%f= zyMj{1k00&Xc4x`S;EqmZ^`)u-|MtB&+-gn%X=y7TI!p`6@L$@p1&BZTYu>LffF13mH+I$UdN_?GS6A1 z=ysI|i(nIu;$3wloXj8^b?tRQ60{%+BeUx^QXlr^oNx4x`wuW4!RI`xCswoT4& zzFn?&Ojy#_Z2AfYDvdz7``CN;nN(saKjmv`&=s4G(% z%Ko-Sy~_Kx_pjrj>AT9=bE~`meRyf6DO1_Y#i$XeVZ1%w%wKCo=%U17F}C?C+l^u_l<3P9&vF-cb-nPw}_Zu zxP;|+WUx@QNSep#W2Rm_yC$xZX_W??CjUqV$!dw@?KAuIpp?6n`NWG&1-_R}$%t0)4KYyZjC;I9ARCEc$Nc9Yv8x=hCGfn_l2L|9XL5{eqGMH?^KmVx4%uz)1INjs1R~ z9UIDBc=hKkOzy}v4cb5bYM{*Ojq@h>E|MwC`*QQYOkRoqBK4i~j_rQDzWeXbb!N}a zip+}r7wP=`eQa8|uA1_u1B@1b_-hyD$@l%;)>K@_d2cEM|CggDKC#KXiS%FAZ}}&) zM|kOVH+&`h4)eUFJi2Q6hexJ~UpyP0AN%Q%6-T0&&*e!QTW~Vx7GZWLh;rYbf;(Cym@hn&?e38>|1)ZKQeA) zk6#q#7$#8h)JWE}^i8Wu;Jvdl!kh?Y!SyrJEC&SfJ9;($75QSbBr+PqD|wan}M$J6sNko5{v}$c)dN5w>mm zzKaIFD!QTVUIowN=QpXn?~7mEJNd<#d{e*8RrB_0Z#M0n_@I<|U0ik#o6UROV;Z}c zEqbQlDWm>>LAJZl?#^X98U=od1z%coIz^RD@RCDgPQAYpcj1?hjR*HVVqEYoXXE|Q zg55D*e{Go_u6p0UDQ(uXckQe8oqF>z+I`gymv#9*!{+xjKbvqyKKC~>C0L&Eoj+0-x;9Zs}@OV>7#P9i6%=7kFC(jgWJ@8f0@89<)lA+RD zQ=VTmnNTtNKZp)0IDb{HE(oI=yypP--A5h&L633UQ7A_RjS3DfO^Hpeffvte^tj|D9`SnqSllY3#kTWeV!hGJt-}2_{LT!r$F*+03=&)QqSNTd zw7sYDZH0u^&n-^zeK+yW^@I24-R{@f!*|wycT80H&x$ay%3sM23f9y3>Yu*mJeD+j zPf7O6thO0OEn3Az>sUU1Et*(5p(EZque2lQ0nfw2zkG9pEDY8rUA=$ws>h<)70wa@ zIbqRps_W+k&v_H1wa%6|zs6)}a;`-0^UuR@bIh-{+FsUpOcF z=as7MetT+~hRVK{h@(aEXMT7bu1W@FL7rsh9tYo(kv*ZI~yQs$nr zBVSqVOcf>8{*hbMD}3s{wU>(BDgU(!?O0e{StnJWSNP|8zD&L7<*Qa&Olowq==EZ~{hlqD~Ad}_S9mG6;+XWQ)`(`3vS z+}?R!t2ruZ|LQAG@;Pq5zIS?JZ+V>lCcma`+eI^Or+!U{zx;8%(9;74FWuJioF;4} zw>qTcylVKidvSWU$34XVOYQ$v<9}$O@bW293A$TL>gB}jj-T_otS~kBb5TK)?Da!4 zR^FPjMPSdz#_D{l!o-!uS9|Ode7$Pc9kX5e_4}&88$6pgiM?&JIA`^3g`la&g@@Ti z*5>agF6CFT-odu^{x$1O%o7SW-07MXCwcRUhfXP@f815sS&38Rqoof9-wTkond`SW zJh*f2g8XF@UcVQLRyXe*4p0!ne6S6HZLejJ&!qThjVjarIFh zt|_9oZq^Az^1l2u!7C&D)yITt^-Xe%g7?|U%yL%Tkyxl2`OqPI4Lgs^49gSJ{w;7+B>7F9gZY9@o>&U80zO(O4 z-+enay{%(Q$*gBbPMlh`v_g0F(upOWS7)p2+SprXQ}<^kOLui%)?w?jHxidAot~nl zDzKyfXXj&a_2v7HuYEke%WQ zNvCMNE^YH&FP!DK>RxX0cBg})(So1Vg-WZs0&Bi3I>MfEWOHjh)8#)Gg;p+B=Ioe# zsx|Sax`&-vNCwRgGt-1S>R7VoQD^!<9* z@2RqDOEq?#I*>KnHteQlNjq$Eb?;QUNmlIx@H^t zxsdUksb0AGktv7Xy=Z*=>$XA3+c|-(oK8z>X4*wJA4E3I_G}fkz5D&~ zZ|36#7Z%Rqy(;vKHXPi2s#^b!Wce2} zQ-zv@a~*pQZIXXFeF4(F-3Q!ZzyY@)mB#Je#;}bv*cgX<_MkX2Yx$Pq=<49#y@IQoj*~$(URe2^o|SX zY?q$?bMKOqVe#{?so(b9O);An^jdWLjEReF|7dEwH&a{|y<9v)E1z$!;WQba6mG#q zI&wiF>IQM{VpP>zq8ez_(&nW zE$sXH6}%-5%!)l#t@%Dax2^PbTQtf)rTv@db}MM7(cc(x)1Y@B^OavKIL@z;4t05_ zZBfga_DgJDO2<>K-3P<`mApl^&1CNI;EXu3^#)&pJzKc>*6=VplwS z@t+$HSFvce7KqLZ{XVrt;UCxSGsnwHh1|Z}P;y$NA1~GYB+lwAH`i)jzL>cI29n#Y z*h55Q9vkZP?pmFczboOR1=oVkR#usvjz=G#S2^?Iq|kqD`88Y?&2CGlFg$EJf9H7^ zr_axZ-|F9&an$B%oLHi8`15xCQ(u(MzPZvCwD6mG2&2#oZ{C+p~E_a{1j{EJ; zC)v@rz9}5?PginiLfzGmiXU84rauo~E1hygKT!Jo(jr5>Ah+)V zKYNcvZIs?8xSJ>FJKsz3>XRMYiz`+(>@(V=lc@av5{tu~6O4QhZ>sXRr`#0sxfy#_ z{fE4T=Q;6%_ct#OSSersXC_PHH__Ku9P>hIVkWB{a{H_G#aX!}JEv1<-p<3Xr}P!h z_DPnPQ}y`#a*e;HsEfLA{h0+d$xlSplV*$FuVJ`alg^uO6`=Av=TJlD{mS)UtmDkD zzOah7w6*@B{bj(`ji+gDXwwCn$`uV#M)_MVbpD^TD)k?a&K_WO#BwY+xK?)@Jh zeb~nl$9+77NBdrT$^Ltb{NqZ4o_zT9;ccb*Q=e5O)&E&sk3-+wx)|K(vfN1V+iZR#yUk*{6`_o_ z43F9uw7wS9Ph2v8`-7a)k3rgr%Pv3s-!|>cMpo|KG0z#Qc29nuds$n^<5uv_#OX)B zD2uN&N&j&E#CzSVwFxH=*iM-DY~uUXDivS$NheKtxbC!%)1k?$mVL3YHT+iN%|7AV zUh~OoI_jd;AFepM-Tme&ef=F4*TZkzUy%6m`f(}GN5*UN5Ax`JTjIXodv2%q?80K* zGb@gU`SW};ly1AZ``=EH(`g0=W{G^U?%P~-G;vFG(vIZ|R({rl;mDn{ z8`*u;UgkGm{<~q;R8^B|tK+9G+<3(yeMsK^;E`wZC;7{0m~C=dX{sj9`6#C0Zb<8T zJF~~PLKS0KcOQ2Zt}1m8^SvdnHhG@bL{+}yyYAG@xG{6rr>%K2RCvrM?s&O(56kVk zd*?pcG*;*z&r2=5t<{ilusHbhvNKQ3GZsvYUh^USAkWT22V(E6el{ih=aq}?p(m%z zD&47eES*(6{+G<*Gqbuy_D@^rowa}KTd$WdoWHfRy}4`8f0rRHb8-7AF=OW76SrNT zOw~Vln1AQu7H#G?Yj)f)*1vyh+v~aSFGt1SF_`Q1MsdOm(3!gtPS zUzKxgOX>AaJh}S(9si1xKQ+z6xO=<2tW8x@-QHPz{~&i<``Zbg zB{!X5fk31olxq%YR0eEH!S1?TFouS|WVrFW|B!7AVQTXF|O zQ}(h=eE3)?``OR+izXkLIltdIO|tdDzauer1$S0-+Zfm!OiS%(lki`9V~cPO*Fw#f z*OKX)*JdUEG_U8bWQz?`y-?=1t&TIH&TC2AyB$8AHg3}{21;?S5V&8~DElo*TY2X< z$!V)grRV+FxaUJpp1=#~oQblLk_R6z4n7hw>)In>EBC4!)3s|3_I1eS9a^x)?OmYL z;%XfQxwEU(Pa2=;TruU6*NM;ivCZ22EhV8|6IuBU0>9_anYLV;PY4W3Eg zf8P1KK3->D-E+ny0ioTWA`dP0&0+lS?a(hjYf)M2tk8$=L^BWG-dts@*;yw3Cc}rj zz`F9_)k#+;>%Y^VSC(QL`CR>nrT6@IlP^3yl~nU?@{{gD!;Sv`%~sdXKDXR6w6FgA z-(%mUOO|hTJ$2~(56>TW|L&iAZU5g#cC`4dHi6^(xPX5 zscvyHhyL+qi+V4soN`OCQ2D~kYUbAq%xBLn^vW_`YWYHM)d@boMH&qYl7h}CmaWq_ zthx8=`hUM~AJ_l4-IS3STsQmn(gK6S1oZo-*4VeyVK`)?eAan zB;fz40B`SStpXA{5{Db+8s6C=`sBgHjBTMp53GgWA2JN=I~@1K#ci6#^4}S|A5U6p zz@|HQ!uvZn(&i~^tBT&+WNdAi;H*di*tLoe^k8v;dt-zA6oA5@~V@Q?kr$luyg5wxU&!6cdV#fw~o8i ze@=R@PI$q~_H|D^xwoEv(|Y#NuYKIcde!7YhYz z{`0Nc<+#{RSMFVWrs%OZ9tYkj@B5OPBdr$S^>ne)p}7ywbaB*Nxp++9>&`@n`|%;A zkxwo!FDc3s`>Xi((Z1i>_ezYnwapR{lxB}F(L2l7o!(H-=Po8!f5YhX%CpDAOC~H_ zXRenS_^4&)w(BSEUB0uW@^tV0N{J~4R~4JFItRGVWJq7LDPqcucdAu_YQG+&r6gNO z8Z_|RzkKbUyjmy6q~zw+X-AC;nWl59gyxEinz!EPVfG0Yy}RWp+vy!|$2k^e$2McDSSo5}iRB&#zwTX)wJ*8W^CSps&7Sk> z`X1r3_<#N9_i#3d+7&1G{F{GG*}YCS@%*p6li|X%`Zmv*!o2ecM{$r(t(Qs;6U$o< zi)mf8-20RhKAQjeA$!~MQ^XX11)tOJgHBkc?mBQv_HD%H_x~sFKloc?=VUH{Jg?T6PKEmaUQKH%*% z#ieYSkjS68+e1&iaG7Qvpmyz@f=#vuKLfYc@+*wxPrCj-3p(f+!5*h^)Y`j_e|Pds zO_oxwb^cAI^3jJ(cQ1Vb=#|aa7FV*R@rrb)wYQV`A%sr_;Pypoizz_i(b^< zdJ=U!k~7KIW1ZfKC2N0Qx}3}rsP<~%vepnD>-dByrpq7fKP4w|O|eN_!BM8n zC6tlVZI_P5#L!7WuS(u7m>@K%;LQ3@Tl^lznD9G2J|%NVf3l60rI;nlN9EVv=@Y^Y zWAz!My z>PI|gT~^pM)7#_KYs~{?e^&dg3`p^1J8$+ZEUP2UfAw1x*9!G@ zj|=4NP6U5wm~G8nB%k-q#r}qm+@*B;?^`VMVix^Y;!N4&&$%}6z(dz*8gE$hx!ff? zuk*}fp7T=V#UHQb2Tx>iL^m!uR(<^YqBXr6R0Wo*hzWcs__144m$$`s(fUSt&Ro|c zA9k9Hobg+*ym3m+_a#qSK0JzeWnaeqD~8jTJ>f_OTfviw)7P+w?b}$zw|2p*`47G~ z*Qs8ezCPfBxJ%yI6-RS(?k<^oKxk(eXSUq(b(b}@Y^^tM`8?_If1Pc5O|QS2U*Ra% zVtQ_MRWZm=JN=>$Q&*6#OX%{)pJy*So)FZ{dZOyuJVfTtFUT$S7KA%_S zn>{nT_UhKN&f@`knS3WsW%)STU)`xxUX#07{fLZziJC{?`=34^);qG)r*sOR`5bp> zKA+@~r*;SCr$zn#E93Nzb?v2s#(?QH%?%&?!!I0Sh>|cW&kwt~)3MK;L+;e)w8p8< zsul-VhDZHb!Z+qdt3z5j-=Pv4;YaNl$n>j%51F$JYgSaLv3 zzkAip=83VHE0qs!kFRpwaqMQg=Cy-6w<|mD@~`07;mB{CJx_P#4za68-mc2uI#HGH z?m4R`ez8+RetIPzSUx8&vMQxq>Cv*IONArf2|Ry!Nkbs@$gH-c30BEpmHO7SMy%Xv zV{pCgsIJhho=;06ezd8rNq#d?=;g_kZ!RfHKHTVX+@Vo@+MkB5E79y9IZJjaPAfRx zDHCaZP%>XNpKH;agBikRCv@k|@NA0PulefBn=WP!InKIF9=+oc9#f9$osoIfb64Ln zt@T=9?H=XCMZdo}aRi5Vdv3pBVqo>n@QRal#PK7+F?U`E72A5QaQPe@%5+hd(|WJJ z?cxcIMcoG5d=}NTZG5xn;X9)}&2C|?1sBinib>tKC;VgvOSw+h^+d;;6B912-|<(# z?AV5_?eX^(&tG+<;PYyp-ysJ)7p^c^;%RKLHgw{54o2?1g|GTt_2;DcSO?f!UT0+J zcb}8J=FYbO!`1V%S00J*^!nGLqGR{|>V@J-)#p9fwh34D*Z(#tdOEdb$Fg_j7CV-P zIcPjw)6bN#S=oM5#KH9Pcrnj;O5Rg4+r-*l?3_2ZaCT^i`n=F9Z%sCp9ORU56hEx& znClkWouT$gb*`%3!dbS#UEZA8Usm6l$Z+O;U;NKIC#(GIgbFML64cV7)_C$BJiD*# zN}7S%#8%Il`9%e?pE#!PI5gq*y%PVuTc7eebOtCr7Abw=wRYW1k$q={s}D@Ncf0$= zB^%G}Cs&3V8Z@k>+xV_$}=Utis)7$-KlJy*ZId-||@^<`$xPo8&*?$tSomZa=t{>d6&@^JS-b zYY%IPMVo#4dtv+fdGqW3Ube6M`{-(T{Cu_VZ@!gSSAO}KZvXf3^WF1ncg@|ijfLw( zPcrlQk8#ZU1rl%DuY6WZd}OZP#Go9Rs5WDv_v?b!!9k~O*b}W5d(E}lvUsQ1J-hNYnp>*F8jpsX_Zs^_7I;xkL2U_F8NjEBx9AsWvl&-g(vj( zlApKK4hVkx`-Z0`pkb%Y1cq(uH`*_5_02z($;tH~dV~ zo_b+f?8z5DIkTRa@Nco7>{*@FpwD(nKIFh#wz=VX<Eu~gDXHZJ*B3lFeW*3--CmiS_V<53n(}kk9X?*e z*o0J3UVH71qGJUaANIQKv$L)FJ3Hl8!@e8xYGnn=53BCW$?p5cD=hYLCzE_fL+t5= zk7e9cUBeld?>iCHy7!HMGRKGA2?BS5InJDUEI;wul1~qF!`E&L4SKUvVwVbE?R)ps zLO->a7f;>pWOwPyaWMF;rFDFzz4|f}{ux_zJ<9@@1?L=j9G&e}C!HAlchZ;r^(VUA zrm5$w*8h?8+9IZ9TlgZru*%rh{0WCPG6(!fJ;k#n?Zr3q1YV}#*#)xC-#xtK`6TZe zzelJ?0Jr?%+n{)8s zi{HHbGoS69xL}&B9>PRqHf=tzWDP!+X)AD>3?X8%8vC|aMw9U zqgOv#wVUnGk*sGIoF!JI-0_x4oAtR)bNQ`Rz8zC`p7!dlT<}(2a%th_f9;2_M_a7g zcka|t*)%KHTbVj%R?K3(XBv9FqdaF{?aX=0xvf3Vn&tfe{&D&5u)rWi0(M}c;5ae$G>jar7gdcKk@!=YyPsor|(s6*#1$ZUQ+(j zZ-*uu<0Dm*6pnj*(y_aIf|>JfO;60RkU1@!^O1~M$i_zH$qVl_KEN#K zZClRk*zw|o>7N{@#9woFX>9r|68!bg{(>0`_jwCUK682J(H$yzy~mk33u+Ji3e{b` zc7N{1#{D;!eqPb`_{G`q9V+$pUmmT#!8p0)*uC>BHcngJ{6C_+;e5n;j|H+9{+zp0 z;}W;(QqM-SHXY&YhZ4=4>EEs2d9C~``KRuUxx}mf*ax;E#j7lyzKy)=*?zCF{@_OS zs<7~;g5AxI{mbV~sc2Xz{wz#c-c|L_H*5FDj79TR=3DHXc$9C$vUAMr8SUHIUM4AZ z$4_l^d35f?BbMXmJiohovMAPzN6vdtTm9)#*W`wq8t1Bm)wfiyzVu|O+^0(}1-d!^*JHcb=;ymqsTazT`CAU5n+*|bQ#W5z< z`E?Jn|9fh@%}Vg;DR^?eQfn^P<(u>7J3bZ)ZAzYB_9NQh(xKBVXVQXegkFW&NW0{; zvYmJpHN*XF{ih86b!K5*H`yI-CGT@9tE`c|D8w-P#i_eb53V;=5&G~;#7_L?d=H6N z?+qNEEmXdzeOdBc?2!xSI`*IEmd`t^Zgbr@&oh&6w&tZpJAP}w|NJuAqq@W8%s-(X zGp%1U?4P)qm2=LieN~{jCGbM#yc-clcQ$X(`(a}i^S80(K;7&0j5Q11f46Enb7z+6 zpKESv7O$>*&nl^wJFx!Rk{J&!^lSL`r_K4L? zJo2cRX2sF)JFdOalhjMzUO3wu@R50&NomFZ3&|Y+%agN{jc?vK_J7a)1+__!|99L; zebCsWcuY>>XsVF>f$t87_~a8xOPPUp6&se#Y) zdp^hfOT8p3$vfc^GpFU9U~Pr=i7E@0pEv$>RVn*Hh5XHY?|>wEshch9r~4P|NjfbW z^P{*vRII?^W&cF+T^w?GlZ(QZcfVui)cJF1;X1Vq?#JX}4px>Ob)BYWaX#OZZ+6l4 z#FChkN?Hv>Br;DuKsZq)BCYUm?`;!Z(d4b)9K%}#_=pK>?clG(ei{}^~;;mn-#t* zRpJXOMx*pNU`f%8QM67YS?&ejsb_Q?GH*bmN4J&IT4G+#FfA-mVCI zJt=Hsy2B&S=Z`W~lxA%6S-I->IcLG!oqN5H&$YW4u_b=llYrZ64E_i0uI&3iLZ6^`4iyurPOtDZT0C(1|^*LzISPFuQi)aba?vdsJPRi9Jdo6aeds>_%PIW!Qy$d4KXvAA*u2}??wQ*RGIOqLHvWzaog?cedS*pa zg<28wn|7hJ_oC{b0#>{>a(Kv_b0_)CVVzS<#ifPL&)S(Lt5)ck`B{9@TZyRF#fY zJ!rdMGt1)9&(HIlh3DUP-8<7{C-YOqt0#{nT`NDN^Gt1h3~PtAlSIJ7tT+?V^l3l+ z1nwWddb-SQuHAye*FOg^O_&>@K5AjW zj_OS@e|@)R-myFTh-1^HipPB}<{R4!4&2}VA+t;A-Glm>>sKG$H%HW0uKNGPgv>cJ z_dM1(lJVn%`mXl{r|i@-f}+DhnWYrRQ#b`7rzA>0r68 z8CwjmKDZdhBNxR|^xsrzX;5RFVu#z~yY0?*?F4%Y*NPmq_PeICO??tWGJD@v{)v-g zkG=EzXR=MKss5kX$!{CAq`04mZ9DRK?sCBwMZS4#Z1VB#4R>n2UFYzce%^Cj$Cc;h z$Lig$vjb{Roo2l*UDxnUeG)5o`o$d%ZGZA3B}-s3a7cU)3=5jVk1 z>y;Ewv(V#-N4aKS-xR?r_NiScC@)g)O+;$W#zX5K&ZxZAu*siw_2kNF4cX3JFEkY1 z$XyqC@S5??sU0QG-r_4Wznp({>2|iVw#vducUxIJ&i($-bYc_h@$Wp3%qHh5ntm4h z=wojz68mxvzv_>h*OxDMH+Xck^3AGS?Lv=wmKa(lLrVR5 zg|?zw0u#Mc8k?G(xe8cVHLkGQP6>#4U({b)JSFtx<^ZpaGw(bs^-llV_3eY&{M)<2 zx9|OHzP*~Qt@FCP&`)31_MP+Rq_RD%6<&3@b-~+9rj|=Di^;!n`n8i;Hu%&V4~vb{ z_xh^r{J!SI&ML*7^KG=xo%_+gLq>~Vb-@fBi%l^HEA99hs&cREE;wNJEmm3g)f49} z9j|4trU9UglpXkz-r{9h_HHyFi!BxSS2FZ#_XvuwgC z*7J_(XE-92{@Z1Q9krY0#bC6=;dBRga_2mwO&JGS?UxICebR|>FR5`%dCAPl6~1GO z>&ph~J$$aETlzzV+Hxjjw1hr5r5zaAE-P?PPfzuv^G0{oyDC%4taE%%N2nZaE9F=9 zx$!l3a**ShRj*Ej3LDgREWaETY1{e6dd2l8_Nx{C9?XC7_4hybg7VTk+b{BlaMZIO zo4T?2&;74Gt6Cg)_ZBV9XLpwWxF!F+_59wo8(89`jhbI;=}S6(XYNu{NP1AEJ=-{7 zO~liD(f1lF)flg_=!%II4%e`DzXn|pp}UH$vxpVqAP3`KwT zJX_2CZ|aumFK*{O?PZ^q_WtsvgD=+CroCyN#PW0ZNt^B&I>=eT&AR_opJH^Dr)`lAlEWc>aD;h{|6!mPTt?S zHvMSJN{h?$>eks_y7Y3ve@P|NT?UzMepe>ieK>6GVzt-JtFhi+GhMmSHvZ|p_a}X& zH{83jPlf0C>_v5#Q=(j6^Q$&2TV=Dcyw&$xtmWj}2{F&7c1g*F?K$^RYgSg%+Z}~R zr5^HKPk!Mn8l~R2p>u0siRD?}s|R<7MVNS(?{X16CcbM%!acuxL2VcEeKa=fUDg!8 z9;GwuOKEsT@4FYA$306!ua?cbAZzl>M*P99I`7j5>P%)N+ak0r`m9z6KPOn~ohxPRxGQe|So&60ZmWp4aub!R?nI(2&I!;n7t69fwxKa; z_iWd+YMYf)<5$kL@>5!un%a4Lxw4SXb@QJ-| zzAkWEt$N|wqwlRh6s&MJ~F@%4R8-nm+S`@TOtCcAmzzf*sAtXs?b^aXG2o>ZkL zCL7Mjx5R2xtlZ4Bdj7@E!&kyPIQrJ?6<}p$*utHW!~dgd_U*~Ht(ZCcYM*>>jcb@% z>Tv7&*5IxgDo?)I`Gp!k|HpcxVDj(j2if)=Dm`dpH6giBtlFt{0sHj#-d8p~+FHGS zd*$Q!mHSyg@BN%=-L&M*m7@LDzrvn$TX8bUeL14FyyVT6wX-hTthH8MGxY;gyz#|b zGvHOm^C)W2pR~PO3{-{^~ zW1enA!I2LCyj2B90)%vS+|c)BJublIHMNDyZgPbD-iR*!7h$(|FwEVtNMYTKJ0iY? z*>hR`|5z(~u~UGbOL?)GR8gSJI-^If1_BFoeLVNnMAV);Zv4D=zRK@nm*+k_EIZo2 zC0prDV!koQd~z={*ZRZ8St5YJ^UQdd%DF7pudI48S1G42bC zcSBLZ!7ZH1nYV5n=axCNta!I;$;yzwj}Cv)u{|DqBenG{%SOhOOk6e+wdEg80f37_*UZ&jG$9ny%v90s$io#4ui?lm;~sy&cq(W&eZgDz z)T+x;v!lC(?-W}oYIlnK*%duN(I0Xvxa3OU@J`b;zM zV!htNi{DSKoVPXIs(i`e%`@^jFUy_W;Jw>a_`dDk51FnfrBoxVbJp(KB(^R)O}=(_gQZ zWQQ-+Imdv;^d!v2j3b~b!BwM#lo}47dAQU3NX0?3jZyTXp%}njaO8>LR zmGqz8sNFtCd)^rpk@p)P{|ug_!L;@nw{e&iqt}Bw`Y-c#zAM}0IKOCpkXNmzz+L7g z4X4&=Ka`z4&qygRbIUu$o$nIN|8)q>SMYo6Kl}dk`_F&3q&X>Z@3LR~agnxTe5p{w z>EhPcl3|!BVT+yM}qnnfHf`wm*1Te<*%mW%aK|o=&b^U)sgCT)2G7&_n5W zgs1ANFM7)z#eWw%3ap>9`PNF5McBW*b>jQZ>7QBJcZlwei=O`A=kK4Bj`GYtUZwN5YC^@?OTW(;&6_hT zXXE?q|99v8&%M1l+GA4h|&9AP1ymmeL-~MxLr{k(080X!(!YLV>9JIm2zm|W# zKKBJdM*A~-0!>2yCcmBKk$GHfvxJ)Zt4#Ks64o6x-gn>Cw{g9XnO?eW#o5^B+YbH(fkj=9``zl@sLW+ibqJc4iCX^KWNvR4eKK z^4hY*>ULDHVwirPq5Sh#Kd!nteMmlSTr}<89QU`^KC#AsGrDSIf3RFO$@{}>^V|Ej zdc4%Do+v61{5sUaBjY9Wt2>LdLO;Y>bEZ!F|4fpd_e*o%>p#6L^Xh^(d@KvwFsb0; zMnM<8dEL3OQ=V}3z1cB2`k{55>dmIhw+fBdssxsV-LT}i_~^Qx?z=Y{D-|z#>CC%y zbJn@zy1&KBvSpS^Ze5=AO7_e16S|LX+*mas|LB6s-`&5vmw(W>o-ZQT*fUKxc+T!S zJlF1gn~@YIzdg4#Y{L(WrG^4CHCEjJ_4dW{eBFqG6$VM{n-?vZwkC1SIU8-EN5?x? z=bV{;(;`A@>D#xwHrpPgZ>(LKd{^zp&e{C$9NPEaJ+Q3)-)!lVD^_N|X}$KA)9j$M z!z587`MsQt&ja}lRTPyUZCM)mdWrk8ZGII+wy~0?lixj$w^=EqP zoZoR;bsyj52`lwqo8<5CTsbKs@pt3Gy5`F0Cs~IcCcVj$o3lxN>b*5#(gKXqX%}B^ za9H^7M#<-?jHYR zaqj!yge?F4g}e`r>1sz@kdR#cceHG3FaO!s+bg9Wyycn4-Gp56bno>KW=fk!TRqwG$YtI0(iAUO ziN@k=agQ8Uy`0)Oho%>oYqnn6d468_?s-#Pjpsg$^4Dp<5mmbnTAA%VU}E-=$H+6&Gr`~bNW6^cM)tFZCwEs}vzzy8 zpI+n{FHd&cRoh-)GFk4#F*}a^Q{;YUjg!-oRkz13uPs(#x}EZPtL@`U%13(g9-P}- z*z#5 zC2tRzC#3TS+-lO8eY^Bsr?B&hbzjt+6k78Sv2#9JHML)Gc1^#9%!Xg3%=NGRE|x}R z)PEHV%WxBU_~H-G-&W1moxhDseV(qf>S|WHw*Df|T1Bpj8u}Gpd#0ASua4p}o7J`b zi)Ux;)ngvbbDGOUmMTnsvnkqn_S5BIn;#iH7rU|V{jAqFPSmS&IF7Wgtk1Hg{iurV?x^oJGZ&@Q*4EHw`_nIn3OxrZq=DSv@ z&w;CHg4xV$g>%2Lt)1=Iy{4!WF<$ej(D-bHqudt|Qd{4(!!+fkoebCo-CAKa9j zqu|6*c~$PPmF%rBT@ByWlOI2y?b_n~@Z76_58pn@{i)ofxYV&`0sH^>TeA+!hr7&g zs$8R7F{PvWmWZ=`OwP*H%mJHCBeK*Q&Nc2{bs_Ki#>A}Wg3s2y^$>1iJzqR8w)EUi zo5s&<8f{5?=Jqi^<#^%&9}1;8!jct z>Fkd#pKK7mjqml@`rEpGcfPcIeJLg-`}?o?oT?CGPs10cyrmYF^~!~2`Z%I>UQ&w@RX^qMIxq_S4P3|33LaEo1^ZO@CtlIZ*nZTRG{JVRT@r4klA zqOwb0v|Qc1HSf{GysaX0V?MXNQ!)2{QF8txi>qR;#N~f8cLh$Xkh~ddTT!NQsx1HW z!{guW_)zoD{dbMk%#5G; ziVG^^%(x{ExUc&gVt;jEN?6eM9}C=~13ItPdo7RX+~gC)I6G8xrNYOlo?2@Xom8YY zFW^#tGKIzajJ@r_hZ?TYV>=Uv!~L{nY<&3qGt()d{mqxp1_HXU^+d;2oVO=fO@GPaU2}cmRjqn&2~O3Wt7UX$ zpI!g>Y4zf$Q#I?)ul2A=Tx)hkHbpjSP0^MI56;e7mNvEj=(2XNGED)WuTPC6mreQ* zDmSHNec}_=M+?I`_sqzsWa&JzOg;Q}i{{3wUqlzoyHqZI$L{eu^^F%!@^Q`4U1TO& zdhAM=n}_Y`QvvG2si|Q57e~+QT%()(4jUv)TbIF;c=FnUUYC=K zYh=!tYiMpTGBT}bo^$zRX>4Cy(yNSe+vrOhbA8pTJC`cIXj)_a`aA7*A9O%rX*Qmb7n zdr{4UY8Augk`SW^>B%>1qSh;?)u;rvvgFQUeY)fN!eg)2Ximx!@a?@eXU(Ujy~-yd zZ_mA}+!>h?IoI^QvfZQ%w{CpMEJ6n|A!RHf!tPw-IsHB0A`;lvZ`3T3@>_%{W;{$?QL zez+m+^(SMY@Pk@Yuf5Dw(PIuYUt7BE68q$u>1;8}dDj*lv|V~F@2>spdCh6ro8Qg< zdZTvgwamLhTlTJxj?9P^wx6`&>h*0#Uj-wcuHcNY4BstQt#YtC`r$u@%B|;ERT}$L zr(WB;LDgr?itD?kZEcZ~4a->D9i`;2cYN~~r{x>oO>CKR=e$w;_Pw2Vn2UdG7pizR zu_bp&*pr)~Nha|z4rcfMo}T}o{m=YKHV2bIC+aZ$U#{X`(C5W6yI+Ojextg~#Z{cO zDvXcsJ?&1LA}HqTx#C3qo+BM+*RNaB@L)I7SCf;WQ7eUXUZrw6U5PqiH%TEt_W6_@ zUHunoe)3!mJhIDv5<}pLNSP;WS8s(0tc#UwnpHYwl0wk^TRAVQCxZg=U`!x7aiBXxo={+qZZg+jc}P^zUt6-K}{JeET=B27M9O zCUUUn%G*uzN-cV)mI%wJZ*ovd*?Rq)w`QF9gdpkr=eTm-Wa@`)Wy)QOIjh?&R`Sf1$?M}DmZTX6 zl)TP9>|V7@tmMkUzFSQnkFPrGuq#B|bdKDoG`mC7Hl^?N*E~C)W!0_n6NRg!S6%AV z<&5@IKIM{gVsnUs!M`&f+hYv%Y>hums>nEYZPu*n6%5;7o!xV34!7Lyw+ffOsn;A6 zKFP9e&4gS6;ykEVG|lMq%(w@d3s><~ z{$H|Z(!0MsEh`soFViXPOWQTM=Ymw7=HHW*i?udvTWNZ_LgnD{Z_bapcC_nH4E)UF z87szHuBY-(Jla%p6YK4_FTbf>5}b8_JE>(idnDLS|N{R?C7<(qkSrmqnay`s!{+I88*mlM}an=`2)+CApd)ye%|^p;tz z-<9)rVdbGCVULYsS(1XRaxch z;+}o~686mYeA%aMZ@MZxSv*t}C35@!o;#^xwZ@_0S;pj!I-#i#!yC3<%uh&smD+Ve z`+Vbdv$cw8;UTOq(>`(T*GUge%vXQ$G;(tP&yAV2OAp`s*AvmR|t+I2P~R1`AjO`$a!wC|FSG~ z;>L@D_R$ZDU(Z^q89m#EgWK}^?XuQW(|Nxe#T{NW&7j4kVU?IlBOALeM?1^k%9|^` z^4F*=p>eJR>`B*Oi&4q$MuxEYG;2r?{g;Gfr2x_3nbx zkNBKhOjme)mt{J%LH(}D*EJebQ@Hb{Gv!Y@S$1hY-&#!p;jhHo8yUb?#;5#QdN8#j@n056PFMpNscVn7pWuO^8A8`TN*;bt)SL9M6g0 z>B+4;^5yze7SAu1e=g)cclo+N|Da%h?$!fWWH0#$&sn)@{S+%FyGaHe_fH&DO^^LF zYgS3C_TBw{yRJ;Sz17q6^XGz<=^uY2Z>-*#bj+PWE^p7`pa`owD&^0o1??8-zxQ-4 z=OTX<+aRlB9u7xpKUJ6f36f%2`RmCVmiJ}#^;7)pB$gg&Vln(ubo_CU=C&ydTH>_k z)UQsdPjU0wr21gN^trylTeHPE^l|3Hy-ms8jJH#B=wzyQgq{8l6Z?M|dY62%pHKNv9ar{w z;mm%itxHYbY~}NbdbMWBaUm6bkF{qw)T-8eKGd)JXRdhe>?rS78;&lZ zqrWNT{*qq5IbS1~4p<)4_s)L(D9HQ6hReTB^>l4IQTpdgGUuyjEcLt>`z~Gk5^-p& z<;MN`X=>+lS*=_6)Q=={?tj*5?#1{vnRC{&mVb}Dds5wNvi8B9O*aHvHZPl{DY=E^5!WJZj>;)V__$x{6Gl9PM*fWo=qizRjEUeBCm)YqM^C-mtx@`S_uU zmp)BR2#I_5ql(VDg9M_VVopCl0O_oY*FQt;Nj5l&H-2bZVr(%9l;!>+&9aW! zT$5gx+{)mb7BgL(NBQoIknH&r3Qf2DPnnUp?gx>=I-=}b4ygpT8o)CzU=oZ z+}6UvS@iKx)$1cYMr%t|8!ei?98$TzWa_m(wM7<9FESUZmA4B2-sGXZwlePFLB2CJ zAxW3@BCdFST+-6>q9fjcA#{=R#ff^1Dp44KHsL-9rE&;%PS2L7IBWK>qRO_ockyLNorcsm8G`r zQ0rcg(`wtj=G62b^{UgiJgjwy+v0x4%^O_q-!^GvPmWxhGb`f!dzbpDGdCvv(VX_B z`r^?g^JY$*^gy)ljkc27h3e;`aXpLPKG~u<)n-M+UHO#TcQQm@c6|LCSCFh`rY*I$ zR9Ech_D$K=;j2FgpZ*hlG5lG(+EvF88?n`YnqO!yE=^ax_QQH-{A?XtWBE{)_g$&~ z96z*P<9^>|`Y&#s?sM0vX*2yqc4>$Gvc9?glP8z{+yCP4|CIJ^-JNvz|0J>c6WnVn z;~!q$^TnC@obSsuJGGq{rioZ=I+4FH%zUr*BF1SY7F#2y$t>A=Zr?U-CFW@%KaRy| zw9K?Zv(% zR#5K&%YV6Jk*{mEfP@n)7HcqymAjs3nEac4_Vu$r{=EA4dXcC0-dCSu1?@JhVG(+` zJbCrDubl}@>s>gHt40*aZ+TPOy1F`dlJe)plkSMxy(_i4zUixI-dj^Kxu?OaudYcA zXAxz2IDMN>pVyaHQIEnawmDl!E%&;ntHj-O=T1iG?zdexn))8NWiJS~FzdK?DRbeL z){YNNVFh!az2xtmq%3O4=2({d%ynhS{C(Poc$!|w`_9$8%lWp;fLZ_Mvl-X6L_OYn zXtL~~{~D?GWv&YxCvZF0_B~#!QazP@v;5`4g%xT7g6we?>$KMjwZ#e+JWv(?8KGUj zS9=j})WHHCov9yWcPrgmp#4i}Zp2bvZx)%7l<*Jt+)lQ3FJM;x-5Z$9e^WG(J#O7z zpMBa>KJD1Ox_~|Z66>33Uf1?=Ref;dKD%i*SLp{f!5_w|&v$Z_Ff_f6{B&oIxaqYf z)0s0hH8&ob`gMxMh8J;DrbIlvR^_$e;e3g;O?&Q!2DEIK59;XI>XX>oY;82-O5mj3 zhjupJ$(%Q>bh7qR(eQ`7eLkH9{UMxrdvS{h2k%n`d5HvYts;##C&nyz_}wDmAVB)@>j6G2M)ERolJ# z1M_h;d;iZ*Lgz&;7041Tc_6|0eQQo_Yq|BdVBM6v@3fvA*toW9&C0F!Dq5qRk6fC* z^yF5a8qt~uN1kl;j0;UmDa~6_9^T0AQMFRkWDOJlf+r!X`AW-0>ljqUIjT=PZ2P$i)&WJ1vU&!J2>WMdVqft}n6d{Jy z7g!YjeLw2cxw^hwbOM9Qf5o-gswY=Fuqga2H4bA+e!H$ou;Iz&NW*X@p*QQ8gc>sT zJrCm&4NK(o)4ROc%JP9+w%4QZ9b1B}TVKwbm9x!w31RE%L{~hJ=HZs!`uMn(%faoNw`|+I zD1_vp2M(>HV3?;OwPq!X3Hx9bVLV`g6?N3#x~>4F1Vo=iykr zB~Qa8!cqI@&Yc%l1&SoH%AVv+lA5<)Tl93AOO4~|LklJUUzlNZb&{Ut)^#POS1zpM zFnG}+CvW!D<>d5kj^?m$6Hh*i(hEHzv1L&|ch2_3TPAlXG>3gV8CtkfHS$x=+9#Jc zotW~8Tj|(>segO}ueM&Qox@?Mu=9Jo_|Gq=W)+pBZk;y$$*ol)k|(aXc&+PkNh@9) z>Z72yK`Db@d;=U*R`oHHY z-_vfVC$+^~nx1KD9e&91eP`-F714(qtWzT6I#X9jC5Pf%nP8S+B38 zyzTt@Q^#_?TD`^;uA*;8KGjUCUMRA?W9mP6>uulRW*HedUvJnh!zE8dG+KHU|5{U-3mLdoo>&PTYa zr&*c`uPttmh&vy2Uhu?%6z`;3+wQZ$OHZG(-MDRDi`mr(?XSw$E-k)b{&L5PDO#@I zjy$TI6cr=#{A~Zu(C)=Ysw(w&dAYBgl`q2mEb!CqowH6TzW=h##Oq;Cgkrx^e_ExX zf8UyGoGv>3>IYfHOrCk2b^mtcRmG(0R&!am?B{~39|gXkK z*OaU8+;+jLuygA>72$JCmuH5(^VTU*-zYG5mg~YR`^)@wiqv;5o%`h5o)hb?m?>;L zBAYsYR>{JtGsRcmj?{>A(hyC0*SYkqO4*dO%%xv9Is3i3a?We*hL|;}>I*lQ>v`KLZG|= zr}f^pPFpU-eP!ZlR_}@5>UFk69eLZS`YP_j^lfv@qYiG0nEy^y{($3(D=Xb^3BSG^ zeUN*0O|tjWdy>^jy}QK!U7FH5DQ2U~-P5)v!n3n1eK$JY^|sp<{#?FC?BK(B5ewg? z&KL2u_1?G1)$*#BLTBkK$GW*SxyEbLj#ekFtkS;yWMSsD}5QTVKiEWM%n!^7_gk*|+l|mdhPc-r>E{t=4}{ApfNKvp)rC z%PUM;Y%_veQTwE6c0 z)i#GLd#Cz*@}etTp-a3<^|#N9loj~)EsdUngRh=RDd0^@m-IiHrQM1F{I{KV2{oz=v8UX&#~ z)9$L{&V~nx$4d>o9XI)XWaN%r z^d#~A*U;qCF`V4oP3?QdWu70{buM($JcWuI<$G5db$>}}w`!C>Ay*c^UdzH;YpQJ1 zgT(h=t1H&sQsMu-&i=t$wTksY>;){F+V5VM52{|MQgWkoZ=3Pvb9YTUWXq!0+c(_* zwctq5#@{nTe!No^7f8|CyCLM)yQ60EZ)MIKXwA$OuzjhK~d@#$Vk?R&4@_G*{p zZQ=X9O4&ejX>)VP|94BpCT9j}eLcl^^6D@=mtKI2j-yWuOl+=}&sLdgwJS?!C- z%@-2oU7z|yy|;R^z|Uvig6cCwDMv z;@$jF$4uX>_3JX8%f0^Y`6W&j`djsmJ>RSpd{VOMNn(C!mJ!FzsoSbo%G^8c>%DZh znt=724fp<9H0Lf1;CjAfR)zWxY2(ZgtBl4giSxhqI?j?qCBmdHkb=P`HXA4-rS@X|$+6^)L zbL*zaw1-H)cQqIASrwDq7;!MZF#qiD6JMt!@AY4`^|!a^C%+#D&-j#9l{Q8k%w*kI zkg#HEMVjNL2ix{MNm}!5U(;Fq8G*1FNj9xt^=0@K0Lb71jP({t2J;+T`0$R)$Rq(3)m%^!N); zx1)H}#@!*h@=MGffA-;wWuC-Z{#3O-(j<8Dv#dY!6k-dahZhcjlOGo%Td@-D~a1Gh5>(sEc0MzUcYlkX*~P1<~=QX-P&F zqOT7ucl^P1o%PUEnPnk1@0ZraK5@O4;x$z^=;xm4K5s3j{F>DCMD*QjeoeR7;>BCn zEcx_PVfPBJ#ZNXZ-Sku8`=uI#nOC(kCa!w6_l5K4g%_=kc$j`(d*>7Tk44uK1GQ%I zFS>kksb4eKgx!Z4_ck)OUJHtQxa;1MsO?cfoi!7prlh+r6M5??`f2Thw7jW)!aN@`hsY80bUKsX(2N5N0xoPv1I9_%agPoH>cc~J4NA*LPhKKMboCY z-!bs<{Ka*=H0Ko4x0JQNlUADD>$Wp|>GaypX;shnBLA~GSG!o2oca-#mszq)=*>Hi zr5_#j{PJ_ftWHnk>80;NRVsjgt%x#_!eLC>>Tf zEk$j&yONhI?hN@^@371%Tm9tOJ9%nld6#qyCv&ziUQG*1J$mKI z?8Lx%iRL>}7`^f*UE8LU==$jV)Jr^G8yF=HY%aMq#cZbN^cOa#bVZ_I0w zzKdGS61rA0vDYWEcGcHShti5NindHFnj5CAD1OUPe$(wGSz_EgN*BF%dtQ*zNObv$XvN=`@a*hQaPgZNpFW}O&X1C)D2r`PuWdIAcHTDNrGgNglbU864kT)dfm_GV+N6wQ@}0fsE>iXZx4N}i2O)9PFH zp(LZ~*1~J4t!WwAoDZCUD;hqi#w4&%hu!x_y)|;z_zP8$4x~WeB=CW)~-?a4H+jo5|?Uqh&s!W?Ncdnee z>U5ck&6(}S-LY{WCrlGB&Htf!;8=}E<2epD=Ihs*zJ_?)cpR8{`&Go%mp}ewSzGEJ z@NM*dIzRfd|LIk2%2vAlTOQrrBNbh6{AbAPtt|il_iRh8Xf?LTe4bpv9W~|rxuDs; z_Z~L|Typ*JMlZ&rV_g!j7RSFoGnN@`Wb>OBCmYqVY&F0C?CwI7$5NaRilb(E8vB*L ziYZe`IPaP3RdIhcs~>l2%nJk0j|Y{uCjVM)o+B}hOX*-CFXPp+Pq7zOk~`-6hKas& z;IVI2F_<@N@~XyzW}!vw+di({(~z)ff&anmkIO$W$k|<)aEDsc>#T7K{oOgj`-<}> zN5<;UyR(1(o!g#u;xY%*K1u$0GPgZUD%>e`>+&Vu;%ry$O?e@@I`U$Q@E#uRhc7~U zySdLqYrj;#X#a_4!Tpz7JC@8odsd@a*6yrlsaMzeODB(H9la%VkGoeqW=XW&hAF@7 z5+|BoHo5O|^-T@qyDh7{jfD5~8OfAiJ*sr_4Qq?;JI&2krp?f~_Gz_H!<#Ek0pBA$ z=WRIrV{S=~*p_!MFAD`!a^+XR{T4%)Zs=eQ42Klf{)?(=AWF(5gJX!P$AfTUK2zSILNqpZ-na zg~-L-9a9;y)s62Ytb1UdaKqJjZsX%4oLUOsf_wtKIkwGBnfI*zb54xO4u|}3#;CsX zJe9B;K4n4`?=PJ`T7UnQLRIj|rpfm`)t;T=ZmVB)LUhh|zoN{yJH>ncUz?!Ac$06| zD!pg#{GNG!I=SQb<~F`b@^f2X2X@@`?UEMpI3Ofbt{+*jlyly$MB!$KL>{htpWf65 zv$8w=-gt7;M9KNVFPJ`xy=oGSaOG_yGZ0c8eI8{5~vXGABvwII+9zX0~>Xc9w zmaM`RXw1sK~su^1x?$gn*Gp~pYSFb;^X`%WT&>G>k>BYsY``!fAFz{H{v);LVZH3R< zoAW<>JsxRg_k2shsqiE$ou)swLaf_ANBHerVt3_xCoMGt|xcxI|sz@TD_Z z5l_F?zDNt>y!>EY(*dPb-YV;lPyg{WY?f&7oa-~(ILtP+e*7n9V|}*SaND;Q_6-Bv6_k9&C$*V~tx77|NZ<$K>g36*_wbxva4XE(L# z@8O#w6b&r4B`_pgFaP8rbMRi-$JaC8eBF`MdNRmzY3BE+Gp^rFRJ3KMPg}&~lWYCB z^x7HA_w}pYypmmxan>v6R@dKOvi{ehf-`2NPk$xmh#rp*KDTe>Mze`}buU8y8vf}t zmX!MWzF7Y`Cts0v+1#>v+W;ApWtV3*zC0l4cw6JG$=VfjZPd)$QuSd)*R!o;>w62cHjcy9)%@4*B<-!-u=echWv6xq)XkYKvFYB|$gU~3 z{<}__bccKKDfM*oZS%EeOlY_^-KQgMa?T;YX>SsDmxe}Ey1kA`tY9tpzhG_s^`&Q(Y^&i=)n8JM6gM{L9+2m+xMz zIxm%!e>C3WnP2Tx#r;Puo#j3)UHEMB|5?YQvKqc|AHVf_z0nP)fUnc-|Mx%PIPKnj zTU7sE$dU;nwaqs+@Bi~N-sA}9!2|pM-9PEABNHN^ZWzAjSk#C5zyD2^aGE>nU*_4) zbf<6HXSV-O_p2Tml#kTX8JU_+%U)>hel>gqdZ27**|zU?f8W;s;Q!CLZ*Fl^?dwd_d5$8r?=P=i{%6th9TV^G_7;!bRu$h| z!@X?!7OP;-6xX6d`qt|&{gnM97O1c$=#`%Di|aG?o|>(**nY0u{%XO0K}+p-=|9Qf zjr=X!o>BTe@ZI?9`q(DFZ?DHwU@6%-d6@*O%uAEQQr3F9HWa&>ZK=aWy;lwlM0#3QmpzCt+%N;`@Iy{ zmendQ|H-8w!P48_Mcn*Jm!A}Grt`iR3pBi=Ra)3J6W1RVFjT=z_R zvgk$if)l6rXg*tf>DAFl{N5oxu8;K&<^SP|@`kP)j-fvdq{}Osr z=h5-E&U_t9j*6K*sr9@3Vv`)-&v~^GlQ&*Jd026M^OvNEjUu+oYAhsvMEocy(f?j> z;&q7q-{PD=XS?U6Q9tW8e{A9XIrHzTlZ$`9Yj-}^Qhwib$L4nDbE#{R&7AM0*00(0 z+g_%~K={M8lATh2MeXH38M{mjJGYoUbUweEMTxCY{Jjaw1Gxh2<%>-1|HenoJ;xoP zI%CT6V@dmTh^f`-@4cD5Cx2+{cR*^QVe4_DSAtkmI#n^LJz0 zLmR0g51Ew`?m^T3tw`F|&t^N}+^ZUs8HId%-#tDl^~q+&nf`xC&C54g{av{6(kFQp>L`uyEj`Ze%^SZ`=|eZ zncF+$_;)T#Uge;leEa%i#q}jZw&kBHPAKo~{1@bWk3G0j^mu|5=lA2ybsgVdrUWkg zX%YM5S>;C-eoIyTil){yuBUwc?J`$3%9^K&+WJ-4JemJNCg)Va63xoPfOE<%hSw+GqW|G&561< z>nZP|6`SAZq^7NEh`a6B`239D%JdCgz9J=kIS={RtjrR3oSf6@R1>>^PeU zOAhB;uj_s9`(Cb}B(QbT`XjlE4wNQ6lV9>U^t#LY zb*9m$^(95-oLe*d(7QWFI9?Tc#=1=^`cNjWc=gd{sisx&mzTX4o3z8RLiD)j>>ZXK z&o4CmU+?hd%e*9b25#KoB5glVw=Z)zK@>n5an33F6O}AiQCv5uc)WRboQ$s@t5DlA)V*+y5;1P z(l(k7|fO{e%m8ke$Y%?z{-*siN`z0=s@qdmuWo=1j~OdI`IeOjb@ zZ02o^Be{nTq)L6?Gxd;A^Mp6C(>;4P-^jk)chqs6w!oCVzuS&v9c7j{5@)|T>|f}j z3r`omd-N>e&Ze02muk8-sv>*6ZgCw++`neU<5``Ks)jE2&ODhfp0qjN+Td!(a)ITw zx2x73DUE5o@OFCetMjWr95ZaFR;gdr#__IsyH`JZ=cdo!ubOCE)aGo_TOY2_RDFKO zch7Cdt1_;Na=f_qbc0jO_tUkQZlmD z`+_LPo3LFAq8lsTT`yVd6MA*E&pnMU_w%;5qwmOZxu;Ki|4_*IRE}%E_lZ00cUF4c zVfUDI)xy=e=X7_9yl`dQ2;=UpeE%?dC6&!sbP9V-mdW zzAVV%Z_<{sXF_MUoO$Z&bm1HS+Py&r?T^l6ZQ#g`6|Lpx<5hf{@4Egi+%XUuP z&c4`NPd-Y)<@d@;<$NBeEqCj@Z8mM6X%U{sdT7h@|MU89t=wUGV(MBcR*5HEEOGlw z(k&|^MMa{@)Thp!p>@&W+j@r=U%P|mY~H|h@OsT1f&Mgs#=WzbafNRbD3gs_u)}u7 zu87KLjXg5cj;drweM~ZTiLg(e8T4~{d(vrcbJNpW!tHYF9j27d+_v)%vs260)t8+M zqXXV7p4xv&z~!#?hZhUBha1fMm7CnXt2ruTX8Y0EMyATLf~Q40*4oYbZHAM@bAb}yC62Aq{2V*VPNpnlFlbK5Ud?3CobdXt(pk|B8wAp7 z7jdkOYrK(lsQTi)l?C}*xdN}aZ<|psvVEJ&PoISuySW^%oR8moN8G&ak!i-3QKmFR+Q!)J#D^PKrA+W$_7D%Y)M>2S>fjWjc+ElKWhq& zsOS2+F|=dbH=E-r%dELHZtyPTt2>#!^7&dPjc@a~E#LW`NWLAWC=_ic-e8b(ZR`B{ z6|oGW`k&T0S$w-JVQaN*`;JVJ({Wd?tlXht`_9^M$@0@DJKJZ(>}2MeyF%CBraw>Q zewf0CSt?qm7WtUA>`SaOt6QufwwvqWwWHTBvAzuD*lL&Uo;SJ7)9J0y3?IexrXAU$ zt1fCCiT%wU%E+_U>BQFw6IQTE#r%4To$mKl*1yho@ap=Kk{^nDtnAiKJ9AmJW+`#*~ZpSYK7;P+`Gxp zw5q(cB|A)U(JX!IEmocmDPJ8!HBHVqJk)5bDs0w}xoBj#vL=ct@am`InH@{*)HZm` zF}Pn9Qv7K`^tSHhvjh@+b(cLkEO#VGUi(Uy;*?oGzb<(^Cot~5*mq4Wb+yWfnhFHT#J6 z1c3#AXMO1kVr@2PmI{4m@N&Ihr%t`A>h>Gm0k^n2Ze3edC6b}79ckz7nBz{q) z43{J3N*v7Z3+3l>P1unua{k|yqMeh?>Sa${(Q;{H-=eXX`}NIp6MtS4bv!C8xaRuX zPnY#y*H7Kn-uPIhSpR+vztXYXD$V@dO7=#hk|06z-7;41p7|%LbEQl7C{CYl8QaS6 z>ENoJ0TYU2TQfdY{9Y4g)V$%-&;7fXMBb6&@~)L`ZamPsqg13lq~&jz;(0@4}>C zS}ZI0C;TscRyXI**}fya&VN;{P4{LNZk`};C+epZ%aPUPf74AiTou@6x93FouH#Jt z-;Aej?|gKv?&_)S*CLx2d`-4uUb?i4=ZzH0diGt@ci7Gd-D@GZeJhLN(kuE!yh=CD zmmF};7T8x8bgkDqckW-$S$}u38NS(VyXLlgQ(S259d@3O8Ru3Ni4=9M)QsYPZ`Qr9 z^LMk;<&8}KNxVvT9$yZBc+zxM(3(Vt-BRAkypL~+uV87`RDZ{)b3pjlSGlO>=}$jf zsef5-b(^ha*KdX8-|PbBSYHr2AKh&5-TAUWyxGaTx;*1(&4{)~90xz$2;2Bwblt*SPg@O88l;E3>6N9(?kBnmcdy z4)qPTv3nMT)pAcLe{sJ_)?%Y|qP`TXet?4Y#?ZHqI?u)N9DM6D<$MwA&Htty1@@r< zPoobDJ>r?Y*6ZUIF7LML?r9cwpG5+Q(Luz;r-HPwMldx)!V@K|N z<10T~otz_6KmA#0+EJ+faq5Q6FKi5LUa+40bYKzxsoz%D_h$>R)dx+zJc-FAL)DQ( zp-}0C6w3ko)Ay#h@Rk@FZ9eL|mRS>^ktPIht8EwxRos+DBl*vsko1=@#DLOCFQQW*d~5xzP`F3rm5mb z$D@!ynaJh^Kf+V4s?790HS3L&wsgybAN!}Ybm(hmwQA*w99{i<>dsAE?zJ3E@;)m= z7AjtlI=rFxwn;Xt?>8PsY?^2;xsM^bkA-Nu3}tG`-^XnC(RE$s@CPjZYuigwAMs+_Vtc2)#+P&HgVoPnk~`J`{7kWhz*x> zi?!|gondux5n27mOnaPKm`^IK>@{AqVt4a?+0*I)0#D^4jy?MJpf$neYPWFrb-T4I z{6u@5oG)ea9=;P<-f=oTQn7z>gGRaS0VbC1`^)-gNVBH!wd~+OI5TQhcecQTx+MiU z?H%9lew?~iDtgJMmF6y+`ezg@HfU8SxtkI2|C&P3-yhkTrUy+s-2Q*;f3!?NY;Sm9 z$Mr`?LdzfKFL7KL)x6`&^=*%K6+UO}tPm*c4_~u(cD3GzrIkY20{i4z*1W%dTJ$?p zTG&Ib_XQdS6*>SbiJ-%+Wh~Yz8T+e4}3f6fg}H24v+QCUsWT%Z~XB)wq4?T z?0RV}S-0zkC-!OuM{7TbzovNY?}K@&vu#oWg3fZeGf!Ai;u6`O@x%7Pq{L88UjGMz zg8k=Jw=P*e`zS-yq;js-U5kJIUiM|iqfLvtQ+r$Y^BI2G9Xhpl$>!yy924!g9<^Bf zJNV<}V^%Du-iv*zxLeB8GyVPdt$czXtMA6{abj*RY+=Q_`|DNUATy0!CYJNGBna>>cl3!>Xk ze6yV#ckaIT?B)sIls{@Wmv*Gw-`;!j>3a8TiW6%6pKeN!WxDa*NA>>OVp*pfk2RMl znWk&&AKJht_(r{DpFq5DM22ng^O(YrM^-G$ioMHPpC5j{bH-n79X^hkr((0NYRD8R zyt-rj>B!lK1;NW79Sc~IsGz;oXrlc=$0I)(y3G+|(Dm%I_89 ze_xvbN0(nKb2pv(6I|1@qm*^eLo1iH{JUCLy6x5BiUh}%O7oJS+mj4=;+D# zHO8uSfxGw`pFK}CoVcBh+jVWtME<6e^TU>%JCe>l&13(WC$BjKwEU)|r9Y0kqrjzW zKV#*|Bc-m_6fOR+8wam=;%M+=p_@Xp$A`&A`rNG50=q)Oe61(m&sO~QTcx#d&b-AGxz9xvfD`{#7sK6Giur-;*~9mnd@+^4qLRs^T6lCI1S zI9?udGCfY9xHe_oQ+eKJs%xDX#Sg9S{qx7&F-0w(%Zu^EcKP^rjaRN`;|n)$C}nh< zx$i=Qk)zJne&3}Rc#>ovE#GS~{l`Dv!prVU^+R78{JXALQFT7`wP?AX2KUb-K9>OZ z%{%$lFeNSTzxrjtb;XunFaN~q-p?(r?G&ictDn!b@bYfs;8dv}A4)mq*OgYi2wf3T z!Rka$WlSS|DWa?U0)ujt=#*i|=s zS7}FGou#JN&$|7u1>Wt+cUsOVoAt-)h~<7Aqwh{9i`HIp%V9n=_vWVA9#Lh}k1m$` zp1mSFBl_vS_LunO>xi92f4}GKd*BNo?FkP<#6YL(6+j;9Wq+ej|b*DSbSc&cf(XBhE!&zS@W+% z9?seP(|XZCU*2W`8>9J^g{E&WT)uR9gPgj0=*j<&+?H($-d`DB7Ibr0%^aKM#&%y1 zmmFWVtF+qt)#SX7e_5E8IWN}x{wiboSHKH9UWzgc9uyxqzv7ZmA@k!^>^}}@^VVME?bvv4ZE$ptX^~*Z7PW}&(|kL&$aNgq zt^Z7Za#M!mrK3xEIo8=#SZi}@@2gPQ@ayiR{q8q*cQX9j_xH?c;mp+nj~#Hw%LM zeCJ-ty?fdGXlu2Z!i!&F?Wy8>zO4$XD+qXDwQ|k#P;HOoTnB@)HGFDnb99d`R&7b$ zZ&ovR@~Szv6fLYjcpY_CZApKBai;e@8J%UbPj$&}RIhZ3Uwdz za$M*;UV2GJJ6%gR(0qf%ckfKYoxB}a?}azb%5~Ud#+`nq##;WPDbvK;>HpX)Ju@@= zdiS5IjhM0W&tF}alKHcCtz2^|`LIrx*DrBNL)E9x_1~D?`zAHZGf-{wDw*y1Ubi0J z-5sv5BG2K^_xDS69Y1Wh=J4sY@lIn_I&gR0wJDjJeL8mkYs!htkB*2o@(bwsz1>)>UB8!6@UgaB@<)BfHwW*Zu-991 zrf+jmme_mSr}JeOTXkKwKIH5yNBO4W*tw|!l@ z!}CN;VWZn)2DXil{f%eu&Rwq=U3B{ccl6yGo|UTm4fC8ia@AQ?qidHpO*&tt@WpD))J=ap@2K=Rq~4wJ zBt)^i^+mRMWct(!hNc6r6E${h;X2QGbj{sab7pxRRO+&v3zN|NT_B zSM@<_aqiCz?26afGglW(-o^Rx8hd3?+9z$%*&0l?`JS6p7P_nUEVO7V6=q($dd)=k zsX0yyzBc}j{`B;qFUJ-a5IkJpDHC%zBZ#JTa>`8)hi zN}bIVul%aaUdKCk_lb3DpYk3){e9AvmRCL(O+*%%DgV?y?8~vfF3)6=O~>-Oywh2W z68Kr?J)h1sTkJ@H{du>kC!fBIpDp0_caFlxPy8KD=ZeMePif*~39?_`!xUdB?6e~G zg5>V_*`4e~9E-}tmOg!Frl@vHa~q`gv)kxlx6y4KDmx z>vczt%T(Xz+8O(f+0pav@7b_SO8xrDz+L`Rv_B@Xv^eb7=q_9xAk(1nLOj=SrHGJ6 zNAohqYaFWunEnPGm3lU**V}K!5#2+d{8Eo_TMK;ov+0zmlxmLCj?bsv7<)HxPCRQr z`>;DRdgqtlVp4z8fx#G32j)n0|ea`=9+jt6#HTLXy zK6{H*z5vq<{$7huiNZ?L`PX`RG9Q}C|6Jb9EhZ&P_|atk+*q?mwoT@WW)L-5fdHI>!PD%A9Fc%)rF%lK`zR|KFIcwX64(%s7PB%VY{PQ=uGWCNm zhmGB-OJ2|KuuMGeo@!^t^}&Y2)^67SAc+Zlf$&+){^&YATqa_8EZ z<{ycFB<3O~oUHoXDcXg*Atnz6`g(v8C zxV+nR{fx-6uo4DVwe+=HANfXYSJ3+D&Z_cS?1;+z8S_K3!lDJH)I92&^hr=I+i7>E zvFLG!d`E{*oioqc&pN_hKDGORE{C_BV#UrKTUB?p-_+55Qts2?{B7d{mF%F&p^uEk zm?rs0MVqQFj96OyZLO-+g-;8*bUR$^a+fcgu>a5Prhq5GtpDzaxhT%x##J5~Ezo#| zrK&JH;MfI`J+@upr?xA6sn~9`_>4;WGS$eG!p#9~$Hl_-b$=3LQJ8=8^_NS}c8c~F z2sG79ySUNPa?4VSO-bC!{jc}zF|yzONn5D7|KyTGUmuIL$o<~?_{@{1A#%ApSPPG* zKMi^KsEYeh-}ze~|Hw|Bc*Iw4y*~S##pf@aj}mGtpP2b)yUyMod!g?fN0&EOr9G>k zF3%`2W0j7j$x;7LVu=}xuIt!!E9%_bYm+p)<94&s>UY!KM}Hit1@-Nov7GCj9UIiHu?Mmr=~LFMP2l={mN(i%7B%zo|jl7~0&DO=CX;D_j?KJ7UcF+bBk^ARPPYkRG63ICC zT%NmHIggKZ*5_@%I!h*nOk;0R``vTorr+KAb)B+$^@dwm8&5sg{X1=krAU38uL<9F zff;|a)|x2sA5oR}+1&N}$hrS_=UU~?-E-+e-Q6aGr@^oNuH9R)!?#8uIWTgqd#lme z(APdO-M5`LzPNh!gx1?R0^9%G5?PyhBwYQ7?)y~Tqm@>Sd&}(oo-+1E3mo}#YgfSi zsKQ65#as;kmrs5!*?K2E_wuQ51BFRH&tEy_c}I%Nv;Ja&K%S$_=lD%8PxL%lFQGW; zr>g10pb7VGG+8`btl*&|pR73R=Z-mjTGgvB`{zxXxbo-nWaaxWGPslGu8c2ys&oE- zo?W;6hh_VuMN7pO_+`E5UvOEZj{DH!zqQa+}!ePwJ8 zr*r+nIi@o|Z;zg{^Y_s&lbVlo^v(LG|9i%qWi z7iW{*B#|GMd(nU+|L=?m+V!(qIr8gQhIhsPcW(I3pB5%2<-AKINz-o8ZGi{6bt(7S zUc9?tfBU=2#QH<$rBk*kF8RIGdzp6C1$qBIzN2fMG=FRDJ+sbBcCo?btd3t71WNw> zd0{Z~;_Ri18ow0XY%_R2^+?;dyBlx&{fWEBE-_`%(SjM1@=x#Ko%rD6f-}9RkFHG$ zxH9+O@_og>4y$DseSB7YTR`Gp{QqzJW0GDed8z3o?BG54pwujLr(*G^`2T8l&jf_( zVlK_No>#T}&ad0N)e}W0|2)2E_NPye`4)1SZOqTPW%fD##gm78ifd1^94d6Y$J_C; zXYcnTx`%Gfu;%v>d1AC(aoV4))^m3rsG9gxChm}$MAWcLZziNt!dub#rKj zv;R`t?bQZa)4l6BL;o&0z4*4kxqr*2_19KT-xJ_^u_o<#!tROdmgd)UYUIfnMTX*cXfNFhE*vZzNTC3gjl$I+r;#tj6utHs^P@Jkhm1#coh(*Y+Z85jc)k6cy3DQlac;+4 z`!gBIB@++)EqbX`9G)?`|C~VJ|3y=dvE(_M*v1!VCG>AooMty=S?H<^0e|^LYbHf< ztl~fKwS6yR#lqzO+vk`aw)9E0bbRnPF7@tbai4SR--L#(j&Q%&CBFH`uGR;?5C3Er z*E-T{*mC#%vtH}hs+WJZD^2Dry3;tt$K1w|?522a_~Cy{E?u z>MJA`JUby~nD2LI`a6Z0#m7D**!)kB>yV$WFzx?>3Gxym*XP}wxIdfZy{Qrfn_%5fMf9ou!=SeetKL5t&j@X$wL7BQob32aN>#aYMyKu+G z`AZ*d3%FAe81`tksmmq#R9Ef#O4h*7>1CJ1KDo|TO?vb%ChB~VwW7+(9jP~dh6!)n z$Lsj{%9PH4UsCD89Fy%e);*Jda(RvFsz=5jMVTBw9xe%E{Je{|@Wbvaul&?=+Y){_ zGMyHk6ZLSdQ%;6oYHgI^RLPm8#x{t0USbDau-_CpSRlV4DmP)Ice`;E1dCM)Q%MuuKIfo{@rr9W5boM5;WgzTaZMO$oX$a zn)Wh8z@XqP(2 z&%n1r#)TKB$#&?~SAH&@ebY0xd8tsoh3b6!)MTGt?(DrcLY>;GFQ=xUnxs;|AjCU)114>Fr4ZU|AmYa91z zgF*0b_QLN02b4~77bY7N7M-7eb@QeZPrNr<3nc&3VpwpL_Yl+M+4tr(UpsT(c%b zbD1MQombm)<0Pk$GB3~n`%~uf^fl_a7!>O6Hu|)i|Jdx}8x!5Hy>poGbJM{UxgE{h z9O+p?tshkH^p3J7qZ(r*CHo-E7gV z!?|3)e(6SL!^iepLfSog()V3I$^Y!soTZ^=llQ6KZ+!7_@1}s2V(%UP{0R0+c#^Ei z(qFD{b;sh)=(gIk%C9V=#O6l|1n!&teP>eim)VtfpH5)?IQ`BXWvTnA-;VvYPo3vOL~30>s=WBsv);n3Cdi(eZXuR9{l&=Jv}mYpB|@9e>C^>cpe zrp0@nl3es>f%B=7upZ-|ZV#*l_SMbk)oOjpm@oBO?etM*MwT`9+M;rNhc2JLHFNDV z`4_xh>%}=d?NcSJm=*UJDZI|;nC<@YUH8V!m>#XwPrA2l6V;U}yd81ak-c$0v*Ih+ zXZA0`I;7nWzMLS@v-ia6`^I{{j}EhPR!w-scz0LN+8tfT_>OFt|MHHhBggNJ){5eF zGEXiic0}_3dBe@6<~S*6p#kf`*LrC}QDlY_M{vBB?9i&0=w$2 z>3MlA6Z|W3TBudNy>q&Y!6TKQvK%4zS9^VY$v5$pekcD-ZJ*MP@aNG^Q%!jjUstET zE8{oqxypBB!~5;VqN@F}9VzbxQlnCy%5vn?zx1E|iJ$x7Te-c<6AD(U8Mk+PvCrGd ztoYvR#Cq9|YWtO^Cc1fYG~K@|cVfnoH*Sxo9x6C;*Y?<_*DOpA<0q-i`R)2Mz2*Ci zce_)z`%QhM$8yO2^tz+^%M}0EZc9AB-XrGM>vXmMCnKl2&3WgbVpF>F?rMqO#zvJz zb7j)=PIjf62uPm4wZ^Mgr(D71p6%A#IefQ6;-u=?4?W&{QQU0%rv!$Me*5jAQv)lC zB!A_3M{6gZkGOi{8rOSCW`nLLTdn^ICw-lz+STzR@fcU_xpIZPd-~h1f9Ah>B#7SW#hp#pNhOR%lhBuykdE;}>rYmCM65;8E<uoor*1IRtIP1)}~8Od-_sIOMA6S@Szh{ zw>O;i+hQB$c-rc;_k!eI(-fulZ(d`5PhehsR`FwVugcjw?o3^sVt-DhD{1PZ()Zq<9?+jx@#Ut9=oJ=`KR@(uxlxkr=?^{CaS$>5SdZ1JXcz(Y1-8rVo~0# zM;+D91%37{oIFAO!rdd6oqw}*?^h~l*ds1c@T_&6RicyVi%G={M~^;adMCJ9@2B@& zLDRxyqrzuArmK8>=K6B2&$V5BDl+YOn$CVNh1m~wa?3`(lwBcNAoj_5-<`g<|6g4@ zyk1nMc~P_NpS9cmHI@JC_Lk7zzSKO9!Reqhhg6N$%m8zvriaQ=#ekxCx#Q zcB(GTk5-I7P&6%Yf%cbEY3H=2y?)8I(|o5=*+wB7aRT`CI=~`h@BWxr(rxdYKc< z`JeLCPul)9I!{KUVE5)Tux2 z-aTa=v47txFE!(9Z#9zj%2%}6`}MKM%+9P#ZU28t{`w4&37!wupKM?5QF&Xyajh6H%t{98{VFr?cDgz^y`BU*2~_fteH63iR)neokIJaCEV+TmY=m+ zt+B^;aoe$-dpngBn_v7}yGMM&(~{YC7YkKI<~S^T9}u@A@2T_|sTWy+xw%P(W*bib z3M*b#;9gg5BPLIdsN+>QQyko|BIzXS7aKFU%7DC zNWcA2i1NFY%JTIJsSj`Xt@4R^e^m0wf=Ls9?{M42BgtL;R416DWWvG^vpyAxKYMar zSVeWt>{D7IRSL3+4K9<-xwtbvK3c5xRGT+q{r#nGH<$SM#mzY(-5UDeb=I4Vf9uMm zXYQ%J;c{fDs+RAAxxOM@Rgc{Li$AnZmcRV7I(W*-KlU#!D9c+a+)P-n)w{=Jsxb$n ze3{w*6VrXBOp}>;rSG)ULB9zvldv(yg=PmMFb>#(UDQNAmmf(sI6+ z9KY}6S6x%@*7ChKhgoCKTeOb`(}B1 zTAsD3!#koeq{BigOE8&LNNLZi4@bPyrz}*nJ|i8% z&f--s9OqvXw#Fgsh~(BI%a*Zhle*o-SXDD?k^Ggz=T`h@@ilvH*0o3H=%s+|)$4Zm z#%9gFm{}t;yW0JJWmctt%H7Oa+SWUDSFL(r7P65iw0pIYsdBvcL~}m=v-`5QuFAdf zcB-F;U+ zJqwh1_wk+9+~adoB}xuAZ*Mi%&6k|c`eR<`zKmT=l?tEhzZd8hs~h4ePhS)sjh?M|Ttu}GFXJ5;nxFKI*`iaU9{ z)Z=c%%SApPCjE(cFtO&hzW=37y0hLjm;OKb>ze!1zsG7zPen%l%nsZ4^z`BxTUV;( ze%QQ?<++0SOC~Gb<&J_=jJShmXZ>6E!8|nl%W1B~eEDs=!qT^_?wZaRu2BCZGEOS< zV_7=i(QAu;vNxUWkZ$=hQTUa_az%k>IgertH4pvHIdv>sqUX81T4Zq9<+D$MrymSb zJCmyaO!m|Bp5GT1t7u=^vv=DayXI%P&ze|#qvy?OTz+!RoV z{KcW{yG5qu`zJ#T1fcCSC(&0U!uFyr2Go?FxFS6`Z5&K_r5R9$G_!koXp{qgm;cYDq* z{`zq8Wxd8#cb^}YnYvzJy#v$PB(do=l~1iJ;!@sK{tLawdnd2AeMZ60+N#UDL(?zM zZ0bAB_2kBnZkL~4x+*tiHpuC5Z=K<^@as-vUQV;ZtXoxSmw&Q%F*tUfJbPbjRsPkJ zN1jT(lNa?1nK0q=n#0K_Z@X-)xPLB+RkuU*#39Ry*|%o)Jvhph@<^b0J@eL=6P|}F zu%@fdOmkgbkagsW^!jYQd;!-jE7{Me`7c}gd;OssdYQWuCui*4#Asgj=~2tJa{W6W zQpzlUYyS^UJznA(8T={CFa6#5o}zm%#p)k&|6={OPUOAChD}VCHts6#Ci3n&a&mT? z(mK8Jwa?^(#A}}PCasm#6Fe>LvM_Ib>H3g8ft!svobOt^-X_w!O7O|!KQHbrsj)6f z7kJFE>w#3K_@`rmTdZ|B^BlIfUn$>{UZ>(SaeK12>JRfP4*Oyw;%Du-E_&vM^xwN3Y^Np%o%W7uD@BZ7RGG~o7;~6de zic(p<^G@$ue(qLzbg!f&F-&2yhq`G~jMDv^4_2>8b^VZkZO5gRmd;IrMUS;Me=<2G z>R}xv>2odOQ0Ux!7Rj4{D!xh73k z(pc*UKg@+wW*5CcHD#StIriRDO z3SH~%sbbUe+DxY8gelzD==8Q-vn;uuh|T@oX`8`umAgTk$F?J$pU*dF zV&9|p^PWV0yc~a5^T((1e?B#)_0Rt`c%C{US>m2Leew^Jqf2VUy(E_1v8hvdr^QvP ze=D&5u-7ZG$#v`(S6dp9;s-aS9vI65}v({0-&R;;J(Hg0?z^iP04(vNvs=$;cN@6NiOHRrj_ zL8JT1bMrQzQ%gy*l9p;M@W@MQp6RKl_3o+i{4$5I%lp=@-_*3K_ESIiOP}gAo%`k| zZytVnv?@$2xs^$IiO$}l-%aeo1bsrNHgaXUv48DZw0O_KrB1iKmTn3?!L#eC z^owgD@1IrbXX)3~M75q-D7;_!;>S(Qm$c4UiE#X!bv0(Yl-Wa9F6G#li+*a&{(sl( z(=CzJ6W(ohR~5Vb_0oj;tP>{+GoR_Gm(AJZDRPxfA~~pSvc2tEr(M1W&YqTTS(UL- z%X!zjPigi?E8avTep(h7^80JOTdPXtYyl$)k%@JG>!0Q>5^$B>wk$5dE&1aDjjz*l z)be2bgOgQr zRj9`vOTC%5E%!W>PA_Rwn=-}5t6cO_{yLvmez~8%ZSdKCd*)rirDwJ7TW<*C$eJJ~ z9JF;|S96#b+ezJv?Dr0t$T|qFf4$*>v`k=O^zO5Vw3Zy0bGzo>zePGvmMf?nbh$LQ zY07o2l!FD@%_{7x-A)Z}EwxKk_Lc7NVKZzBb--Igz=E&3DPzGTY!NsrG&7P3!f zT>VhH@^=99rUmZvL&NqZ?BJTIzT{JiR{d4Ml}*bY=;f>IR^0#F;g)CB^66{#FP!$B zp{)DSk+6ryQbmOv4^2CLwUII5&6hVlUZEux>y3L|IE);P0FsXIY!SH{=a7FA$uq1)1yCso&;Vpi#&1JX7|~>Jb9*<4#!7o20aW^n6+%F zo^~M*XUJrq(}t6!YeiEma^(Ws;*A(*-`i*X(dXsP<;JY-fg9}4oE2Rhzue`(Z?nps z?{D^{&e?5yv^K~7{H));E9RbmE8;WV_Q%mX&nGoWXKcTbYrFU1=YAfQi*L4WoAtN& zo>EJ+$GU64%N_@rQ78kvL8Jxv)Xy= z8h@qD`jvZoZFtH=Kb3#Wdo5-ZIiLIIC%+o68y=jF8@PVj%oVcJ6F8g6mLEW zeam#xN4Lg#)k(*2`#(G1cAWh5Z2Fe@GoC&>=3_kdMrVW?zfB{oZfkn3)6(Tp6}|gtXJ<(Z7Z4lJTy)H(`U9# z-fkjboJOi&Rw4E7Z`bJHc$38{4!dfj_Hs`zNcE z>1D-#fdZ=RE!)3;6o!-P9-qO46k^#G>RP6fPt7>f7Gu8(Nh{MGro_It{?Fn*luS!^bHAIyD`af-dCKie zTkGdaeV^}b{P8;f%-a{$r=6?wNthGj@{&jBV(ujtzNx3DysS~HXWqsZDf_v;+^mQ{ zRzq5L?}4qVd&AneE(`15@Z){-$zlTIQ%9%7n80tnbMK8a{&nqbcV_G@vRZvgP}4RoMpo*JbKuQ2iiXej$Q0kdXvO(xPhs>jJ|Uez z&G+10P3fQGW4`P)6{(Bzxz+Wc>C--)&IvJF7nc_JAD+e7>3&aLM8Cea+~;kKfl&lJC`iezOSvSy{v4`&K2tW zFDQDyc(c!a(YyrHxmG*2pW{{idi~_qaEk=aN!4s=XU@#-wC4N!>)nC3$!|^nnic9F zpK|GFaY)6pD_S}lm|9)1YhimKODH0;z zCq{qn|Fc5U_*wk|1D}lU-St{O)W7WN?oQZ|BPt!Yqi*`n z3~sTw5B;+xrkkGI-JaxdMv2_=lWJ3A( z?)N@LkvF^V+gBv5yQA0@cO(9`x`~es^0l*z&*w2?evX% zFrlnR_>@L^ZZK=D>2@+$<}jx!DuAEEs;V+iF$bw%EU3(#k*} zZf2<7%u{JxKe?7Lth*Cd-}yyIU+L2Sn7U`qO$jeL9AbPb7i(<#8xg3#Z{O@WO_@IR zc@clkoISW&ai;F$*?$YyPdxbMipn9DrYq}DKQ9W}xJtQV+3TaVnQm8>*ztd^{;{3= z)J72nrV0H!&aY+Gob9#JW5sg6-E2QQ(`TOUdmFk!E8y*~!1BsxbGu!5wrl)dwSbY| zK>eSQR_aN9nI-0YRp(!9<%n#)a_pX3Hbdjy1(PSyl|lM`|D4yd(Bu$E?9F`-haaHYZ~g~U%+MC^Ay56``@gH3Ysa z$5Q=leywDatm3_-#{NmNYp(Tmh5Vv~`Ap8M4WB1;uS>rY;9qCn6uWEQIs0pRxgVxq z?lR`}3O7ib`+n`QBjIP?Ea7e4xliO(;}hG*c>tq3mkS9y7DKLJ1y6+uRqsf`g*K(__OPNob z(E9SzA~(i)e4aDZrFiwODX?EI7t(xLvZ^quDaI#%`aAo*xvlPPRw*mLa#eg%3%s$Y zFLcTQ!ItN@a*eKN_48kO*CD%q>UXxID-Lg(v19UYiwU-SrX&=5>p9$$y>aFkFKg$+ zAZzJ$HOuo3d*A)2?!|JU(&|!kR{557x0-HP?#n5BdONzv*nz1yT=;SQ+M;OJ@@;BU zqtcGFC|ej-->I}+Eh+7?j8ic~PTlV8+ch7|oOu(RLjQcz=zOp9dP3K${B=(b|FK%K z$nBrtUGucB51L%=v1&Y@clV`~%n_9pccnVJe;aMncl@exejDHCW95twRvy|uOEk7{ zlEdCZvz--d&#%o}y<^KY#oMN5BrBT*4xeD{T_bUO`@&ft3!W{~P0bXxXW_XWEKwu! z_WSQ;2DRTsTU}Yc)~zg7zh2AS6lYf%*`9Ml?^3nvt820fPkR^d@S9!juOYmhd*zyR zMJ|>4&B~RlH%wZ2sjp0SlC!q;#{8#e7fP7@=g*t3v%f&WzxaGevXWzV!Tf8A`k(!4 z{=~n$+EL3TxXa!CpZLG;N}Ssx_G#Fsl?1%FSQ{P@GV(^n=j ztd(7ncVzeXC3{>y*4i*EKkpO!|E%rF=J)k~kN5BFUiLX&BVVfK7k`V#^m;3i*!53+ z7asU^=WS%mtJN90E2nI~rpWz8Vf*AYTq`y(Jlkz_wD-`(8re(s%8EB%Y?ydm@%ZNx z-AtE!GvC~N`e=qwScRKlQW;6RUYlyem$x^=EC&HYj~ClZ*_WMwWO?SuB86s zd@1X~=d))wN|ijH_(zSObFO;c>l62mY<1#&`80R&j>=o5w++|+-u$_|H(Kx0v%n*J zuGcV}64GNE*i`Yg);863X?8yQVz%u0RHC?VNf1ZXgs!8{ zJ@zpcv}p3!t4HBbk32Zm$qM&RBioG>akYpi$~WjYsrU(`e%BTQfg(5 zrt*DqmGj65)ql^pL~EtOwd;z^FYl>^c0bXmOb>7gOH5wl%yh|k-=Zy2lm5J(kiW(I zz`G)aosL^f%74ffYZe}P)jlVgP+1V3Hu9R-NC>ifzZMFW)4qxM+TUj~XC&szXU^H7N zykFsKM&s3Y)(hKrpKlRyO7F>VSTqxCtt*EbHJaEmkxa@OWb^8x71d_FVVcG5*B6{8SVRH!SL@3!-jpWvt`rc zEMD#ooLckuuj7j|vFiHg`uYB*YJGjaZolt56SsYw*Q`>Q4MUcC*Zp-}bWW*BX94rl zXGO0k{3w2pc;!g@%k>3A~l3 zH9F*8h)h<@ejf7p6?;+HxujUXdn#O!WmcQb&zKaRzUmvr&o*g$|8B0Oq0!kXvJ=XS zMczHm{Jlo2Rf$#QO2xvOW2b_BjW)QTj^W6Pb#g7X6yy{*C4e3scwYth3>Fvio?ip=DaFb@tS*9nur7emWFZrc=M+ zX2YIolTVf1aa;TA8QYT`XP(L5i()N&$a^CHmCkRzYga4J?{TQ|jDIqHJ7@65pT|wMr{4eJaL=Tx zK%HAkx8;p=DeK%rF*i>>i2uQ$|6XcO<%XR>r+4z6(EXVdH1+M9+fTZ?&pdl{{0*;% z(#d1xO-z3uaH>Apx%1uB4Wh^7S&uVosnmJfG8Y~4yJfC+g268FT*0T>Pc819S5Ms! zQcnDttn_5+j?3QB?4Bo2J@YCQ+2qaF6!*r7-*0;2^u;!_3ydRvKDx%1GW*D@3GbFM z%~a*#Df#VXD#Kg(S);1&l-tw7=_X4Ij2~6+bXCX~m5cmaxHp~mdwOZ>%xxiR=0}#> zd7Cm$THe8Ow;@G9tl$Fswj76|6AL*jR8J+wwg@#;LS*3%DpPi(eWZ}e)-p_fN(Npl#q)O=tf`xJ0 zxcu9WrY*BOdR1$l^SZ-%@6!4rb1a>I$%-%e^U69*ZB44xsZ|eSKRrI(wl(h6an8H8 z@iSIWnzlgo(T7LvchV!?uTy2+GPCrU9NVq%(z#z&ZF;Bt`TNf2QRnPMuKnF!X1yT4 zj@-{W0Y->*G;|8&1_*J}2^i*Hw@UB2;kV*cq`=Tj-yKFR*-3E;lI?@ut# ztcdGRSG;PwRKnEoX`|358#eyJ*K85ZA7Y91yptDfW@^XKtbrS}FY3rcoP zl8evjj@vn*ME`T^)oC}jzZ2fa{&0KUvMcd3ZS?=A9p|z;oHqCG?Q-Fwv?ld;=dIa; zt(Q$JSo86Dsmp0T>$i+Iov(CPFKZ9}JgqMLA>)I$<$iCq&;EHIw@KL6=S9Ht<|Avg zUY^?ZDerQ!)csF&Zk)#!XfKl7pLslT$(hM1<@w@ohL!B5Lw=Xcbf{ISpL;lgPq{QUnu zudw>QgZ)d-imo+Lr4`RL?L_{FY>f`*-q(KGjP-fq>V*QkZJ(UBe4QCN-9>Zx>=h|d zyN(p@So=Ho;06Ypz_vTWAH@H-i`uj+ooxJ=XccIERLC|(bnecTT7DgO4u~w;^g*U} z*}PM?V}o+81-9L7Fj@4YZtI&vwnxqHUozU=!uQh2IeH4$ru)(pE_~iIdD3E8l@C3~ z^q6-l-zvFVZuCAnU|UtiW8M=CRk6=RCN1jF-+eA2s#5&J(K{+mHL()%N0-TbaDQ|-0r#Z3Iv>V0Txl+zwP)*oj;yyDFV?Ux zaa8*5UhMDXyynm>Z`oOpnxyf84lc;qF-yJ^2&LA6#CQcUXA3xBSb#u!H;} zUj3UouN^%tloe>R_9F9k-)$EZE#`2%`hU!YrMyD>(5(VVm)qtuw(XO;BioxLZu26- z@by1|zfO_%UUy#h3*UJCPFrb<){@l|ZisBqO#QfY?SIqCN~L_sWwR|gHGU>9*%K<_ zS>F96=;E76CdRt4EZtc_OLk42b~!Rn)FM`T!h|LxCBvw6lIH0j)_J7->)$cO$B(Q{W=s3E0(bIYOJ zYcrjGv3a^KDV?^nr*O^3BN{DlXMVYqwLn&}Ib-_FN1T@fY_tF5trknuP1}~#`^#@_ zo#UGDy5`1|#j#gC*k`)=pElag)iiJRgw&F(*GBn&rC;pU`Fhl%(m&wLZ$lNS$cKz| zYLzd{_MZ9fuqZh*r{qH`*V6*wpvm7>JijDesq{xJMP=@WhIxgVp+^@@?)~jnBYvaB zWQnlz^ZK6?ws2;8Ed1+#!6mT6clLy?5}O_6-Q{_ot_7y>IP2yMEHBw}Ab9&O(KL~+ z>?KTjT)T{fwsW5Jcs}jOVUc-4LKFMikDn`f=%DkSr7Mg%t2JF>g^`SzV*JX-I;#_Z znkzYunr%JXv>Rx-vqw-#yYl6F4#f6kR>ZCfv?<%DU1R z_O-rPQ+!pp?Cfb=iA+KZJKo>bwm5zJC_`A+g_XCzW-dLJ780Y#J=yS)tkY>fy@pE9 zC5lH}{snB}ycxLO_uTX?R`e6Dq_#{6 zy0<`a^~*J17rpxXa`zf7Zv)BMW^4XW(5h%Ybg%yJ?f*jNY@Xi#zve&sN2d{|%Z_|bjX@ZfjJrNJ$|ef+zph`xBilz`IcXi$`%%y{;fkt{Aw-RU5zKU z4a*;OtTHn_oFyh*ed0G`sI|rM2XmGzkewjidcC$>b>HOVi#PVYbS*lNJN?o-rS;nB zJ-M}>l3Qy;8bel0zQORWEP3Lt?7C$N7xr^z1})!qa@G0wd|aCZ)+Ji=?%%cZ=_}La zPNwF`55MU=;^_1B*nMlevh|6wosSi_-|JM#XvJGyiv`U-xjbW$?UTS=WUhz z@{^ALlxCl}-8|`ap5O1F!t#J+)jGUof7PBGxv+7G)>G}Y34+D%X5MG+HTv1XmT9QH zPdRFe`<|f8vfZ374cQ$Z&D%6rF*GQVB|u~M(W^4kGf(eOVHGd6eoo9@_@%Eb%}jV?1D8(mn}y=KN4dokO*jn|)Mg_Xc;djM8`zP{lQ11UzcKX!P`!kKt;^QR*UZ1$_NDgw)}L_?7Y5F-d;WaU=a;3c1MW7)%n^TfYqrdbOO=lO z9{XQz5mq|&GrIDEL`M;nFPlLd>4+6J`zK)2y{9E}wU)Q7a z8eu;!NvfN5Ur@OfzUa`zP#hq)xpnO90Q-P@otVXf10 z<)2%5JT2JsYtxf+=NLSBVq+aXqj*EP|LduTR~+ngx+w4|^V_LAJzh&U-fdbkYs1>B z^BsFjxj$w4#bi8On&9sU;iY}-S%nA3tf*z4?pePV=3|EhfY-SDN*Uj zy4f}h^^cxcjGo~k{9)0=OHYDy-t!!-{g|+s^`$AhOZlSKme0zKbS(c9qEbI+ zPhM_aYJ|n2hcD)|A8z_xq%&VS&oRkw`D{rOnJ2o7FI1e^b+n}Y#+1;&Z&pH|^b%}$ zH?Ti6`?4hA!NU`J(eqgsHnW!=`{Po+t7<~bXP^G8&MjNb8~-KQewgsC`|hRkwwk3S z8a)sFSeAL{y;wIh?LcH$?9F#iL>w+2xl>ZyYVUOYf}XM8&i=|D&RoLGtY4$oyWcTL z5otYq*>;xFC%XeH;-;>w7G+K5JlVhG$JgXfOEQ-KJCbrwEnbyBGw8&A!4sBTe!ac- z^KPs?|3v5(L)e{{+qP}waE(9BE^xv=>fzB4x7UAqn<_=#g|qFFz1aRixOeqL-4iCa ziYFes^iu8S|Bo5=BB!37buLN`-6e2B!~WiDCyVc?{I_DOQYUX%a$AY3Jx*Ob_uzgl z{lLAfC*AcoCF$su>}%cWR$F3So?rYxayY}2JaJuDJ`9zLG zhmSp-S(?1e_@`j=ouwM8Hy^(IInTN@E@0`i!cEnYVQL)f_)eR}P42Xl*nP8YV!#Jk zBW9z*iM_fW6;|m7W@=qe;WnCnF6!r`i()D|f&R0ug>AlVk=Gi|eRR|6&i$fSauT<* zzVrz^9S9E`H)BHR~E8)X&!qbZ{8^+bma}K+# zR3HAZaeBkkmG48cLTBgZI$jb|_qngeZo8@f^~q_PK6m&}m~VP!9Kdi|pnkf@YmsS3 z)I$t!I^W%PEqcP$EvI`X<|UYvIr(@j>bc_EW3}*@y585z9fv2>mB?)Ur+atz>x{r0 z$88r4JDsy7T{ljss=}&b+W-E{j(*C&FaE;Lk9|Tn-0y{R6l7VmOU!d=Sv7OztVX5_Opk*TB?2vM@|J)8 zKDBAeA+aUQzR&l^q&}*6qI-h1YSQe9p&Qt@TKVydzmoXmDX+qKS3OE4U-syM{0?)S zd_GpYc*CSAmgdvGKA)w{+Vw&#<*$p&wJX~-fgn+>MTO1mzW^6||~8~K?bdoG?7OZjN<>56Qe+syW-yt{p>UF6Pp zY!H!WWp&@z&h;tr@U|;@*)#h(;?6Hu{29w2)D%~8{pI6zvEMJfvO2r|r~CKh$LDm- zYpz!0N~HK-u-~`r?d+FVQ{UCye_OURTBQHQ`}VSM*&9=~yXt>j`r(Rq-;3|I(Pw3k zIW4y?_bU5W)OEOj)dRT@)wmU6x>@}vsu?{$sO`P7;;8e!N!G?9C57j^Rd)Zpd3J(V zB7f_brMA%@e0%q}p74^l`*DbXYK!RX!WOQfq$%wjO_|u8s=IrMo>t!cOdlg17s-Q(Q8-=^G+y!64)L5AJe^3|FT<&g`G zotG*v-N9<<$UetWYF8omUZp3wiv#}jBy1A3-EaK*{<(~Q>y}N9nj0vi#H#ka&tkow z&ymIx)*VdSt%dwO4_B?QauN!9c;x7E|NDv4Ltpqjb>@5fkcH=4PaT_d^~z5_SnS+( z{uh~cU>=WAn#o-2Jfq}w@`684u-^1pv&ynCZ{?g@3hgJKUcZy)YyP)MM@>oc^7)#r z(f9PY&b!MNyF5%xoHtvv$}Ldl+nbrJo6f}Q@p{&l-cmN6JUejdLuIaW&D%eIO_&hj zeNH7*yZ`^KwkgX$*IAYEvY(uIL-E4zB^Lxrq=gnRz0?VBV$OA5cUjSX#ci>d?Pr#9 zcAbkeKD+sq=5DFL_e<4;Hoi2zclG#5&lm2OweyR-ByN6DT*&*?Hf!Fye{T<-F$r}! z9NO~O)ch&4pPI#l;K^QOgOUnfKB}=dTw%#+ChMqh0E12Hsx!c53vicX^ zT{V61!eyOOa@;-kE#*HxDP0cOS2Fo!zq0w`KDS3%CvHzT`1Q-KkDjMbEDhx1?<);u z&;HS+mv(I0LG6zc@4^f=hwAynW$W;5k$+R1IkzkO_|%UZ?S2^5tJ~Wv@V{Q* z9Xff--2K`++8p#Q+Sx8Do-%)bOwJ3lg8HTR%T+=ODm*tl4SQjDTtT1xsG!oLjc%Sb zY~TDD&Gzz2M(@AqEXIERQ^m2a!|NVsbX`+ipSHqn=Jc8<$tRoNCA>O!=ILUG&B_c1 z+F!2ta^3v#8QIh)+@EewkTEMTdp6nkY2mN`I^hq~5>EQAI#s=D|DM!{=bV-d{LPm> zN(P;bHr#%7sO<@0riLK+pG zMkg;*sov2mnZ7^wK#jxh{2MR!JepfKM`n5~`)qR^2dB;%)mIhuxM5XS^TxEfU$yU7x==;8lZ-Lf&67i9b1#@oocKfWDa zAo%L*mF+HU+ICUK=T*+=unPP(dvdFGYDuf)Ie&@ooLqhQ` zia(oKc3b~lw%a?hRg$Z-EM!-v(gh_CFFz0ZWb!D(dO`ZC^rMc3dKJ5$N(0XXrpQr|zUCjrQa-YoJ zlH*)9XOg8zG+Ron=x&X3B1@;aRy3S{;%t_3^si-%*vaE!9<9GO@6lYN7+vA`-%gi% zd*mZK2dO#b4rg_^?C&mqy*Osubdz>KfUk2 zCfyzyk)jH2u^eKAR%k%GVRd2BV zU;XpJMTM{ydl$Cg$-X>+a+9adojbSUkfKSAS=v#hZ{@SD23u*Rp8I6-YVqY`Y)u<6dq*$Ya8Qe#-aSj%;6W`8faH1((HlSp8cRn7H>*+&bg+nU*uA=1mM?Tq{?lpVm9~ z)bEx>*&+YbuT1dNk6kDAe8r!8-O`DyH#wZzZ`^TqX39LpGwHrvzt!)_HdVqwkMFRh z1SQGdky_ekx4 z_RaUDW!Kys>+%eJdG+1SRx&r&ZnjB35%c}|i>6jHM!U%^{u|4$ztebh&SolmfViH? z*2q5r&ns?ix^rsjObMsdUB0G2`>u3$o&2spqx;MS#{G=dHu-UHc!s}|l{|n<|SSkbKg zzxBtrS7thgp7^h|uGstdmfKMsw##q1w(DNv)J)m6G;II7+&k%dlcbL67Oyw)S}|eg z&6AtIEB#n@KKJT5g$Y+AnIpGz{eAQ$zr9rN=U>6Bw^m*i#`S$6v7&!mG~L!P-2E1k z`R$EE*zbFmGP$ zr#0=!f(1RB4$GXjZreFwYkD_d)r{hn=hhM5%o?sfS=eTM`o}~yU(LwmnWFplMSW;J ze(s5|ymhU?*W-@28m!tbMKsE8X8t)vW!k@+=N?*52-^9)t?lX3q-2lE%K^-T z&Yu6eP0N(sU$%z%#q@3o4JykoQc&2CMalUWXm%d9U+0yo@(f?Czy6Y-x9x znH=(z(x1KaC@j`J7x{y!>-Alw+5eU9Psm{Z zq`%XCMtR`97n9g-oYUjZn%*oJ61RGX+GYVOtN2|fmc0?bCG@Ueao>Hf_bZ#63%Yld z`<86JKer|=)UxRE{nJZ@U!HlrR5*Ua+Te3c-0zyMtSw>vKD}YnF&z*4*P$}@$B#6t zoPD_R?LA)YtmEIW8-34H;?mQK5LRRm&t9rZhe#qk;ho@`57k1&d=ub=2@vpqmc;)PZIkz|W zf8AyI#zAiR{Mzd$Qzv{}YI@%Cmcxnf>*_!0vt2SR-(C4pvW@eSX`svA*TFJ&y%J2F zv#UcYxwjwfI_q1m@ch$)$x1t)GCgxU#+{k>77i}q|5xrIyUdA zN?c(x$tkmE+SaAA_s@ksIeS=S-;Pr={N6~1@Omx2>m77smICXSju*eD>R%Fzv08S! z()el4B~`xWl!N7B-T6A2JNJrJ+x&NZ`1jzZbJ6R$rre+9Gly|y44=cI%=?W8d2YL= zPE~ypup>^gA>(Do;RTBv-E~;Y1AXjI@0$MHbJ{}XB98l?`VPE^-B_TItFt8jNBs_; z0J{=ruh)4OeBM-Xo|x_S@#hI~4^iF45qtavBw{aXJeYTLrRJ7i{Y*tMwTPnK>CJnD zHBKCpT%IGhYC?Tqd;6Ii7N4h_J-p!hS-VtrySvMt@AGYXpR@kdpHpn#T(6r1)g?E$ z+`4gia*$Acy>`Czs=t-b%EF&LHwnCF)79O+{a^$COD9|N>$c&&hEta6bN)L0R&wc< zR{co7AI6S-UH6yyFW!|K`cO^!Qu)iwTZfkZ`x{vn;VN_1{@R+mGEbJ+E;9PyBVMw# zP5#}~wNgq4&)gR;JR#DMH$ke#Ps*U{`lktMHWo)s=JGFb6MLVbC%JLj&vOf--0e0w`}eZ_RI^u_F!%SYiG@BZ%M8sfXY_Av*4(x8cKV;D=no2W zO5aPWY!x<8dG>C4W{!l*KNgLDr9s<$?qnGKTi$oW@aeT=uHS-7UJHF#Fmu29pE>&< zWSqIZNn`mG&k4(vljD3R^7O6cy0=hQ`Q5aX-H+uq%;rC5ZNK05++k)Ljtax=rgyf zkH(wyiEm^2Zcn+*W*(}LS&?G9F@DpA>8;gUqTfG#eunL@Th{cWj}Kfkd3JpgZ~D!} zr>vP&v%j~uaux2L&|$O2w*6A^%5c5LEstxxE?Q^gM1@UVn(_A1w^M)5JQivDx-rjJ zoxL`je}2-{wZHeS^S`g8@+mMU)PLg)(Id9(y16S4#8%yOymTY9qC~?lTFB~X2~&HX z=Y-&wA1X!fL^kb-oYVdAk=w$^t9(oB+||YOK0dnctQk=`Jt6qQjUO97FgTiruPHq3 z`t+$oT#2@S-TlTT&nIu{TK@7z(~8{(=jQOS1ayQX`QyhdctDw2hFov z=gptvb$74W=EUKM0fB9^Edp_61=1mLt6p9GNr@P*IRwf~|v&n0QPq6Qvm=?cm#{XAZ{G&Z^VRYPQw) zZ?)MznbGz2yydTYXK$R#HZNOlhr-AA8!j-FXUzC;tM*AD7cum|1Ktxy+i{VyJ;?CW(k(CPNw$m^L3B`=d)&nEI}9DC&2 z?)-Y4QEwOL)VUY*PfTx{^V$2z>$ELd?vK_kn-f^Eh2!zX<6By8vQ@2fxb#|b`nmSA zN_pZR*!JoQm52H0oeA{}N$=9W_FePQb%}e6{_JkPbK~I=={3y?Nyas8>hGj0_bdGV zYPbK%S!adRxi#~wx;`_mJ{P=oqnt>&2phvZuRDFNre?Qp*A|N$TYmrJ3E%4bIp^5@ zvrerrtPPZ?_sW@j@TBU!x3Rz5+PM`HSxfeQ=5hTJysBo$o|#)}51B~KoMqbi+HdXZ zDbF@pwomJL@Uidt=T%+VD`)ZM&C&MmGk3ir6U#BXlFYhO?ZcMV@a^rehIKO0qvG>l9qwCE>FGiIu3*2GHcQ{O^PkO&^rT#SWN6T|ByqIXt^Sg&aZPKVQPoiDn)^Y9^K!MgCH&QBh^ zv-xr^b*`EHg1Z4)F47{~&sRw8Y~F11`DSG7A;-PxEY&+Yq>taSc1!Y)ot^kKu}S8t zwbhZt;ftdZLjso6xkg@i$G`jk@;#m+iyvoP`F^rkz1BF( zPIO{6*I~wq?;UWqetT1dzpvsq0=*Z-m^X~OPYF1 zU;NvAuGbgdSHw-;eYm&4RIloN?6h*;NuC!qs`f5FZ&orP?G}G*?ffnO7VYP%tMv+q zT)KJJX6}hUQcZb77wlVJDwyK>^lpPwe~rYOUrzCN9*dR>?f>YRFKxRd-{Wp_&SBdQ zt}_QL_q7z=>JH>l$$4rU;iSKHF2D1_mnYc2yju2nlZ3HI#i;|luP+Mjd>;Gjl=1)0 z+jHm6cxq8`WM0CL7w7i>EdQjj(RbAcE``ThbA&6cuJm#n=bhUTGI9Mj&LYq92YJ?C zx^DehbJy-{>eo9*tT^iz)OYs(a%S2-*ZiKkqwvEhi%Q<-0$d_&ia;-H`!eF) z`xkdfUw{2#xo=C=->(S0e#o%lbaiK<&$rc=54+Fh+P1eye}>l0z#sEIR{Fe}P=9=X zqp;)YHQsqX<&{Pr#VZ8jeSAJWn9ct2SZmroPow+7QF5!F+OSuDZFbD>usi!R)}x?K ze9<-D!mXPgHSt>%PSt%gfq#jto6KYOBU9JD`y6_Yb%UqqZ^&Ie5R>of!e&&vX_wCcl zEcG!FGX!L>_WRk)+A%fy_Q^lWZ&|+>>F=!dc_sGKe_@ij*6e~0ultO*uvtd?t#!YB zWo`7@#}SXaAKjUFOJl#JQ__!uxK$;F(SO-49eRIj*?NytvG>^T*j8H2sNA}iO}JsY zR(Nyq;+km1_LQk6BeSS8nt!iE!Moy8LJV zr_--GmL}YIb#%v!=b!lv{&v>y*!{o5_R5P5p#nSy)f>Mq_&YKB=)>TWGqW~Uq$MB! z#8{>&U!SOGQz7((RqjKfsfkEO6%!BZca8@tC65)Wy3=!l)OX)fo^m(4!ux6z>%G<0 zGgQNCz2)0JMfWlOu`pC9`Oy5sflE$5aCxiT_qWU6W$WB}d_v?~@`{gr&}N&FxAU*skF^gJ?qswZNc4-x$(;C9wtlU*@uTo#E9+}4s`x)0 zWcl>>dp>t`JMWiw+jQRx-*SqpytFq~Ks@zqa;5x*WgoN-h~`&ca4d9YjlH*6wO7k% z`t+%>k7n~Meda97z2*1G_hwbn53ZUBESj**Kf(6hVfB2W<}a&Op1dn}Go_b_PxjN} z^QZ2luB$4uZ~YfV1h z>$i=*2mh~w51D$tzYMflbbR-PC1%Rg{=f1#<@)OeTdx&n zuj~ta+qH$JEV4hc-0A+zEB{l?UQG>t(Wk91uim`klH}KVt$UM8&KA|o5BgWKqont( zYmITjD|SEGrgw@7#}>a_@ONu@&ZrkIk5Oj>F4w!FkW`IvYPNdZ4r}hgUoIP1?ijACpd7*q^EM?z*5? zWcuPs@W%e`<@};G?aL=v%O1G=&1y~Y{jFEs-W)&t?&XiF1~#iB)|KVcUp4;Rdc@?l zgz5W3PeOJjSf8K9AfMhSb^2}MQr-0qCt0$l3cn}_-S2lt?3&d2-)YIYTZ_;2hnvlf zJXGHjwCT1;kMzMiVh^{!%6V8cU-A1kiGo!}+sj$AjQ>dNI#m@gqu#}up`<83M$GpE zPyISGpA7f@M=f{mwj1#O?wQW@w?U~vvnK3e=Y?;jI|6cRgUqkLlew)bpIi7^ZNq96 z{b?CL=SNHlTkE!alaK77CwfjtxMCtx%~i4{x8D?J;r^xYV%dzn4`ol7pDKBlvHIaz zwcUwfcV|dlGFW))gZj>dd1;CEt5&RJf9~ddIDA{y9i0HfY`15<$6Va2zdEga1v-Gs z$j0K{F1gRvpYBW_`> z`>v_1r`v4i-PUtSXF~ML4%aIgZCbVG#7yCH^W-+q6l`>AO;2gr-QHe*-#k+%)txo; z?6z%xmzw)r(e3n*TI9N3ymN`fk2BTlB@{gKX0E!)5~UF0u$e7TGjgNd&VxqnOnWZ9 z=$*9X!=3{vld{=!4<322g5N%af4BM>?h2h(m7ejjdo(Yp+dTOlx8U(ii}P-5#?~KL zT90&lM=^b2oOgH9q$>}ts@{W6>TBHp^3vr)cSJJ9z6JRHl=1k#GRM45U`t(&jrrH9 zil?7R6}WD{)tKGkw}D%LZ-Ep?nPfBf{pAd|^zMIjKOU*iBx~<&&zkgglV0|T=(aOC zQPcnKF-yTnIrkM;NOw+^-Z~RQhQ}1e&3iXaLMtPNqwG*mi)%M$$T#L zhl89ft~h=ZvGC*An{{i^l4tU_m=?Z}d$87o<%^N~{1uwUhnE=?JYcgvwC>@A$oNZr zT*tka*&UuFC~G@mW2eW4Wvr>IPH#`tNU?vkiRZ88ztTY8?pAA|H(PBqug~WV?mDZG zcH_14b`9Ts#=QSBts6Q%#woJ98Q(mnv%|#u<@GaRhL0|!tqFRvPcx|4=IG(q1<}hK ze4o3C7c(a9I>h$nz{{C+6%)k`x`J4Z)R)OeuTe=p?!h=q;mE}L%;mP5+{})+F;>3a z`tYCn4ZbgpUJLg=S*Bya-^>@y?DM%g;-QPuq?9`+;u4xK^nP*9n;21`$-l(><#CZ} z!x;;X9NiwjgZJ=vnHh&Y3@9Vz)ThMi9`rMCO%GbvJ6XjnK(7bMet31=`_5Z)^ z{ru;t=*Ft;wSOKyIm=`2daGyhu30;Ulld|ay-xBgPdj*b_k%~1xK|&{Dl6vhZkz9! zr|V2gxiM4xitlW*oh%n0`cC|zq|x3d(tNpJzudZ|PjqR6 z4)>bp9aFAIh3%R&?o%yzxoA+h5z0%^A<(Hc`i9g$0 zDch~QeQWpf2G(#3i_R3m{@m)&0^Obh(VfTs-DKjEJoV=v&&KE{5w8xb@we`rkU8<^ zj=g^*s{)p9Gby>dH!sQHeCp z!gjW|O?T0+iaXQpg$KMUmE;P`)_R`gt$JK-Rku8Il9+DbDIr(2hV+&>i#RvrUQu5A z!A!;c^})P2m!|k8r(GIOcjjN15FlMWVX@`Q$&7HNv)Agcv_l-|4 z*1rDrO!vg6gvP8^*OtD|pDsszTQubd_bJ`2^3iRoTW(r@IlX0JcJ~2W!>Qh)m;c0E zSrBZLbo|&GCO(z48pGuiW_LY!*B$I{f|z}^<4KwSR>Qr?}ERFew}`NcW0&S)pI}Z&3)Fp z>pRy*--|+vv=yg?EFyl}AJ)z0p zTTe@FP(GCV;JutYTVChRm0hm!e3|7B#U7l=`XMIR|3|`6*5z|&%b7E~pX3xOhcnCN z8;ET`E$`RA-}=NnYwnMN`%n0keeTxh+ccSDi?re4gTai_F%?d)-t1*L%Pu!9O#Efi z$NNl;G3yGmm6I0B2PY?qZ53W7AH!wr@5G+`VuFwT4v`d_cA2@w$2Ki~xpsomk@Aq> z%T~E3cRX?wn|Wx(`lpHhl9Nj(1ahq|oNZ@Obmbr;OHJ;tg|30ip5FFWNa@+V`uXdm z*9o!J8y3~FJjfC)Wki$r8R9;^PWP)hp2dX95>SAqAuSY_qN zALUiSE~RRFGNt0CtP)gOQ*o8!=}CdT+VA3I?%n^yko;2rKGGB|JQBVGx#Bcf{*> z4Woy*hV{{QyZJIZ-)y%u&%bnAd790JH%}(rZsJ+I>~(+EERK-4x7p32t){_IiHVz& zH~)8!iBnqjQ!#bsjWpS>$vf)#a<43w&f*Wga({yn!>m1RH*=~|zPoP;E&6Hi^Ltrg z8SmFid-69N-ly_iJl(wL|0MsL@v9!~Z-4Il@$o11@0Y(McX|H&lk_t<*ynQk z10|pD52Y2-yzJ*`9AxL3=6hNDj$C)d&3uN1(OEW2b-3&{>dn%ySv=$0wcM%u+^RI1 z!uJ;o|1$e|%|fJb2}4nErNhSPHTm^hd_Nh#T*z_i&o#5Hr>1z_duF}4CfX{UIq!!j zb9o+@zxKR8e;+hx%v@!&{YlfEOS*4;5;Z;lJ>UKB62k|jza2@%ImX+ycDokY`$t9C zORWz)!r-(kU}cZS&js&u?w;Xd-Cn1m^zL8Ay&2xEA63-9xHFf#ygWX+=7Rihwc5QO z16Z8r-tc?)?_~k^pOtfFzI6TMbZ=otMOD@^v+&L-N*7MrF439e69tT%w3JI7nmp+y_^}FvE)R%64%SfyAN7#nt$#8{Ph3o4|-4a z{G@)|EDbe(+y9bXOw?rA1=&>}gH*p4-wL0ew&-J+>i6O(^H_W5Teoe0<+GN2TgbuH z)jr>(p?2Hp{mb$N?L-_M)6?Qos@KLkl&)#?<7quUJv5iw=7rW17o~a6cj&&>UcF(3 ztHk-kMT;hXKgl6?+ed_HRmTm>*Jo1$m)YxeNX!+_ySnWA0i|!xT6L>iKTq#iU75(W z_Ht*(no7%3`#?+Wj)Ym$eebEu`?{R_vvPxMz&ec-*G-pRxdvYS9T|N_T=in&lKF9h zUk)`p|J|kFxA{x5w_JyXzK^x*oZMe|Tb%_zKe}lq(k{lI?O~iEeZSdct#fN{(R3YKTBo)j49WQyF~VF-C}a{y4voHH$UH(%YE_P zS#19(bGHABRa{yr%kR&x`@3`J`L%){p1Qa{a(zF8>3Hp=Uhlf_!X3P=mzk6=T`@5} zFWFMYdTg@H?u!Ax8Ljvd`|dDT?qpe_dTL#>UT^hX9V_NF)xr%cV?=e&PJ3R<$P{UB z&u(x-dpf&GYHrb!$*wIQk3L$kqO180>phd?{_w!W;H*2Q))%-Q3BZ9sXR%biS3!>af{i4N6bm*~ht-{k1*!PAqr!{)cbkO71=i4b=Vh?tP)( zQk{g?bGF^6S!uJh^#0%4b1OT7xPzB4uCtkPF~eD<%Bt?)7c-B@^X7V4Vx`ZWy8E+V z9-rpzqSqBEzpFB`{LbDtGLLsIU*8b4_SJlR+iT6$?R;uNpSzLH>s#v8 z(p!@@?Z3f!GR|BtPpL-czlrVK`wKhD56dMu$Mmlb+wI#KePyZ1iufOYK5mbkYg@8d zKBfP`dXIPPst~ywaH>CfHq+f(3p-v}-#cRbX!qP1 z3I*4n{Oo<{8u(14wR6kdC+A;HGzmHzwB*Cow-=Jy_0xXx&FI+SzhQ<6S5JGpQptty zUl(r@zNpO8w!}QSdyiE=Xa1hno%4$Coaii+`L<7;^~QIZStr;YZRP%Sh)GkijFacCKEOR;r=I)YfGImSH#k53x(#4@&>$k4SFJnLRPKXH}fn;4Pl@BYu)R`xR{&){%&W8Ky* zI*(ZLcg|PX`N>Le#_QS(XL%%b1LJO8PxNfrdET${P}i5_7``IT6H(I}_8H%lbIT0b zX~w*G*H`OlE`cZSo&Q!T8MN-!j=e|vS-bUjZ_01@yEEyT;t%f!FJu1M?-2PGTV}j; zid^vZZTZ)qEp#%nIFP+d{nW>goPVwmmTq~sj5e9>aJXs*3^XD8% z2#lWY(_rUy_^Qn28={RtJkBSME_%rBr;vSvcmAT{;CEM(0`yNQpA&q%{bDn}LYNf~ z?^KDDhyMjWM;s~3wfZT2ooDHJ_h)Q#FK52}RQjO&6!#W`6jdG3v)ywa{dFvp*)lt7 z&)=B;Jlfh5espu6{*n8;rp>Wb=EIT&;SnL5pX!UwKCwMfl#6T2krn*s>_F*)j5&cywnvin1HbLX%e%%A;h&-$X8 z=kw-EZ(k5U{aoo~v-=a~UD)(9B`@xI*~Qo$XZEl>JN}~hVnG1o>_o=au#MBjJ5OF- z;m|Z~+lf;>F+m$HIF=sHJ{CRU&P;LHyBhoFMfEl<eh@fexLdY zB8rz|Ug!KSwm98XKI?WRuZj2SUr#r5Jm})cJsPx+HIF5!qGie~zNZJc>L;wt)_uF} zT*?>Y|JCIwv%-^=O01{IdTF^eS$de+Y6UOb?w;dtR7v9vgF%OOb#v+jGqJZ@+M}1O zVDJukAvHBY^5NT~HRV#bO}AQK?~h9@@!c}{>dkW*rcX2$Mm_(#Wp%ko&a_WE&X!zk zv{BossI=&JHFKnEd+6tVYi+Mf-n^D)a&B+sVa2(Z_IhH&UG|*yRZ-=g^ z&y=Pk#^>hF-qmw;rJ>-H==Wcabu=nuOj8VR+ke#f?cO(z>1i*Mmv<=IAN=)T%Mla7 z?CdG`9hTi;VdY*N%Vsa+_`KhJ%CrM1(`WxJeYky^$BUxVPP2YkL@a1iyEV0>{Qlo1 zhunHDIvG6F&g849y?vmP<&w0N@)xG)>3jCZ{Etp4vfIwvyJbb-^!~o53w%y;-R0i1 z?PO2&_t^Ufo;BW{eC*Q0))!ke>}zf&)%|?^|BT)Lul0>HJRX0)bmLCIhGStfe;)E( zWZ!;x#{U-Yx6clWbLsncHR;=Ijr{g?$w|BY_kTHW?Ys4IV#k~R2ST4*+x|N$Pw&Tu zqr!TQhrS1j^X5xVs^X!ai2~92qQOZRJUVeJMXGY@UxYniI7BkLB8DC%c%T`E| zLyk3ia=&JffX(L3Zj21YDn!c$CZjYEtl2EA#K0_7z8d zxstYDclZ6NNAuI~zSodRs{P3Os_A*!1BL!4w=dt;NvroY-0oam@T)O(UvRnEp?fN8 zC%Uds*thJ?wu`f~{ul32mE3&&(u5jiuIB>#EOPHkuGD?znmOymp0o08lW#NHMaDgv z{PagmYxRa%zmmP?^<13(?(+N+>3=Nhi=+3kHg?SV&#`3XOZ`u0o1b`0-PDa&RLqN;K=xB{I-^2nBhdzJgt@W~3AkoG4o7g55 zhhK%N?cWZ&wEq6@v1HYQ?!4l=&tI3{E=(=lZoK)+yx1q3E#56Vy3vt8-=j*dFna92^T8l~T^ zEH7s3)z1?)V7H2m+QT6C?qm0=!_gm`F4`7yAK3T%?Upy(_v15`W>0T^!}_IA=YH59 z=hFvX9J|lk`{3m{0rQXp$p<&AnX=r_b15~REwgHjeDbOyva&_{3YX4; zH(imftULL3?B#sKR=IL!w*}H3k_KB+w^*HA>@mmiR_O()OE)sFE9CU;kv|o& zq4i%?z``YZpZx!{KNo$IBe~DXJNRH$y6vmBhnxDZymY7I z!^JzYQ7f&N9C>@K@0P^f^BU5wu2$crr*~^cs6R?cI?`F&%cL_qb?OSaA8Iaj=XDAu z>|K-emhYcXmBX~SBh$JZHhqwtvNgV3(jY?W#J>6&F}otBymhqycW}`$x$5ml4n`&^ z73Vhl`H5{faD6qGboIY`eQ$VD4KhrYiFvHkE1kH7=iL(i4R2XX45Y+G_D;O3rhPlq zQ6qot=jiI|H{F;8o!MU(hkj|3R?CSixe;nz6|v2@cJt+n?FGIEgvE5Mo(ldwoVL5~ zXw@di&bWhN9}_GYj8CnIoir)3p>?TwYIM^B&Oj&s8&>rmnT5H#mP%xveEa(jlb_1w zd2*RadZtD)6B{1=ongPb^JU`p-ElXbbnI82nAcQzcul?9jU|gFSE-!#supYRy|$zN z&KC{WMd>%!p8msjM%qC3z<>K6XRG%&9W8xX9rdyMlKqw`JRPrD4Yp6^ZmD&YQ*n7) z^Th7YN9M)dhnR#sH9lk<{AYUO)t+As%elo4&rR|0F|=wkD`QaOPvp0{_u&WM-rTci zTu)y#xH@6pA(h1M3lFWHR5aOe%imdNH|jn5diT@wo~ZX1D>{A%c+Z_3^x?76>!XXS z0xPDutE7C+yquROQgx!= zey4NLb5AFm&=3;P^=-B?Fsps}C-zOp>XQmvw`#JHs^1XlgiE}*q z3YB*I9`SYS^FF>I_xX+QKEf5^8z%gyWe~G@E5R)-y>`N_4jrjD$tv9q%gh~F8m~N^ z+A4LdL;65)_>%3;%f3BM$tw`5a`Sk1Px;m!7t<#ug}ah%LUiUV6^M(yA?f()>#r}a zS?tsA%@)#NEPwewR$AzK8&8L(beY%+_R|UDV4Z=3)20`5d1~p~%9jJ=M(< zrrLcLwv^td>t$23Q1N8D=*A!ZFSwqcEvYD}=eP6`xytTfCDL>I_)L~Eb&nIrVrGXt z4yrn=l=NS5pUncM`npMVArlwK`MXx^Wc~b%x8u@>oV?G61Rl4X>*;vjv4`Qy+Dl1Q z>;H#Im1}RzT4=UL$kB|M1LwYg6Z>dIg0~gnqQ&*c zVrE?OnepsE>ql+lGtpJIUG&~O^b*uOE6u!DFmKZVtz91u{O8(p_};4n7Y>-VCRks4 z@wfa@s*s3a(nV9lVXf>ENUobJhUiw&bQtZEb)30<}M*d@( zBXGmQ{Nu~nxolz`H`3zY7ADVn8lSyj!m;zMI$jyY}HU@q>;V<5G7%X3=5joUlwP@BZuNH#1Kg zoqPDf?eDI`u?>f`Cm*^yW1ixg9becwJZz>LIK6h^nWDaHO@hy_0u82%e-Cng%iQw& zk6!l7e4g_RR#ODrm6&Y5echLlRmA_O{cu`(SeN9>-pNT%7fY=Sda&0}G=7I!&=$8T zV(Vgd_21Dr5prJG^`Vr7V)$)$lkR}+E*ZZTH~K7#JD}!czlDb@=3mRpGZSv~ymQ_& ztGzu(C~i&w)BbNGFa#K+(Fwx1;uy085F-ak7FA37%noHW+| z?|xJC^T)a%i8!178UV+(n05cXoAH^Ojy(2uUe23S^E7>zT2$y|pZ1m| zPnvlP^gb_JaYj^#$CT@g*mjqcACdN&vwj?XJbAf%e9IA$f@J6CzUQ~J_#QSDkKOUI zJ9c&Mx;xn!-voP4$gKO!DlfBa%Y?tqYxdiXiJnZHj8dZLxg{<3_nOtV#0U$}qXd#gRuls`m$Dz%AU zsObFVLL)}{m%P~U$8y5sPt`to z?HrTrSGu1z4tvFUea~T)te7|VCK-IOR1A{4OFcW)U3V6Ahpe|Wv+$n!EJ1x| zqmsJf_B*?t*gi`;^)1Ze?WJltNpE?dU8ZK4M_gAVOyKxpc$r%xKUQ+m=70$MpdO3Q zrzJHz^{cH9&nQj2yM4j0wfQwqy(Euho?CKRTC=sQx3q4JME<2U-ucr#EF~T%TCMQe z_`xYfty5mXD|g34huNa{K5cu%f1P(vyuba9C&%IqP8-h)jhZecs!C7&&0-g&#@2_XpWeQnyVdVx zv{Fgk*=gq0F`+x6iY>DJj>57P$4kXjH*uxqHtrJ8(4W1t=ZB15sMP6l zd5287S?lF=^u*SG2+#Yu`)y|9f;-0ElPq5U;J0hEKTxk}5^_%{@VD|CKTDYk_QZ+j zOs36J_Hj`B$P`(tzN7l*R85;^ji+rc`i}0*n|p5Y_B?Bscdt7UFLlIfspD6bn0yER zZxLLqfj#UuonIB^)o9+GQm{2@A^Fm&6$!-M;ML&C?ls-s)NiiA6VV zzAI_BRQK$Xw%JZGllvJ(qbE6a=5Aa+JH+f{#TEaaCm|CqvCK8yRvG{Juzs8+Ss4 z)-Y`jE&C&Uc~|_h`L+|!Kg{e6e)i{ah~lp<5k7x|)a*l5CyUG(cYZB*xL{~re)=4@ zSxeT{uLssJwChe0C|qve`+23u=MU|@>RcKdSIH{7*tI54=~Vpt;;j1I8|wnMJ48FQ z3HtrG!~5WFuiMs;lvE4V3;J)Ho~Nh3bf0$U!}hW&MsvRft7q1Q?7W^6%A6f^UZtJFKoWCGQ=|F zUb9`a?rTTA_O12P6&0?WtGsqdvgm=V_ts^}%=MdAPy2W>g=5W~Df~>f=O%r5+D65gcLUbP*mBHEl%D@S_P~iyzGb_tfRR z;!wU-uDy+!cfEh&yQ9+{|G4?Oal`B8`L}IPJY)ZV;5px<9Z~*ztgDZgB?j*6@3L6J z?Hy2Hl6wEW@TvD4b{&>-&NohfO+9`4oIi&jOUm4L3!e)!cs&x8TVf{A(y(RXZrSZM zk_VW~eLvWB{uEvFktHd}jJ|@~OKYq!N3ipSyA{u~uEi(EIc;qrrhgIUm2ub(lEz zKRdMd`%J}IlNQ*stiN4bW|95OCFVe`_>~nM@`a~=or?PR)%9(hf1aLl=SCrqh6R;Z zQwx7wFL3j?FI46I|;h;vHjKa?iH+*e&aDU$`9k(R<6c@ji z*u;zf_>Qt(?$^@Z!M|GIdaS@#o?`*J3^%@azOjqBx&3d`>rcLk(O%(#@hlTLc15e3 zdAwYE@XX&853llYcZlGOJ(;S}hl`aq~7d zmJ17}v%8*<7C$HI^Xk{}xxY(p%;b9_8za)xzmns{U7?vO8&o1$J=3~`E7$7qlzA`d zsSrGsyhKr0)Wqb0z;>5;98;FXR<>GyuT@yOsc1>iy3e;3Uj*IBz%zScJI@46V*?0tWyJx9TD zrv1*}6@C=zsU4WzutII;>=R60_rIApm|VHrcjAA+vz_WqoYkM7Mz2}oG_i2wA6CAr zE+?i4y0VsiT4KMxlSkma@kY&cbGUy>h;=CyILFC-<>`B1^s;v%(`)BzZ@6Y^Z?gTRUvN14^`pJYDS z>8QWtG{&IjteiE~p3bNJa8(eUR(2%2D^}XLjvRe)^bo z?lpCn|G{6+MLII?YqAUqxN~T~$sWJ-m!Y<%!p8zCr_H!@{^f^tm&>bb8wac`5>?}Gbp@_!{tUJJF=H90e(iA_1{ zL)Y4s>LNPt1TDTd{`M^@TN$mCdUW%?SyFcUD~m;5u_@g?BCK?4&-AxR?<3X~_^TE9 z*~n(K=x$u1y<+cup-k1dgsmsHugi#5oG(!`U*FX0@!E%#j}IRES9W22Z$ly^Mq zZ69miU&zC-WWtU(%ZP|2)OlW z&c(~A`mZdnMpV1B9uhe+*D7-FrHd}k0ge}2FUa1%vC-LOtKnmfGDl~}l^M@Xg-^aQ z-h64%IYEZU)+WzS$Is!9nqsK5FwXc+(#kCfw=`PAH?I}ex?kYgv{bfm(dFCfN4LFq zEKd15Lt@pm*WO2D9~mvnI-os0_jBEZ#GeIe3sjd>ICpft*zL~x=kJ^A^A&85UYE|v znsBkaWP>+9t01ShnV)}?q@e|8iT?BaBbLb~3sM7T6f8b^Kr%7Ss@Y_o=)J;(*Bu|f z8nlM$EfP|HD3r6~(|7ZKPpTG#zTIoQ^Wxbc@4305wW~djZ}M8d()miY_mY@{T<(Eq zrB16zFsE)7tNf}vvF}NR%j=_$n>VYyx7GM<=vcuWB_YM;wemzYkB$BdjctfO zyPsgwe8xk#)pXm&)F#u`7Yae0IVNHsGp4=U*<>eV$F%x;hR<`cNry|hU*53Fn&a5@ zxH{zD0?B)GXJ0pL4fN$T;o5fkxz`G5X}#^G4!1Y`(LU0a#P({Y&ti5_^vO?K5wsIIr+P3 zzlf%@(q93ES4vUcR#B@24j&8`RPi}Pi(fD!oFjhudZgYAlrSTMF}$` zgyO9GMSdLq$)x}H!=%aPpIsw0dbS@;R5Rk69W65yIrS+j}dCwKm z3El^P`rPK3*z;tI{zM_Yza7!Hd>_9y{CBugBleWUgC~(L3A3;x^ zRWz-cbV0HBG=1OW z*B|sRNW~(-h)3jkfbx$&K`FcrsrNoV3VPUi^hu`{_hqG8BgLlY^$Xhc-<*G#cHm2M zx5!MJ9f2~{+=|aCc{lBtr}1f3#)Dt_wZBx7ZXVz6X!Yh%e4gX_xvQ$xx>u;N!>zvO?oXaBS;>VDSX=}`FSP6|xxd=*uhI$` zz5C2v${}%+r4^VCKYr)i-G2Q`viH0GyzU)JHLR?+z9e_sR-XAh&;7Oj-xrgfS4Z4( zdz|U&y?@{S_~hbnr$p_^pswA zWkOKtiy_`vbZ})6S{l{f(^KFNyYopQ&Z^0$y%F>trw@vM@`DQ*zTItdI zFkVIGH`yvjUaV=;eE+#Yk!gYMomZg-!qP8x{bXzYvN2QoUte09csO6#5u2p8Hjo$Lg)H(wDc6nQG@IzpZ65o>(W}Jz<;e z6MwB|9Xpgc6t-yBElg;7;`iNY^E&H=28URy{hpV4F9^J?HA7je`O&qxrhAXQu3tZc z@5?$(Q8$+ZQU+cV&$#?DRE?MXxT)Il)0gJ%a{@cVZZBNTZ5{7<&`o{9X{Qs6yk~{x z+x2cfpzxaWM?fC4gUkWhnfKJYJhq7!v~(;#nSD&q@GZxp)d|y1lm`mL79QAh*=OSh zwjveAwdMlvOMfhu@jp33``Ch{jB@)E-}arTlUHW_zIpaL_J8p&ZTovJNbzl(e(kJL z!b_hQspf}*UHA|1=e*$D6Y#pO?8QIPTR%kQJU+d7XZv%`qDN_;j#ZYtIW8MFFaFoZ z*^asH{JT#7Ps{h}63pfn(AeTCL6Y1`RnKJ!T5 zUcQ1MLgT?4*E7k7mnF@!`RUl!e`zt#f4~0*N@-aI>yv}s?_K5DXZmkK(_+z$p@HJd z?IV+>TGR$iVV&3QrpPGpG4O~qgTCWarWEd1oQy)fMgh(&Mst-u?Py(hp~+8*`EE^> z_L6|l=S?Two?kDbyyU|N6OIc>R@3SdJ__;h+r+)U@Rv=Z^%B2++`r$dE5g+F=ss%k zo8fEqw_{Rvb6-xuem%XaiEfi-`@W0I@BXpi`32e47fTANxsM$eZ`HqJbpG3e|Br6g zwXh%6%j@`fdcN`5&WU>-p5!_&(f(8ObLX=aUp{_1y50QUlI@=iqqeYJp}#fc zS4Y5?l;up3QuZzC!cA8s3vIp5E516r+uSbu%}x7x2DeUcW?dcQeOK(G!|`*czg=GE zA3tZm?xMzjE~&FcD>pyU`?sxw{nxp->tz;jo@^J{Xdfsm<$9>f+VDgT&;N^VGRfy8 z5B^PIX0oZhIVr+-0pFAJ%F)TcLX{qM#4%(rHHehPm!35Ka$BkHg-F@DdmEB|WuDp; zCKFz?qkh$C?FFy2?rvNa%6UX7=DB~`tDoU_uf6e(m&z2k)$phaJmR5vcJ=dLv;UpG z$E=vqyKH;xm!-aYS4ck#k-Erf`Mv2;u7=IVU7eStHJbF4FD4jutd!6^-r6+f}esgpXpPAqN>=fI{gLm|7j=Wc}HoPRlaNS0Ix&XuKb&>TeU8=S` z%zY%jUC-{|^LYJJPj_ctoN2MjX~tWghlzhDT#wxSXC}jzMhUjke1q%JEy`<~v~Md# z?qupTv5jGCoAdCuxW3=aRIa?)D~u)!PhJuI((#mywRQsYo`QUJvB`^mTAk>7IPcKk zLKZGHw@V5$w`bnzjAnkP&h=UG=poaa&V9ZmPu(xxd^$g`b{G4}sS)z|r=?EjweGIe zdm|l_GckXWO`b-VWR3G4$7_EgL`q+tY+E})uC6wkrKix?`pLXyuBQ~6wVozy-tKWw zMswf2FAq4A>iF`Wn2Y>k+LHA2`b*v^N*}e>UOfA7EnoK62j)LEYW z|F&OMwwvW&vgTj^=Yjd*_cv}_bzPXS+-HHYPr;EL?_58#CEs<~wDs`uTOTY%XD?mx z-zJVDv3$9Fz4YBIzoW?-PnOF^_V$06xcUgx-`r-nR>`*rZ>>8u<4jE5KAd|naF^33*& z(9~TrXSSzyro`{%opST#@oBP37d1-PnNjvK z>C9I~Y0=4#)Te%$#qo5p9Oo5}bs++-+g)AmOJ3=|%>P~PZN-}ndS0wI4(19T`rh5#%DeVx zX`ho;c)jFweb$kbV=IrDM5*fu^1ql^;4tmcJWkcmm-_XrE+|}CYPsu)Q{a}qzMprR zzOn8-qHP?zFF4{-lK4-NqUb$W78I|W#u%ObPw->Y`3Wa>G$bBe@P*mCZriHe;lkplR(+Y-${|z}R;=jp zGE((D*ZHi~F%Lbr$5bX|^L|dgboCC;`fig?Y=UMTnY>2>^LDdu>}uQI5T4ArD>rn( z*LT{Fvrjly>1L%hUNSne&^$PJVtTi?%HJl7DNzEGmKLx)O?P15^40Dj)17*!`wG!d zC#|jHnsB%5?R#a#D2>Ll6Ept?-w}8JvL_;I?iYvLjprX-xMtbVw1rRS%Bs#vvA1{n zSJ!lKHdGmDKh=}6HnkN$H2>=3S;eQF6C0MQX?-a?9Y1Gsv0L2ijtBKKat~J}JdU22 zC{+9L;I;+&2ejCZI!H$H?wGu&$y)gPG}DOl`P~s0+!x$ok8Gb?)@#fk!WVX%N3YAg zW`}xe=nI+FEBiPXvO5bdUYQWOWBD(MnP1Hquc-HboU>i<_A>9Zg6L!O_5Mq#me)() zesXQmjF*X50=*Ajox8Z9q{_>rIg739M@V_qz9q2|nXye<{C?uhl8 z6{hn%RyqC`Q`nxz$bMq#^MA6If?u+n_p9f|{Mfv6?;2+2>gegp7xI?O^bC(-DE@4A zV7s$#K;kQxq^B2mm%7KdZe051fcok;ktgGq@ZXA7*v44pp!TMnFZGGHId904r03_~ z*Z$o0>6(_$_22vvsbzV&MgK0}R^s_?c;(Gu*ZUzI+!ekv?`de-%yrm0f#+}z>#tZj z=4;(5p5E{J9G8C4er~(6d|pq!`?c*8!-SS8muN~)u8V*CePhX_+n4puzi?nVeO-Iz z9l4O2tRL;SLt<6t)lPW3H^=g%)U!!3j5)QZd*4^`vgj#iibU0OOl6F!m~Idg8E|u| z{4vYDU1Irt^BHeWX`Ly*B;RA=(Ew&aUZ)qPW?!!ziep?MmSv{W&TA?9Wk>Sy!)E7u3RR@vd}YD@9%+0L&6oT2K0SS`8n?J&q4J{k|1Da1EA}q6*!AR0+r`WMJ6-Q_ zn!fG)XY_Z6k@FmS#>SORlaI zSncvcV_J&0ORILy>bF}Hw4NBtC{EdUIa<+j%jCeo2PZY-d4GiI_$MU0J?*)=s=BIp zyGh-1`2hZ1U*=w2_+!1z!T6IOLM98wnJ}rOH%Cd|OO`O&`LE+yo~1dz$du=e4p~PP zlr{wzWOu7gcE7vIult6&$J^EC+P)-v{o5%L)_1mh#@diVGnMOa@39F5DXDwBk>Xn!j7j}=j!9P#UZwMyIjouM0or?53xtqU)cm!5jBL$_yh;fKcU zH<;~bN^ZJ+L1mqR`TPBExF=n8d?)l?erKlNaUDT+=}P&f6IIJ~T>B^T2W;~Ebo5AZ zQyGG)EEa>&Qr)x2Q|!?WO9O3(GY zL{D$~@#=fjwi@#p(_*h&=X&NDSN+re#M=q6FOQ2}T>Dya&HA>Rh1@x>zRloH=YF#- zQTgrcGb{EU)ZMpBr88c4ZtwaO&pkmWHZ0b<{h(vYn%ixgd-f#XEl~@ft0t&exog^W zeyuYv*H+|D+VgXT;fy2V`=U0hs9jvGeoypm!1k?IOzijHVk+;M9iZgsv_nY$*2-f% zxrNv4E`DfhP|jNTQ_r}8Z&y+h^Y^y@N$On7PRjB-f6?V#=zQeG>0{b6wlAF}w4Lox z*P_iG^W7D)i+(S>;;2@m$}Ar){`c88E7oqiHH+UR&s2V-;=kd9$qSB3#ibidS1rqZ z?Ju3j)A_S#!Ni=}?*Hzy5Am<)t1*e*X7O{! zC%$t({~*#cC2*#8pYxn+U(9k>Zsa(->a+efY9fOHg>1QS*P#XI@99|va|gBBK=ZtxOV6)!Iie*PCM53o>tFkNmm{wh7d*87me;*(#j>MHwVNM> zD^2+t`Bwkg1F1QdZv>hdzD6vVsq#X2_KbU`CuYsa3AkX$e{b{K6;`jkdAaiaR3@76 z&RMjhbAispC;6#;EBF^>nsj9;UAVY+ANLHs>J2+0mdJ-a@yv-adYd_|_OoR|#_P7j zJb}u)JeUh+WM-~Y(A*XE@5#Q{#O0@V%}PU3FF<;?s(=>d1ia+c={B9|t`U5=Y8 zeP_oFgQWs$t|uO^jNF&3_T;luv(8IxNuvlxi<9DC%c5_Wx|(LkTTbt+6E;6|#kxe{ z>gmoJ>Af6rpB2QkLS}8gyGL_f&gQ0nWz8Z}Z@bDRR{r{{8E=)uDEM<%QO5+Gq9fv$ zm9OQsnk%*T9e1^Ud%E?mdd1G}XU3D>YJXZ(cCWLb<=lC3(F-Qi)4r5&wdFP1wz-~P za9wTn9qkhKWg1iEBBwKo>i+Hf#p<5l)|qUW_kU;nKG_{tSL|f=So!h!w$ku%jdA9j+EJC-?7LPj8W`{`Y$>`@4;wJY)a=Se1Wj z?(cU~zd1DUG>4ry`}^y2HQV|h;YuIAT%W&hYs1zfeoy>2P0ySE+@-4jeeDNbF0)Rd zn{R$_{FF>x`_lJD(Pg1DhSsn>?Q3f$|9Te6vRY8Kgr%@_clN2M!pE}mYZqP9Uz{j= zRZn!bc`Xd+ZH%AZeh50K;TsKipFQ6yEsH_<$^MI zygpKF@uEyX@N4T%v)L6U&5uvs;hL4q&G2no%Qr&>{X+R;@@=WyA^LJNZPnz=MP(Wp zmx}5tN8PvnE;;|jwRz_b2_9VIb70S}KMk)BS%yNdg`0$C1XK_-#U|&_#|03{XI~9w)@)Jz#Wg-w=LW*a=DXd zOIF~s^r#-b8C=u4kKa39Z&mm2(T|&p)%oA2J}fzxaBtp@t#7jPv>LM|g0f3q8q2Qh z;O2~Kj;vblTy#>5C91RLqe9t@*zFnlQ(V73KKIx7v609d-GE!U(R^0}*X`-Ix;}5- z+z=+FuT1uq#%dormG&-ObVovW+C;;b?$b~5-T6IFLTy*n$_1LYHb0%@WyExOO6Saf zFJc0Vnq79hSI(K3%cfen)pDY1=gGrUN{_FK;Zlq}!Z1IPGkI-=;B&i|y@Km!K5*#x zC;TZ)VTLoC%CsU^2AR1Z_e?IGY{pvlqk7J^U&8eZFaFV7)YX4_#f`x4XRjP9Rn92p za#b$Bb^djxf7kPhsNA*tfA2QCaya4VrK5jiRm`U`>+b%2EB1W<`U{LYP1D`Qr!4&Y z&U8w(qNDEg_Z!YU`d3=y`vhNj;?<{d4)H6tsRj?K64o8*qbdx|QbRn^UdWWUTHoIvz9#%(=lf zQPbef!7cd{93_ZSI~u^H(sKFPbY3nyChOy z?Y#8Gk1N-G+CL@!I=EC~d*X*2m#!5B4+Ilm=J;%T9Tpy+l*3cX%xb*EqbP0F8|lj> zrIEXp6Mq%DmMCT09@Jdh>%WZa{Jy2Bw|Gj=rSbxm8LTBraH1{3*30y?a#=hv4kD#XsMeN~}nj zT=AkIuW?O5CwJ#&gl(UcG@K_)|_t=ANe2hWwbiB%zntO9`G?$fb zICni#D(h;AdUe&)f@d+|>y9O>C*&EuS+_ahl766X&`Ry6eH~Tyhwo1LKK(>Z&*I5V zPY>JM{84AMKH@d?v|*QIUaO-3A5Y=yb8mar`OmAlE4cBkzP53}sY^K)n-iSaWPQ8z z#BOcS(zvzE{_q_^!4Le-nq~p9n?tlq4SPb8H%Ek;?d=WfsC?%a`tIt^=CogiOLr8u zy=GZ5>(HXc`X%NLTtazIciq{rHOEQ#ukl{NN#6B&zID98i6>J(+h3AasLCy$(VRWu z^SlH7iiv&32D>g)SY+$miMs3_s%QGHqoVxD;n*#v-WvHkyjqJGW?ow)P+-wB(JZ${ z(JJ><)^oe7%-8ZZKb-!d;7I5`Ii(%O+O_YW$qG9D7doQDA<}Z^hC}O2OMWBv{kyqK zo;f#)%$xhpw4rf6*JPGw0R|CV0{ZQurcYmqE#fbW)w4I7I;DNZAMg2&$)aiDE)VB_ zHHrLp=G)?krr8N0xt2Ta~b@ai(S6`aD z+lA_vO9ZHD3wL;_IorxCmRoW5%#6sHR_Pz)<4!4l2!4>Oz3lGcquUQ1$+N$>!+2-p zzpDop+I;!GHrI)D^}Xi%2W4HJ=DzzCy20_u?0c`;cP-LhJX?x&_Y#F~_Yb`dc(3~; z=AQq|CPSq~!lm6!S{iKXQ9rLn?Gks5n_kusqdLcD;ntPwAL)Pe`oN>65&mCm!S)Y# zw_M}d?fdYg>k5r;OPKZ*UX1wAR}!`KUDzAD2ZwBCPBUg(_;ywumu{I)7Tc3shfS_% zpO*_2``{b=fq%8&+(~ECY+q?Grp(?X)|x3`DL1iQ^se;YdY>?@D-!)T9+^kJPdoqU z$-yUo`X=yCFWc8JFF1HtYx2$ij79C&nGbDseIjisbI!EwvGPtzMtFBQ*-Oc z^o@DdEK~W`?2C+unxXuA^TtU&2W2M)Jv{k9_=>t8*Zk#){wroHxSn_C<;t3 zt8Hlueif{7?;TH$TC$_t^bKdLJ5-h} zI{o0<;o~oIJZ@J1+BC&u_J=!3ofnGw73V6Nf0_CB_xYt<>*M=UuJWADN_o+-g2_tj z!p9K0%6OP+`C@7OKU-!54xVv#a_pIsPIHE3T+!5`N;oSJ?n)^)VjoFq9TJ5_e zZ%^4dd)EozG|97Kmt#ily z#&7f2-m1P3yCY%BKdx96+YWK9=!rE26Q3Pe&vnMsQS6UUX5`B^o$Lbkh7}z0N+u0+ z?nJ(y)wHPnfU?!4|E<-#^G?RkTEOeEqwZhRv8t2tJ)b`4o+xopT6}TlE$8E=8f@=7 zY%r}!Vk_#X||TaWF^+5T?#rWJ2^e>CR* zUdELwd@y78*5|=9Vg&C>?p)e$*uSVL?L)Pd_W9F1Bi{Ty{rLQf}TEao)5q z3shH_=ssHOvuDenU58c)oY?=5v#LKcd)HLaqGvLVoxB%wCtB&~?{j>(Z=v+0SMEPd zYOZhFf6S#xs^}c|`4aK{!k4D?{iy%l#iJaZzRhV3bDYG1oqERaQg%7ih}9)X6twa` zn~^4ES}*`S}Y)289^K*zVtF*Sy?0 z{nY%-hrE2n*D9vwy;|}5WBK&jt5*+CT(L@VH@kA;UilRM(;bu3er~&?uGI0+`=`y@ zkL_xgezGdaWa`iS7$_Yrdq-y5;cK_PpZ)e>(kr&JF8{h3%a<92@B8ySXYDfA$WJ-} z$`?&LtpxV9uE}1!$?(hdcPjObN;idOwOo3(_8Om9rjgvH{qpxNeKq(g&iceRgz1`* z57*lVHU*c3ldk1EKYuB8ltH1$r@^vNPQrTP4epkm#qSp66|K?V{A%;>JbCo6lH=R7n-&^D?wgJ(2saV+;TC8Ru@~xYixXUwUw(z#f~N z6(>5kym7T?)0WVmXCYYBpt4lJra3wij;O1H|rV$V;9TEfmeewO4`rOkdXegZ~1YagSH1wIV-FGez9xH zvP>IZgAK=gJS4AFWH|oQ(Zp>+xSiDfH+} z|2sPO)?btCp2Pnr$S3mo?WNwVET`w@<_K~>YTdnH>i(>Vj5Bc;KR!-rmp_+#Hk&zD zM)!#4^LrEhxYvaQp04}yNo1ZM*Tef06myT|2w%Lc8KHRebuxct%*=!AmzByLnUa)E zT%5R86h2fD^0krjG302uYO%j7MKJHnEmcPCKibVtq&7JmICg!}^qtC+tZcg8G;}y` zzMN9MrRUOhIoC^VffH>uy_&W2wC&E8Sz32wXI^X!;dAF>?rW1W^H6;Bd(oP!=?+VB zDo&+lSxn`Xwz$1znxW&d?!XOVDr}-=yFA`J;FUG~*{FChYu_H`rRNkUez#FuHCg*q zNRHMyR32gG|*70WEwNj35& z&h(b_-tp?Vos!NkjT>JaLvJSPiSPC9T>dzGUBXn34R0Us;N=LqEL52%nftnNch|RT z3wn1NHuE0IoWOkJLx_fj^h#diXkR&=oNXY+Sk${tTjO z0=I_a)2*yN1Z?lmEqk~7f7HHW;oN9znW8_&OY0dlt!hs&znG;q$+qTsS%lp!zn91F zt&)Qhd{On2`@@4vU)2+?|Cm4Da`uC*8?<(8zS?u!`F(1CBa1}d#%~8586V|r zoB#HJ;~ky%;r@fOCNJHSV|wVwJ+|F;-c4Kh^wL!OgEqvy zbGkVrf4O-A_tUt{og0MmG;B?n_}}E^l|7WWo?7g*JUQ$;Lv_dc15S5uw4Kdk(s=3V$Mb+@J} z-?deOYwro})QQ`+r*Ns{7hOxcr5|PnRS7Sh@y+w~B$?ZH8m>-Ft^PN^Hn{GY>D`BA zy^=C*cA1Hj?y`KZnfQ&f=1Ch{&69N}`abHJF`D+{+7Q_F8NJn4tn3^B0ldk zzkh=E+f@xm7u@F6XzyPy&h*Cp>4Adql;aj(c^!Wodl4k0ZyM+P(dh5rgRv7in!mks zH+1ZhT*Mh;{`F5}+xxwXt>ukNvU`7>f9$vR3%^p)tJ*1nAC^J@6<-&$?hpe9nM~J%wc`J{_ocVKovd#v8n-ec|MT&b8iCtxytBSgO z9N8aubnRHO1b)uUuY6^ib5|(f&#!L}ZhVZ2D8IUIYxyQ-bwQ`+=aMJH9^UBb zt5_!xA-ABSNw(z2p5I%t?f=^U?|&2g{HFciwQpztD!;k>-@^h$zd3h<>+CF+x8<+g zp!kyK)bcgn&*z<=`-}5Z)Gn2_6G{i9{T~<_ty%1MxBvTw$ZLPf|LlLee7@>?qrKXj zY8lqfI^Aq}cZ-MeY?;i;aFt&NLTU~3%9#Foy#CGM+1+6=al)#mGhYK@>Q{H@Et>x^ z=kn=q3TLeHG}6jcg-&OBKH=LWY$LDGsUrJXGyLYq%fhwMzb<`?otU3;_ycHB-r zE}vhXnRTM|psZHbV|2@6UZP?-^V9yYwdc+H+@q8Bo|xhD|75+$jzpzdbA4~#e38L^t(1Anv3(!! zv%P1(W8*O8&vnf+%Q_Byt6e_t$^O1bjS4GoRorKi%` zy5sA*`m;B$sO=Db{YE#9t#ZL-e%)-@qI>%n6?ufd(70}Y`1V?j?j~QKbs>U$RpC!w zFX-!w3Al0T)*+?uY!;#K4t}_?ZQ`Fdi}KusPEOdpWvhQ0)5~q%+2T@Ls>@vu^#x2; zRKCowb9C!_rwG}n_h0f(a5^}7`ooQv`FB12U_8Z&=epG$p}J2N(w}2~B?W2h$O@n8 zvZ$|pjfig;Gt+mIxTb#aX;|y>1m74>rdP7a9lCNIeGoI`{t?w$}eScHOr5Z}0q6 z`u*7a9lO0)s;~W-2hQ;+{tuTIm&-kypOkjJ!b~zKxUezf=k<;?Dp9%`=6$cfUMg5v zKL0}77x&yRkvVS`X0~2)EJ--B!}s;1D<2oxKYe9T(>^=&{3NCa{-^96TcrG_?Wuq4 zx<~w_d{7$e?+4jCJl3auUs?I__4%LkU$Qd4@6s`N{qa-bk=*6Ndal=|7v!AoRIv_t z!@2R&UZwlt#(IY%KvI*ocbzupQTKHQVwfBv$4`lmVSqHE^~ z@Mt}qJoiLOkyGC3>a`d0jPA()kdunJf2FNmDbDNGq;l81$sXtOHJDqtbSgE!6znK2 z-SPf?SBU!Y)sIr79~CS)^3?K5bMe=Hv3UtPk3u(FA5xiIlIX`+c4?Q0vel}>rxK|- znp54|R%?7}xwXGLUSpL(@*aMXu=|2cExyb9edjuF(pojO-1XfQ@r80%uB2uZD{4ia zShRD#bYvrx5c>(f!f=9LRvU+PXsI`QhYl-8ovW*=uC zc{08A$@M(v9hY_Y{(Pjnq<-U>HD`~z|6kUl=Th z=ZRmkzPqiRj`^1EbuRuKPu6+J7MWekO`LE%L-EZee~})c{zEAtJFfn^QRZ3r_V!ir zIdvJD8808)6dAnAuG`o0n=l7G#H{W+Px%J!7LHPad zh~uKaTZ^}Qai`qhX%IY%TPP$e@Z7?!Yzog(vnMEsdKT?970BSM3E(xje1`R&x7=jk zoa#Q=f>s})(1IiTm+=|QsQlw}ZqFTcogKwLWR0H0%#eK9YVzZ%cE#n*N}EK}-mco< zd%XP0JlPA(=l@P_-Iwu0(a$;bxVwB!R()*dt-mjtj@3VZu-?(=rWyN9soC zE?9nWpX02JcZ_z;k2Ibrx%%mH*_KykyQEv6-)XW_{PO{<%=EXawyO;%>=3Lvk_y6rpzwa*j`F73kyVvJG=8ySj@Fz|1 zuaYf?W6EsFdB^gPCH_|3?vygO^2y5^CpJIa>dfDot8wkew{>5h?dgwB6L{si`$Nb{ z%i_S7Pd_QupE*5)IU!a117laL^p6N`t%wKTe4qcRKJUHt?ZO-P-Ml{izA>GDyDq(D4q-nEpO41MW#C6r>>khNe)v3?wbi5`UuQXjZfdLLu=!vr~aKj_skmi`CrU(_qM1NvBa~<&5B>p!#=rkg6$ja2+OpK z3NL2f)jC={{rH)=`MKZRc_vlN=#^~xYwIv={jrQcMtfE~n%;Ij;`2YN4PSzmM_o&F z%$*__IO{>@h8@eV3v4Z3@uuQTNJdn+Q-7z5)pF^TYTpY(jVjZnO{L>XK7V5Kp62&4 z`_|mwW`7i3}{}ox3RyDL1$OWOb@R}ZH{S4?`9_-cE03R?9Mv>7CgVTJQf`4`JGs{S6%C$UPzvg3ON$J~z?RQ?Xgw6eLv29lx zzhh3*p7wiPon4L4 zzNqCltF4U%4zBz7X=}#a@2g|xb=+~#mwNnf?qXh9=k{_n#R#d5J#}DSU+7SgA8@m%HOy$_G-lwB+uH{--RutE#)Y)bn|8%)zOKjrL zww<3i&qnX!->GJrFSr-nexdooJLP#^`>e7&kK;_Uvl%Zp{M}mP=;|odyKZ(;+b=P; zcbONxa+F)n@3x;)VP)95RC}rQ{RLVAulMe};bfiQ-zfyyB1N5!-2NXLTzm z$!2FCQfGYs=)yvqB)`Y=UR5am=905fn)2zRph(ztv!CfjU-z{|xvIIzL{}7ExK%hq z;Z$LOmEx{-RckyJe304X)0g>g**4i)#ZAt8zsMCQ%~~nAtlY(Aal#$369Ep|u~b7ff;rSb1o%XJ_yAJ=tN5o;Ot$ zR{Xp3nUQn8`rgPOJt1S!!fC0Cdt43*X{uUkr&WCAYUjUvZEd>XQ>_wVjjT=CpHdiR zDecIp(&bKHzM@a)tVHNi1CAft`o6SzZ2Td4cWO|5UZY5_PRqo5ZTy@E@{Egi?{M>< zWbBl~((O=UA^fs^n$6#5&%fWhw`zyP#EYDJ)FlPNoE#?U)t}qb_9e#o>%Ez(s|$Os zXa1V#I=`FOV~=%-*iw&oC2bFO&RP<4fgvX=V8(adKkIp~%swN%=7G{GW>=pe^A#4- z+e8-LG~TGmmGAJxTtB93!+G~(WvPoN#XhW>`Aqe8?(Ww?k7YamZCZ8)4*BffoQIOF!S@#75>?hCi<1zu%Vc7N9>*r2T3 zk^bwVYh=ngu9tlJMJh)p^5}ZlZ+Wuxxc|Jmn3L}Rf90oN=y&+5R&ibGounsw_q`*` z)qMXQ*Y0`aU%2_7b5-#6Eg#n%4Sy99efZ?^`vyuE&u`wrJh97Hr6}>f%N4D6|6>+R z%boe}&@D-IqmK(0Wu@=DcVM#E)LD%gGAA3n&%aqT!LZZB=ESY|U(QS4FHq8dbFzJo za_qk+F=`JKYFusWq*l39Y}$S2^w!uL*N+*mefxKM@gMn5*Z#Pz+x-6%>p%WrznhW4 z^=21x*KT+euux8(VO_6)JKqJT^!%N-u1cRRIvKts?4gSKCvMvwg%3xBjzw>?m3Z}G z{(>pLT8F^B#xaJC5EiSnRV*J|$z7qj!6POxBOGw-Noi`CR=< zt?RTSutYgO%Q|X%JaYZs)Hz#o)j7$EUYxc)af}(_q8oI#2)_sp?Btrne@J9J;OWkF$$9l`z6^uIhcet~6ER$e(a?i=SY z)kQ~6%d^z(2y}dV#CPYR&s{$xYa)bZF5{S1m-Dk`tCgAG&b38OFaGULpPMrKj!@C+ zu6I@zYKzLWzP+C&x&PMdT@OpS4k`X<+9MqM@6nvJH3xW|q}aA>+qm^X&5PGFzNzI; zSixy!Q`FtKrt?ttuai?YH6GvQDlB?$zKGW03C{nG*X7q~U*S#W$hOGtGP9k$-q??; z@4o1~Tis`Oa?~>Yy^$+<!xF>*>x$8?X~UAOMEd^ca*!FPvB#Bbhvcc)f*g4W`)-du0rucFE*9e4Tb{ri_YXUJDsm3Thc?NsvfcZGpw4?q94D|heT zcCHl=o~nLV?|SEow&2I^%a#;v%U^px$==_-bMd3PZ8h9```12=>nRLvoN-e`C~o4~ zS37fGZ(1(uyyTwSM?F8aX;F(+DkI9Id{oY{ZLHgscDVcL?sfXvveqt18V+}iUnssl z(R9IqkGm%EZdT*uP2yiS<@KHq(^%rjFZ$c|_p;V$*&cPPHTTCJWeHW8S#?GrrCuZ} z>Q!+^mw(~h{JHTC2g5YE{&D`EEUqAtZFfp`tH)ZF=UuB$%=)6-9d#tlTN#wX?j=X+_qUxqVmt3@($OZxXPI(`}76lK3W%AVkg{V z+G(f~aJ1ocMw0fOJqqkf-z|j?ac|CQ)x5>zCQ*FzM(8S;sO;}bb#uO4t7TYyA!F-K z-^z_OuYH`VT>dn7cr{yI(i6BK9-PtqIp;U8$?0BK7qOhw)}7N=ue!w-@Z>|K$rqWb zcq6v!O1HYL_1lDm17v5O-lw|a7nf_6jFf0v;GPFErNJ8KmWufFdG9+JzTLq_tT)<9 zM0diXLzkaMXB;|yF6#Epm282xE{ZE@pU*5|h zs%F>_<##Fju9dWlhNQOkoWs3=zY6KRjHik%PzyKr;-lvY`J*&8MEk=rr4m4Dw{LEx8~o4LA8%U|0)LyFmp@!85u zkz2=H?@ei+yv*bN4i%ve8`JAt{OXqX?7xH-JybNG^W@#X3)7_zcW&q3yesrYteB?a zxi^cnby6n0JU->lMgGg{!X*RzCa&KyFR;k4KX%?SlP6+APbN-!bAf@UsB&A>KcT|I zLLv6G6=FMu{FHt?{^Zi@e^l(vm@-MyLRf$>& zA-?us#4^s#;C^IPS9#dvlIj81Le4L|4^yR;o;R94;Jk3iSmVt6jyA<)akc9=cqYlq zCK`PRv2IIQb4H<<)zI{9-o=}hMIpz01uxX?$-9sjUh?#~L+TxoiEsA*yKVTXdyC1$ zlC@7iEnBm3g|YE0&pDgUBt*~Me_Gc2>sBt|U9Gu0KC<6Elv;K5Mc>W)6F1IycIt}u znGG@jzRjA_+%Bi@62)pb`^+l-P=jzTgSgGl9)@1L_Pr_1SFBm}fk$<5uIb^U>~>ri zWD)|n{P$hImFQTxRQdb@0q%DNkMp?08HzvOJeY5HWe)r0UF&y!eXu#}io-7MRkr^F zH(%P%r@5%^_@S19xjp_<_WUXgW_eegYI}C0YmQ&Yw}l%gzAUaV{c`yWo2Q`Ovfvl1 zuO6L$k8h(#|LH0XB~|&zmbcDD$JZ+@yLGr^v+kX;oI~HFgD#lb-u_bU&hkaRx@(#u zbHkq$)s&^%-QDhrOpj35lHC?)=I>X$cxsI1v()D^ci22MP4IlNs9fs)n{2;bBJbq- zO3zjvoN=IQ(|hTTALb=@yKPM`ENni+RpEN`#;%z&yBv;b=h^Bo4 z{A!TR4;22!E0{gcYevFtxp}KU$VBr67pgA%!ew4iW>gz)z9hPJ`tl0ToBm$9aqj8M zL}IU%3585-TJvbKmVU&C!?WN2G%2>&8!vTvTS zPu9O%Sr{4o`0kN?oG}a@7v}y;QGfK`{z#k-@9h5U4Ia`TcsKAq{TlcCW?&Ncy7~u_R%_9Y3zE znGUlbzo?gfyzQcR@jR~xod6qG&dU~a**L@%(zK?FesjHiOK|#Lm%&1%6;qmG63HAc*_+JONZ{^Cl zp}Dx@xB=TEk<;8c&Ml`{m0WMvhD>ENlAJWTl_{wpdzo&U)s&~^t_nX+o_c#xWA|77 z!^?B_`}|?t%DP1A?^TWoh5FTgg(>#cA}f<7Ubs{DjV15T%=i~SZ{Dm++x?PJ&-kD5 zsVx)c%(FNxRBZqg}s|a*;>;60F9%)}V zhdE_4N4rL=x!OG=#<`Z8!!PE_&+(a-U)jpLcl(8@jzO%UEPKA~-~9N5=htJg9wjfo zJW{JVcc9Dg*0ZV$o1VN+T5BOy_gY@tXEKLx=c$B)vf8- zlX~B;$7Fg!-6Jzivbk<=5{kbdDzz*!kCY&lC3XA5`U#Pw8@n%nQg8p?UO&L zKBidalM$bImg!garGg)nf+0d1Q>ry^Aro4u3z63VBEZ8#=M{p%Q()+ zKVk@AcADd7zfGh1{2 z7C5v}lCk3Vg3ffVABt~&FMN~67Ic&Kjs~;5a;(AZ?EmM_hZThPb5Bul>)`X$GM;+p ziq8GUuJTVWg#$k>mp=bKz{4ZIx#D|h>x8a^$G^;DW*zwLdM6`@g z)MEad)Vm4NTlYsEythd~Z~cc4K{iZECPm*^uR7>>h#xL{vZZ^I-gef7=I>4!7>nFl zxFGDi!nv9cv;SWxFLa3ezw1k}g6kn;7K;rE7GIN{6ItSazU%)Mby!R@=4hSbnk8Qj zcL!}+`))^2hgARUnc5m%84?Qd?T*j2Un<9at4YqVDt`IhPK5LFY~@8$@1^tITbVue zh-<;`!`)KL7j3qze%*L#s#Tr&jor6zy%Q}`GfEb6l?i&b!Q<8Oo5?zQcmFMYu}s`N z;C7PN@^pdBRgqgXuiPrld+$>6H}8H_R@3MHybM3HeXBN=7&0-K92S{V`7*U{_s-mv zh5;LQ=_q}AS-WoE$+hnd_7(u#q1UJWKto`RTM%Nm?^=!r!WzWCu&b+_3NY8GsY?9VF3&q7|%$wv>O}u69hCF|;cZXEkj7zgP z4RxPCYPq!GeX`XR&P1hXhG}Q4V~PxJ?sd=OX??Wfzv8PKv!=-D2s>n$B%eI}w_U07 zfU))J<*ef2`>n0L?KgR7KdoL+v$-R2UBef(j?ll}ueYgHy>h*L+w+&u>xCWn>Mt(v z&=v7m{`bHd*0bJuH@Ey22(>l;-=TT;d)}E@b&aC`_sj^o?_v1IGOg(IBGzT~kNXak zZk<0@x_lj@8MDQ~kELuTto!Fh@pGRl^Lu#NTGGUF;th%Kmk)2>rQgc8mC40vf$X7e z7q(BjzND6Q?VEEsIWwEmo9*u`Gz{Ore$~nyr=1UP4i9*ge#6#QXi-q-qMw(-D!5tQ z-fXTr7!ZBz&*QF*fy?jDpOiOC)>h@l!#8UlFTWdK%XQ`Ns|!g}7}`|SNSLXIad?)eiBSSL!n^dHT;@>%qs3 zw`E0FX@33xGwkODo&aMOxJf-kURWf0fO3p2+(!HGIlZk@A~M-W{;YsJGU9#(n5n zS!r-(hP=lm8k)4g-xoW#FJX(?Pf7-MXvq@1WKO9Y)TAID>!PIu6ns-OV zeI#F$Wri5965m$!^xv^vH+-iq{-GYAsnn-_qv6b_6uwRFdG8NKloh+{95|HAT&wN- zP2Boq*0rJrYvxJ!TKi{Q%C&s;sl{LO%&lpM?=Fj!_6tAJ5ue0ozVMy&ypx`Wn%%oL zpL6YdUij+SJJHa4ad!3xD_7Tu`?sX|{qG4%`cm_C?(z4gJ0+F&yZD$Jy<=Q0?ocq{ z-Xz_SSr4`v>g%sKeC__$Vo}4ry7EO~N8%cvT2Ei+Ct9<~<0XS{Wr$@)=xru`SH3p& z0}TPei`7aEc1wKtbaQh3t@D0etLopzybd-#TW4|lpXT1cpcS_=u3S!fb*bssp40zU zd&|Arudzq%qsh+1k|dKy&D?6y;it=&am5sBq}w$=b>+WwIl6Dv)j7*+Y}Xc7|9{f{ zK5nm#b=|+O&wrf%V&|pOaNx!4*)nTvcITb0npT&i$!4?doP5zyt@|>^nar=)MYI2X zG$X!$$#;Qw2QTv$`-uD2^%>@BG*r+2nzL?mv6`QLr`OU{g$3a$j=So1f8skS&|1EE z>D2SwHE*n%b2<9o%}l#7^~EOHzOLuBteLi%(hUuX>EG>ci~M(TJI832!c$P<@h?Xy z`DpNZz9Sa^YE^x#Go_2glo!PCq+Y9Bq30sQf;s z)AiFQK8wzN_@vLa0hTPOYZ);$mGI;|8L@sB!R-!6bL{E6zTZYC=2s&XAX_~k_VohnehJ;G6ug?GdmfWt%<OLvq1f@wvI_qG+CJNMV)eCftNtOAonHvKH(TrbGf zbLg^1**Vj_9|btX9(3%O&CfKy>X+mMr6>FcHT-sYa>^}`>QPzoz>R|M}{D0^fWl z&0c1@*HWor`s9rXyr;OdrIlIta9lEt5Q%*BsY$aS{Hkc!{<(LHjkjKPSR`*J5nC$6 z>Aa3G6>f8DxboZRs za67CKp`tax@4EQMyz`_J{y)>cTJ1r(-#VPiJ+# zm}+zVY4fpvJIg)G&i!TCXWzSe6_3jIdXGcbeoTK`{omy8;m$9dM%JH>nK|9(a9lX2 zO8;1o%H~b;W*Gfd?s&o-EypONki*`3I}x-+u!XBg-I>|06wD;h{>Ha) zi%#v+%uU#^22Upnw7Kg%Pe3}=R z>lwxGO#E)3{aeR!@#%#gi4W2f^FDu>@W;7xhrt*~gj`Ji&(u9_b!GDf<%06KDrpz}oiAMzIP+4ZOOE~eKIxvt$=SzT zBJ7rW*zbCx_W0sPYo)&zqF3l^$~JC1d@^s-pOvk4Zxwr%Z1?yyP5GE9=+Fl<+hE9+F z83m&K^(v3PoIkhE-+so7i9!pNKFH|*&)Ts(t!-)SwaY9#@^O4pla6Qn?G?PIVRU)s zewik(S- z?#6P`OHnz#H1?*U-C+p-nA z*Jp-At?GC2YnqTBRMDR&H|MJPf_(V}JDKeZYOWu@zT(aayDv7Y1@_8zN_;k6|E+!L z^ofmkq7tIJe>@ak@ViZ!e@(pB9M(UR&nw-USh13Q{lV;zz0YiJwI$7;mBu)QdH24D z52b#u`>;=Wci-=cg&(ygwzGx_nkKq@+gNx-Ab{oUtek-5Yd1Z;UG!!5%H{XY>ugoZ zis_O$x!_w?!?D;~)1+UloAzF3>$E4#sjn20n!k7bXZmyW`-I=G;`uk#H?A$_|MB+U z)xC4-3+FeSzc>5J&#(I@E#AYiX{v#OWylo&HW`+Tz*P|oGXnA!zB~HGcoXY}cRxKM z?xa6Z>HMX`J|pp*&qOnc(>-E!kCrXW=n*!bwexSqvu~{{v)72P%dB{Gz-U3+GTzz! zAE(}t@jMY)Gu2u6lH<2EeH=z?mv8)ZHxD!^`x5!#9hbh7m(xDgCCVQ^@Yz)b{y(Za zsitUe@%&9;ANHJFE9Cf1neEOdwrQ<@dquu#d{}oxy{eH!zmjbt!{<`S8b(h5k zzPs+FA=?+IEIQJ*_#E>j_Ulbj!mHPMOsEj`;cVW2WCPEyt_we}>E17$AoreGrr>Ay zZzb+0M*rNpmniSuHto>r37dM}hc}!)@am#T>B@qig(^({=hyW-IxvyrWBr?H4W|Q_ z#l~!YpnUCy+V^7~Vgjiv{>W>dnIdv^el^Dr(~E{n?I*}}KKNtkR9UiAM)}_QScXl$ z>~lQ(*>76^_q@M0Z0_}7<4M0iuVE=P)>1HHuxYk$d!J-`Ak?CUGAx9}DE)-%DFCZ&AQS8=-^W78mgUv^oq4m(1NS-{G}7Ev6a8)ak+MrO zI(MeXzEup4O^ndo{Q0VV!z7Nbz1k7FVh;9QVs|HU6!Z6)M5SJNDSS&md9RJ@#5Kx- zulMcF$YQWm+*q^i`Txq~aPA$|Doxh~MFh=zmdaOgUto+ZJfNzhCzf#JUOHo()r6OU z{|l4v{n&L+A!^oKzOzSHJH=cq@B8`f+scZ~UKvmJ%XU84)cSkU%uLpL!Y3@^}B53)2r*vVPlF%zVYB z=O)+3JvT%rOp9(m!PmX3#MEgEM}x=@zF4uhmZ2YgH~f%a-zaMHbH@41`)duhGiggm zpSHPp;Cg}a8HECY;wYD{_8pV{WEGk{@H605{eI@$p~nX(+3#itL`fww>iJCdfA#BlxS@tZz)7vOp_+dy+zK9R zm+za!uuy41UeX`O6!Q+79lpn7K36$HK5BG4XwM(o0&(&M|)5b(s0d3>n`0eP3JWS~l=#eP8%GCq2+AKT(S{ zs8M<1pTzX{5 z|K#f~_uDv2?AIiGw<~IS{^$Rly?2X5Jg4bZUDOvk;nQqkEvPzyE8ud^6_2Y1(G6^l zZ!bUpVtB^*@Ki1>BPDAk=hjotp4l9zY^)8R9w8~7TN++#nD(SwHs1c9@XVb;t8T}d zR)3%2%jmUK|NDoCeKl*p*2YJR*`KL5iTBBr`*TP1<_Fura?8v=OPP66zIdjiVFm;)_e5&@v+m}SoUzaJ|KV@@L*SxO< zCttMgjNZTT%Wm%_=FD0eWg6LTu7|lzb-d05ZfUSQmXLJRN|04{jmEW0O|l&i_`;l8 z&U$ieOsV#LbC;`2)0SOoPQ=Hxf}EV1Z!ed#oLjT{M_Wx;!qWe%mYAfj{iLW?C*5;$ z`iltR?~eC`U#j~t@31Yow`QAwupv+T(WVuvO&kMRyh>JcaICM|vVZ5)(5)-KvE+A% zl-ihYyv1|=t!h|)kjWmdi&I|y(tqC>BA)*2RYJB!q7+MU?9}I~OkS&gx+jEm<;_0h z8OZW&hO#K9^do-#SK^OEXYaBQYYq0p%{O(!7z$aarq?&YhQI`@`8i<7S}n0Wi3F8du0nMtPm z7?YBPJRePwbCJ&JV=43Co565OPyCTwD>ujHpY7jWn`Z6u_)xHEi*4X@=HJrK>~Gh3 zwR$dl`)1AN8F5b|52;>psF|+($z{!)*5DN{{gw8GPCEYY%i~S4c8%qW-6I}$J+X5? zZkdrXxw%ICq>gIBvK{I|E=y)L-uKwj8WJA++$^fu;oqa&FSGY^XRk=9R{6X7{&TI1 zyA|fz|9`!Q`;y|f{V#Vbe3ECKv~}^sb6Z2RmL%C0P563vR?8jB?=JUv{XFX%13%_Q zIZtO)mEhS{$9>pEs3$!lcaaR=?He^Ojn4*sN$9*Hp_lOcYMGirP+q{-^FPgFU0>S# z7HVd?nz{Xk<_WiVol~UFT^5nz+P1$geVNF)ed>WlcWhqwgtJ8Y>+g&#vYpOwZ2#8t zA~&t){W$*T^|cvUr^7im{JLxZN0)u^uGMMpW(S@5v$=iN-7L{(L3K~VUh6u~S-+>v zbfVvd<##u{E9Lds8F=7a^3L|9_Osuj)B@9Czjme2YtyUK&CDz`iQSFf8t z=|t_O(j9YdZOnDxJTt-X^xDmfUa@y^vWZ`=<-7d2Z2i&yEGM6^SVt|fvrPJQw{7P3 z;N^_2VpEno9Of}^nHgo$bUQUDLiw=5^l40&k6-;WJ#gj6O$W0io>`qXy=Aw`X|qe5 zk<46=g+(rBuJ8nhR$P;kRyg=}uHk8`-FxDgelKZ0nz!@y39IfqT7TDUUb;ZdY3oz> z_uGuqaid#$qJ z_8gJwdwZ-p?e~?OnbX!AJNwznWAaf}s^=WMdHh(k8@Tv8IwRIvqB};_i;viA8Dw_jy%hJYr9n)>uj|{1NzZ-3kBX>|T#Ay))Co+kFyR zOIld?{r8*OU*+A)=b^gbcERb1n8Zpg0H$;y5j)F!^#u}s;MMR`(<&YG+C zo9tY2o`n`1ahWooF8whTI1qWD@Z0C)%-`x|u3l4?S~<@+%h6R= z%ePnaLfZX269!>3x%HJd_pI_)`gJjOVnJ$V+N@H;48M0bemq~!7BTJU+$jl*jIwgC zvT;9Kq8A$I^x(_1wCi;b_e}dRC$iwznokpa0?oWPH6M*TxhU4p$Xz~8CHd#%k_pGm z6MK_RZh847V6ELYCjI)O50t)(+}*Y}iTy>wJ{IwFA_6Wk=j^vgrmvMb@5(jlaqPtP zt;u%RioI5IZquH$ZGnk+hwZ1x48NpFPof+5@EtNflotC+UgxfY9Dm2$2kZ%boNAp{ z7OqQW)tom|E$xt;+3lB2ODk`?+>#KOvWY>eSXJWXrRpFhAKwihkA8C%NMYX__w1%i zfnBsbDI2FSnDmbSHg^rRa_2> zzkNI+A8VEUFC%G&_W}2nIo$#kVh`Em+APx)RHgPgd^C1an%}i~{kd%$e%PxTP5q$i zpU`(gMNCIr{!_RD<64<)@wX@c(donqshCKVviM`l(^4x_}-xk>r=T~%5=|k`^*#+U}^uslj6L4 z)6-8AEIlSqwQ>2?WzRg_EakOEtW#w+X5qHoTlE6V{Nm#`|~j-AM=aHayVSUY&J(Y1`~PYwNA&@8vLmcr(FdbNa%w zirbIwP);zuQ_*o<@nD$XOw}fXOD9c_$j6DWX@wv0_}D)Ey3V-1ls;l{}MSIV;?>MtDh)0-Zx6=Q^Gbc+q+JzOw9X79A=U=nWe)*R#doKOYy2@*CaE_}Rr}cBkWw(C1 zC-p|X$uuuF;AQ0yIH%$LIZ$ZMMVGluht!WNo;|dMIacpO_X68hE0m7iGWjz5RE18? zZw?nZv(V7+@X5Qf^ADfv+0Uj_+*<#xK+I6SXX7WXe|<$aKbU|1aAj3qy|w8*Cfh@u zA7(X8ar)cp{a}e}T~F!rsS-188T6d{q;K2zM{x_s2Oop@iQ!UD{XTU1ntDjD={;cl ztz9i(<_aapQkN%>Bb-Z*bDF%d->vhhZ>z+ljZ*KsT4b|(uKeTWdwpzSiZ_$9>!qyE zhYsrPIkcp%rZUHsCwYqFreuCUF`Z-Otv4}$E*|aHz0bL-%E;xI{dVnz=M5ayf|u}ACN)cb z)3K=gQxT%_TcD^@J0?D}*IU%M`-*(}t$l(sOqu(ecnX}2f2=r`cHHa-hYNSe#hGPS z&rD(skZ}E3_oJL+?HOB+tlSmr0;dGDW_NQM{motZ@=v;gti}4<(GTQbO!ioLgYS`l ztjdM9m6F#j7%x3s&h?V@<3}H#fR?zap8bXU?)BbUeoXeF?L|f5ddH2czULR@B(uz_ zUYlEVR&Uu~8KaHY+gl^ci_1;bU-ocKD0rjo6}aT(exXi}AEM3+>K4t_p4U?M;*%AZ zno=@HtF~@iI^)}_rsWEcmi%42wsfP{gNn&YE6QBc`V3?p7>9F}wfo=-O|jbd>GedO=UCN*rCb9}aYAg>QGW3=4@$b~0>Seg3lkrTH&);1UdIzg5U0UwwGZa2cPd=D_ zHRs>KKhmB)0e;V~A8Xnt)hzh%y`8c2vabb<`u;2buD4nKBRX+yTC{QC+0xKnSHAA& zpZlj)wtZxu;$6EW6L;&HERL3O z=$e*1amyp==}ASCb|_Sd+-I1n!};W_;nNncw2$u7`j)1<8>~=Ey#3>F*QBdy@)N8z z)zVh{_}J*dTX^fr=Bkk0?=DO3IQ8Oiw~oN^_seCsL>!k7d{VLD%AXhCb1xbDhNw-l z+SBq)mHqXxL!2GO7Gd%io_TzfP`Umiz4hV4E}GIb zQ%CEB3S)cM70!PdkCJ5+-mZ-4xKYY>Fq&_IrLd3_r}eiB)k;?n&eqalxViH3-*tMD z8_aTF?U4@LQyJMXoB89{IL@mVl`>{|UlMvS??nHHIog5uK3i7y|8VPQ)R0bG=P0`3 zyt(aK?jH6_lB$(YMBN(K&z|V!v7o6bs{TXIOV4EWlkN?NFUl&{mEWJ|v8-U3*NS`o zS0$t^*uMFfCg0q!c>j`WrKyJ|8O}=5Nz?R9pU|NkX~Lm3yRP$*w32X9(lz$oJI^1S zz52)7x7A9|ofiCRUV3C^oqclH^0X(6=Tpu8Z@lP~;+PyN=puDw`(|KBaU-Piw!X|n8?YxU06%^^3nbnmr27eDq2SEq5W_^@cV zY|1K`@~Q8clVqezXF74-;1Xq;o%1X+{paJD@D+zPt(hwJZg1<2MHw=#nfF|Nurx`| zNn-x~nyD*nD#P|=MywgL*-kyU;C|9a|H^;=S$XkkU0)flg;*0=j^>x zH~%~?X>cPp@LP9`@$tk7Uv!K9Wv%Yx*;v*o7_shc{%qYlzAH0LTPOc)vJSF3uQYej z!Q0igc784I+Urzer>GwK*2}#hCF#BHalSomTWY1n-uCP_b(!=!zIr-+o z$vEwgQjZ12=P7hBx37M~bR*0C*zK}8b`Po!mdT@QY zmA^vI4)vyo{eL$au1-JFcXI94XEwI8>MPh&k9eETs^1dgXs5a;YK_>=^T*A9Z;qSu zJ^atHPFulka_>s#KReLw&MkOfeIF6aJ#{4rgz^6U8fHB7D(I-vrP{xCyWiESR=#JoUc|4%besRD+|&;};tQW{yWb~O zsxwuDbK#NgPJA04?pnXtSmOQKgP!UVK6xSL<+*M1j>(69nrz+8GNrFm@3z&7U7b4v z_l5=w=e&~XPjM|=UO3~=;YCd)`+vF#lr(JF{x>^tQPzao;?!fiJ(!Qi8}IC|bF#EO zwVpXP^3Un@9H;A|m=}C!`>?_{kx{TlT9$vadeb_7|M`W_j+gy6I&*g0w~QCpv;|eo zS6aR=p6a)w*1yHep1W~>vWMzLRYi|YU#*-KLT|I#dT|!qtyWqlY2+Oid-huHIqnNO zmt;h?-MoDLygyrm#hGryI~S|D98M7w4w; zE5t_h%I|lyof5h;(UiN)mc{Q@P3*cEg-bL`tk+e4+1~%|LwR2M`RS5|6GN_iFFs@& zZZ5uSPM!^)z@%5JPHWCjoT|U?Aivtnw|9gu-dH{%w)g+E(-|2L)*05dN|bjl*>rRr z2g`B=Mc$;HXBOL3{ruA*Dly^759j`aw~J!3oObzp94poQzyF8DsYSouefyHcb$-ov z2eF4=mizk)+j4KLTfaJN@8i|Vr??C)Q}~;t@5}9cBs@uawtCuUp2@1trXQau8uC@i zpE+<{@A;J%EI#|Im44mwGD%oecSA%c?&GyNtHnRA6*wP!L^QBLpgv?{$Yo{aM-LB9 zcU<5o6&X2~m%GYP?@atD?}Dta@146&+?psob9=TiC;zc|Jq!5~UU+}l!cykJ{x&=3 z!s^piHvc8;qm`MK&v%~5>%YV)*d;9ObG(;>{(`t%Y5P7g#!IKS9ayKBJ>jBQQdi)j zq9q-%b%8OjHkGR!mybU3NAH-xj2HeNJdU_btBUst3W$2&DRDoad!22(m=5!fg1ue& zT~9)4Bch+QT7G@JoZH3WeKFq^Gj+8CIv+L?Quo|+r`Ou+R;fgYoOE}R z{(OSf_lu7}km>GOZtUmYc2?Xozf;0=e5(1Oz{!iJZdU2{a{1~c%ib9G%%bjkpgXf+ z(BhcmTM}j|MJp@REd5=u-&JNkkMV*I4})gYgTL0#aeQgNEAw6DD(!U6H=>`T7~k`+ zT=ao=V^K{+%IxSfIh(I;HZh5>R@(D}bK|7w?w7Lr zBsHuaXI;-oE%sr)y()I$qTZj!ia%v}982MRd`iU6&#J#n=CqqZ@fTrLTW#+R?W;eo zyFA5fp}{uQWfB*{|J-d%kKG?|^-=iN{m*tkIv;2C=TByjNY{^=#r=9tTl!BY@st5IOhf@T!+vqzr4WOucbBV5@kkv2^L?+Y?qfY3!KA zHhHrX^L10ljm!GgnJg0g40ZgC_8BIvTD3s9D~7r6+&RHWJL9j{{idhx2%Py#YRki4 zf9KEq?f$|3+VchNtW~}j{%R$xQ??QF-hTV+eX~PynfG6A*<&Cr`IotvGvoiM0(+~D z-5N837`9H|uXiw5T+t}r;_wf#+HE^|Ci?rG$elX-;AC;mRUb6<*8E*m=e$9C&5d(j z_gl42AH3%E!NjFYGbbqT%wGNs!-?B#r}lE{2)$pPbFuUdhhVnnypxBM))-#&onZJ% zETx9`wZfrmn%s4b4E7&V(+;pjec_j~UHPypB$eIM=#f&}+{Th6?1$FuGmh=;oWN?x zeCNQ5`?KrwS1zgh^<~OrKUL*m-P3=rEe+#te=hn!^*O{nm{NF3Lh#|61WK(D& z&q@pV8}&)v%hH#->oY&}w)n14m-)(jZL!#C?bqeoVpy2Bvhs%<)K8DrZ+~x6y;b?w zspZQL%+IuQPj&R2wLdlEN|UI8;{NcWJH6Y__KVczJvKbwvn_MhtN9*0A7;J2t8BV! zMtz6WvBZJ}HjN3mNOoO!MI>i8s=s?p!SUB2D45$xN|d>^Yey?EaP*&i4KO z{?5-Y-&y#5tI+0U{!?iFqS^DOmQk(=-S^`>w1*;|t=uIM=M&Qf`l ze{a3(q?X5AzxG7l;**~Is9$$kQ?Vb5lX~2rMAv60?zmOIy%O_BxJO4;{(O(}h9|eK z@P%DnU?#BN;oDY^@C_kSz9lnibw7#Nyu6}Qr~55?;>-v8#n0}TUGKBu*re-kk9REB z|99m0)eREUT0394YyG|)SW@gF#l&#?)y3AUm%e3ftC(@V-tBnuZB~c((`Id*@YvdM z*Q@NAlMe7^`LMe3Ex49rEgaJKX!?qMVw~)KbM>FB&|Yw+ZEF*2N!4e++uPrsxjS!n z7w67%PiL@9^OpM>eV3;qM!0mc6mOW;FE8T@2Ym{sZabtX(K-8b&NUHb{ywgw-NHW3 zpDx_r(RSV_`0R^CJJ!66JF(-_l!x6X;uDk`CvKYKeP?o%*6D3uRN0un?frWF@ieFC zD?g8&4Qo}p`TOSLJvDzc=G)ep7zKWPEM34}b=&mWz2^G*685?&&-?H1u{u~S(x0;C zo|*mW!||s1<}N{#Up{(2&+*#Ti;L3oS3UZBY0I6EY5TurtrFk=ktN{2vF$oR!L=QK z;u59Aw%zS;{jzej0w> zD6P1)=+!6v`LEe_)rntQ+mKl@o%Pj@UF~KHtU70EZEFAiDtY;Oms0#6EvG5Q8$Vpq zcj!%g+4%h{b7-_O<2vs!Z|=lz4%u;2M7s~{XYBk@l(cV0(S?_->Gj8RPX1UwS7iMh zg>4mAOmlsIb}##MR3pP+{c_`+t%puGh36mVYi`_|XeOmUXTh1J0`al4?0v5M$v3?l z{M$re31h2YKw=T=R+atN53|?>bWAeaw^4oDR}=Gn2)_v-|v~$m$$NA;PwqEfr`c7 zmG=cEMg3~uB~@Q8`2T=7r|v$@Q%O-FAM>@8ijO9)R2N{}68q7)DRJqEXZL&VciYc; zaUry6W#?VH#Z}W1Ca+uAy5V8``k3AmY;W!`1qQVD8ih*-tT=bh;i>tR4UhCQWj9v{ z=(Ab=sh!~UZ2!^^X-Ydyu4i33ptes;Q{~@^S&<)O|9o^gE6y>)owMOse7BCk0#+7} zd5V8#RemvM;5#NC_odQwiA?>i-H+4)>==RtcWX8&qiGmmo@^_q8T zi&`m6?aXhSF;{!mxt8LO>{AY(Dtx^hIW z)GSsxW8c>?_57jL+AA&uEIL{rAKHHZ+9D}k@1Wi5Dt^8Cp}z9OrvxVE*k^WH3er9q z4JLh@=Sn6rJ!0KthOGbgBIZSi0H;Q7iowjbUu5PkjW=0>42u~rIB zITw}Ivbs$D`twcoRh5eMOFutqxLr}?q?S|5e8u9T_MQ0dDFWS(=V#vE6{7V@qG5Tx zKtS1`RS>GMjFGGXDHe zy<&#am8qYP^=T>nyKu?z!MlYQt_2-YKlC$d39p5bqHE+Uv&08llh|v1O?;48@xn3r z-oe(Jol7~TJf!pg8E-$IV9#~cFf=Z})yjH<)#Im`2_6gPp zJo~zfJzNlJXCg)LOacJq}pY6*e6ssl_FqXy_+x?p-zLJ}- z_HR`npVCT&YuA-FA1qwIV&6558jbf0FUj5CW4ef;FO^~UlAW15?>ottuti+?ntOt) z`RLlT9F7`;@3FTdejPsT(R|94W7g4HFV(ec^0+J*ghg(;G_{7$>R9D@^6nXjLi@#e zjB014C8K+HZCtdj(3s&~gwPDlx$4_KmU?Xnu2DRAe=JC5vJ5(8%5Qg&<;moh zs12JZTz>C5_qe^TOBIWU*RN^o7hLBKn)LhT|6D$vz5MG>{5O8Ezr>fb{@t1159=E0 z8&BM*UA5+{XTfay?E3fLHfVm?`J43x&mP&jxs^5B7wW$$d%yjoyNYt}|0xd`J(qKr zs0q!PKI4`$$dl49fv#0d>={LKw|_h?cH3u#|J85P zkI6@*sWpFCb#9x-l$)-BA15~{8T`K>_G3EJtsiC{_iBW>9eM0|e=T~n|D96MU(b`} zYgHO2a=6iz8**MD^DFzxgITPA(3J~MEl?!On4UjI(MzNm=b`}`64h?0sq6X(R8 z{^FXc@&87w=uXyvYZ{GJ7p^PySnSDZSk`1&{g_|Ra)0E1q0rly{t&wd#S$u9ch;jv-275oatt?k%;= zo^Eur;p%tGnG;_{x$R4h<$m*fr(6*`pHbQNS3&z(+uGJfSNz;wndjF&Z@R33ZRvzy z&y6paC_i`oF+uCe%uV{6lTRlI@l1br+{EtxmBOBaiRXo883eG+%5My>wXVK0wO@Yf z(Z~M(D|-qK-ipa&;16tf{`-2d^)ux^hM)Ajx3Vn@GKj7}_U3->aXs}vUzckox5oVO zX=vNUm3j2~f3E{4b|gHSt7o_G`M;>bpKZ+VVuY(}C0dw&bo_S{a`@;gT)Kye>o3Ep z?SJk};k>$Xlkoi=r9nq}B4(Ybui@YGc;~k@|L-kf6}Y~NGbeq0jyTJbcQvQ4pZGDU z_xO!~hWmZ-kp_%Be+)dIU#}IkdN+?l<3fOSjocaCeTq&78yn9wb_vbpI;F^>%*^w_ z`jlQ$QMJSW8sph_WM=&TfA@o5b+NVerS}Fc5>npobFQxKU~5!iSSa1zsdyoC`-BY| zf|t2HuWZWhIK_W_x!+Uoy9}?^p4ry(_psYv_J9AsJzM+s2E)eRN^ky3UibJ|I!|Qj zMvH&EpZ0MSw@>1~TC;qy)l=a zZ+GZ3C0Bkr(ENIP(w~Q_;qrXv*H`~Jc=TRy^*yW1otj6sK1gjaSfJR^S*TglnS6?c zYs&NeDmNBgYCJGS?b+LgD($L<2WJzj=9yWW{NMfe&(F7um4(e8xYsur$1p!kOZ%6h z^m$j~tB*Tz!@0+t)1&TP_mBJOmfkW= zhUwwCk^PVP_2zo!*Br>poS^aQTxatw?dv~ghlK7{KCot{;dcM$MPUZQ6CzJV8Xons z^IS7?YI-2ImmHgK&a-H?2aj`&^;*xWg=oA<%xLDnZJI8h8lGT%*m}RL-RZ|2_W;smr zn;q@>M|)yN#I{ORvMFeZ96)v7F-<6r76mtpq5;Zttk z2g7~5mkyS$n*Et+SA$*H1e=4kMTvgx$F$<|($B97ycwJM?xE}YgqN-}o=nb2+oKfU zlrR&~1r z@Ah@{+XaVylL=gRvAgBFYk|pThsimvt>&@{?^W}6pBK6j8n@)7&<=g3<#Qh=SpH!C zd_Sd>+-><2s-PFw;zs%k9wt3!K7Ji3Mv-AUhDFt6%CdVeS=;W>A@46eF`v2#Q zk>uSvx#-(1K~uAbSEuMN`7d?f?4p^Hzs4 zzgp#bhC%L~npsJu+VrjsGI={i4GJX}ywwT0=Q{hrg~KeZQcE9(@6&%YbARNOZ_nCA zi}KVA+&_Kr_ImNLecGQt6YuZtww(II&7xo%HR zz@LMz|K#l}So>9~lHb(|&XGBH`_7i27#SCpkJ{5aR6jV{M!X1Q6;Dxq_(OkrhY6p` za_6L|mYAiAAv^V*`kh@DYwx!?@baoswo6y*PobcWlsO{bT^&Ac=dfj4zV!A%A?>50 zsa%sHRDNDcZ#kabv43${K);I7yzkc!wBO_j%1G5-)UWT-4?v|(S0Eok@spJjNYeDdoMm|`t0Yi zribd*ue}tbw)K?R=|zV!gro1|sYcYDtlj1JUCr7-!s*XK)%2gsHtqFK++}*^h1^TU zk2McuyMHfRFeyRl%dt19k8_^y-xBcE;P=eg1qt5Y1#W+ND{?_S;)bbf`1+N{jE(AL z*0IgM%(bNA{k4*Zb?5daJiNB<#{vDyCeAgPyJF`Zn3}Ydfj9N`tnC5W>caP*cF(wf zxa^u~YuEXx>Ufqfc82SAyUaY7G%fAP*36WeT475;!MU&9(?ZJ20!kfb3EpQ3{GZ!+ z=S<+;M4LGow%4Ycn}%(iWG8TP_54+HzAg#s)p6VJ+Px$x;G&OJ>B*&bthelZqAqxf zt(YF79cAk;=JBcNe7xrMn|)t?>2S*4-`%AVG5!A14%1NQgH}7=mEWkDoRcCb{>+BU zH@4ZRsOh6>eASE3%WkL|{(o>wMQC5Bl0#YP6t;rBk(WhpTyPLLH!0fk#fiUH9bHaI zIJw-@^VQ=}{bOwt&9eIM=i(Hjg*>8tH(0XtlRMfsoN&3G(EUFoDBa<{+6h~}6IUaS zzAIA{Nei_9eDuaLpG|cyr^TMRsdHk9pQq#1RZC}at`{>jt!I$Eocm&%boqu`S!<0} z1-rWP%6d;}jE_s?s<-|<&7_doYeLdwl`)=9|`SuTIGJ%VK>Kw(;}1eKADOBe^x7)!mB?;%kdc7cBem$t_@qKY98IT zc+s+K?vnn#w0C#g%Wp(*==#WTz2FKqzvF#ZmBHekc;KxWM=HE)9Q~zyd%wm!@S1!| zIPvyE&7R5Mw@LUL_y+tE3B0qq=VeHz>xCBE1xh=tw;ca8LnVIB)|u;Blh-8|x=gyX zeEBh1-&fCG>4sFNAImhpWVE~Szrg(|r85k9^s;RpJ>a!(*YgOCQ`(y7x`Or0^~c4l zrQccf=Rcms5_UamiqyL3#^LQ zH|34q88pgnO#auU!256di;BPOuMHj_y!5auwK6L861$R&%^m~!C%%b~*h&mP>I$?b z{`HizLyqRe;W$1CqWK6gXr zYOJZTf2W6rcu4w*uUo3_6c*S05sy6bdf$rlQ$<&Hahs`b_LboHbUT0YlmBuZ2KQQZ zN;zwpT|&cEpRTG_aH?wlXLFpFy*6N4+QPR&S{$|lhWnZ#d(Dpr|?*#pg3yTu^ z_pYlozPd)UZ9;z{azbpQ4J-^!}1VbRgt_UuRg#*X^Z${QQv-oM^D&E)@O|KmP)KE8avCh*++ z{`^%v)6OoNuxW!+Wg2hg%LntL|G(F~=3jL3-LuQzjZOz$W!yH=>(u9Xx25a$X5Tp{ z@vJ31MdPBa*>9KoW)maUnalNC@A%>9bN6>$d>7|x1IY$Ww=X`=?U`R(FWT&8Qc zd0_ae-&G6lez<>som9en-L8EBLLKGI9X|I;r#MASk-wSqm4{FN-T$D*h#8f$dlh|? z|9uiWes_?Hp+FEt4#H-x~>6(w*8Qu7zjQX0-eY*B8-F(5a zQc>xPe;iyy=Pzh`F1BLIjZa1qDgUJH%{3mi_t&29I{SIT`YY$8ob;m31~#1hbbc*| z#^hZL?o$i5xlByicf0DQf4#gw^$}~^nbW@R`*}ulNrOa*HM4|9)tfsN?cXln|E?JR z>&74ZAHNlL``2fleYWmQ{QHmm>YQBn_+2_acco9wRyb_1KCEfEs_ehl^TY(Ey%OPn zJ-h8-&WDVBP5kwyC$_zR_po@!=Innp^8ai2|M~cYnY};1VX1o_87USTyQTTfO~rqE|J{3YD_#G?`Ovr-zH<^vUFyE=`Z{@Sv=!Hb zmWT-#KdsH4@JMy4pnG{6@9i7U?Gj$`aj%x1`YPyud+ain&rz56H6$O_eDx*2W>M9F z&NLgTIa7p6-u#TXSpHgrN4$Bel0`<}U%PoXm%4{fO<0%B@^{X~ThEF@IByi*y2|3n zafq+@2eV7N&D93Eyc=^`91Ygq51sbmWoOgF0}Pv}fki zkfq`spEIuTcbOfJHy7Nzzvz1Z%sD^gZ{2<7etp|PSFMKnlIF$v{706o&yMeIVN(C} zbJP69*Z%96zO}PVTiYMca{9&B57I0~hjll--5H(P)>-nR+r`Z8PeWUTl&n{ihmVSO z1yk9T$dAn179MGzXDhIhqvA=7`2j<*`k0;WA2z?at$1@=VK~pBs6{u+B(?=#|Gr|K z)i;4tS^Aes*TnfSC3GH*G3z#Dd%ZTFQTB$n$fu(}Z`*ggSHBDIH7&^z6v8fGQNzvVjT=LDEUQfuR+U8;bxX;dVOG3zk@h*!r@PKZ zcHAvmA`#xCZ@$c5maTTlZ`Z2dthwe(iW#OIe!g^pIp03HR9lOEL8%W6qIz|-BixR? zZVP3axaYXa!tVl++G1f>wlDf_lRBd%diMqvrTCAT5w5~~&rP>I6gm6n@T*Yev@idq zvek|_9MIcQQlN8w$3~r>33dYK!XF=Z(7kc(=D~p8ea6+N_RRmo%*6R)^ShH>m!IkX zJ^5dCj&0@Is%sDU{yChP;vMA+9ijd0|D``m zH+_zuSFvfOn}1OkkA`~uhfO;~P3?O&OFuDpj9PHP;|}NkQ?I7}W_Y(+xOncW{R#3Z z`^$v?Og8R$&+j7mrA(yWU?xxFd}cX!y~P&}$LMY^QH|i87~i%ruEJs2!`U?on@(Gt zy|;Y*{P{=Z!}toC6A!ca*9fNw9oxjV$bL$}s~yQ}=9ax#;yv}8+Qgu=%E(oxcew~| z`Qg^l!>l76r6wEea_ZA<119aLMGx%F^V8(w{XaII(0IIyBP@ck|LJX~`t#!Q=MC@f znDSWRj%|tOvU<1HnE`SeeU{Aq=&)p6C3DNuz31NlNcLX$!&EHJ?(Y|`>GS`|)kjPe zmhEWcuCciy_`G+6%DXGFK|T6uhkyOOyQX>br9Z!WX0qSYEG{*C_|;_JyF<(qbJ#RB zq%v$}X3k*h)1A)RpWhOZvBC3@k&L{tK!A^;u8qgnhNTjrCB3UO^k$lU?T}!9pp~QD zc6(dOwABBfuCJT-_h0;}o9~zZH=6g?uGyYf`iJu0mQ_Jpc+xcd<=@Y)S^jLUl-qOG zN(G@S5n6q1t&0}*>lB@zBYMJX)vSq&{+RvN@Oargt8nT4t7{f#=yhz%ZeP>lD^vfx zYmVs-55I8je>*PSbbP$5%HUF>W1R0!_D3_bnTpxA>GpLQ^tOdN{7slDpZiqppmUV- zWQLD?5(iIIbyW#)dXyh_G;`M6!ujL0^sl{4Qg>w^n?8L1=lX6=o1Gplk5|eXGzVR^ z6>;h>%u6{Hgk6xA2uRB~~}_ z>GN(~ZUem+bV_QYwc{XBgBJEVM{`QKmax96daM?-|fk9MY(wy>DL_$TppmqNR6 z%-0>3OGEs=^-0IvJXoDMcS4R_K&0N}84oPGWs~|Mj*C_9w3&5)ZKL(Pm8bYF2ejHw z&`goBmAo3c^7D?hftC|r{+oE8bDmbh3NLN#hD~?1e(3u0Fo@MQ?7HA7v*?7^<5Irs zXIr1&p3SFytleHb{b=%$`7=($es1OOmNv=)2RIC+!A!^ON>(APlCQSR%U-0z+r`rB!Tt8L&i?`0*|8MD@ zZ9ltepDumu%3y8ye9?+U_g^f~JJCJq!Mja;H7AUuq8L5)Pf3Y+`!!2Q?uF7<0h3i) z>wPsb*-?VXcZ^DK1Ut4%#SD+q~-$zf%KgGJu$^J4Sf zNgP`{$!X5Fg&r*_>wifuVRe`N-)eII@a>W&*NJ?ar!yws%$UjB5I^n5w~k8(uk7+) zZDeBSZ+u8qr7CdxDx>yUPbKuk^L}!k{kP}N;n233x;mSx&i!5LE_2spVrJ$;&gGF3 z6H`|%Z{9e?^p$p%!n;;4Nyndy{9^W1XapJ6{yMLG{Q0&o44b)g7s-Zw;xd>S%(^q@ z`;+O*Y*<;DtbRAIcKf%^cz%bT?azQEMN#(KJ8fsa5-mRc`dR!+o+f^ti#wO@JCan{ zy)|~0h_1k+46XmGIp^J%a@c5D+p+Jq;);?TiiRNxjbX))RyioV{h0hC^K$Qm_viog z+D%LPzxKUR;JeJ0J@TqSCmx>eQCjFa;SFb#>jS?-4}|6&tPEs2=DuHj?IITAiG2H} z-xIx+k>kqmQd528QNn?hMY?S@jkD4h+wNUr`1;NL#pQ-}BASaisyQ33PB<@KF4J*w zaf$Drw@N`Siek%LA1LqJQki&O|CQb0AgAThK3fh%QHP1fc-`kcO7Bz3dxp!i%8E1u0?zWxMvDU0_L9FA>Zq=ZupcOqS z0!yU?&q(+G^S&*4{ldQJ14IR5SP_PfzP{%zk`*BxKfp1*kC zUU>xt$^Y+Neb4>p;>lVN&-#xmknzsLg=Y`_**jy_=ha#d-W#+QSvNm2+B0WL(xMBG zf_k6HZ?wKzdPvx7R+ROuB&ONI&(GN%cqN?C#dK(@<2`oy{}JX%)vws&o+RvQxTw66 z`PZr!8z#3ancm>OEmz)`a=Topg8k)#EfOsYlw|4)UTz4P{3F>@{gKJP2%*9&zKfzy zPN|d*`e8J2@ypIxFAICi8^Y7mKOPsoTz=KV*Z0M#m?@seruFp&+p@J^&{ea(62JTB z@gHd($4?k%)n$pD>Bw&=*?yxr?Vz6P8tqG8->Aq0e+pl}#ZvCj7k8!ks-JHEnW#5C z`0kd{qjRG^x{FU;y7H_hd+$>()l8!*4WV5QQ~2_ya!xf%cdZd@X;*sAwR+ucY4ueS zN9AjMOPjc|9Jbz1>S21KaknF>`$wC{zIUPNg8YfwUl;uI&fb>7Byq`k;`Jw$=DQqB zx9jbD_u6^lXv81tFD;l7M}D~Q`wikvL}O&eR}J^I>r3_L@`bs(ayy&*;cU^4&E%$wZ%U?kWuA{U{L1t=YlZw0$z;{t_s(s&ox!r?$!u$} zNnJlAPaOZjf9Q$Xdp3Cn)5%=BCVb7AlJL6gujA|O?{5D2AHB2O_!R5UH}MW?x3U|$ z?1TmL>ZO(`{d{;tK6cH=T`5yKEoU7%GykQSzTw_^&srxJewX>_%vI0y^=8sjVKyPn zt4Vz(D`zHs=D+fws^ewnIZ`ZuHe|Mgn>u*2zlP#OZGfUpt zt6Ay-TOLFQpV2=5^3#uGZ}(1F>nE`W*`E$^eFzHMwXSLIl%&if%Fa`bMR)u>S{877 z_2VsvE(aX35m9`fzE0;}!D6PX$}!V-C0L~H{+;w(Z1(BNH_nNr-`A_*p3rR+6_Ve- zedQLfIZV%G1=W^LV5`wM^dUZ=nOC&#*oChX9#p9*y^eRXF6>y-YrlnKo&UjtUjZ&x z_iy02`{TsRyukPAI~YE$ov^3!y&B7M-tS#oLawYb5`W_>AY$2ixA6|JlC# z|J%52t@#H|N2^KQlDs2(qy9&6jl^?jLD&1ULlVq4HHI#B`dOD?_qB41O|>ov2i%gFof)uxV|Ll5 zIh$5(`Fy%+QJCEP#P8peIykx?TTTDCTR}2FPyEcv%>C7tk`aqBXnC*XY1|<`7>UM?E2*xTE>6-l$BW~*XcBK?}iAEi?+&>ct5P= z^ZU+u%X`9VrcQ-*HItcN>OEY)I6d1S*gi0Pn$zKmZ4Cj;={qd0|F|r4k}J%I`xakE z`)19Xt*w_2{$~DuQb&^St_0uzhRTVOj;s89Cs?+vEnZr&f3tCRPCiSA{?-e*ytUb! z^VXc`Du|f3`r)6$Z)Tkfn)vPk=LwyZg*DE9HZILz3T@pvlYOGn!abaC8*jY{KXJ^) z@chd?7cYEI>N_ORFLogIN2z?u)>MJV^Q;S!Cp7=^3!ndw?=_L*hbFXJEQ8%|t&V8=1<-dE;p zcWw*bG^sU0A*SF>!;eE1M*DxTdAXm-Uj63l%jHX@vYO`fo!}CXGv{jysCu|@>a(vd z-E%hderx;@&MCLGq-l>Ds~tzn*|`PN9{d%2D9x>$9{s@G?9P4jn912SFV=9ZPhZTC z^(sna+c`z$OS7_h8u+6gy*He8&rEEV0QW^DEyjJ}E;rU23r+fVA&l9|?!q1CBEy%t zqO;{bNL`E)yC`5eRl7j=iipliE({17x(Rbu{*x=#4lB2p<4=b760Em zYyaW$Y27J(o{W(#I^VV)kWij0&hV`HPjBZ%&FxRNPb)lj!xwky3f9}cAAFd0soa|(d+^nKe~&VF1r)=H6qZi%cmsmZRdXumz-V3Cseru&5xwr zc`U88Y+92=c-7+D3u+`nSY@(I4({@N_iw7)RbM~La_^rvcP)GVqparS*9DQ;!DWq8 zmiY+I?U;HlLaXwtve22Y{ujQ!(NJJ{*kay&a-EZR^Y&Hksf~AbdiqQ+jsK%`{mo{Z ze481v9f!iWb>cprjj85P@V-)iF*(?+Il6t0LT^r+=y}Hd3ICt+`3h?0@t-xxR#iT9 zIBm&CAf}cHxrP1=X_mc~08v&t{bD488m0_s8Bz+6)J(H+eh=^2&XeU?^7euIAV8 zva(kn?=xTc?NZzF!_Un{QawWbB&WR5*LzdN>w4{XJn`Xoi)Ef3S7E}wxoTNbckP=x z)uz69>w;TMUusW>H3za>+t#S=u}bo>O1!qD_%#Awo0FC$Zx)weKC&&|wyAO)>JYxY$>U+IYGdyt{_TH1Db(Eesd&2XL(`n| z_S+H`++3)9w@1fkmi6z5pSgueC&eOp)=qrBJzaXH(0!J`hhiS$>yI{_Z?t!MckjoO zjAISw9qoSoZaY!c`}*?d{i-*Fl-OJtb2JV%C@E&Y*iv6U%S=Z2;+-Y;Zir2N>(p6@IJ227UZQGP1FE>Bf)Zv=?R7$^eQpipYmu;&m zu7!AgnlJu7>-sH&EA|$?k0w>{EW9w~fXB(R|AgJrmUFylsn3*<4EnzRjBrf-Gj8^2 z@BX$6F4AheF1qQ@u2aDV>9f8@9Dd(G??g*yO}6H`?@C&~wmR#D{#d?e9fQzg*2ibEW-gr>J9%bN zv?c#dJ>js8BOL(@w?YJ%FS+QLwnG%KjDaEZ7s*pE&>YX`Q(~dciH{_nzWZouk$y z=6FtG`}Y|}QJ=s6I1_xV#dKz+oXxTTP3wD8XYTc>#Z_;g z@O*#y?#WR;!G8jOPU-fX7A^OA?o!~anpH!$gYh5xBgaQ-1#c5HQu%U{PsBT~kr(sf`cuT%TKnOvM*X}!<^D(h?$QgKG2^!2 z>TitS-bE^HefvhmLo$3?y6;ruikwrYj9!`EPyZ;j!PT~I+SME4RoY?SLStTKtywdv z`J)~4gt@CXh?rjfH=ohbL7z!_{(^_GEym~n$A7Mgb=Ca009XNp1&HAVQbIv9ND zp5LwbgK*ywr4d=|} z$1bo=oXUDmqwQ zBdhbv#La3B7S2{SA9E-5S!G{7xZ>R^Ny#mu@h^(MYYR5jI7rP8`LXb~$Df0)QHM_* zI`Dha+RIFz!k_Kp^C?O7imOb%Gs`TXAZ%~=#`a5J!+lJ1&T1tIn@!-E6~1-h8O_Is zZ1_E1PKrPB-(k{VNOeF>TD|$T$HO5ta|TT@SEJ17C+l|?g=YAd}RBh?wKp< zR5c}Es2+Cdn3Q8}o%Hdm-BV%rhP5|0|Nr*sCiiCD#Ox2<7Zx=9UOxXH&xX<-{@$s^ zsl_7m>#8#A9<0k<8Fkl1<%{s5ij8klYvY{sgGBCaek83vH*!7mCdJhkUq%*9eSSWo zkE6n=a>cO-wK+{CM{ahceB@#fT%oIMxyCDJbD2xc=j@WO3+Aj>Cb%3)VY^@%ldRF( z>$Y`k=`YJ_+je=y0*=7=R^7$ivokK(J4O9@Bop7FE%)iDx7!?sBdeLWUp*4eY|^bb zsq{?!x$Z*QpdMCpI}Y{v^NwwIQ>j3mAOBAF#slNE2)Hi=I0bK@>h@{Dumo6+{>`VGZX9Ur0u zHJ>hV-u8k^d;JTaxwXpfJjdm^c66>+kKFb-vSX{USp1D^a~?mIYyaeB{dl&fT*`)P zpZP`2xmJ|NT0i!CCcSpvOo@s&OOHuMJUMilyU;`Of~?lL6Y7DrCYJ^HH|x)9yLmy_ zHb`{Sj7LYyOAP;CSe)Zy%`PbTZ}qbVzs39fHoG1;WuIX7wz72Yv+k1M{l{w5pVrQu z=FNUD^R8H2M(1CjKM$7*zm=cV5kFJ&-`cH@&Z@XZ3F^I_wzPeBE_Gfyt`NBXl;ILZwP&gg-XGciJUF-P=l9fA0A-#_i9-qur|f zZ?}uRUGqcC-8>>9yZbBDP~w@E=80cHWbRl1JysBfASW3mi-i zUQzwtI_Gm|L4mc>m%C~qleT2N>G1g8To_z_Ij38~cVTqpKVy$uN7l2x?{N4&nQ8X< znl!tA7bg9$x~vp!_4?$8RONpkCP`c8bZ@+y6}juP(~)`gyPf{B*lR zXYTDuw3+sCUBP~jjojB>RQ>+A)86=Btn-nk_QmQim);dLeDLtXHkauM6^4HWc;>&l zDt_?(@kIBOuDsQiUb&?mx-Jqs#J8qv{$_bFQ&#X_ZCJ<= z3-SH#N$xCl^CPUBRz(+F6RS8Lo%7$++R%StZi>&Omx@FS@+uZHK~#=dWxF zDx1Vi>=$5WV$6xKCxz=|7=O+AB39owf^6OqB){g2U=8i1> z38_c7-rD-?ba&)&N7*c=3!A^bJ-+ZynRn^5GoN-ZS{Bg68gp3Yt=NVyR*sq10;cW! z7Pg^4^uo`O>7|^9L@OMYnfmbgc9&;GW_4<%CEQna7QXo`fs=h^-S+vmcW<7Xch7a9 zYMYF~`h4!|vUh_+UjDVJZ`+_T_44L9iT_V7*>Znscq+|vub((EfcMLTH4MAN{>us+ zd~#pRr07z+CezWskMY_lh=}JubRmo zh_?N|F||kZ3S)%8wUq~}ET;X+Hvex?a6qng&12iT<8vg>*tWGr{X1J;#&_BDie%&G z-m@*7xz;ST)-o2GG_Qqi{dkJ|l|_I(r{3+bYYAsqZaZ0AF*{e{=5G1L&V&CD_hI%0 z-Zw4^@ZU~5US4&Dm8F?^iI|D~aTVwPn=8&9*`Oa$enU!ZmVK_3Ez7F7>P@jT0ykPS z$u3^EqJM^^{!Zh^`e)-;9hNcq5Fk@xAN;(kC0Ek-;F?~pS#qoQD5x!a+xz0QPTH0NUQuN(HFdg!lGu`Ur_aSa-#nZBOZ#l*>zxPfKmHYa=KYFG++R)7mhlGH(YfV8yY_|v{uT_D*oDh__NxMwC)=}mTP6aJLsES zerwrZ=DY4YV!31PoY^KP6wOjBo3OFf--t!NhUKmBRiPiXx2~k!_7$1*g^62z$wRiA zF8fzYF1Ni@ClWJ>MJUO7Q`q+BDST#{mYOP==gfi&Ox|~J{JOVop-ZprI`OxM6Bs}9 zYc`&y7>Xa=J3~n z2X9>Z`=(9nHp{xuBR%p{vNGv0%@aYM>37fV(Z1#XqTA)qr^5MDUo85u@ELdU#0Od`%2RdOMYq^l zwP`g7T}eLAcWq+Bl&PV4Ml2FF@lTR%U!S&DiEupGxNn7_r_7Q?i{dlicUe4{?tFS? zX0XZCO_q$W4wbd@a7bK#saCGq@j*@gSx-QNiKG4LSiyilr!HqO-aWCPD`DBgcU>();`V9L`$8`xKBVmY^tmg)S0ioXDh0JStL~{uNnEc9+_QS_in$*w z{W+aJDL%MypYi*G=fW}q_f1ka>#!~13%b)2wfhRMdenrXJC`NYZd`a|*!Fsp!|EIN zgS=I`Kdzm;)8xRed;6qT&Xl{}yZ69ybH8Jv?B35$sI5F9DWRgDQ{%n#^2-BrRv&$H z>eJI@JJ;M1U3eh7T>Pk~%Lk$RDjWOWFP`xAA$$8QW)0~;&LhDqbX*h~r-*Y(Z43!r zmEhtc@ZDlU&g2jc{kT?NM#X>Iq87Cs_L4Jg`5+!-%6U1$_QkqoIy#E$xe|VQF*NMe zR_bDY_LNEQ=t1SR8VZNK;tw=ur`_rmy%-{>_T}g1=f}^uUkln;uy}^V?)Q6UzxwFL zbY01~RKb06`tq5J;v1Wy-rkoueTBukqT$OLS+l8W&YSHkg@wQ67 z7s~^B3K`Bno0n(6@F959g2K%Yq<`$}Wm&B)JB>xtGyLE#ZKk|_=2N=ouf7clGBL7O z$+F(1om^=B`&qo+g^Q{EU!HvIp5Fg%#($lua*w4oKH04`|M2E!siel-N&Ye_$I3F* zvwrW?cB*=*ldL&?qFlsNk#vcYNi(+Rzu{XLaOFMM&Ep~6r5TSe>2q^jIQQ@Gk!y^y zqM!dvj|{Z36FQ#UyK-razwXu0rnlOM+6C?Ezr1<#b+fpC+;REvoCDt$3H7?a7Y<>$ zm6UytPsEmmJ-9~L^^V*@jfRNtJ5KpMlh@8&r+I$WrWIe-wl*wV&5<2wv^SAg*Sq<{ zm-haY6`q;%Z2nYON4rj2e#)>;oL^>({=-~;kF67oZ6geRDUkC_0aKB`?sru z<4yhsvx=#)Gu-9sLjvdM=w}JH<lOq~5e$Sz>l#taL2*DZ?Azo_#yW6W>xdhnWVEK>H}A%817 zQbVvZPyE!@xe+H%x+Ffc;@G9kzohTX?bcB7gE4%s@?QdIs67T=f^1b}}!pFIjaxUjE`kGg& zw6L<9=tk^ncQ*bjcg?J^HmU54&MAJae-m{MJ&S+2&TCSj;Kq;Xt4__E9o@Y1))D!V zUcReMRVVka^e$z4enw}PsFK^i&3iN9%%jT?Z%QFnTt6x8s?TIF+tzu77@-hsb$2x)y{VnJMqY%Jb>rH$Kr5_Dc?E z-4&hqWJ>$%i*2eEzZNm*bkzNR^KQ)r&J(lWb#Z*0yWYt7u^yxQ~Pw;QJnR#knYCxsUhPI!k-Rrg#gtJ_@q`T7Vf}l=PXy*JG8fSx9 zmVAm=vbiesRlvYwE6eTC-TD7I|&Y{UNnYCCRv7u@P) zu;J=wl-5-b+jvs3_w|PCqk-%Gz5lr6sGL}sjI?vN%b%zT9M5gvB(B@G$7)jhqa*8= zblY8S zt82rC=`5Nn)-%o8C9?MKPOZn2f8G%_JpAm2bL%si$`hLw8QnkB6u9oA@WdxeEB!v6 zomBIMTR~wTm&pW1^Q#XGi+rc8&2(RQ><06n(kk8;8985eJmLG!9CJl-V^&Q2&PlVk z&-l>nqVZ$5l9=Sq-9O{Ly%D+KF3!4Oq41vcNsH|RC8HTP_8BH^o-wP|bX+SthvkAn&$QRw4gGCkPz%d%60}#8Y}wwg1|C zn>Vf4ce^6zUhR&J8DeXfw4HS?zw(&Hd*3qE2^-=COlHpDPfu3u@l>6<`+%a8(y@+d zH(tC7G!N~$oEmm9_rXr-CRU!8EVlw}nwT~mShDWH)noT;Ud+$Rn)1%|q}Q)shAHtv zQ#jvu&bX)i*DpADSF*=8+sLp&$Af!=+BeAles+V+xr-^v_W$fheDWOb!e^YGurI%6 zqyAo2B1P1Crk_Y1SLn%m>5rndm>T^R?zH`o+VoXt&nl~k4GqV?zkGdtdBySdK2M&j z{F-(>{^_mBE0@iisFR$L$A3ViJKr_$rK_klXHEKoqGJ_5~e{4A#H!=Qs<0h?R`IuRL?!D$|3Rjw@NGwLiGh#4fR|ukgkx=3M(-#YxsGgk!w(ysbe5k>g3<#Dd-K{mp0ZlU3D-Qjl_O|skdq&^=+i}8 z!CBQcC!HcoR{hL1Z2F+LPxg{zAwzA~&3%u<`|LM8`9E>PJ)R!6JLmkI|4+RnH}M0< zKgPs~D#{Dj`MhD6af;`Kmez0ajPp{C+iRu&tB5OZ=6S-V@rfmLvQ|laMTq2i(}aK^ z1LoMihBbEajeq;z7rV&l-kEtjNBP2mldpRn%T|8e_9U-DeDlqc|L5keyE`w=XS=rT zZsWkImi6ynyy6r1e@Hy#(Ts&~3Pvsj!xv2hGuItB`EisjaHIceRy!?i@<{K}tif4Xz*F5o>K z(99sec(s;+8E?g3f$y6gRyNDJB>s>;@WIdd8}Gg_YXzfgb-zXSBzT@Ux4Cyq_j?hw z*o>aPZ=|Cqy}h28e{5adJ>kH^>Z`u*kz9~*G4S-0R+a7xi>1BA+B+6J&i9P;iaZ_? zqA*)-@9F3BI;`trpT83F$kOtQ4P9|R==L>r-zvq<886dNn?9so*eqdxQ-^6VdKK%Q>AB~6z*M7y+v1qb=dE4B@>bA7&A?-g%2i#_Q_;)hHu%}? z;#8V4;{>~cq03&If_k0KbGrKkCn+Ce;fc4_o9=Pv(QU<_$t^NJicddVBk(JGojcc; zx(Q#(8d*&CwPrgC&X_pyOz_i+f8F=*ee|6i^GQ1I*{oHDS#yq;pH}Mn9%`;^bz_s9 z`izZFiWzraoylDII?&qG-F(H(t@Sq?gtp#(HaE}LVgJV+D?Z#jqi~z$-G_^^KRzUT zO;yxg6{p0fiDj$6CaSMiaU2U;>21qqzT)AAhPSEf<~)nPbG0z+dclE(IWxFY znsfG<9sK3B?ziUa)gMoW7po_qm~%_K?rxl?^fmUp=#bu@sX3DhqSkgTSSG5(-E}P7 zLhCW(mYquNW(tpH?%yKIveo?U37agN9>Z-*_H?{&RBa1$zvFmpJGZk((Z+HF>_XY^WkNR;W#d-A`62(G`R$F}(+}{yl(ANR1#;S{wRmoUZB@FWMS=*^_23F z$$zuVFZ-HTdUBa?z0-4>bISidDz2Uw&CTh+EdKZ68bdRt%i^2%G4L6)p8aPlxcuLt z>x*Zk+Wxws6!ur7(zD}(z^@I*j&NRF{>^;-9=Bgb9*tA}-s9)k@%hjmjo%-8rzyVG zRk&r860$L3>yN|reO{bD=Y~gIN^U&^Ue)Fx6 z!_0S`Gb&E+Nx3{}Mygg!v2N=Og=)r^vMt$V!c&!0HJqNxnv2X6Eht`cXyR{e*_`)^ zl@lKA6>aQ%;jA5hw(4R|I(w+O{vPrF)RW&WaxXa^bs+(Jf9(R^VM}Awy z=8WF$CXTuK@-p>5&RZ5sGy1(+kbkeL=f|@(f*w1rT$#K7g7{m>#|@fS-@Ie<-rcuP z^3OiY%l!WHEdv6Y&Z<=W?cIE9&t#QqR>gqWH1p=)N>`RG{Hb17-^1c}UxCqd-Py)( zj8d)Jc_&@osrEaCk*V$Uj+oW1sXFmr7umZBUaI3-!!OUgKumpwde*9$^=u_l3f@gd zt=lF(KRSD|@co*W^_O~8oC?0XaM%=UE)@LJHYL_kRd0o2!2+?iw2$}s1y}y-NwlZ!GUe@e6Ur;uOl zVyovQ&T{X~Id*1UY134(^OHsSt^U1;FPXDtNi_S3{Xg}OY$?;7{lWNDe#cV3%enjg zB5q%5wYZf(!Jp|_{`1VN=zoe8%JpsK*Zw?b(N?{y^6dZQjIyBEv#u+C7prVsakwtU zV|gg2hfuj|MRkSkhU*2(#62g3+!THIuAN~cTTFtL*|u2DXZs32e~^)oOW@`E|MtWG zJLfkoe|Fb2zbvxngm;sfyvgRijeqyC_RkcbzR|fOmQyTWN2k=7TjvW~-SNoK9}QWL zW~*!ry=yavsXQ^^^3g+!R{oJyT3K-Sk+j;6r@gc5uRKqaUvH>WF>BSV!bh4XKTo;y z`SQ&rU%u^4x+J@5`fZk+ar#Kz^E(#}o+ zDPMwf!>3K)J0Wpdi2Z#R!^hA zx4;zWbJ?@cP~? zICD7qgvgm4@71{!_V|3+G`E(!YpZ5h{n^e`o`&dq`6)9yYTK;#SN_<1Kj*AV!{&`V zi>}_ku*tOah1mL2`==&mpIch?FR^Rx+Wk{=Uq_U>8<+mP9l7n>i=9`l=BLjr`SV9m zf>ZkarkmC5>54Hu4LZ9UWO6Mg991#rolQM~8S{-M| z;c17u*N1*|7jK>Duz1%~y{3TA1|IoG-s{~HO}xa{@a$v$GpGG57Z)cikkDThwkxlb ztNUQB;A!{6YP&z*_%0}Tw>jDLeSgCi{mWLjBbLhUYFxPYnRiH&_4?L=O)&yx_e&c+aA6!<R5TQx8}cz7kG2H0#pk&Yt}43f9fu zkJ$LHsXJZ^Ju-X#jpLgWPaZV0x!3Y(M(hOsufDB&&8&4o7*>jWPIK73-}2tavIM_V zKiQ47EGMxFI$gh&w9!ZJIhXkU*mDmB;v7pE)UE{^pjTiNL|D-JCD29{K&=cj9=}G+m8I z_k7Fyq9ar!w>T{)T1IO?|8r0~|J_ux%;y?ebd^JJH@DYRa-5K8(FL zMR&6FE%Yt@w{foGLgQB=OAqP4JC*fFXL9dSV53+8aW!iC@AwoNw;UD|Kq7Bh6_B05XA6+;3kIjo! z#)_;Bz6w{{?{595J7JGazmIO}$M&f)?=Km5+iy9eZm~+xweeN(!FLt@50VljORc5X z|MZQ`d-*L)tmA6S%}r~+iCx^)@}Fn_lG~2!Hwx^R&ohiQ4Kj;dbgEM-bBTn{hL6`m zE@wV=p1t_#A4e@y|1aVv`VAJUr|*6rK;bU)^cUK-AJfwJ$Yx|R!(10#mA1b zIE0*x>yB>x5-|PC4d>&1taiH|wXm3es8ZPwWmR)&Z->$Y>jb|N6%T<=e1dO1H8WP( z9NF%9rtUyl`uvEidaQoeVrDojz2YmKqON{d^r>#Q3dh!1K_0m@_YHfwPb}ilxfE)r ze7d1`P7>!cU!Nrf8?~K|Ka@QXn*8qV4`uJ?Jf~lU-Rbt*n)J#h`&DNrqs4xot&P4J z9R3^hE(NkAU2eZB+TnX#KBVYxSmumRzot#q^3>nm@sh7Iv0{1BLsnDms0Y_O^Lsd+ z?#u0)*u_8b$HLVdhwWObHpE>s2yj`JKF?n$>s+j0W$mIB?@e`rGd_ z&xTc#_SYpfPd<>pGedWu)!Nc)`frO2ky-NmniT@I(6^rA19~UMy`nYc}!I7Y|^hx zpDx2~+!z1V@>`g&J^m)0rJ%I%-P(y#u`g7@Pud1P{j-95*2g&yJ3hDRaXe^^&vG-K z>^es;@_%whb=T4O>9)H{-c*+T^^}wFS+%RvGJJu-yaO6PIW8tYwmWl4HYxQzEp~fztUgz z;?h=z&s?k}+b5*#oq3n7ivK`i{+jolUHd;=k`(zc_m-|>BcJ!|1AjIwHr(f#WTbiF z@mp<{C~jGMkJ+rNia7X++teeR4QGoOc?PZ)`*rn&SVu(3B9=Du>o%(|)D||&dEZu^^to%#KYpiEw7Trxm%7H2r5t5P8KJLW?+Dkwr|+&ufB((7 zXFf;2{mZpZ`<(?pZ@RL|$BxyXxA@l#XKAy@%5`m@`HeqZH%MLYeoM{W;(aGaP0H;@ z*9_+W+?*w=7jF5s&An?^WZ=>>e;dj)?sTlY#U;&pU-q`ok5{wRZ{B4uf83qo9lk;n0iip!lGzi^$OH%Y|r=Iz^$ifWpdJU(`>!}(SD zm-Q(Rf*h{~?w&mR09)g2-@kv~&V8%1K*rs(^iONstrnxl@yni_<~-8*$lzbm!?{{Y zb{)3D`>jk85)5x2YoBDU^h;`zn#Q^3^6sob?X}4w^i1I^Mpo z@Wh}0&(x(kpXtgbx5q3?DZR5G&}<*?rH!B2jJ(n+&v_T`H7LByu%#n=$3D%l4X4%a zzF=aVaIEB3JZr<$V_YXQKc9crGk4Ry<(=Jn-6B_K+X`;1=lR0xJhk@dUfHzMQ$F`^ z&=rzUoR=FXaQYeOU^ye5Yb!3s1uS`)$1ZSd<;A0aoNK&Yq{=4s-+nV|5`*l`r+?f( zT;!B%U1OdxQRGPTCwaXs^T^Ke0zqcu0#LQ-g)JBqT7q-UvW7q_r+Hy zDPqTlC$lu}a!b_PUVnIRxq}ejy~ghM$5I=%&UU!7ZnccOshXzH3{@pw2Zg<>+%N3f z(0cdIVyo*HGoO6FmUvrt=ZdoF-)bgihCJ@_0fP&*cWbH(N0-Gt8!l{n(c`$+B8pWv+4GC(i`X6hK7r*vOM0HzvA(%M{~R* z`*%*>*UD^qFlznE{#wo5y1%R^%s=uo-|x!rYY~PH{43P5{+YiqaN~;*Hx-u6Ynogm zySHI(fPv_S#oGfbvU4uUfB0VA?%VZu-?L8|cFp>C9%-vNN#D!;c;#o{#3>4M?uMMz zt0)uKl9uZJA^Q5~7M5eRVdbpWzJCsV{rdlmr`4;V5VP+tLCpu`3hd2VXXg}m<*=o2 zWN~ln32o!BU#OatdQLVzF(z#tAK!}l!!141{Xd--EV=yhv=ygYz5kIH@=uQZet2l@ zg9RrV{%y-%vqvTV#*3xfWmoU`AGPMTsf?CnyH(qE>C-X~uiuouuW&+VI%7WLm*c#k zlM;65xoAwiD!QO7G4zrCsae9dAEIY}J0E`JMdyS&$BGkw)|aRo-8si~X45(QDQix0 zYd$~ZvvT8)IDS~@uxoT@|K&D zpF1YBFFCjWUwG20WlJQOPPHGH=f216k};E!nTf*`EkFTkh;4JGad8O{~>|Lh|gSyJQMVpyz)~pNJ#1?s^WQ$%;7{_YP_dbeaX${+*!11v7r#;N>={d#CkN}T z>zMVo$lCeWq?EFC2d}ZU>s;SAo8gdPh|{O@=M!yv-!<e^({`6~ObURvMC z^(T1Rce@!yFR#l?_7*-c$@YTotNUeFT`#qVx^+)`w3b1AazU-@u8s>Kms}3;I<2t2 zAAkLOv%%EAU+e;&&EV+y)_B6p*!bRkk!dl^ki3a!+lGQs{zNSci$Ga z)ZBMe`P>~@@3oI!e|p<#BciS-r7C;=!8{LPM`87-?>`oMEkAbpp>^(|4ki6po=qpc z^yaH&PZaxj{I87CnP7(=4qt))MY_cf5uQ%M%LBIy{JM4R(x+7mS8b|l(Vb}5`8dWX z=Hy1hK2F=YZYM=PoH{n~czvX+9_ORQAqSqaI!K>rxse?PrG-Z_$zao*=q&cBP&gQ{M->J`uus6`D2#XdfQj% z`0K1b@3`}rr$M2kl}h^;eys(MOaCpNN-(yx@*;UFoH#R{)Kb*O>*0S=c(1BKn(T9R(bXr|?X8dA zX5GwnUHquQ*+*+UFBU%6Kr5g|D=j3qtLZWC>upComd!}h-u-C3 zp0!77tk9118#9=Xgso)!%=Y%?lE4O&by}PgAJ6mHQ<$~g|CRbT$&a>m%kNYjH+N`J zd@^~F)(f|d8%qCN_WvN(sljs0gy~*j=&WCrm+WLZi;@p3v(>)V&(3mKDzo9n+p=#w zi)1+*J2m%g)5v9UJ#QZ-^^WJknb|-48yHXL{gXG}*~mII_N@CE_7%&#zr2#YR2_OV zjeX%F*A<&N6+@Y~oNz2ZAX@w7+jrNQvkQxU$+~3xykGQ(@8+}0;BaHHj?MA~H=n7_Y^w;OP6I2gwBRe7u@oZJ+3&8f5$NP5p*V z0X5l27B@2*U8z_)NBXSb^7qk`XS6VP9-O}J3TIfpZ|(9cW+~3MKR#He_b|)vfM#*} z%3UV~8bY@9pOLxE&MJIi(dyat2K9%_zLwoOYp-G<<>DlGeOkql*ttKRG^$=UzpG-9 z{`P6>D&`w<|Nc+@Zg#p*CUVyUCw-wKJi9cE1w=drr$lJQIVfmsl2!?1S@~+)E3+Bt z%ajE}Qe49REa8aKeOEUxVOmVl!J{+Mmio>v-FLEf(#Ow_?I+Gu=a{7(xsud^vV zn>-l5pJAJMon>?J)MZVE+GZa&70%W_8Fx5y!htobOSsm|U@cgma=B#cssCNJOEOdM zoB8ZI`)p_3`ZxP$cx25|KaldKlSOX-$*4DHTFN~B^zgEMcJdGXv*g~qGiM4zXTP0U z@IKEWe!_tZtEYT5m$-HKslyZB)SCX!UJ0+Ja{aJleEBBS!?^8WUf9yilS<3_d zhSk_!u$_26Nm~2Y>@xe~q&kAEpI z6!V_?<%L?8kKpmpOs8piO;0aL{m9*!_*eFOnvk<+O>@ed_tB5u8h#Gw`?=`+b=MuI zH|@0anU#_E$5f0{-jC7h@3X6ge*{(ab8hP|h-q<+RQs(Xv_<-D=M|o5w#%*^oxknW zt36s>ub%7rxf#rltjTVxjQPt}a9h%8e(fD?M;^)hdVzCtuId$MSzdlLTTv_E^R� z&2fkKO`NmIm{n6?@*az%H2XW7em|>U+P>MR^7Sw@$Phwtp!)k zG@2d$7I*YMhtlywow>iG@;@j3Te&goQ`65CV!Mu6dCXe!be>05!5+s2Wpkw_dn~zd zi?{!9mcoQ6`J?U&-gc@mt@A(Mu5hdP<_w9iPW|;#q3<6>o4i@}yp+{Ti&JJn$J6?y zvdl~P&#jI5;k?7TI$=Y7@M}5t@}^kzvX3Sg9xa(+w_&46($eQYo_PzXEnK58gL7)s zsTuyOg!H?neK%@+X>>BP`%SOH?uQpIC8(QZ8t!)3!1YDpPKPipnn(bK8l!)2n7wUN=gw4vZrw>WY&p%!S4&o8g&FIy zv#2l#1m4^*VYv!Rr_GsdGuJ2|yzFIoGn3t$?{(~CBi1nFH}Pzl=gp>>;@8L5zd0{1B(ATgng3oUv*47UKg$AlNa_=|MUG6vAK13bEc^1gj6d99t+;izj?Oy z@52(zB40O%9$fJvWqP%ewp+{6ZN4iHI=@Lm z;`{2~jQ5xQi`#MOQS+WI?enS;DVkZ!*dFnE>qyK>SZU8JqpTTP(sZH7+dOtg(vfOY zjh}N4-SjY26;Pi0P;*bd_L<%^=NV$65^K(|XX>fxoX%pXcT5`>N+Wst}oJ`|tH({#7B*+)9-H%?QeAOI_<$-C6K`RrHk%2M0ER zgPRV1`_cZ<%sO(wfNCJ3go zJ)Uhnfv;$7{N9th8Sk;x_|`R!&hyKagI*PQ-f!#h(zRB)A$|Xx_KN03qIaTt zr`dQWojjm>w^Qfiu}wD=uS}a2@L1I6JfBZa`y_A9TbEq)_-6E{{OGow*!8%hQugP= z@cX-#=vFD2A5ZUjByP~@nRGT`()KT>HZzAV)uvfH0~`yudc-Rk8EYQ9l$7{a2;K`g_i@EB z)yj^deucWJS0(nc++P!=cE^6@YQd6|f$v0Tdg)J<-mppBwtl*Knt4Kb>Ae18k=rbW zOSa9m-&6bh`TY8Ort@d{m94HiWwoiM^^NW3pA#z|-R+rUJSl4bC7ZO~$%U`4ov*Ae z%(nW-mZDs|{`Bgwe$l7r6b;+{COp#)e_8WeXWxgZnR)+|QrY)RKkc6z9^%+s$Sywd z*2iz`vR->`JaNv@&3V1=lW#%8bfbsIw(RxzprW)@uSz&UY-Zqv^>3_G+4M5Slb%Lh zWsQBsc*%CNIE$EaK(BSR=Ka#=tJmL~`QLcsndRkHp1%T9-c+O%@3EI)k>Mi zrK>_WfBZDv({AgWCkF4L)ug^#|9oEkILvqUT6Y(@^rQV}@BKTy*V*5{cfw9C{au## z;>ss}JhrGtJ}r9Jom-9n_nOM)N~&-8`tQ-TR;}A>V^a=w{{L|4<=cy=TkP7FDTrmO zhUj$#>DgZq4i)&oBzNSP`_Hzm%37~}_!|gtY>>QNw&RW3Kf%;&p-T_mc9tlWc{6tH z%{qAg@tQ(*nVH^G+;_w-TcerOWNy9q8Siu1X$Rgk{%hL0@=a_qL)JRIRZ*1I?S4%u%=*tRvhQAv|nw< zddNMsX#ckpXG0!9F zO|C1&{Fks>ewuyV^{rn}HOqb0xjK)TYJ!<2&9a?n|76AYu#Y)=uUg+UtGmm$-DLt- zG1G3g7%Tlr#dGsC!+T!~-BhzIsX8ik|GTt2yOL4+jRU8beoo6;C!CXVQTy^)B@6Kb zlGCy#w#_f_S7B`Yb~`cJNIh$6&Ue0#)iuW~bP^^jE9fVf{r+@4?as{XcYU1cQ3ad} zmSsD=G6`Uv$d{t}`rhkZWu4#O2FCu)QTu+T>gtP~-`SOXJtkb{Q%+W4UuU3|8+w4X zd=|UmmU@xvR~|=uIGR_*>d4}zpt zgdLr4_EKQi(KX+;KjPPv)wgNi;ZTsiP=H|ip9-6E8`q`U&}*b8yPJ zvF`PXiM9eSJ+7^5U2;?~X5QT`K?hAE=X`NUQQz3UlV?eh`>(oR%CRY04{ynx4_hVm zhI!(|C+0qrqpz@BRyLMylayTE5T){Hc8x;NRGaUSi-P=D7w&t=k@WkKv}$GbO$}>D ze$6kP`I90#3w!fo9NiZ_lrQ0q4OF=0XH=tLWt1npL+9kh{p%WYCInvO$Ud2V$MLqo zjQwGg&s|hwKbYV2IaG^!8-;o;kCA zud9}}<QKmADTJ<-0&U-rtA!?WJJeEs~m zcFczpsi*fIJNDPvKK0L$SIiSNj|w^67WFR77TFmX_uKJ$S#FKCin?6X#A_@Qb)Vjt zTim--drC=U!kNM*o8Qbc<@$6$Qz%U7x5xi5sdvdY z3V#%wju*P2EX#WT`K}lN+g`7!p9E)Gz4+CvFY|uYu}SR=ik>yjOOg}jN4=h`y4R(u zGku-&`$3RHbW=~OD{>tsJRZNdIL&=9L*-pXj8DI|mcW)%b=Q<{?|v@jp~D<@`4z8E zu=uLPH6~^EcAqnU@WaS@uL8?5R}J4E+8y&>bvsu7e3#mr_iuNEY`tasj{RoWz8^M< zF-@FekkYNt&GYx<$6k?{;(V(&G45k8zIH`rL5u8HoxHYhrhSo&TWUJ)NK9Js!QYzE zH1zF`{_}39HXl5=ZARt^*<}e!>J&D~+bpvTRXOCw7^>lS_=lf+|C|FRFI(=;zy9-3 zjP^MWwi&WBguh;vxFB_>v`1gSBj)J#%mve59ov%?)&0;b`i%4=o(u1fRpsr}>6C3S zlaD>aEvD9&e|f^SpKP-)Nvp`7JhmXx^dryGeGmNK8|_Syw>@@#X@^H$$N|QVI@y2% zhknro>wOYDe{C?GZsqy$^VOFt%iGL*F8diwy)<)o*88;JpD~VHR(H5^OW*n{$Qs)( zl4#r;zDt48C+n=6#Ul9~{3<4aDhxmF>ul(>H)LL=@a#*V@B9Z7^Q8A#EsowHyy)vQ zj|0Dq|5;u)7M|)Xc5KpfmS1feEm?>A=DxY)biuI4T(O96R<|-+-2_3o$F3R%w$&xt z%|U_<{&}j5S+)Y6{ND=CzsY|f=20NiS;8LAx~Tf2eznrlgY(bwnd@cfwyDiOe2R~A znWGh>xtZOMb?vU94E&lZiE6)OOYI+YOYi^bxWwRqCih&=S38BO`#h5bVz@r31asN` z`@tL=WsnknVBXngzX`=D`Ee>Il}~SB&HuXNbFWyt!%MD+*G|hXs8lEzi#Euvo!i}3 zD?g|Gbo_DFm+ykoj_&XZ*u7Px)#C$)s=zRbb58lP52*pAi*?ge3Z54~ z7niN=nRZ-SuqvW!qk84yh2fTs@xqZpej&~w{mV5NKira-kx+7SyM3T*A@5=Sn9_N+ z&t}ZL&wDrJx2BVl;KKj2GL6G_c|Vp`2);aFzTT=#QKo}VZdH93Og7dW+3x%4X}(m= zD^DCsBa!Nw@9-gAdoao>V-^vF?`trK1<-A@!g8qeBj&h8)x|xtDMsP_lfJgdUiR=*W`pl!S*cP`=9&%zsUP-eUqu9K~RD% zd&A?R%&n;r4KWV;6BxxazF#?EeLtPgXM;RWk_dDO{tV`!mIC`*NQ>2j1LVv5IT$DHg#UCt?(Ch%HHv zVbf>~WtM$8f2N`6tQ)^Wn2eVuG&7ugHh0St6@$o{)MOu7H_D)(?xR`c7Pa?^Lrjb(G`n&EJ2AM?hAMZY*W z6kZ-`nDY66ifz+vssF~}Iv>h4|0T`8c3Q-MrzG{m?EGiKsdcY+YMqU_62GaK?+>e1 zZjP;$ns((hC2?-(Xw*LD5%7hGao zPB_nq_L^(XIYVFW#2*E<6`JaI4(wjhq-AEu`{#}N5~Y@Y+b8F*DE^-^%ZHEqs)_mj zGeS3XUEHJ3dlfgnzxm5RnKd)OOQ-1UEsLH1=j@zjwDJG{h4)sK*Z)22vt9h^6aN1j zcZ=T5QH;9v%XzJ1{tNzlFRto7N?6@t+mSz0Ks2}auiJsC=F^-ezlr&;xQ+L|hmGQE zGm~AppNnp(Y;fda3TZ5`Ipno9wCT(#bEV&I2VV49YTh_ycBlT^jL5l<#5e2{d}+qi zY?BlpJ2~)@XTw}Z{>{?HcTEoHC&azT-4T93eba2U2YS8@Quk#hdL3@s{r0K$zYEMo z#XnV|1C+a?=p>NiRS8OJCDsd{66cELt)wGDTlX4 zsmBKOcUI(IH7j1!nET2qM>x}@Z%@EGHQ9-;=h#nlW6lXN-ukD$?)q8v%jqnIU*D(C zeevyZwL(?Zh1{bd!b@5{dpo}BbRoyU{>HWU&#LZZUEtwz*?q?E#&ur(RP0rop`_emht{761P1 z)ce&n)aQ|N<37Qk263BNg|lu({_{$$nxfEWFRmngEZh5w@xhw^cgiQSH85^7*cUpf zx@L}f!3w4$3}5Ub_xZjSSH)iu_WYG){#S34(`9A zkjiuS(eoRpW$rpm{KRzs%SNgA7n?sX%GS%PJNZ?RUFOiCTavrZeB)6_*!|_+@%gS3 znI0bye>?VlBU8i3>}mYnrt6yVcZgyslAu znex+k>!cp*fd2N?-#;;PaHiCs|2BKi)$Kt6U3JQvO8?kh^H_d5y&zdJT5rb&!NzGG zn~bf>-bhcZc2{D0~D z_8lqw_6<3=vJU%k^=-;`$zxw9CMP4)B6{`5!Vgw!iSRl@&x z>3?FoXqR%UYJO~j*iohL54s9EqmF;P+jU~)hkn1M$>JN_)Hg(ax>COX*Q;}DgKhiQ z>3;6@Q2x*q(S4}z2=6+JISW`mEB<_XIE!uj>4R^}cu%YDe7ijDk=^dev-+wWDw8;! z=N|AlxxIO!bb?1>dqu*RueWsOvY$x4_qw`Gg4HP4*Y53)MLisBVH@*ST@rRSyJ`1# zo?Y?$&i9J0bR+E(nsH`k%8`~F)e45d0|)lJ^)*j^#ZbYZ&2m|QVO_az z+O=>6!wX+4<5(Il{xIuy;nF|TyXRo^tervzYYYVx@6FRpp1JeT+0f)~-#zxOE!!;3 z&|orc{?uR3S(bH0uK4=yo5Rx^lRTo9bCY+2U1KaW*V(kY4oZu)XUZ;6ztf=~#jnc|=(jfC z(nsh~C11n8wf>xI#6r@&1#G)|xYbu3 zC5iMydD${TB2tr&J#*>Ho8%!~kRy8Ee94?l<~uH72|a0#wo7!}VNid^^8A1%=biV` zf{)%mTY9lo&bZd=&%>uJQ<8Hxav9ow;yhvIw7@yyiNN~U>?J!)ymtgVe!BeBB_<*D zgma6G9hU8zJ@>=;Wu`7VEw)>>>vS!)N|TLA@Vpfx!O+S$|Mo0xhbMxk)*GImxBW=c z)}vQDj>#Q~wlCWi!NAxNUgOkPux<0rQxdxa%6#Gl>gOG;I&EG2Uh&=3Rc(5+Ot#40 zKfzJ6>UZ+ewBI(@kG8zywcRd#Uq-Ux*@mTMh2k$>2=A?XB+KR1)ps(e_tl=fN7GYX ze%O3@G%I`ZugtiosjoY79awj-TD~e}pY-R&D|bpUvrGMHOLbw^^Ymrh^3?0?o8PYU zpGR+N`+wp5;foVEmM~jNcE2!Xz8L=CJ!|Y$hUXFgl4MLTdxq3*-sr%6W~T1N_6yVV zeq3O=!&ClDyXV*EnVi2%XDZz_KEP;@_@G^H;d<`%U!H}{a=8CfT5=-4T?yZILjj(B zjn7MN&XZ(kcbP5l_|W+S%ZwLjdj;u>9Q<&hwo&i@inG2~x&kZ1db?^?ZK$;Tm(&YsuPdTg!Mwe*33(gSbC zpDG2OyxZkx^naL^v#DO|mi@EMFYSGA+pASHoqt)t@}%5Rr26nI0sD@r4=&W4HMWyV z`TJp+yKC4AuPrKyT{V1Do~Wsw*;?~yR)v2=hu^Ge(?49Y(>?#T$=ULQ=-rh%SC&M1 z->nz?I(w$9MdC-#L%Hj}mUo^OyS*e|RpPsRTwg~XOT^?2HFRZ_q!&H9t+>tZ@za-FYyQn$_x#D+1@l!8`gk6Hnjb9R zV13JHx+brvwUW(i&c}0u%ra`VADxg_e$B;j$iv%HH0~m+n!u#;{5V;528OLp!kmtk zH|C~GCzo$Ne!4%uv@!Oo@@JjLQ?36ki|6v+&aztZnYQ(g-#SGeFaE7@m;5dp6f3)| zAu?}*>+6r+m!>*r9gFprdaEJFovK~_fYWiY1$!&Uj5DkY~dx@sTqhuzG2^Fzz#u}s!+%>-IBh zCcC#RS<4`L`-j_!y9yC{$Lw@w396?ro%mE%xRH}b$lBqZB7B z9dCGI9=}ScCEX1!EtfWlV|%y4d35f`-ay*?8|ers?`s+D}DIO@Y;TB znkK))KOqRJ}33txQAM79IRcJQoFm0UCw7(*M zUC2$>Q0B_4ZFip;^IBeJ$^XKz=-%zzn!l@VKIU2%H(5lDH*|iC?6my-`SWc1@*AE! zww*3*>eU*PcX6#i;5YYw(_TD3_=j_a`lI_^E>rfVv{^QOQu=4D_UILVlNPtqk=bz* zBfkFp@i;$RFzP+ayXqG%e$9Voyq+(tGwn&meTR=${|b^Wy7*hK{>iYsc$W6!j&A$2 zvMPPEKL_}?@4D@E{g>m&OaH=76u>=(C_KXKDYDD%;? zn(IlY3#~;271lF7R8TW>e`vwK`K`%}!}+e08km=;259*4_+5U(wTEl*r^eb%o$qen ztbZ4!{H6GD@ox2B>$K%+!=LmEJYQ|Vpi~(id*bn*{`Yya;~&N=Pg{Rg^R(VW={Nh9 zU&**Ub8V_8%d47+;#IS5#|h7>yixinz<*;+^WKD%gacmtt!n%$pLfM4t=*eq$}IBr zcl$ogIXksymfhBI{&QB3AE9~^kIKh!iBzors_@iB=*Zf0rgx7vr~OP< zPdonX^NWs8`L3(l(!&}#Zk&3|uYHtVU$OLY;Dyh8QzxAL$T9cq<6Vo+={dZ0xL@s` zq1ae1bs;!ju#zD&NGx}j!q@pXUv{Rf-zU0Kc*i`xLu^;YAI3jouTV;4;?MT{wLju# zHIw&};=7sr#pln9ueSF{IL)BhFM4Q(mC4^zVyn(=OuIhyZ{8%idk0=N#j@>6(DB^% zt+$@XbZyxS?yjwKPcQu;RV{nB|3s*>nkb8Do$jp~zFO8BwgG*SHaZy=PPN6J_Q{T^ z`*~kEghpE2vn^UFIHjaY58&&szzveguQO+LGcGWE_i9 z^!v#sJ=uOvzc;--bR?g%XJYj40}{(Gv8sz^H2Cglc)33HqOZ_OJ-KYJ=YpwiwU}wPeRZnK!SrYY7{B@{j`B{lH%QWRsf9)lw!j5jy{`e#F z!3RYab_Mknx0ateHK&wyp?a8p{3VP3`pmrlqICt+{Qo`Pef!z<4{rWJ&tqS1Irr8=?`h!XwO6<= zK3JmUerDP4=S%W+NwIc+hw2Bb`I%3aRPUcH`ypqSoAD-ZFthsY`XfB;Jc<6#qReNE~_R# zPprRVW@Hp}RCOQcrNa6}8cXAK>}RYnKKNTp_C?l|*H(6?-b7Da@q|HK`jekymEpe+ zmketW)~H;MoiXNsUle4#$`P|?-tsdCpXFV?Ni-5rX}Bwt^d>6Bfh+L#TT_~p*7P_*qol! zxpmt*yMH&Bi{^+_WUolI-p0-0xbfgF*X>We*Ze!eC*`Zybk3;W-Ls3cZTg=V8=GF-jZXON{nTZD=(JDgUQJ$|GvA&k zUf};+!I|=Y)@$_Vl}&!y{v(oQ;;V;8%B`qZ0rYs#TV^xn%@ zK7CW#uifY2l5F|2V@6==ozlSTQcZe~tFn?K<~iK>5IxbwX-UqBg{xOM3!ZfP?zy$e zR8n06j>?t-ruPA)(E053bGgo88w=J6f!AD3_JFX&OTICKAPp^rg zk9Gub<{eOSWp>Tdb;&ecxUy&U+Qz#!jzwSog)8YhuU{W+n)tDrcZSq`t(PiQmdk!| zDXvM1uRnW0>HF%vepgTPfBx}O!g!O!E^B_aqenG$INRGcs0(ofNkp@KQu@ill)T4! z1G|~^PDJ~?iJ$lMy>mG8Ln&^5 z%VeE@6-mpMG^=H8mSb zY<{!leZBeim;M$NZ;s5abUMks|JW^uc{@1INGR;QcYNCkE?Z?go%>LOp^)5lsq$M5Hzh9rl5XqVX!v=z)5qPjWeQfr^(;oJoBdVDBliU)fY0xZhRfyIk$vPWZekZZy^2k*CD;ag+C`> zsO7p)@Xtc4BxUWM3#&|@^BmZjzU$`Md2`dJhfZH9wJqlI%>OYV_J`N|pUvMcX?5&D zcX`hKfNOCrQyc=`N;O7ln6VVE-|#nak*fTQ2mjW3`&k}R>DK!sKSMf)^OxApoj<-$ zyCu1~ZiPp-)ypic1w22RF56tVRs8bJ$4}EGOLqnT56aj6=P1wjq1fsVMfn2|NNYHU_+xoXYF~dp6|wH zn~rZO-n+Xig!9)4!2pl&`X_4+Tc3zdEql17f$yHT)c3y<=2|(nS-hqnr+GDq8gDi{ zuu8@Epy`^4Gm>QP*sQyI@c@oArK|qm{XN{SjP16D_z08Mf#np zJ>O@i?JB&?@atx!?rm|odLfrn{o-L;mHth*r0MgahP#NlcDAPAZ1swqje;|09B8b( zf8&8^u?OqCtH0k&V|9GkbuZg}?z978FR#=-?hv20e^J3U_3uI7cBsS(KI+R@)zq-+ znOTGC;>b9?`rKo(-#U%>WpWN>y1R2fI2U9yq2$cobv8G*w4Qibp3E!dw!-3tw5QOM zgQ;19Pm;H*E#2m1b%k$TX3a~9n_(VSPp=kW29mnZA&n9$REepx{NpJ!JMt6pStrnvA4WOzru z_F2l*qV+gi=+1wyl$RAz7i%xAw4ax~#N-6S=4pz2D+2f`?uc95J-M%mtwcrd;Ca;z z)eq8+GpTvBr1kh2>?oOG6MD8aawU_E&gx#)nxvF-e%B_xo1mJ`^2}}h=jQSp(|r+j zJ_*|^=4M|t`Io^wUHVY1W=-qQzR6k5-hThKK0c>Y^E~O4dG3QxkM95cFm=D!YPL@c z{>ZJ&-js6SrES7tQo(FYuddAVYMI9V=->?N zEr)6xw)iG`b9piiv`rhz)vj-v)naQK5*B{{0KW%zTt9f(y_vgm~UR9lw5M1^*y7$RujmB0bO>=kE z*=L)Twf5;=(mb$vp|o~n^19XKX3=b47-C-CJR5i8%Fa zmVG(ruL<+deK%4>*murWK6U=)vul60M{G87k(#nFQtD-hjcQ9kfnBt1sP$>jEh#;& zmjZtt`X*rYWX*< z??NAc?74bYGUuM`f33?38=9lO&r3Mk`|Ai>+@l9;8^f3FJS8pjzi{bh+ZV+LeiV9H z3WRVUY=79kp=fFZ+jf~$&Now{A3T)GtF8N^y@BKV|9iXm)RMLz$thd4?IC|?Ckx-l z=gutu@1M$f&|JE%YeoJdZedAoHUsAg!mF|p+;(qa3gQfNv#PotD9CYp?MmZ!PP6S5 zY?K^dhNLk5*q0TqI{7ibo~-`;{Hijwq^|td5~n>ImIxf#`*PE2P62796ZbbcE#~yi zaBg}!Ayzxaa?Le|tIHTdIu`shU#b+9SfzhPX2$=Ey-#QH%;51Z%lLNr?4Aq32W}tA zPm6XpX^(dBX8ToK!hIzFu#$ev+8I`D(e{$^-!6!%lzqHhZ~sVo<4?8Ian*(C;+yZ* zKc6L|Ja;1F+QQTBF4jiqvJ(AgRob=$-zxl{aQ(vWBX4w%8GTepG%dNbp#Qz9OCGb_ zj`{1nGTI|z9~Noz$Fg5LV(z4~Izo9(L`;;ii_*H|t6v+2PmVHPyYQz4H|zA240qdt zD~o3vJ=aM3ZaZDK_?Pv$w@)eq1h4$R(cQB_s3BQ!pV{pt%`aPpr!ab4`XlxHb>9g# z2h-BqpRe4mUBEbL#e)*}CyYOOY#(gTjbcxgNjnlPbKl`)>V8dMhhRpL6egX;!b@b| zO7B|KJMDnQ$+h!CeBbR>(tGrpb=F4J@H(EnOunqOeSRLI&$AXCPn)Q7|LC6d1dDXl zJI@a!F$K*`Xlh;U)wS!4xS+Vjruh4}n`ORN{tGjF$!)^MV6u!$eA(%)Rdb%@itm?y z*XI%XL3wiyyOr8+k(xP-0S5aNFI9eGi+XqLhgcv--@NveFq>I&x8{dW^pp+_jhSTf zPx!>5>h3$2xEXKA+}^}cDZcmrGc~f?U;=b|?qw7L+uk7&M&Ic>MV7`wkrrckNfzbJCXw z?}%~uHu*=Q?(=DPwK>b$Bd#2!pT;+sX;& zKKTdy$yD07&FuU{<*KFH)g^wvlhZSbJ2($}SL8tN+vb0Ws7NKK(gd)2IanO9`}HWV0LV=_2(%e;8P2gB}5Y6dA1!R?EW%a<(h z;nmCuV>*=j;yZJzz^M>#V}{Gijw)mopAb}@*kq}6HIMC6-t(+RrSrN0Nw>~v|C(Dj z>23|{KgGtc%mwe}eRY|f6uPN`uTxIX{5Wyh@|1&& zYo0DFSJf^0zDRY3=9rM_%>Zql6gH-s`ZYr zH#ZZ{9^ZN^v7wDur8uO>tnkUF2}|4)nbYs=c$A3Cd1 z6Em+SNM6nTP5CqVvt2W+9cQ2C-uqNNsb|te*R)ncV2-n)3P&(A)+ zY!dVS>Dqr36|xPlsw6z9Rct)EYn#z)u1P07!oDT_^yUs1x*@A@mq#;dhw%ahrn<;N}9(Y>n5GvgXgoJ)LHm{`PK?>Wq00wKzUXHC)qRY-&iIaa%_5 zertK`1b_2wg~CgAE|AFP4n4xZ%w^9nv)x8ICN^iBo^sl}6`G+mcfa zCmVjjdZT1e%H-V7EWEqQT?#C({Jy4Z_+Q?2w`kB2wHsHQRg@baDNfiCsUW63?dr{c zK6|;J^GG*keYQ&4$iJ+g(bQvpROQs-OQq#jmc5JLu)a&}dZ+!5?ZR5q--`bxcW)?L zu>EoCiP%QX1)|%2y>75g{CD(NQ%G&C>gz zyv^ZLew=Oc7t11*>j7W4nB8NU6FRZ+^^DNmsSBF4onFMwyH#%2binVDoR8p_e-YcI zIM>d$$ril%JVhko;u+tt>7FjD-*p6hm+w%%dgoz!*ZJm_zf+aE?#^E5b>c+wY99wT z(fdMztNN4*OUkUJY^Qbe$M5FroLn>Mj(%Lj(Gz+9KEM2&wdj8f$0wHGaYr`GTRN=R zcZ=Ea&)wV2GpjjvC|!E2Rxk5XqJi0HzR9+m$LCJ%-FU0TY%+^DYvd~#P94k5mw)&O zoYy>fL(ulZjeb?u_jd(1KD@vBShM$aDgWyStgO?PK3sNY#;Rk-8hws4?65Cpoug}S zapU4)o!@*{uAX|i_-~kRzGKh#ySe{7n^Y&BlYhgfRowOA%$(!>JT5ug`TLG76l8sL zQ_L#5u4!9l?&U_!Ijc(U+(~56-+rw2`WeyKwAuE#GjB&O?|Ssxu;)< zZazA*)MS2r%IqSgn$SP$)BU#AKRC(wVEeBpUv&3v{~-T+-ivM`ejW1oyU0r(DZwRkgr=K-Bx~^vW@)s@QA0M`_D9}GJ&*@>bhWwUk3$7du|AZn&cJ=c`~T>m}_tz(OcIoUM#;eMOXNpC(*cd>do?{jME=8G3rp5r|} zYemE}u9HlUrGMPi621H7gu%2QNwT6rlTY{RwkUmAu}t>K!UbFGOBjEwXxguS(1%~k z{_&b1^Vj=iO&WQbFGy}v+{maDvS~~1KM@Us6OSKOh6@F`wgwaxMcj1Go|*eDHhs(S z{+`vHq6-gglJ$CiPAjX`^J9>w`s4KZMXY+~`2}q>>{izL{4dati+laKledb;j)U=V zew^%kg99F-M;tE|@g%D!GiFMasQo?P+m*#K(~d9o$I~|JYdIkXy&QGUP3}|tJ_?sf zS$wKKazZ5|d6)JjR-5IlZs~6}-mx%DTlV<2qU_C}*>PU?F6>rPXE^(7iU*99UqPc1INjLJD4r-n%GSp_y?0tWWXSuc(NAi@tj1NLSTW^1euHCJq?f5|3Twgq4)|u34JA^0A(wJMi-g#ldYc1hB3*U8}VPQ9W zrJ;Vct-3;5LgK#0#~{<$*_&4AhfJ4Ctq*@9vtZTMU$)D$7ceIu6?w5&peXoeuy9Q7 z^t(AJf80&0R^QHIu6C5@U3R1IlIG7vk9H`EXm9M`-Bfn>2Fo|k=P3nUpI=Ai7wK*I zr*_E0aaKuqioC#_lg`_3aY+bHn7Qoc$!)uTx@_IG{epFXuSUu0;IMV?y4JA1{#{Y4 ze`6Zwp6BoWy_1f7WU(Wu=fUE~R|C>7C%$W*m*vvyQn8_ViofmS@Q2&o1kN>m&3G+u zs`yXk^vpB&M42x*&sM*iKji~&>0R+9*(;m2Cp|vC$C*_y?f0sjUn^>B&jkKsm5O8w z<6D2>eMZ)wR%wl%Pr4`8%|4y;Rc}hm4Qb;yiq*e<{WN@+aJ!7})x9pqglDS1e5EaT zy3QKeE`0eR?B={2qujTyQ5)C#WXAky6=ZCGcxXiick$NMCrj5H3f1kje_E6-x_tX3 zw|=GdoUGfvsqGXhiOySn!SSfM@0qUli)FWN3ON@~w5T*}QMAgX$zKlbxp47# zyu`%WPbO%IJil_k=~wk(|$zqWVEG|ijmD<$mu^}qaBzSe#Hm!zL7FS5>YNIkxF zr;D+6<#&cjT#JmQ+-kBzdDedR2#6G1>G7gXeu7@Y9<4iJGd3(|lsbG&*3IEn!kwZ( z6%DP97`1IHF058cV3u>r+fls!%t!Z*V+ZHEm=&|+6FC{=aFBgLOg)d2apMV5a?^ z^?NLn;h&vV{Q2xMt-&sZs-CHxHtOuFuQ!%B%-*eZ@??YHme|_Qp_^y_T@kupS>sG@ z;;kiyj^`hks!Jq3jhbh6Q}xptn?Tpyn{F=V*DG4{;X$_GtzTDmbC((XFI4+4W!$H< z`E))X*Zk*Of1L?glbf5VH7omWhtgf|3-(;4OZS(a?!Q^N_Mj~DO5u;&BIGpAXqPzD z+uy?q1uJWj1ruu7e^QHZJAd z=V~W$AY|V2XJ!HGf0xf*`SjTSPFtxL8#!K@FuE$JY&o$_@b<*Lj(rNJ|2XZve`2{n zP00EZ=XGH&Vas$ZmaJLZxy&)C1k3c(e#~3A`G(@VrI)_VU}4%^P_ssc`|sr^ zUvFJ~BWa&E>u}JMla*p&yKnNwuWh*#pg3zMo7Tdn9DC6(F&wNZ|CVHndKz$E`Z#0T zZlyxifG0mJAJ~-t&vVUO^h14($BWC_296T-e$)3~b@8d`Uh?^yufMB)OkUN*napSZ zC>N~|xM}5F+tRdQE&K6$j*XK%3hW;{P2X>%W&i7e((m((g}PC91U9^GlKsd#q3>|` zu9s&fFiuRG-4OTY9YeH#{hgmhX;+(Uc(|I91f=c@eSCF!vdx-?53}}u@iG0` zv?IQ;T6do(^C6}e;SCnH3l8$7*gs%UyuZ3}Vfmd#VV>OU4nKPr6dTwctkf>L;joG0 z+Ju=!iU0RAJliFIwc_W=v>!Q_9_(S8yZeV;^paVYkq?({_qyNcJIz$~6}Pau-|Q?o z*JCpmA24BgucEo6^NLX;+b^f8Iz{yu^Cp(f{deWTQNk$BE;>z_Pi47;|APb6xi%2UyaKb}s#yYqVTF^1>fv7$@L zQkz13au>eOJ0m|q`N*Nq7Yr6D?mtqWXvDqw{g)q2m99H#4_B3a_>!z}ykRT*A%P#Z zq5|2Emwzx9*7?U!|JnZ6nZ>Kt{kOK?d?Km&$)xm#>gtXIXIrX$Q`T|j7TmU9s(9(6 zpj1(cZMm28lF!NuEEfeB`zEjSSpJFG_=uA=&++>o59dtuc-me%>&}+8js<0F4Vg`R zTsLvpTSOjp@<=vp=wG$!!m1_S z?tE(&6ih7bxe_wh-+f<={}VaMM<;%=0GD>&>1OQBxP#)%dF@R3>k=+k2t!xEG_x#)O0NZ$$Q- zQS(TMeeD!klh<_D_`!kCowlC4el!_sx;waQrZ75dg>(^%lksJ9(-7w*(<1cz+-3s!bg>H z2c~NMyD{nh(zG>~vP356UCApukRTPRP^+XNHz_2zDO2*pfu*5FoV#YaHEIZQiHhF( zleIaywdTzHWwNnOdUxl$y~^ckS24=nQ#NJNIsZfP8C4$@Id<*)v-QmJkJY>1ciKq% z&$+^2vT}xkQU2~u%XeR8Ca(I(J29p#<3!B%IX{>7dFRahxGP5B^3`24o%x);X4r0Q ziqE)h^{~@s?xI7trmNmyVa}9PnqmI?Ywqz>*7dU&JltVYzb-h1>wTw)wEK+*l1rQ&W<{Qf)ay&xCD!?31vk zq{Zghv#v9%tQ@%d@~+(QtKlp^75P-7IX7p)ir=^XT)gw(PyTXGiTlEp>V2o)ob68k zziYDW^VIKo$7lSG>D@ei`OKdac|)@@lp>#-Ejt!>dk@pi1Gjg{-p|vUy=d0EL+zTq z9l3kn&3}FN|GoE>vA@5xeCkrzefxc&&3SLfjYn#Fw;t<7>;M>km9Sp#A?>!~arq>zg;OoQr0%nAfZQ%O(Aw zrrjLNO`lrR)LyZDYL}RNqqq6IN9oCeb>=?Ge=2gT9OI^1wUmX;OyxYa^RRwhV%ntY zHR&Au^IzOI325@w?tV4leG^m9)gxRoE)Q8YZtPw6Ue#lXFt(GxYAN5yH?M_)}c28B2e@24gk_*ZI_gWS_;x}ig(wesa0Au<^ zds~&2`QMdz*R9R{^FFME+0~3~^#wj({u$1@&oE>N-EUxY5!$yh*X{0{-JiQH)2&3O zY;j{`1#JlV zUAOr5HI}KoVu3oB?f>(f4ZJzI`SIn&KW>Mlv~#4$oDUDv*e9su-C`e`8=Jm=?W#x1 zZR+&=R5~p_^xokR*_3PbQFp?h?}|aakrRLXc--~fBSnu%ZK0*$zen4T$j84~y!DLd zX5TZ9`6IdP_SsH)tybN&r*$58@eDPoxIGsSzEkdJl+C`IYPMD}<rhSQ6@Wf;OpM)5>R;I5Dwrhc#$)cPY^A~5x`d*7t4Nt4XyZ(NWu*I9M>k59XA|2g<$Strk=6Kf3= zvzD9_{8=&Yn%uwC_Ow4vjD7RD4YsIEcGz;c>F4ayYx3-s`x_^e^IJs-M*1H9R_x!V z#Qvh)SM|i9jZ=@Zc)jg+D)%Pd8dD zR=UKeFUzq0?dyYb&w30l|JGSDgT=GnpGCtuTc}@OmM8kWc2#-Um)5u5n~x^#aM+Vp z$9u;_BfnZLQJn~1Id3AMHiRzM?ORM<;PpB_h@j)86TC}zH3yXxm zOIVTfVaqFx+<)hZtqNIqygz^b3zVlyj(g`b zOPu$KH9kx%pBI1mt;qIS>s|kR?-n>^q<2Lr(e_og;G4fXIe*;eY@c_Q`|G{=`}V%( zepz#%_GsDMN390?_D;&bf4uPjysU_gLThDsy25pMw|&SKynB|HkW6;8V|Qbd$DK z=RCP_;M2<1Y{RXSKD_4sdFs-~B{~hPfr4x~F=tnK@>#O~wz0NlmFxQTdDCVCrU@0w zJ0u#mcewq@zxye;>FD&`?-kV@$|J8P&-FEUzvuk=X3`h=}T6_Q(=*gxJ~B2{kkc+1i%{}~B)mrib6_9yMLYT766V&PVM z`FZn>nLjLk&Qe%r7UEyQK5^c*)>|&mmvTtT8)@znEjk~V=Gj(maC=GYZ02Q#&v!XS zXkMr)f7h(c>3mUoE?aw>w5fH0wa?3jS-SR0su}{a z*AM)ecPy}rqcqA}<`#GL%kmS81KuVqcjNVtdX}_q`6`!Zb^G=>81~lR&Wvg*&$arM z*|buuIN;kh2c@h!Bjc+*rIwx-=ltB-<0Q7Wu~>7a<)uoG=@xAqc4xjZI!e};yj)>a zxG22iq|~BK8}IJDQr5b)nkBFGkl97!{qfxbPcEMgJF9itW9|*Tmk!lSk9Rn5ojv3i zT^z9IbZ_O-eCBVmUp~GS?%#FK?fK4IRe63JU%Ys--nHb@O8&#ru50H+7qj-}`^-sj zJAIok{(x@NG)8xan)fP)rXO^=x*)$L?C`2}vB{iTw!_0+LMPM%5U8q+fv zf|AZ8?n{@d3fiW|@JZ`qadgbF?fPbJUuPxW*E-R&o8j8m;I_@ZYu#I)Y0cvbI`m^N zr(EP4navz`!Xc;_GMj zi6vfEXXvit<`fZ5Kdb%1fA{h7hUz^Pp$QAcJC<1IaLrn^-qq)8=d4BFLhmkLUX(3! zf71B_mI7axZlC$i#Qa_LPRpX(O3ce$qi5CJdg|$9BWU+`jmhuDPi0aYrH#yMl@3vL39y1HhcNlyU z77{DJdVN8x-9EvjM`xI8W*pNrQ2uSLZE}3O`<`bO2TNzysLbmBA?A@+S?hM8p`}>y zXNrUOJLkwX0nmNP@8ssKU@0#a zwD@=Zui5;UIoJNUZ{rWS__20Vht&V||Nj^t*w>(NcuxP3C`&D^WLMFul&mkm6`WK9#dzL_~U z{rIXsng^M?br#=sI(j~>V@Cq}-_4g^nu^w(X5os7@7|GcAwa9K@AMsOhOLq@C+Eto z*m&~O)%{kscTe)2`SDDq^6L*zCTG?2KWukBI$~NaIO(^Qy4L55TO$gAa{m(PI zJ3;D>;iIae1?SDHKfkirXR0I^yK@DXj=}8Esz6nX6|PsZ|1Z#*+@q^r6xkzmXzGN8 z#=pC>j*CyulDaQuc&xTP<@JN9o5J0fuTSo;iEmjh^jdHaPzKh*ADDzu)G+5 z_P0{dSKrIY^IiELM#P-^tW>w_>AsF|*JugO3f(pjyKf=aEw4sD>eu{v;`qbO--2fK zZe@$HZQeiQw&*RZRYKLwYtC|BYX9!~;8o()N?pgSwn8S>i;v&`Rx0^g+SNL#<^}(e zhx~KJ!c3F4`zqWojdxj3*D11 zdc=FZpTGRE?S3lu+ul~YS~0!-Z4|O~drU0z+}9uVmw$J?qp{rM%nkb>MsBG&^Bfc} zy_v4;#&EP;T&cxm_td{HPFLK___?r=ZGUuRjWFA+z0cNN+7)`Nv_v;SC1ZwO$w~{0F+Jxnj%%u|DW;aZ#n6gug{sdTLTmSg}?99Kz zsalF_e=CK2`uX(b{QmMy&(-1r`}f~J=~rUg=CWw#8=aE9%pxc2Ul)D8s>vYm-F1nI z$nuUPU5{0271k>I|E-$d<5RM#L*RtG;ERvXu5SL}+!fiSz2e)xDzWgS!uf)e!R*|ZDU^G{YT|ft>EkL zYZ@2wuip4^Uj1M3wcUH>{B!^FkbTPMWm9)5|M8A9Gx-0}UGBn(!xQ(fzxw-oR^l{; zeXE5ZR1Zk4)(?tv}7zU6becV_TPeS!cv<=et`MSpB_| zvr);e>+!yh)zw*IR=>r6%)i_me)FMg)3!ywm1O$j^+OLuO8=jxkaS>P{Hmg~rY-yH z?$4ZH{Eu7r(cXEhH@*rww}mHa-Rn85G0!jDzv1*q=iiS>>eZIlR<-OQM0=iDzcUt?>b`SEjCS?pO4# z3=NohSIG3?)aiBHaqB0&-v5E^(E7uR-leIBOR&DHDwELGxmuFu{zGMQYQmnB4;zB# zeA;BW>gGwkDUkerhVPz|zHS%Pl(=u8VKd`bAIwof0}hg4OJh z+Tn8c=mTCg7b5SSX?otOZn(eozthUl*(rzko%npNXDv4`p7D*r+UwQV50m?+mb~a| z*;u|gyy_0)n}!Ro7#}ngso&YkJ%dH~@U|({(Q^gDR2$p>H}0-E+`fHR#tF{p)1Ob7 zoi=Z)%N*(Nt}P3e+P*GK+}(C!*?mFIH`33f#ikurt6>c?481R&*p`3Cuf57+<00iv zhiNUZo_=>-^Kka0!v33|!h^V7_o?2{d-g85%=D@3o7+xGr#&JTbQOn|8S`jrov9Q4 z$eec})7?%cZXL^aH^D<4t!l1a^-CW=RlEH-TCw|vk*=hX*rVOXg$$Q3eAj4up?cz9 zr^9h!-zy>qq#Cnb*8gBrJm_*+ZS~DvLBcxmt1d2Gky0O1nmYS#%*>9;wX&=aU0l^a z?bKf+vNp|QhRU+-lYf4ziQDPuJJHq7^N@R0yo=VZm4~#RnV$S}Ph7COJ+^*RLcaOq zEH5DwUL)hR+xib5JTAX|^U0B&46jG;NXBWSe<; znp1S&J~dI9+airKi)a0la`Vf$|6Tg5!Xrt(z_`OF`Bm~Frsm$c5u(I{aW?xGeRb*ViaM1Y*Dq8%c6i)4)~BU7 zM|Pd6VKy%d$GlU1qPiSDS8ksB^}Vq8wwjZZ+xCPt?1GxsHaVXTF5Sh-=YM|d$0`f0 z0I8=BIU!ymDoSDH{ zF5rB9jm?(2_9tyz$@P;$Pev~ij-Q$BZTQ~th>BQ;?7q2i4`g2Mv-kcG=iPWd)BMy- zn@gXPR6qPrS}xW9uFY)o+O%V$VbiXDQ9RMR=emP&(za}7(ep2!b(O5>--7VLry$8p}FYA63Oqb z9UHIPu{a&&TX*!r@d?Mcy96FLC*_!_Puw~ySfSPFMy;UPpJhDKc?ygn$+IRo&3Z6@ zg43+sd(_tj<^@eXaWlitCisKIjLX^vzjypeSSC2Bt>oKL``4}}n>zahu74K0>?-E_kwx!PDF6Am*lPx?&YA$W+Q(pP4L-Ml!ym>Q{x&7a;oL8MIc>c~DCD{vGj=f{Q z{+DY)`%LSjQVq`*vh0kU#Ny`Fe!%#|S z96o=+T`T{_`AfM+o>k3lY2Nwy#mi6EjdrYMb-Q`!)Ul1_FQ#rgbJ_Uw>kIe0TPAO_ zE?RW=FHd~Q%ST_C)@Xik+SzIJt4>ksoE9+qc}g7ik{5j`QxDU;iss=ili2B3rO*i{AIpt7mTSQJndA zW;su0h53!g!mFn}nE6@g-JbBx`;tq)Y+ZW4v4vCJrO3)BC}98n>6|=12?;;bo`pKEU)_1;*@LxutCWt$Ixf>a zaXM$)$pt^uI(VK=*?9M%&TYRLX7ds+&g8nQ$m_cQ-pquLN9@*}Wjku_;Pdq}H{aIx zPmh~k+QvK6E=cHQQ}?IT0}m%AeOi)mQrT+#wsjwMg)hcmle0Jc$o}8vO4+tNw|Xxj zooOXqatiukZ!2B}pX>2RaOgbzMeWT=r`s|9i)22Vt-SQkIlHd9Qrk5w)nCQXLaV6w zY0P|{zBKMv`Ccw3HmiSw;7oS&rTl=JMX zsuTb2xh|I~{Ga$0sLfpZaHr$xpna!5xk^|`s^8lBZN<8^YhGMo*_3SjAj5KX&-qZ! zOP{NiZXbHBkbh-Alg*ht2Putxno9Y(8YkZF+_Gu*?G4lA({BHK;vKTh=kkWF>X!@y zrrG{m)RDsdg=@az_pG(zH|y*i6~#FgF5uQbShz>MNSjA;@v+?LS`Igae~N9psZz62 zK8@Y)?ap`J7LS+t{n*vr!jr$?oZY<|-E9H?6m|s7E4nNwU?MW<==R7d&lfr^eC>V1 zJXl7aW2?H6nasxOduh{t7=Jb|=580_o3rLn`Np8Pi%5e zJgBiNQ0e+%?{n==<=R{B9p2a8<=N{r?S|5QZO`NL^(UTx7-@O3R&4pYGjG>6@}8~F zIal<@p=*U(N}0hqmfbbI){XyP&HDY>*MsqATE_qVNA?%*V&585TYI4F)9borcKiNb zVr0^Kg0{xN4pM^c&8c0rNMLuZrjZ&xv0V>|J4(;B9R zefDeA*H|XUS>Aiixy-VNk zd$;(1SK;Nf({~)M9P_=ZtY#Tqr*p%8*W~quvD^O4U9;8u?ahwBqBlxQ-<_ErJoDsh zyXkk{vOW!)!X&l4VtGpK#{~w59_FpObYk9#{erJ-^VVGYa@s9DQ;%E8_4w@YbG?mR}2!IJ*KZMjD5J?Z$oIo_EpO>i`bPKxwaTxjrE@Sgl*D7{66^e)Afm*htDiKAF)vXMYl|**Vd#j`M;GOF8`d>H)%hx`wBw@E$ge#*Y0NA<=5rBo-zK8Z}} z7jLd{GcBCe8Z#sMpk$G4LQJBPRx(4`<&WaJ=bx_6T({Hg(4Rx^ z{v3E~9z6Yv#&6@V=W>qSiZOKXGd#G)D}9Ig^j{OrZY*DS(B@@C{ln)1ij(*^OP78v z{v$K%M9*iI#+jU=XTH1m&AFP+zt+Qy|59hA&O`BPX|~A4hEq(>-BQ1;f9C$ZW~QKr z4TT>Jo%&Xb#JQ+kwcNDR^8R|El6RWnqKm4hv_3bo*KjioUM-L%{WEA{$eYe1Hv8Wy zG8Ih&ZJdn@u@u>yzWcGgZrImJP17EfoVV0q@OeJTw(-p6D_h%aW_5C8B}-0-x{x^K zkkLy6tA-*|>2?W?P064mHlkTIjT`uJzzK(^wa*|Wu`$y{$e+H%q3L5Az8 zX@3nv&gI=ZU|spAY0`=9MK99%e=gUav+Kv>(`!pg)H920XA5sPHGg!tRbij3(#my* z=4E`{p7(QQee|p7DJ$2dbS>si&D)^T`j*4;&U)1wR`X8>FgYAbiufJ6p+R<<)Q{4D zC+9B*UB8JGPtuZ;f7cqa&E>0p%9Nm^JG8GvrLtHo{jum0 zzwX+ih>jgI47B9Db#r5Vtu%f&?AZNovQNl`*t~1J`puP9VQ-R65K`XkHx&Vn_0d&{nxx80s;AGp7BuEaE{T|bl8)#vRqQRn-x z@`0|(nfiy}AGFIP<3j&2%=)z5Ao<|Ryg#Sq*KFfi({XImrpRfNgw}sJCUTnp*{7s` zB~>LgB|m0uZn)vmAX)FD$uw8^`Tw~`JbtKb<6ggUk)W&TQf*R%9xr@Pvfjc*_K7Vdb{eDT#T9K}X*|5xVJD*AhK9ZRrFv*0t~F zc~pFA+x@%1_RVGHKqZENvxoAOf8Ax(jsMejUj5dP=yxNY^kup=!! z>z&`net5d(Ubo28?nm~!ZZs)J*sOc?txK$VzVQ4%=5_vm*u{U>?m0MlU!nAzM$;|d z=Y;>?Dxx^o!?M|L$*STLbC11$C>ZHs=Ie95_e}N-;fxapxO{~6tUBTP=~R#4etd`@%psQ`{q>}JesXI*I54!@7(OhkL}a^rfyw0lihwFYjdycznZ1@ zIF%q^oihPDgHZ-|L;w|6-!%tBtmyoZFT@F={k=o#3k4-m&?V z)@oCwpD)=Y7ikHeetg94+AG}|K~c*U%3|xx7aRzjdiL7l3I1JcJucr?pA;`6`cuSv zdUEKeN8kU58P8L%h&=MT=XK)gec`MBc&z5-y2IYobJ=0dg``DWUq)PQm-?}ReZuu0 zH$D43=D*y3&Duiz+0DOAiP35rRUwb_p3M$Uh%I(7iChw#P%){rMqyLAO#Td+cV=#3 z=05&H3tcQ^)5^~DEcjWb#hq%Nv%&grNRLR)ovE6oZ!I#ny=R`N`K0h(#v)-46}68J zDa?$WtA#Avmic5e*EcsT|M+YT*R><&{(HQiKD%)E`VXmI!S#`Q@I6^yHYD-nr*Xt(#UMSU7-&xou z;V&@ZgN!V+S4gi7pW}>1v#KaNm2mf0wQM z&i=f(cBOw~arb|ZOO8AI)}8Bj){VQ!EBMm!TKK)Me|8-`xB9kk+%LB+KdyPYH*7t( zfA=wmSB0ORrKFw{yZq$f{o`3Ivz;1+V&7@q61kT7ZraCqhyCLJbHyXw=e;ianZ3>5 z$ElB@HL#WQjYP)0?TNkDHC`PoyH;U1cTUHmZ|pDr-M_>1X2R}uy;p=%Oe3s1?C2IuE?RUCd!rO87Q6CTrnxfmeUo z_@eV?a;Ba)Saa6w_*Ryy@w_>2mo%JhXyMH_eLUZ!_HoQYaaPZ>o$vm7HRWoT{lD>4 z*|qZY+t}!r6SP9qo-Y0Tt4!K-N0mAIzUUvvm-m}j_;c`0`kKG9BxJ2cci*M5xv$PT z->RG)eEWn}Gv#iUTh%;nFY zTnKk`N<5U~>%1#q?_{5~cAHuQ9W0{P{fcEzE6;g&=L9@bJ2xn+5fYA~SZa2#su12>7ft<3`F)@0!o9N=p~) z>&lz{_S5;qchjB~JWuybm~m!f)=KL@BlX8mRcbon(C0))H z$NHQLT9Icfu(LZZlIggV=A~Jt^>;#)ot}MtHgVPtL(_z^E3%&#`7F#y`sQn{KjX{M z*zHZcEqnCRG-q-OvYK^#WVmIykfBw9M_|jzv|np~8Z4Ec;W}}Gu%`Kv6YG!ESRd@( zKDWi`WuwQ!CwFoL+p=yX^Y2vJQxdbDU)Xc1*^kJlJgS)y7pBhK^Y+v=r%S@?Umu8+ zDySD&xXoN;pDc6xi&?UM@?Gaw9J5L-$UB+t6OvQYqqc7T>yN$y=RJ--anMz0U!A?# z-D>T*v#L)|dP%M+cf5FpY2LnXszm~OKkR-jwan|;otJMv8*qJO|Fx@@^OQDbbHwtM3v{ka}ji=`6Y z#%$-@=5{$Bd; zNO1GLqNTCvkWAv6=6_6~n~%lqV$FBs_7Q>TbzCAF<$>&x8qIW7aa;zO)HEe{$Cjy6lWEH&0$kY1~ks^Y-H3`)Tz| zZ;xI1zU|hDd_hSA!|pu`PtU04`OLmUFECizbA^eNr*!7MpHZ$I9H(OEl|Q{vw#Is! z{JVDV37MihtNIo&w!Sj8366Za(r1mDaMV8Gb^G>wd3dinbvxtN$ensC8!QB??ti&+ zFRZNLhU~J_+s-|By4ktPRN=;U1*=<9Tf#Ocq-<9?;a9w~a{8J#t=_+%a4w7G+TeF~ z`_tU=l^uG==k5K-yQAsLBbL4{zkY>D+Ohm0HNi_JaJZ@)yQHgWZ0NjWd49V5J;$It z@C3o!=a0E_7p>Db`)_mbnZV1^h^N=y-2U-#%Zb&G<6m%x&T-s)?b_ny(@#wKwC*h5 zvxsTU{prVZe9Jz+Jos_?k2K-kt9ki1UI|F7I`nMKz2Iya#a})hDX*(H{O0$YXL{3> zk6qx3wvf-3jtd(XJO7_&eBef$5cdqxw}$gi{#)dJ<^Q3*C-UQLA5RPLw_`o>{qedy ztt%gl;@_!@dVNgas<%z@ z9M2v%{<~Y-qNwVZ+M93s&TFT}9oH+8Pm;FZUcLJ68~3$gw`VS#x$yLMxtna)-f;fW zsQ%p3)OoOB{%yV!_g2o%n)l%JR`$;RzjX=|6*u0pbrRk9^NMbHjqnj2mz^7L&lMA# z&ik(}&*?$cRgd#4GHL^QcQ4D}hql5+$wJ4c zR$&fHq(9Ae*jj4$Dr%CZcWPV7t7zT1mrAo)pGD|zIlP5Ib<@k7FTy{nE`59-R`qmU zMqQWP`BNswoGNuS=E`zeyv_&I&no_0zIKz<`ZJk7K8w|+G9S5Fa-qom?~3d-8B(GR zFJ)9L&8=jn%M0zfrBo}l@%BOIJ(Z<0_p7^AyuxxHJv$P!BW+d3ImZ7EDuzYQ^TkCE z{TJ@}YuPw)cERyAt67x2k3V&s82#o>o!tK7@RVPcs$2A9t_bij?^%4ZN1%IxcK9oy zt%0$2b6;OP?Z1GjXX5-|&hGzS9VQOay<0fN(o);2#nhSCpS;z$PHgsW>#ZkC_vEa7 zVB@K$S-xF;e%E$ekppTDmr(eA_g^Zk!^`%Ikn zqT;RO0{w*z?Av>fq$NANOv)eoI^bu4QwtKlhnvg(E5dHbvB_ z9OM5nFNj%MbSd}RxZ75V`_I}>IC6XXl9*d8VV@auR6pKY)nYv1#r~Rw$Eviurk_<8 zpUd_^BKDy9xz$e%y(dZtuUypEwP6=ah1Ueu#Z3Kog%nQu{ocv?Z$|Qp=QHoVDHq6* zX!vq4>Xwv^^OQTyN$tBnvRz*EX+IxB$^*lKq)8ugbzfa+V*K`5!9kj*Dcf!DsWe_; zpKJf!@9qA2tT5+g6aQcLAeIuJhf_47x1|KVT`Q&=xJ~NH(~d|`}W?x`f=jknvU2KE*S6M#aoAPzPxWvjrk!x#K-<;7tK|XcCm8H^M zw+fP~Z@2DV{c`4wcQ!S(C7;y%0vCEL-dcKf>pe~P)aywnx5jH%Ub;WKta|t7wI1uW ze_HSDs^L5Pc$?dAm7vVRM^4|}i{q}oU6cJ&=zQJ2-8`E+j1pF4J`P@6)xQ04PeHiH zcbEOjo64i}x~*4COe^_(VA~CShpjtBsueB2Fe*KX5I5FMP^7KlXy` zaW#<;{~Y0c57Si)Gh0*_Pq_L*X0lCIXp!)oho4q8-(7rWa>i9%cBeJJWWO4$u8U~) z>n?1+rT#K_<>5uIud3fVZ7A5fWA78oMS176bk+wN>>UH|Tm5#;7zdaW6WSAyuS~zi`X;9@K`IA@b3Ku(e@2|KapBSxve@1{t zZ0OzZ)1IH+UZvpu$LRlo`>*Oxm|VEQ&aSThuZ-D!&U^lsimx(PY--!Zn)NNMhtoV* zk+(|xj=SKrc_qmYs$SQgc=xiHOU)qnR9NxF^u|=CACVyS{esEp+qv@BG_->fiN4)p5U- zCeBWMv?%tjh~$m9xi?Sv?*7H`N#&vXg?%1hx3#IAi71?VRq(gc&D)QyqW`jWuYO}x zs}%8A&e1ZC#d=%AgFPp^aw^wtw~@c+__RQV-MoTp!UlccnGVcN+iyy)G=7!(w(b?snLF-h@%Gde*~VESl5$cBK4a;Q993u(+5c^sLX=5ypw?6+%H?H}e$Tpuy@fR*K=XB%zhj&8mw?)jyrVAp9iUeCD^M=kb5 zF511SZDG>ga<#=F7vwuvoXXMv;vRnB+3mCDG3p&&H)fg6TvGMgC+Ja-=lr=&m*nE_ z|KMQO^rr^$mifQpN)0;~a#4#%YvJdIs>i$c z9iEhS>*1yS{CdV)^*_D;`yx?cPi)zNBS$uS{a>ZUuqVUGwIhM~D>L7<15Jzq(o8=p z-nX4Mw-gdRG&Q?-eX`)xZRv;3M@;;2{!`NTREFl`OTWAFZ9i;T@y>uj(1_=^QSpqc zu1BA+y?gL5diuGw(@l@`E`MP9@~iOb(uq$+qvTI89DB>2X}r8HVf(EWDQ;U`uKaPG zl;5}c_!fthiAlXDR`uQf6DqRWt#jIm+Q+w)F6DiH&7G;Am$CQA7WZ4K{zY#mtdBH# zs4EaT?}lvhE#Ldzy+QK3^o^|d#_UoEU+Bhq)m7!(tJ;aTIrn^=7jApCu8ig6yV{AH zUq)KC#~omn3wFD~zb|g(#e1%AQs(MgUWvLot*E8=?Zf_m+L3d5w(Q+n6#4wAPJ70! zy!+Z5eRVg)Pfm@S_%1!yBy{1w2y=nf=-l`e4=c5Wk&ib%+;U#*a?Y&eZI>JQH_FU2 zI^@%M-}_k8{Cj&^^Oxm6e111tFwW`Ljk6ZfX6GmWFO%6HNY zYFM|0Yi{EDyP)=_mQ-9?J+teCmro_udRe~@K3?X%@N&5QKCb(_w!GeF@ZBfK+;oC; zt$z0AO1XyxVms^VK9#1(B|a1Xcipw_M@3V`BvtL;uWw|Gs;i&t3f)R{mA(+LMD1y+ zX_bV^zRL95evLzV z(w6P}7u>qYcOhuiyx^s?-8q`xf4Vzge$w=E>60J#@BaL}J!0q8gl{!nHa`V;%&!-; zwG>Lu{HMUZ_V)hCr>E>Sk6qxuZSVVKU!C>Yr%ZqQDw)$#p{3YyhHcIEjyLYdMSSK8 zz11ya_;~Z~vAM!k49YQ~T}jV-we%9)eAm6pUAiQ7H9MfSpCF0TBx2p1Q-3-A1Y-2V_aukg)9U{YsPdtMh(3{noeMkh3MxviG9$ z4?)9S501~Ow>h>bFe?7nwH3B!cm3k7bNVm-U!u;(RcP7t1;4xa+-9HUn(UN*Q)Ef_ z)+Z}AG*3Dz_-69CiS8b0(weS%pNwK}YPWcFZusHSr}n0)W!K|kwVC%^pC6Wdt@ftW z-}&W&TUAm<6-i&bcsBG}xtn*D2&>$^V6mvS`ebn~ALq4;X6wEzT&cr+WLJ4t!Z)^K znr7Y4#EhRMHFd8`lC#j<6M0Fq_?AE)i@MX}cgr}mo9fui8}4e6fQ$ zhQgcb*shn_ZT+w4&mlfr^T;!~b$3-d6F##o(|jKP=7G+QNMl|dCjDbJ0+P%97@O@* z$Mhfa(by1vUUWiD#ct+ZbN(I3pK@>E^v(}jNxNiuerM|#&76L!EH8gy;&-$8JFoO8 zgtuG{ShB@w#ga_%>`0x5w)(mnTnj&Jew$ew_GL@!;oEyQia5_=t<}h=SiEF&_GK4| z^UV2kZ{GX=TF3NdfVJzg`a{(kIt$iKv`#mOpHp<;!sL#G)g_m{Hkqn1r(W`7v#8+x z=IK7m{kiQHr9Fa=B&S+c^dEn<_ayI??)t9_S3DEEHqk>=Wrn3uK}F=73GWn^8hEOkSkf5_NqnuqOP3yof}O{Yz}$e@puM@VqQT%rr^C1hH#1QQ|IpCT_g+xQ9#0&wsvc z=LfAz6F=Sme_-{C?+n_)M|`JiSV<+83%<?%G*~+q#i@#VWPMN-{W5OS?&cu5e^LNbNd8X*jV`r64 zMdMGVpI8LlT&%1kPR!-9IApH<_D3^`3-9=)fLxIx8o|$|7Qs;@47I3?W&2(QjG3EM&#Fq0Py4D!nt2nwS^{#kl zWXs8>0#P$H!=Lv{51d>P?DmBJt|B*$1@6KOPqhu3*r!gX?zB%o9`K|xj z59Mx{)Zbe8qO`E`w~hZ-+rsA$-}Nqg^(yk)wTP0}yRAR8K46&1yz$(;w|gF1UV11! z{afB^)nksz@*S?9w}CG@Be@ISx~(^U7R_|voAryELOUkxYRf#|W3cGm z%B$)fcNiO4ieDFsZdA_yxJE8f>+&o8)WDTr)^6Q$a?X1OIpYJXYY#t6zqWbht4a~R zPUejnv5tFp>No9a z{0~C2XI<~xdXMi|+$WK|6)*gJpTs)XufAKE!7*Qx^NFp`db!kg-9xLr_OV~wvO>_C zJ7?7?>C%`FF&A7#R^)xSx27(dDVH~I#ffi$s#z94HmB+Sl%FC|-IDlvW!|hj&W$e5 zgc9$v{eNi@_~mo5zr@MTPaF+(XS$ZAzB+$zaZ|fCKkH7F>6+&ECEq1E+Rj5t^dWlQ77-ikqeC{ zvI|;Dm-+4CbNarc^qcOd72)b?&Wu-iy%pv@+rPApwf{q>M(Cv%%I}y%v>2tsek6Qv zJTapnq#{dmubla>38($?R|+1`XIJV!WNg&jSM@^tk*m|U9ItItV_vmvajGbDG4S8B z@$im`e;6E`rC8NAr4%=oCU5ci`j@{W{7Q?4sP=Dm?_gfW=t=*J^_Td36kGOUfwIz` zTW%rjy3VsiTDrSbZ`CMFGTRebn-$6TzCcX%X`zCVnGB<|tm%1Se#=XrSrylBnZEH# z9PcKzB~O-W^_8^CYfe1%@PwMk!NW#9>N6sbc%Qs-Vk@Kg9Tt!EVf#hpgvABli%E*q ztN!}6X!(;hm){!|t_g9NVtUm~arVM}Pf|R#Tvcv%I+C;S%W?(hX;;NJc$B~JJ)FH+ zuERxWJAb;zM$VFBzZNtbUA_Gc#8hhlEUXWc(G`8m^cg+E$iCv|FS)-7DHdgd+__CLn% zGIu3zt}Xi-_}zzbx@q{5S4R`nPRQR?`F4YG{-;lUamz)mP8!!2eOuPTB=mYt>$8n3 z6qagE;Blz^b=}_5m{<6z#Ks55?3~VbIe2P|r#^4u{_*%uKVks5!0V(@_#HJH280_I~Hw zGKEbmB;Ewbm!F$tkp1eIqd3UExP&E+3;rEF_htEThkpK43mc{3{eLy^;Lnd~#M2jm#lEmlg; zQ1(2lv_O#0#ZE~7%yEgzj=Cg^MDc%z_wO|onZU%qU+?6536K46_(EdS_NV;lk=0(6 z@ZraU&lC16|CY1Eq`Oma@3Sl|=`6QW=jj(VO-@nx#&zvO@~N&#%KO6Js;D}qw1li` zVpiXa)FNXU3`Ae9qzT z;y6>$|3|`+M@Ir&zfHTmOlkjI&%Q(3bt(z{XWi=^VlrSA_tOo?2UUhrj)|1{p%==_aV zOY+XGVmErkxS6SBLGQAlmPA3-4Uz8!zV=sYO!{!v`<|T0jN56m^ST6>@>wM z&URU(LT(_`x$&lkr~-7TAcMf`f9<^S!lf`Pos{nDd{-*^2{eAn9krZ!`F@z;&lW-Gnz6w66! ze!I$kt=`P-iWlQG&u*Nezf5#vHBbNEgKL&pi0}6QdoksGM~Y9!45s3K$&*&sLM;m) z?T}2pwP%)SK#K7Ph7XC>C+05yyPFet1UlP1NRw;AdaWBx=v{Q}q%pW$6#B1?t^AE*boSn1pm#liyV)^y=p5JgNDu3^7 zwDnoq$!XSAS*pvI?q(J`%x=Tjmt5g_W%b*;j}w!xuCMs@OS0Z5{SR}_fn(SEH$3i8 zV&HN(-LhiSPJWL0yC!bqEbZpFP}{ylyVX0pWqU-=Mn08GyO(`Z-xXS{p_F9q!esp6 z;+D!Kf!&9W@$lUB_LELMz%KW&+iB&jS^GnxZ=RMo*X)rW7WH)hhu*vkcbqnctTLF# z+_J~0z`pF0# zU+eM~c?igM@TAV}G24A-tHh3jflpO9S82A(`%jGb+1~Sp#qjn$ffdnO9e0x+{1qr& zqHLm{`)NV+g@Uxcr5jIvjeT-<(WatX7BiD?s^vb{ukjQvusmeGm+^n5$LruFwkNfZ z?L0b5zGw#PUBAo!A4*UAxh24@Pra3$@#g0%>|J~Qq&{D$x%;X$XPpfj`?tmuJD1w- zTg5V~;Kmh!4`O?ACwgR`kqk<|tfzlz`uTt>d90t@}k=IGR{i(q^j=iaj2#VXyVYR_w<)aE6|u7R_98Xj_NTCRKT zz-!;!sH{IWeZO2KtY7}9oXdE6p_Bi~#4SOKiv{lqyfmoF@mIR+?Y;MRTIoEie&3r( zrzLI(O_W$u?ze8^x4L3;lE zm5cAa7Oh!XXPEaxPxR!0zM4M$mhO#D1#@oryuG?<(di2lQo`SxmF{c#Y`G`oR-?xU z)#MVT^2sG`FYYGF5?aIFo!GzTzO|hCG#;+} zmJ+@N>WRM_3#OPk3qGw=DQc+vFloL+?gfW^oZPtvk$IOhbAR~$PhPQL=C6x~IA5tn`4g}{a698B;~7~Q0#U(djk;48I;=l?VA3s>ryCCS&n-E2@`HqbIN#BG zjXe&$feCfnM339~b%j0&u-^1&N8c~;uAHDfzE?W_sdm&PKe3T~zUF>v0ne`|Lhs%d z*?N4P`D?2=vo!zjH+Nt7xa`?4`Sm7?)oYS+G?AUtLG0ttVT-_a)XFHvr={HP#ak^%uUEZ4Q*)AF!LN{Ml z&7O79;c{$6x5D$ACvrm1>@Et3w4akWqd5Ano%W_I{mQ2k^n~v)ez;sd<4}X5c#plQ z*@FXyQ>EUN>sUQ|KeIaE*Twm*yl)ry#=V-~AQYd~pWUe#&oR0A@*lx-VH2mnfAKfS zaK~)3_Y*l}`kX47UCcT7yI)OOk-CTV^vkdL{N1Cm%1uK7r z9$$?aS5Ge1cv8i#B)c%P{J}eAqnVF)b#4-Q@$jwC!rHGg;u>p? z^eJ~djGn$n_U&h5%la1#NB-)&S{=MBq_iQx=j)r!V5LlhPX-t3f3AP%D<~>|<&Dki zIoj)GtD6NLPh$UcIQ>_#LOtJ7-Ky`4KW!*xU1#m1VYO2Ctaj4W2i$Q{bC1-0{?v4C z?gMYX{Ywg%-pM3p&eP0ZEG?2&`@!Sc4|St;S@(4>uU_wr2E}Hg#o*Z$v*4;fx=3c3x+WG}k*KWDu8sBp`aLUPFN(X0!?ib-J zR@lSO^y${LoiEs5#mvMonkg%RJ~JrYjazuF~FH{K(9$?^NC zYi<{PHk~OwQhS>l$bCo>zKc6sb=Ef;0f8{*2;2OFk|M^pAOr$ zBz^t3hAX~kUGL<+gXVq4CN|+K^TMs3$uKZY-pP~TXcF_IXXZ9%s}F6g3ks)XzN^># z#MT$Q%et!S+~$(>OUe;OR_ektZoTO>o+|3hDOtjKJg{@?brsh(&EA$3tTn$RYr|(> z4eeao{`ha7f>gy^W-X`MN1_#3reQvz!BJB^H}H?5;43%017vw};h9>^4uE zo9Ol28*Lk`B&R+4$Q^w)Z??X|$^8-c9!>7q5+VEb)rE{b!7hf;R>=|!m!{f^1g!rc zI=%5>#phF7EPfpg{#&@!!RuZQOMBhd$E%OHXf!--nxjw}I{Vi=lg+LUss* z?1(B{<$S}NPjGMdq*9*^&ztWbnWh&ee?ZhnhE+yUk4H-RP(;UxFfXR6d+S+M6NTnZ zTqvk>izVGOA$P}yv|kUF{7QXuT{Y&q)DLy#=GiSxkCt6K@?Xzl@rPE9XZZ^I<5Rl1 zHpRp?@0g>ub74JGVvqFc$ZFy9hmyW>dZ*sKG@7I8Ol z-ZObx`mg8$F4p|ulzrC69wp?7v2i=SDv?b$+_Wh=;AtD@0;!Ug&KY7;ea{ytu1uA= z!@OZ%qG90^)xQ;8$N;K}v#&up;r%5d^G`72)Ab@1!8 zH1itG=)X3vSO2P3uuuQ$8SQ?+(R~evc?`F};R7EHr-mk{`dz;25ON@7aplevmtwXS z9^v^C;9Yn0d+gyQ%a7SU@6N0cRtbN!ZQsOMv88iWJu{?ibGvIUx120kSM@x5=JewE zbC#RWJbYViC&!Z`MWP+A4OSnqe6#IDT9?k&FrSpUiiIgITPz=4+DI63J<7oHoIfF{gsmXN#TXl&0-vKTW$tK#$OlHy>wf)c&nPR z{o2=i>~!;Z9-ApN`m%{y&hvDwfRpWn= znZC3B23Ad6YneMC^a=ljTUVN=H|yP+b@f<%r9_j&$s}7wmxE@~yVL~u|33NZE#;I=pz~)#auN}YI?s~0=PavLSah}8?wm0vXn;rJ; zxtwMG^qlYK^V>h1|B$Sdwdr4%;(U&O+daO1vsk=n%?I66CvQnj@_8tIN9tDHubdN> zS&h3ar7}XSo3a=(ihdL%P#W|RovL}Jozt==o#PN#r*cUfjn&U*2n7dJDy{h zKEIsLcCX<*>H2#&fA9Ra)28gg=Qp+jlMUqAD=Y1Fo$j4>v#?)3 z&Rgp_UH-FYa>y_9y&HJ{d=lDH``qPl=$9#TI=a1mS416L{^ECK`=iWXsm+gbU6M?v zgg=>?%DpJrPj{mKS?L(|&!tZp_TGrFomXVCFPu;RJ!6v?SeT&(PnBU#maZl{5 zV5!?lMJemWJXv#mnspB``bw>n+0+y9vO{m~_LcW;CWnOTKHvJ2OJage_|m%FR_8P~ zHb!wRP6@1zPFelc^QeOPLg`$_q?XPEx1C~(6&tPhIIC~_V<~q2kCRc7C>6W!-}@~pGS&t^NO`75qJ ze6_ItW5&XJ#VTD#%90N}aN*MlD!RM(YV(|zj3oB(r#63d zW>#k^*Vr+)G`b4;K6tI}|MfZFSMM(^lQMQTN|b)GNxvAkN67r7Uh9j56;;0ROoD&2R;PFI*GC^k_;lFMoB z*H39I#Tjd^JcuxnRSHPBDq6csuIz2J?8@z`^F_4YK0CJW{gsj^_1t@6H|LkdmFcp{ z#9b9Nh{Ca=&YUbYg^tEw${fz6Y`8C!}e>3ZBjDFeQb5*NX zWG%kD`2Jn5_ok;9YAz;T;=UTQS}Zp6L)msA73mBE?$_=!tuN-?2(!`N|I;WsK}Tz$ zLK*Xy%Ny1UoX_s$N^h_`R%QC<%hMO{3*sDJPM0hE!E%-{XMg1N!ZfolS9^GVK3@}E zdte5C;P2Gc^@o@HT-?0iRcP@EfncjoIX*pl#qoElzt|qWl=JI01J6#cLkbz*!vEYg zR6`ETI`iISd-O`#ANN+wcHEvUm$=KTTy*=kf1kddb9R$h5PQCm>0ueuh4dG8exH-{ z#nSW*LPT3_nxg$pZ`AHcFKK^xCv#4a$PShrQv)13w@z99>ztmS`$e%1>8)w655ec#wTS#~DANBz#`WBIc` zY2T~;P;FaW9~oBVG&?+|=lAE;o&WY%-+HvWe*OdAhHu`9wm!dDc#jyjEV-BV+mzoy zz4(S)N2K1%MaxgzjM;xe*{AF!TmROHI^ns$xi5O$l4#p-`#!t5_p`{i<;Cl}8$+4Y zZamcXx#IZa;G`#OC4b+utoUlZsYAmxj&UtNh_m%&@9W*`JZ7`MH^VwQwsixz(fg8`;IBg1kmVD9P&W*W@SM1}p z=U%Tg`M=z3K5*|Fjc{K4xVRhjKkoz(nYL~~!prJ$3ymPtzA)4QphP~LsA z-&cO-$u^DyQzD!@mhmwBICeZ;W~(~ias6}&mw@{x`e)CUt~b2l&@*oxcaedzUd$)s zNl{X3l()yQUDy2ovG$_z;VsuD$oa=MdQL0ttv`KzidN+}l|Lb(oh9?DB~Et;JE~l? zeU&-?)!c(kUm{m#3e5TXZJuCD1>>_h7|Rd2X5zg_OR#6O`4#ESf__+&g@zA_+&$-^arhw;Fn=Ru0D35#_w#W+dC}MiJG2gzTE8Iq^L(> zi*C){nDN?F@_Yf`8eQEJtb6a6iCu755>fV*HGAWhhrAPOwgszqhDTir@(b@dUOvV3 zfWOIJm8So?t9Q+P^X;X_*ZUO@GOw@~iCkS0zj#Tw?z0)ergeMRt@mxM`KYv>)?05{;PWGO_R+Tdx?z6_*vbk)=CTM&`Uw1z-2feTOgfE-&S1%sL`f5`0>_ z>D$EfSFEoFTx6NfYs~RgoU!Hz(;=~7gG-yz4%}Syo0V_=sX4uSFZX3IGn{8qd{DCB z{i!a^QWO)zVc{rUdghh$|PyO*E7O?fR)!!+%KsH76> z@5fuU-SpL>6&g9~Q}pJkTwZldhs&<5$VxA>*UR?KU7a)5mu5<+tE`Z$`;>5t$whqf zix+dF4+u@%I)9(tu^Y=bv)*kp*?d`g+x>WvPTz%ji(Y1VXhd|%C*52ml;`fs!5$h} z$g^BtW6`FBYpUnGo%DxX`@ zoNA&r$=q~@@j-j-qWvGDR!3RS)!4H=1A+OzJa^BHPi*$_ADg|G2} ztk2hfNiW>3&-z|>;_}+;)^GEwZ|Po3Ji?Z9?O*PKRf;Vv@jXrfYvTiU9sk$zHA|U& zcXZF6>~l}0IAe-uzxCW2x5-X>=_~HLz8+>Sl3ZS%nV%o06uNkQJ$z`j%!}_;+Yjtr zxBmJ;b;i`Tt=C%;-T!R3xKM3dvC2;`c9YD$I8cp`~R}kbV2>% z(%89bu{-7!%8E5vK2*11ILsdIqS|!4V)?hs`^%~xzUtN9!)fFi`uN1&^wwP`a(0UJ zyb@XYyQ%+V_@bc3?Q8cn^7h@J*AnEMELzSU$ge8&96=7vZ_W=hlDK_s@Q+ zaX0OiIA_G7+mGc$=IEu|b9^ME@-K{2EZg0szW+qf%2(@4t~krhKBSU(uE~4XnhkqS zr0|}~6IWCaUX(G&1_O>+ZlMy|8%wA@GAAzjoYRN=j6?3c=&9Oi|V~gds71B zb7FcbXSlub-oDM-ZHI_2qr>Sw_v95DAAc{IBK%T2a^E2_CZ#{+1rq*lpAWD+`*pH7 z?pf98(;aTRmQPPtV-cimH6|y5?DId*Md@4DORo-#w3|n+P6%akH}hl!kP`%V;#(?X|j@Lw2Pvf_e$9!y*;#c}u7gXQO6ZIJuv`J;22 zqj$+&w;e5$vQrBte!JJa-qc9mdg;kmGVfbuxbk%Lu87=T@_yHp89^G3cDv*+nm0b$ zUBB4Ozh?`Z>no}2rut_~?$+*X;dfYhH)@gPfyImeC;iBH<97W=$a0zEjaqs=k6%=F z=4VYiI!}&=q0TsichTRfrhdG4;T`)#Wx@&l}sSh+bLbyLwuR z`qyW%6CEDx;x&`G7`w5pDM$BkY*^Kl^11PWV^bb(`2@_ z>xQZ>$A`X?-o@Il@~(ABnRolG?kP_1sDS5;v-l1s=9+!EBp-0)oTkj#PprFs?@o7J zdMohO5M;0Gg-+thV&FZuFBiyIFW7_>;eze}9*162}$BrBND$HO1VAiJAl6(m(E-WdFABs@PqtX;zbz-L=6i<+{4TuHR3?%ky6zzP#n#f5B7s zlXg#ja!=*wuhZ4rf0-E^W7fIxZLg2nKiAZX7>>V5j(dI-L{0o<_sh@G^}mEO<9)|X z=GzbDZ1tO*Y8GeAvbHtebWvVV|7mfR{%3J-gq+OTtoaKgT+S;$cW*YI)>N^;fSWKdh-o4MJ}R{vX;jJjJ$<)NIL zQR^7~%f?yi%hyc|eJ8U$&h@T+&4c3J{y$IGIeW=gu=MTDW0?GTnmyOGhtk0-e6t1T zvoycD?31V{wuNDdym;lU$UABK1!Xkf9?JN><>>B5K|5c#2Z`Kd-4yicU}%!YWc|*q z;f8&=t`cG|_kCw6&DVB%BF&(^?^dVmv=7&E3XfVbp31ZhOz-udYorvJv1il7#%Ws_ zUDwv-e?BxN`=;J;_Mh8Di*J@iE==9}hAT8ZJVt-d)r{O@ua7=|vhnU~x2Wlto<8Ed z?jH2j-SNuHsqRI;I#xs~vE@Q$kH^UY2b%jcYZ z`fO$OeTmmO%+fo)E1lT5?TUK#H?dIr+uJvsyZ34RxBY)Ut-c$ras61kOv{sd%#jf) zf^*lq)N1cl(qA=m)*+`0lN}9TOq-IjqHki&?Xs_eVPP#1Q&p0;K7K2eNSar zr=GE9j@aUPG4dJvO+gOV`AwWnGu7_RS2W8JK2-I0HIoOMPtG3kndScfug!!Zrw7+$?p*X2+UNB(q-}X<_a7q%Grs!=Kg+CEXt4I#-|~3v>?TF$H=IG%^OaKs7DP8l zE!pH>d+zdP^{VcR?gx1Sj%!%OJm>C;Jm7QCdbRoVFS<@&Wjrg&{$I3R>|b>E@R5%# zN_*>c&i?IGC5^S;?A#GOgf>;RllG4T>t;?efxn&&6-;r z9r<=l>~o#WfA!y^`rA+AZCbYR>^7>F%zBct#?Fc5aBXz-hi$97^;!52YtJ@(b>c?z z4UZ4DE+R74o8H&ns&I|t*i@)dH+j`5uM-YW1I!sWn%6#GwedUWr?k!P+49C4RsE{! zo^!Zu_hg@)!*oh;-67-py{nG@J|Oy6NTK~wPT;C1an^n2>Rc;l27FxcNcd2)!)G^k z?(&$5-753nEqUB!v4F#9oq+f+fqBdhPg9TDT%T-re&5Q)>YpS(PvN+$RhfT8DpuY6 z!K}y?r?;O-6x&yOlDoOa=gqd%jRDIJbmun2Sll`AvGeeIXWfJ-_idgcM%9msqmG+7 zS;_goXmVcRv+v#sgMS~&JPliyKhR$so}_9}aQ))#cad=|@!J-q-OPOXXz{W$GUs?- zzc1(5d^}2b+Aq7>k8kE%d^#TU?OAt$?B_2J46@%g1}N{j#@2Rd!}?a!e!*|Sf$OsG zO7k?l_fTC?+q_7egFS>X*-!b-Jy+fJ^A}X^vibJQbPww#&JAa0#BZ4Tn$6xRz4L>U z#RcsvDc@I>AKtD%$$h%`nasttTio_0ujvnuvHVzK!LX`pIj7-L=kJYAxu=Tn-rgjw zyDH6golL!cmCHkGpDF9A7%O|Z_hj9+d;DnIqF1WHmZ3?ZN;+Rx?hH2a>C(2#^eygF z{=*}px}L$F)8j!_ZmM~bAh+q-tjF)-wfMbz3})Rcy&a=>W~<|UO{2XNl@tVDCT5F! zEL&gn*l!E#gNbMK*8Dzs{A9oZjt?oT_!oUz%AoY->>{V@on}wz5Uf}v4xXUSk72=vpF0ne#$;y(JkP*poIE)x3j#QD04XZnRxa(E! z>a%&)i9G`M>GwT(>%A50L>JnF^J}7DyF!?RiVPvi;^Y(JW z+@%NiSs3NJ`^L`R=8@2Tc$b)S^Zcv2uWnmRS#$sP9D{d?*>5Lr-u|N_xAbRQzP$Pc z4K4kjO{cSWYwpp!6zLP;x%(MkssGa{=jHScAJ5LXdoSbt)d|05czIpCoBUvr>RFvt zJKJY>T=+ZtUqPbE2u1Nz8qg$s}%tXj`S1b_-SBa{D~~-^<(O zvoh|>4MUm!YeXM*Y!T&tUq)m?(Dg6dF3-EFTcFH zU-hKw7vA?;8}FEMYX-|Q{|A~C+`D2v2fk$rdg;1p_4d}vY4;W#cYh`Ia?Rmf)6Xfg zmrP&HXTHoCyzBY=AAhHRzh84ko~_W)gW-5htY9IlBh%izhEA^aLUzK6j{E0Y`0STY zc=Tw4y;9&I_gk*{2ktyL7C%wPrG7V?!k$AhCoA&aF6gv=s5@EvTswo!jWw%Y?&b-V zyCHXsS1R)sN1=J(tOpqe``KlW{aS63o_RKYjh#pVCvX1Zl7LM&RA+dV3dN{BWDR_9 z%DDa4mK=dQoe9fIrtRD4CAZAs(U-5AKb-Y;e|hVfyo$NhU55(oCC2Xx_lQsD+xY*- zcV!-Ni$z{y2hZd@yLWuo?{k@sMkya;wf!rFUEVjn7N}9(^rG1A?xlYTPIsdg>+a@M z?g(MPL(s$+*mN5aG{`{z&7@G5e=w5;^qk;Sw0ZnZitnZo|3yp`j`q}me?a=Ue2 zMVx1q47>5^-gEB5AFs^n4({*1EhVw9+-2U^bpIbJ8zsx^7mM8En;68PVfuA$)|>zG{jqwh#|G#Cm< zV)$+cSqAK_^TW#zU~9vp*K2#{245+D{YhJ*(c)mh#E$R1pPOf_ z-QhTA^1VB!;@&d6pDp)?-F?TwRfmMi&MYeMU{5-?-to-FfcHjEzM2)TJ(FebR^k70 zLfz!=XSVH%I;bl!GsC~3_il-i?tG3MNhSX`(yWrv^$U7=*YtLHOpFNgbmen5k(t)t zra!qXb<5tw+sPNrgA*mAzrWR<*f#a%XNA1uL5D-+)}I&Yb835k*mt>}$duV73zEw_ zGJ8v2>^tZ-)1+nk9_^?;fz#766G1P4E8`@LZ2v8e)y=b2c5P4=ys)poKTiHF z`}A+!uS?t*rX5V2E_3hB8MC~7%iCXjpL^VSd*ZR}^JGsfVT$2g&HqcyQ*`NvoPFCi z7w=qmyawn zoUZH)$zkPJJR*?t%QDvWW{i359rv@&3mDN}>eEUZSs(R#{ zzd2MDs2pORSoLk=>}z6{=ht@}$QGHX9-5K%_M4^0_L&E+|D0Fu>UBFjw9DnhFP;Z? zRzEzL_(lAxmr>HqWT{hvvKOAICQZ0(?8KK>{F}doWOi<|X;PgX@Fc`=R+Z># zxy5U*nijRW8Tc2qlnZWrSUKz9YSDLHJuSQaa?VOHM2E9*n=x!ye(UAM#S@L38@7wK z_vhUco%zdw|G7_W!YQ#zi+a|k*kuMUgJaswz3e^*N}fI8uJe^QMAWq|<9nPf+U%k}C{Px$s*q z_v-G8Z)7STo!foY{jI|^mmjT;vmYGmh{;@%X}YcD>dQI1vb~;t)jazrX!0qK#mv1r zv0wIHlDmCusq!5~v!0g1N}t>p^3yb)KWn+gce#6w+SAMIVQIb38zXltY1#6w_lEvw z70b4ucN#4lTb$oFPy9N!lx1N@L0zX!x`q9vS5jOB@4J@7J#H}P?N6FwwQjq_YB!Z{ zuaxa=&;Okm)nvTrOKd=znOAoHh z+in!z_~31~NPvE=Cqsn$>U!??2Rg1e+wYRzz&qvfQo}u*m-Oyk_U*aw@lxF1Q>`Zy zrkuIB=)>Fp>IZigOtG02%6i53_4~GXNu`;-@=tC!TS^ril9(vP`Jp2G$(qWXJG(#l zdhLGW{q{<0zV9>1j#sgrH74eFmNYvR`R5vM+ONLpqKw(iny<=zXs`PXZWu6}sGN%3Fuqs!+vZ}Rq=f6}me5s&23Ndckr7Ej{U z-f|aLj9cYi3!Z<0aD?;OUj#q;(t7MGp@@P zU`}1JtxdOp|7fR9*B?8vuBDHbSiJ9QvFpFC_;qolV(_zX3;PXoC!AA|X*OMOljE|( z72R^3Gnr;A*B}47xGrbP>Fp;bZT@B7(SOol?{DWV4_+BD-?q{H{9Vvz^4{9N#h<3< ztP(Fgb@A35Zq{VOl{?;@x?(w}-~VsW z>AKjZz6);h^(NeBvs_;vSZwp-_NqGWhF|q}txs>9*Q1%=;9Pd>MCxZgL7h7Rm+$Lq z>FhrGDtYdCjc7T};JWa%xrNKM%O*UpK4Rj&FWbS~AUA!>wWYdpP3bnBn)Xp4#`c;r z2dD5Fu$}8J);g%H-xd+Y61-&XpU`VRCSR^f<=`z`!Rl6%ut(SC)NHHm?wlTvBLRwSP_L8S!5%mOG0Z_?HRhOelMuynKJkhO>fE)3x_JKl4#^ zxzLk$YWGCaenh_L|J<{}TBRvdcX3inO@oJgQHaF%54U`8ZMgiZExo?gZ&KNPWs&F= zw_m?s%xlX1>sib{QJqQLeP3Ow{)Zc6Ft>(p{^Y{{HykAf^5 z8|BiwqfHL*PG04@#KbE=+A906>JiWAlcjDZUnAEq`hJ|vCx@%3ukOn2150BBTdsun z@Zb5OH#zY9%~1Qu(+XRYwGWjlPWx_XayJdK|nM=pe#%Uto zk+-k={9mu%zA=Btq?tj!xj8*A)#g4vuCe{>y`HKAJiNwl_n+5h`Mj=9f9rplgGw(| z>JooWzR_iK$Rj6-B{C>wg2h`Odlv&oD*^uQHD&MKS>x)%Fs ziqyABch^s{&lFFXRI~E`??qhvuf=ydZHTCuE_$USI&0FKw{Kky5>Lx~-m_wv!(xW5 z`&O~3h=pxUDxBj#{bY#0AY1g32eKzy`M171d|OG@wtw}a=!lEgZiMCB*eKh2%gJ$t z*1HQHvp>yN46K+Gmg*%~@!0!;pwP*6zB9Wy&U*g-n3;L3`PDfMZK-<<6Mr6*Z{O85 zp+eMC-p@y1by^*3Qg+U@umYsvG~(Y>(#gYE=n%B=lV8u5gCU)JZ{EoKk1H_rHZB0W5^ zELcPO%MLN6s4bk!yTlKiYN=Z=PjG_S-;aFx7u!5U(gJ48K9qi3@$Nc~Z64A;{N2~j zm$9>~`a4OPO=5b6c3)NWWrm#HzhvEtWlAcmDr$;E4yI)8uitpBxTk9SzbKvjwB&Qv zcO|cuN_;wA_Wy+2Nh=}dH%TehE?nl$yWD*$oL{Z+xYludOYq{2g&#kh?cRDqrh35! zW(I2unRnmYlJ9KDDHCz&OIW_6@b_JjwWXPp>-PN$QF4mh>7{sDC_!z)%Q+q2Jf**X zKX6C3@%x|boiWpvbFA=sYItE|e0S-FY~>m2en)Pw2$T7oz0u=a@BAxH$!pflD7yH4 zv&UZ5x4UZ83O#$$Wy1FLd{&6qUy-S`uW`3Y)5b;S|LR`;?l^X(ag%ykB1_1#>q((+ zlf~OhC*9a{YnS2rlhZH+kbx8qplm5HH~ zKFS`F);7wS<-IU+N1mA53!}{J?HdyIwK4s7Yb+Ew-Mr#&^zl0BK%u|c8+S|>`rYs& zzhL4g#oTWq9yw)45|de$exDTU!Q7B#w1jn*O@+?C*St#)#zPhVm=?`s8xQY^W^cv=AJKaB{$EIez%A5 z-2C0zSA(x#6m{y~+3!-p{nEn4VCTW_;caUUJa{uxipMhh)V#x|cbZRLbUt}W_kOYN zW$SMq73^N|^;gBTMVe_F+47@xrq^x$6`|j7@16QxX)!~weYG2T4sz$+me#o~vQXOW z<89k&r#B}hOFMW)XDSFOeU|#H|1W~2-gC{5($6YU4!&zXm*yVdd9wTH-erjedlxl2 z?-%2)zJB(6#oql3A9(MtJGlGJ6^)e@b`JhdCbtxFJHG4p9v5F@m+OlV1&w(G8++zMp{YngGJosw6NxEZ<((fJX z4o=*5^*?9R@rIdei>JP^W92*kA#Zj>!0r6MFPLo3a-7ZYSiYINEb#0VlWVG>I*Z>X zr#-%h+}3x5W+nuANwWcflu~*qSN#*py2yw&`U2Z)=sYENz>!{LEFR zfTZWQcutfk-O$QCza-DkBg1xnR@0y5Z5_8Kc0~KJ2)G!v92VY{dd}!$_GzY_!R7h) zx;_L+ztC^|bg5v6p)60g`HSB+KB0$Xc6Pt;6`7j#?cclNeQz{9Z8!LH{GS)TB;&52 z)V|D##ZteLCMFsPI>iS{P4^Rcuqmn~-_J^CUW)gGSsJ}hQe*nIu0Oi#UZbpwtKgo> zjVjTP6HEA2ZmdtZl*_{{e0Y2CaP9rZ>nE_ExbD-JJ-t>m>{ zTo%wb-%(F%kLV@0KhAeQ%H~CF4LrxNQ9*Qe->pp@DTXIC1m0;Tm3(KL_3&X1%d8Dn z^ZHe$Iju`&k6qPtATA}W$MI(00t?9(l8my`9#{DOt-8cv)}`~lWvQ49b9zug_YtF0 z@*Zola{NNFw|y#myYzCeNK6>7g6*G9m1~}A>pR5ved7>V^sRr(?JV&}YnVSYc`ZIK zVfZLP@>lXUJ)w&Z4AS@KTF96G$EC~@ZtXOh zc65XLt)jo)45w{c@@t%x@@GdTKT+S)S**T?S#6q+-Dj5j?^52|el>4?!MHX5cTn^WkKJ`yHnJ z=iYu~zqVa%kM1Km-)#w}-zWa(y}xCRN8z;TcC5Ah%>DnJ^uJEpaY`>Sbc^zZJ>MsC zIPY-PnQ{D_xyl~dOJ;B9zkfFC-Q}Xfzl1@CI zlP(c8Me&GQlVVcm*KIB?9to9s$`O! z(|B9%(Cm$+4H8)|a@%AnApgj&6NURHzH*<_>#(LG=J}eKjorJXl0HN; zY)-j)P`S-ypWta#`{$x-9?hwop1mp7O5JYtZ`u0?N@wcI%HN*lyD><3v#0jOlD{kN zDxa}d7|SmL~TlEG^NvTW9&YE9~m_ z>nd86N^ItCYcgc!dmWi8b+2iyqvo&wX;pQt{7oHSd$O50U9Yacv_EXMfA{UaQ#gE6TT@&`_Pd=<#^zESVq-3)X zyRCmIKiqsVY3IZ2uGWTxPp=mDTWD{(s;**sb^o>pO&o2W($D*E=?H95+;qT0H2QwW z*Y+NRh<51<+r!@qGOe5u?pHGJ<#FYH@#0A%pzChoeII=vom&^1V7_LVt6jLqB)NM$nUm$dIL_YgDz;GEY=Xwu zsJ?sr(ammV$EI~Xd?$V$kq9Jjn)>APO4th zuH#=Yc~&pi{WV+8?>q7As!nr%``3*%(^T- zZTrJWOZ_nU!|RhbKKbD3?|p2$`W{{-!&1|=hEDcp*<&AFzvq4<^{A1{%|)BK@~(s} z)&IuBxBqfiYe)Msfm1zwtFAUbxwyz{w^B9t&mAAO_v6~qvtKMtZb{vG{^4z&hyO&e3E!_t$g}QB{=?2-{zdNmlCp^+XZ8ucX7`uY z`?(->RTUY$L@z`|R>TILGo4w-MiaIBKT)1|R`ZU`(Q`1Sy ze!rIdD|w;A(r9YMt~G(vZrE=8QJ8CQ6!~mcA9wzYk`)1~POJDQ1+w1}KCKvEzP9Ve z8jsultP2$8GJlqw@#?I?5yK~3MgrGnDSo<=ZJZ_TH^F50imq;+pPZd9lM?1x{y98b zUH#vJ+{bNGVqQFLDL)*ov}##)xQXwTSLH9HRdzcRLivHo zQWTe-UVp2S<$l)Y?O#@wJzrR^b8!Bfd5O%;-zx9l4dl<9C#_wkH^q%qj!BO__M>d_()=kREXPIpG*hgWqz%P-50xx+4_GsAm8?mHEFlsMe zCUWnVeOu?eM!%Gb>UrU?^gqe#6E{9g-rYG( zIcDJ&sI)b+hmg4!us*}r-g1)k1w>iaY{mR zZgrC3GtaR21FWk(|4s6peBE6=|J<$zhCS6ug3l_tnS~E+|8M#9%aq4nbrxL-$FD{2 z-Te6KX$jd+lDl`9KKXF=vHaoaPnM;ha!yWO{CKgs`$ONIO#knw__iMW!J+w~I%(%a z#f=`j_sSj0U|`|NZ`v~Pm*}F!QVT7(%b0&eT7L2PPyIJPUTOlJ&KpU{mSw+Kce$_xB9f7 z8($bZ&hhP5#hZ911hM2ttyxq2XLjgZ_XCdig}q`(U{P1p3M8$T!H@Cjz^5*yWgikm0 zl6$g~XR-H>Z?0K&>;GAu{rzXr!?gmN3we(nO*@gaZ3Rc*qWnb-j%>DHB{Fk1YP|n4 zV7=MDbFv>oP5=^bMjFWms^qj z*9H7j^D>#!madz&YjNFIk!6QxtH0gaE^f&Z!M0@SX1>=sv(IpCO;!z<9GrD?FC$a- zt`pnx{TbJ$ZI;;G6w$lgZ|_E*Vx5GgZ(kKwv>vEV3cZ)yweCvU&*PbKZU=OyZLRxx z<83~Fa`mcNW*h%JXUr9N{l=$TM_l${j~Mr}zI)Ddq~iCUd*&e4u*aqK(4zg3Q(ynJ z;5}bj?ys}-c1}R#(Jh|0`V^0t9q2kXTV+18^b4;eYPZ%Z|8y^1=+|&YvtsQ*+l|lO zh0eV>qx#IZr+-VfG+P)Sif^}DeretQjmn?>rn^2!-K{Qm$M)lny^lg=?g)3kqZejXdqwW8v3FDO zRQ+BxS$C81-{%}xrhPxcwWl$)Hek)>pxfJiRfM&Q|K6c~?M39RJ#llqHi};@>E`%Y zw^8nWF=tfAtBvQiZ@u?8_eqIq=D)pfv%i@M z>+tKeZPY$cZpV>(UFiqe<~p9PVpCOV_&=k3XBVUJuKm8ga~%y1YD(T~@GV+< z;8VNbmxv8hU;n)H%FpEGwckk#?+Dj^ahPsWqBE&PtLuc-+9w~bc}Uv@uqpHT<@?<= zVm254b%sOV;$xWcl*-L(PT8<+`L!>?>3LAO!&knS=Y-a0rn3BaQM+-`J6G2m7o|?E zJ)2Wx_;%Lf>-(b^tN*sBMgNU%snpN?E~mC`somp^r7Ih6EbF{o$Ntno^{H{P z)hu_H{7$Nredqs6K>JyfjbSm$9I;YM3-97Q{n|;MGQRm}Y^Mh{9sc+hMO}(TV7@@JG^~w?W?uxx>ih!VO8nA`!8KEOyl^k)U3p+)HRQY`0uFvYd?8LiV$*sBDZl*E#_FtPtLFroU9r4wt{EF^AGckVj;Fr;* zu>C2jQ@LMH`?Sq?^ESh+?|(As1qm$U$bZiEP`T?|#8>|Y-NGxHJ0z1>Z%J=CxLlFP zJ}gP`)-k&WG6qL_&h)!ZQ9AiMsZr|2_Fq@ZTw5C_tE~=~pLA@}cS+f*_7aZ#SzDCt z*NdqI-c#o7bd)WQUt|4w&4(uCK;Mbm5;#;{4-4EEKYeE2y1K)<7B$_{cM?4g%{miy z)nQ@n4~>}-A!+v_=4%=Q4x z&UgQyb!5}V$vFqN-?QlUTqC}?+&1QKbjv@{hdXzf-rep0c+biRhQ|D^DD`d$XYJf@ z`^1;#xfd^AW#3!wQjr$sYDtwTa@eT3w<=6fERlZ)7riUn;fH(H$O_*2-YeJs^u%^#&pu5X{eiuRb& zGA-g+X_Qlm)QguV14{)T&)V_n>)NT_9uEHv52svecv^bG)FJfPA zy0n{LMLcWUuMk&{S6x$+m#ey@gzaZmSbBWwTK;oyVyCe5MOc*iMA&FNJ^k;}9^cT@ zi`Q_c=^bI+=3q zWIeZEL}9#+;qNuP%)!e;8*eV(e`ueg*fQH?CR?_BV9J&j)NN+>`}9bacirhb?dINA zY&E--L(f~U+t?$aEbM*hi>S~kcHTIpUadx960Ccpdf6 z)1SKD`(e0dMt1NT!`lh`E!9d#C697#=6#mZooUv4K%zWeNB8y}bFJFzu92omQ)jv- zI~3+vNNjBuUhMBOhaoRKaQUh&xpnbd>%vT&wuI}*S9?9LymEb-Gsg=B-_@&5g!F9H znAZMK&G++N7p24I`eGe>TfQjGIeR{?B|l_M)CFA;K`xF|5? zq|)id^+|p?8~40sU-335f+6Ev;tt*wPn3R7P4N}<;Fa;a6fjz?Bd-{5Uy-r4WHI!}L)GT;U zwaU+_z6CaA#?n$jBotvyh0-9N7x2YLCAe6VZMX-czB4->u1#4-7CSI52Su4j+g z9uc0c^Z2f%)At(fY0(plQr6cWGS{htz5JPaXA1W{wJVfANi1 z)F<;@9-G2W)~aKIdcF7av_f|2NgpX%a#(G?b?rfx!ld_y@5}EOT|LQX(qATzS0#@h zez)DI@N(<&`Qj5>KHTPA71f=3*KyjcjAp5?dfs|-U)}Dt%6@%%ZhPsp#c!h7qVguY z{1!R8rt100!*?6D+&bs{? z?@C~OdDzubHc8>y57&>J-OxVS?`#y$lf&&*uDu8HR@Ad^tzr#Y+q9(Ma++YAdq|VZ zBCiP?%f7!*=vn(o>87g1kF%S1MX6}*^t?Ck>4K*Ct2a08*dux{Vq??QyL>ld(VWR zC9ZN3i{3OJwP2rkdh7beEe9&*_9m<;nZ__*Q}XhcHJJhCRU3a@IApKp$t@C*l4Mu# z+h^vR7K7KSzTdYPZT)6Zd}&YG$1QuGY`MDps*dwU|L@gr7H^hWFD9A%`7&2n$$Zb* zr|#?R7OC|68piYLwukA3Essu{%+#9Py2|jF*ZPCb4NpvXJ+j;0mu?JuTWWUMy=<+t z`6`c!8Hb;yojt>mKfPpy-0QjjcjtWkP;g9aC3ol}*Y~@ve_gL&pQ~7MTJ%x;p?SO$ zR$iK#byZ=`m)&tibd&6vf)oq?_460`d!z;* z-xXN=uIhD*p5x=mT7MY4)}8EsWz;B{_cX@$xUIpjuIbwzmzKYHXd?e$zp}9WFB1p* z-mJ|A8O=&IuK$+X-O{_e=>38XoHgv%mATmM1MA;~&1XA%b7t!4e~nR#(&ja}+27dK zd7ed_|2yLa?z|7>RYwx;Zm$f>3SOHdylLXMc`w_7>)*crJ8@n``sZD?k-X-b-&e4- z{g(adb0#~e`pN%)ef-9kgw!*4hb~;UHS61?@D0-sN?*^Oe(cEXSAQ>EaGUXH&x~1T zR!7LKGq+_Hdi?R?{Bu{=pY+*(KtCj(MYzuEW!McKx#rp(|CD{6ygj_CYC+iiJ*s9m z9vz;oHm&ZP+L2$X^ED24pPs$=`RQ4`kC)z4dHx_k^?yuQ<~IlZ*`HU{F~~joKSSmJ z8h*_P+vfQ6w>kVV(Kegc&Dz7N=gPEnW|-qbX1<#o$(olmrty9_&Od$9>z&~)F zC3w3*8?vaq`k@m2^ zqUxonRRX(Pzgv9e7r#{Q+b^yyPUvP0z5H;R)WcfW6Z#fD2^=}MGUWa&$h|f<;1VB; zdf%*7S^A~FQp5LT%xAI0xn^t_KRoT0p6=$EE6)4mAW13U<=DP4tv$D?B#(7qs zLOYIkZe#Y6nzY`iMEi?*`u;C-yX>;A6iT`5`hF_)$X$_q)-zV!>q9?AJG?6PGJgBz zYaz?xlrV3u4PTxJ-PM%8Bd{^+$5WmIjMpN@=;Pzt=`6 z{nvoWb*`0U)x}!>ulm!(3>9$%G+l1*ViOtkG z5G~)){y}|C{tNAxjV%|Bh&vvXV2eqwK4kXblJq7X3w5!A2ZbAsMJCR9l;!p0{I3hy zRf6rEjc?QbzMXq_>D=~AQ|BGk{w0$4&CjjVyXGhVXeFz-$NR5;s(JscRJV{8?D)Di zBB?e>lWo~8S;xt3*Y~a{>x|^{{?IPS&M{AFtw!G}-$~n)`4=uc>8bA+e9G?-f7Z3`Wdx>Ki~KKIBCf9+}2-ryeEcRjr#`A9;@{>1+1Wrl+F_xvv; zR(Uot$yvwO*C%h^uyOm>p!eF{I%h*q+m(J|yXif#&G>Nd@%()US;|@OpRSMyJYKzr z{cf0dZcE+sx$XUX*$=#Ne0*uu!j>~Tn_gSX@Wf_5&Xl-xz~bWrR{piSqxj22;x|@( zImF5p`qI3OJ^ajbmW>-6zenX=Q~UU*biMC7<*;8#mtXXreZ1x7i=f}%8UG%?UA8#x zzQtYEijR+vUXu&h#cX)(v61R8g+{rc0!8mH0YSM+_m(ScVV@o!QGe4(-nFf7+PWjz z)ju?jCKR1F2>ASHUC#yqS0jlt+Y0vU+2$qgV4ty~zx&fqvEV0j{GXm)a^lXxcf4xr zvI+u9#ElLbi+A+9Uick%?^4`lE2XmYT}n>2Z?-EH9-jR%x;_7o@s>KDFP6(JlQN!q zo@XikwM5c=jq(hopHuzMgo<{{9iO{tdIXzVpWFdWujrSe)*W%x*=%#gQh$hxI9`0+ zX0Fr@#SBLDaoR;poYq~&C^P=K5#Y@pY?x~d6o!hx< zOUb0Tuh}i(Q~mf(^wmC@^0oG*)$i=gzZJE;=)t+5+12&zWwx_I zV{d-5`?x(Z_Q%7C=dSI)_>l8HW0C8wvb7BRuAKd3dS|)t>l=xF441t`R0C(+XI%aD zzjgcW)n7$b+;tatDCSPw(y~Hs<%z189*6f5OWU4BPu%^4w^ZktMZ|@cg8znDk^81f zdjDEyyYpJ@{yK>eiSG+zS>l-H)M(GM`z2?xkSFpQx7Vk=3l98V;ky2?{Y2ksLOlb#&)VybKguUf-P^lO zF>Xg=)hhAr4kwh7QopRft>ar@8MDUDj7P`v^~X1#%w=-5?8J(?D@4~BSTfx$Sh{%Y z^gRo`^H2KR_@M$i(=9=1!XDQ32z86(U`1a*@-NcZS z;xoKH)LSz)EG%ok_0Qch>FoqX7B96wvt4;jC!BwB!X=sQG;8j$Jj2F=TXL(d5AJrI z5_RKP{Qk^v@ino3nda>4H>jDUTppZ1D>LjqTSUgD-yQ#13vNYsbVmGDW3HO>^T$_? zu_(+#PdSu7kpm5_4SiGy4Tq}#f8K_tHy+&RC&9GbI5&L9PP)CZQ_k`=K?AL@Tx{TrZ$F1rIqc1*w8&~K~)ckXOmY3BzyG9Q0CE6!|wTa{RF zf6<4}-YP80JoB1A_TOcElVB5|rg!PXi5q3RPe#4{bZ+)-iE4}RfEhO)#a(m|>dxxS z@RBfD!h6G|!vEyOzm1n~8(8bjd@VXr>KJ2(h^WBLV||%f-`;OB`K~8CZ~I;wnZIX` zOB&v9nZBoXxo?V5<*w=jA~xqjSn`txT)Zx z#RZ1%k5zx{oY;NL<Entliq%r zqqnmlyi{_J;l#Ud+>x~$^)+2*V*C%~_bJ`KRw%wtHpmq7DKl60IwpP&3ciS1)F?-^+IFVmVY9~6sQt=L%e0FB=)aJ|F458P3 zY&=S*I#_X>u~bvt@NcVtTl}`yahg9`>*Jp+G19Q}I;e2ZuGPoJ#g@a~%Om4&_cO<$ z&3j|o`X{~XZV5epN@CjH`KfBxW;(~3eO>qN>h~KDk9oD020hoZWd0U=u1#T~u;-HW zZ?{+J9a~o;=mn`w^r%$>Ghvk}tnbKAgPx zy8hwIQg6FMB9D7{Y~zX2Y*?-FxpboQLo2sU#(E|_ah-ehFD38%84?e%y>$Q1iT-3ur zhu=!6R}1qOtJKNpx2$^m_toj|@wF?{?=JsdrDo>R|7hRFfayG&F3Pv~@9IDFy3Cp)(k-sQ^gT@l>S!!(00c}enzZLU(w3vbsJzUElg zkrXAD)wFqw*>|@di#eJ9O4B5!AA4e0o22StX|tI9%e^im{#6Q_)*VS+^l{Vrs#VNN zXD&RLQ6scOJ8b{bpE2^{Jzjg>IQPZamCfL{zZ|^o#BB*tp5ICfFFlUixbEJ|GY;Q{ zsvo|cc+NQg)XR^hITAeoHk{o0LCkZxkf!>qNuS;~rZxxiv3zx2!gaC2;OB9-!^c-% zU~FXROvJ)zP zyJXGQZM*dQfZ^;X*Cnb}{_uUjf<1w&=F6(>%kKP}9HjWTK26C*B7CQj&irVXwximS zU3)&XdAJ+r++4oCpSP5U-&NlAski#AM21CI-sse)8)TJUU$x|urbK!5noM861U2tA zHr?ecUP*1om==h#$Q^oO$k?*Al<&;LgBkCa+>~YGf9#y67}m7*oA#5hmd`Hg|4eH> z%hQ#eIB~t*D|>Sj>&*X-=aO#JYq9tx{w#Z)Xtl$#Wc`N?#z+0d9P)QDXKmM?S$gSU z-B#OWyJM#2Y>9RI)UhDlf73B`P6N(%8^Jx?d+PqLI+0#^dnxC>I?2&rVxB*R(3?)&Ezy2N)hRIG)?O;Mqot{$Ff|=JW1iNe}#x zC!X0=@b+R;I=|-HX)Ik**Yjs=K6hZ}rH?z?m%dD|eE42PFwVV5!}k68`_m+KUgiJD z`_zD8Hr!DK;o>EFFqmm8n1dHsxK%JS$-Uvzgb!>dPOoOPRCA_mUQdR~j)~rrC#@o!%qjzL-U)MC98Q)(ysk?^>)_oWAblLa4 zQYF1~Ur&(72K`SR6*@WVL#pi_RWz=!e44iGmfez+T_;{KK3wrF&`~7w`NE^89_N3M z%IW?&yYQk(!2bv8lLd{Rw=B40dTnokYpH%_Yisqyb5RqYJz;12^gijeoRVeDg1{%{ zmPQla?P=NfM#;UwMQYOj=k-7BCreLoS~We_=#P7avCGuvHko~kW`)P(p3jS`kX};! zKyXU+*6I15O>Qpj-aqgC!{sd=(oHR9+((z_$MF7KVS8TeprFrh>7ULv%1TiRa~bs$ zKIpGvGSm3`f2G$$zH^x=wa?!zxM5WMWG(+BckkSwiszmx|0+IhPn=gGvFF{6ODALY z95&Z|yC#1_mkjqoU)GGPGZwG(T(g|@zQ?@PL9?0D5BEoITq5Bf_eyu?h5OYpM+5Y3 zic6}+-I&pncy9Hzo#GF9g(j{I-)+V9TxMx<)IJmORfTH;pS`Z!yvAzUWp@x7wugTgm%Ka=iGhT}H;Mo31{Q=sSGsXzyIkIN#1E?4@aTc@K5fd>^)@Ih;-` z=6E8|d3aBIHluNT!jAQFj-jWHz6zdcxqfET#E{4y#mKwMjeRC0P7t;H7cL*s-7L+s z|ALDhxBXTQL0v74TROHE*3@ZF_}G}D8|7~@^HE2Yzv8?QAN?JQvs7fP*IxI2vczox z&$P1zEE|;*)pBMrJy6}-rdu}xRF<+ZCJ+x7v@$PN8o|U(E?h>2VG;_l-m4gb)xjoFDhRl+g%+j<=$9Uaw zAqG9AWrZ(=_jtZj{U_*Hs39e=T6pTrl6A`iIp^>2>VI4s>Js$$hWN^Ws_xSU*V^;r zK4t&C^rY}n$BfyBqLr6ztKDYA;Px$)sclL?+NbDNabt1Ld)toYRarh!GoH=t_#&Y= z;&0!CvmC)r(@O5NNu2zkP-*k%^~Pl)TA3eiy{oKHeIaR9yY|RhiJ52k*j88V{3W|` zOX6ombsgi42lgdD-C>ueH+kxU%WkjozfCrFIM}p%X{_O?`kYGV4g)78!!~c*S8rK2 zIkTjGIL7e$#qkcoPfvVOCSMD$IPChVN0+BRZ}yXgb5qo=w{0%ouq4y!CHr$t!H>BM zyV64bd|77L{JNP@gvaBwd%9@0z^zO!iAWy{1Bd2t;Vh=h6WgD#&xkCzvGm@<6T4d9 z?Z{)RV&LdC2{9^5&Necb(EO}tOA9x%(9zY$wg=S<`Ux)DZ=khOu+6_Hb$*PcoJG^$ ztups)4tCzX`N<*S`YDf$7bhG31$|*?>{QC09;6hWm zv`Uszz|GK3DXur0YKpJUV9j0@$2?Dc!t|RG%(YiabeR^dn`gXlRsXBGsTVSLn;-Pu z(Yt*`boCAPg+IB!yPo0~D>xva7CX^ARhE&xit(m&s!I3dxc!#)QYM~}Qp>b|AC^h9 z?cSnPc+XGt@7=RMe}9VE-h2qAP zR%6}iYS;g{$9J!o9v~qx??w2N4~E;VH#=GV{g^Bj_ht2q#VIv8HPdv*M2(`Xe(tG7?(_BgXU^-j=QsoT3q{My>mP4DuCd>o>Bw(bJ@2}&V4VA>*>c|>@5q{Dk+9P-Yjo_DH7ZzEwH+_d?a%Tc5Iyb*h{=x2Ew} z$?cX6%6m??-FRf_m3ir%)ji4WcM6ne=!Dgjv`xNKqMcc=pk~eCiHS+tdqNjYpLp5i z0fR8J>w=~bX`_dql&!iIii2g z_!GEf-Q5MxbKfX-G^P9NL?5|a{de#E8}61HTUt^lR6KY5B;5AwF~e=ws%<~yl%CEz z+il;a^k}1g(4mRJ9)br~%T{m7dvkQQYL%_@ERFLo&P{gzf8WBN&&6x^+a=iog(;7v zHfPB>Z-3^nkXz?dqxv00V7N0a~zdxPN<=MXD zp+DDYTfR$+XUIykWRFY;4BYo-kM&(9&wJB0FeaNb?0NO#Zga|W`3r6J|320K@%$_P z>*MPGAD6%MYxypi+Hgi7WByYm|A~j{u1(G4X}R5aLZ)Jg{ILUFc0Xsy{#DghOIc9W z)*}}CGN&zb>#vSg)(mST7R4G~jR>1E<$-eI+w#s#hGo+jcf8cS;ePg`HP^zw8ecgqmCgKbYCX?;>>| zar(ncTi&rQo}RNmQGM?AZl;W)Me9#$m%lR+n|-6vUv!AQ}U!1Am{pR`f)2<&CDrYIni%q+_aVbNU_g7xaJu5fO z2%P37rIp$Kk8$A=jXgP1{sK`RnhQ02*x8kuZ-*v--Ickna>bIlzdYTO7F}^Ycw4k` z+m6^KPkXH^Cfs`YB?_C8mOfjWf8gorfa&?S_vkiVza`(XCV1QRLhqf7GS41Li=TdR zJa+z{^CuUp+*cvfu7n?sRkq28R^0~}gv*v86{lEQh z_THUz``9$S3Z-A`<}#7}I{*KZTDz}KO0B#tyJ<~;r=9w;tL==F6u8AW3YZf- zQ|0}?aG$vv^X2P4OF?Tti$^|hW_Q|(%WnLta@pT#XIL5&r-CrcNfyqo53Qjpjc2CT zXRnR1zpo_zf3mvHyZ-Uu#~E+h)VoC(o7~QB_i8&bKtKO*>#y z`K*h7o`G&_?G?W*T(+-S4DTGQ@D#myq-~zdRT)3|_Ic0uY(5-pFyms#;nw%PYa4$3 zvF*6O^!SG_hII$z^h((0$7?d~h=_?(I@56CS%1Bu+!SS%DGOpaW}oOduqA>&Wy|sP zvt=r}ESJygJbKRZoA&(VS%vL^m6L^P4u*R*=ylY7-23vet zq2GCL=POLIR=D0h-^Za(W%1IjrGj@@CjV|;(Zwvowae^I+IuwzCW$RCj=1;vtX*l- zeAvBy|IyPG3EL)q{%C%pODD0e$VQx7d%*_pnw5gr4terl<~tGbBH_JYBg=j-AN`s7 zJoyKgpA+(JSi>|Y_QmNEC$__!yUw3Cne%+w9IGNv`I+{Kucp0<{UQ7C*ojpaGFzq_ zzG>$8WXQi)y@}c7UQwf@k?NV{LbGQ#PA-02*i*P-KHJi{T9?%Sh&IzA-XQ^J^sp%*GbtE*h)J!q_*!^O$LX-Oyd{o3AhG98DKf2J)xyFe(Vx6xOy>}$Jfd-}6EOxcOk zAG{8HwAQvebhnPbz`;|ESB<;A1}_)7)1PTuctLmF>0R@+CtlffVuSJ`)2K8~Lsl=3 zt?7F4@^#D??r%3T*Sja>Sh;s~$^rhzsu>(EH)D(%#QxT5&lQuo+%fGshtiY)xzs=Y z&*oM#>#YpX^7SsAq&@L$P{?zERGS)~l0}9yudx3TUb$|{gLwa|EUp?ssVxDTfs0ul z+*y8O!^gc(^?ILg`>p5EI9cUWd99=7vMRkpr@3#fD!9L}`uMTktYNz%*wo?#oTPbw z>`CZkhz>X;vf{^o@3=c|eFv4K-x`I^SjCbR`ibG__Q_j94(0T!MAOT zQ18>7Gy6IxUR-Ru_<>jJexc+0g4Q$5*jTXiOR=PBoVy9@#9k|d7pzP+(Iy+YyV*8& z&3igUWM7bT-WqR(#3#jE`m#}~4S!=+1{#_z-LmG=itwzI?o!XCLK|4PrcMxk9dsf~ zVY$slK=>Pg3PyMLLlran9z!mPcLQSC9R*$ZT-yo<3z)Le^x&I!+zZyZmC?ciz_c) z@?RjdFHA)sXK?{%yldj?MJwkYlKHs#eCO$jrmo9Zi|pFMDduHsE;y~gtcc~ztmWb{ zvc{`f`eztr)-V2i`;nrxlxE2D!}%o*w`KpTN6dUSPr;Cd`Q9r}6_!`_Ca2bXV`+W7 z^kw_%=Mw~OT=P#n=bF0yw*K>Po9_EgmtM5(_}Xd8=HGT5EPB!wu+?%?ibTdF{>NF# zzh4AK&O6xw}6L(ba+?(S0*nZhGKF4RLIi+5kPkDK7{miE+No^vE zlG*{fr#(89LRRefyIY7bq7n3~1p-M-XwslARUkKj+w>9Yyjd@xnfnvs96v%56kJa&nQ z!h2atd$=C8DEW)Ky?5OzYEiJj)U87(%DJhL>rz8_S4YcSM?>eo#;b&!J9ja>%+g-m zU(b0WVJrIs;i`~F&s9&`^eqo`yd+tXaxhC;Jf1^mL&O~RFo|35bo35SsF~<=;iADs zhla2YxdX?4uHI8O$@25snVL*zxJ~6)7CpOnWFFJ~3CGPi4}0#(h>&Nk7f*CyE&Y>j_bErC%utltB?+0lz#MYlXus;#nXkd5)JozguUwc z&Zo6}0`D22UC&aijjm{`t35wdVYJa8h5xbULB?N=Yg`0=-dMWX@A>i6jyIk+#9#FN zjAhMw6k>OC%k+XLQ}uSA*m^2J!R{YhfLGW_^|+<>7uOiMozhs95Ur$YDJA^<(ESJd zjC0E0=)5B+u`ive#lJrAzvM5F^OxJ3*!Yo?jiFij5A*6qhS?$( zmZu-4G-?FZiR;F6xxTtzuC-NSItRbQrez!JxTXkNe{N0wY<%K-?8^3lPScNp7bCF*%?AVcFC*~IQYwbY_7dUveTt7DM zp2NQ}T`7xG_J`#cr^|_7GWul|j;z>nL_99!Uwf|L-`dqjo@;X(7Af>_wdb>5|79J{ zc{=>sjF{s-2fw;*tnAptdgHFK#r7E;?WrEmCQ2Er-ey$^&DC93p5cQt$Jv^6Sw z#S+U+u9rW%-B`CH!D(XG)qR^5MSA)sRUKPUc4$V}cIEvxThiAZ*Y`}>#=1jOSdPc` z?Z@sE5v{Vnr@ZqRqy9{;mQ3IB?);G}@kyKR2QazSu=bz+uQB(=jtwdaU*3zw-t zB$wz8N&ja)A^{0mHet-o8+7jP+r03f;FYPBVk-L|GW-m*Jl3;Je6^O#-RexYTXL(n zyRV<;|8K*eAGc?26w%Y&;%XnL`c7`z)z1&b9Oo@~csxn0Q#iC^&XKRphVDEI_)fab zYj`?w+kwf7HgVe1{=C_E;?jYApL^P8xPG7P`lX@7bEW#7hEJ9$Jr7-1-l#swaqhf+ z&+|v;*G<<@ko+(;;i=-u8H@UY^SM$rkBZ&sHLbH>=CY!&k}XX_hNbe*;!Z`m{aXUh z_#I~~sNKNyscA0b)iaO0IG?6In;^UP5>wrln&z;pqJCkPPXjqcwRzoc-pEWmcmBs! z&g`8|ioBa_Z8yG~*BPq+|G57DW0ta?B4^H@+0DwvGQaDt zP>77`zRnr%y2|%xGmVkCyQccUUBm1F0s)&o62}>NqvS_ zzvst=k|JAF7X4$K6n*Ggz)A!Ci|*pFvR}*Bv^;4wvJi;uJgQ~u&eFK_hqbcth4tUG zCI%XLdhneWoP5*RVCxOW0}f8B{Lfu-HeBTK|EeeFnopBrt~M<8zI^J4;DV#d8*VNx zZ}1U}eD|>1C7`wLS7_FmY>jhzSF*3)-z;=wg4_SpwcaAl#cS->Oc$8^Sl2xKa&zVT z43F#Q6{oDwt(kXf?hKjr7V~GY2QOMa&5G4h??Xm=63@fOoJTu4y)q2v=Dvwuu~601 zPsP`ohoSk=x(i{EHy>IsK{TNxj@?4W$@&SI=QjGQtFPPA8pf$= zD1UFGj{W9osuv~+YtOm)^9$F3_0caDu?b4)eRbdXOCbe+`Qs@m#8GbVqXktZMa z;5w6zkk)3&9YvaU8K#@On`#U0Ic{my^vH|)Jn8BG)JXQNrLK=1!snzeT5NmZ)X67# ziHa?zcP6$n&NE!V!0FsIXXA^@Ec3Ri%^7kKST|?{4d^2`_rJ zNBWUyW4%`UZOx5EaSQg_uKN0-C@P2($hb}ri) zKfcMbz3*S+a`&+zn{t8fH^vi(Id>RbU^iz?sO6Dp$aUKOu=V5POGN_nrpZ~T-xaql zST*hAfs4FfXD07{pW%N`gT><15)r+`LsR6^CU;gBc|=^AS0R1Tzr(A+z4PPE6iYEL z)?mq75B~}%FZ&w2%%%3>o2hIC_8kxPycCjD^A4=j2z<27=COd0^&(~cN_L5#%^$AK zGG3joqwTHW5~<3g&KSwaWwdJli~a1{j1d;!40itYeLJ7QS}Wp^yy}@oFSR{x!4D3z zzC3+7|6qX9`aOlL5m`GfY&fuH$1(0})@BFKoNqAmo*^QdpE~(blOikk=AWC5)YO+7 zT<rRK7s>v?TX!-ffylcRjJ6Gh(Y zZ;9;}?O$AMk?y7cVQRw0l#bf%&pKXgTT?bq}~YFl`xtA ztGKgr$;y@+_VsMbzSSGraZg)3|3q(0{dp}$(RAaEb*Fs3D4*af_ECH;=JW_{yU)GF{*PV)jCAH6=*;Y5QC3l=Y z|3skm$x$=&$IW|^z1Bn zblQ;R`NL}lJ8TmJ(jN4_4a!mQDwyRWAa(lv!pbcT>EepMnd%;#uF9MzI|5HWV!5C4 zZ++dTDW#39^LhHC5~HTh?0Cd{zA`1@yRgLaUn@hScG#p_E;nD#veaGV~sos-Qr zHX8;mKelBJ3-?XkGe`trTwoEG^Q>HftbXNT>g=M+P#5*kvr{)?2rhc5Qpf@|AOEgdY8lSUe zXo9JFer)sK?@u3H^q!^J>$;%kuv*sPo*b*9?>m0~xP4^NyJr$E!kcCXZtn2rc+_*- zKKYD*O0aM)x4(Ta1H*=zMXUDoD4$!ue@~1})oX4Sow-NSKlLWtR~^#udRl$NHdZ>m zZ*S+<7xvZ<#lO|0vHbfXe{bF%TgLgzEB)9^ich8=pVjtc_v!yO-1~og5{m!vX_86& z8fUwPq}pD=tisRtczBYJ+|<6dF#miWci%hve_!hpj#-}XN#As^D`ljl>XKFS61?_{a>N^Q7>YWbc5liSBp#39%m+Rc6tBa zu_a1KWqRxk|2F%BZmjQJlrNu8nfk-s#b{PT!^4eS_Rs78#;1h;{aXKWxx(?VQ(eUs z6)&Hr1v36JTI$LDkk{!TpVfQ?!xbA_j++1B&A)%P)c50L$(;>HF9_zWHlB+pf3c`|dc- z@BPb!)Lu<}@hD}U`ro~)k38)4UA?qdM@(7F`Oy($A^m(Evhu@SucNd1Y@mSf4B zAuF3>TZ}obuD-cdJ@9VR9mWf86FFWT->ZJ7Gw*OgVQuBk9kDSx!YVAyV~ZsBw=8gf z@wVxO|25X1AD;+joRWL!$r=CqbbkD_q^CJri3KeWw)hJ-!Z;8y?>u+dfJ=% zg){v&FFl{EdTI5Cr>fQb-GY&UPW~eHj$cG4{LOgW{ptE-?#g;LVI#9lIRU}ae>~lK zpZ8Q=SMqIQmiW+l!d5&h+bN-qcaO4n8t3F?llo1JP9CZ$lrj|1{uQ$EzypOg&W=uQ zH3@45PgdiFYIn9-Y^uILNnM7UpteMVrsEq<1CQ`|48LCPu-^(n982m+~A#`aDG}K<7w6%-xBIy zvKMD+1?F%C^JP@-d;fEf7H?wcw;m;xsmHcW`C)#3sg230%YBafeKzvQe7AC%a!aBh zBS2pH($YOA8kPyUJ~tJMaJ$duqrJ$^;6%F!ciEnsLRVfF)y(r%E%M`Q74%e{F!^zl z=q97h(bLwv`lPo`n(JYQOK$X{nVdaaAFE1m?XV~`+Wqgn+~aAV47i>eP89ZDRC=jC zDREK#j#nNxT;}FJbKH1m=E;!nmP;ZW<1~%Zs`#BHP75A5xM1qry^?+T>i2r2@4k5H z!D0DVIcVYMIUiQK|5?Flx+nHU5KiVbxCbN5nH((*kgia9SY7HV7n;;(LC(l5KS zeeWyEq;_mNIPuApB|_SXkrRA67W?_luVb3B^V{cESJ$kUDl1wpUq9*f;)U@)9^)xr zE-#qmasO=>!_=M*4v!}N=@L;lLYn5dY`NgM;5x^vQ~HzV*qoVUvGqazsWyX5Ek&OR z6Fj#>D@Pq!@1@{=v@udl{^&zreg2#7N$VVak~qsXRi|~D+z*(uRw(1-+V2~8-#NZa z=)t)K}75 zh27+||JtsuF#6{6t;1LElV9cE=Zy6R@^habh-~w=>E4_?<6dOB++Ohyd-Sy~U;Oz( z>BfTdGmmu4dLo7w|lT!+naNrY3NUzXFkj!fZSKbwS{l5HRP zrnTQ!efnw->#T~{DP?J1pWgjb%yqv}q^zQb#ClJbmZ?Jf8nPhh6y^qp-||hYQa1{xc1;T2rx9KERIo(iU00 z+^Cn@%zI8x_1IK%ZOT&RKD&R03jbfJTP*+N%#}4=@22yO!kpb1?VXug7bB)TQHbL` z^kAw-Xrf1|Y3L90$SjWFOa2RmQd46uqYkI?4{N4WXH4}_v-~VPdF$-RsK%43 zXZV?)S!vJg)p&g4`kc+xQI|SoPqFH*i8#cvYUB6LZS60VJY^~p(l+J%H{_kpbi=SC z)x0votas+&S&F|p!#$@KKR#9_sLp?-_CndYt>x=noGTx;@+h6`G1W1%<(toa#$Imr zyBROe|9ZXCbm|F>gn3_Iu%0Wbe8jF^v}*~c`~v%Fb3a}TNt(826Gx<7SdD^`PFH+* zu1%XloAJxz!fWQol?FJn%o5GFDB36AWwGo!o7?vKI3=^%;Le;w#fu(yZC3Ay;k)=) zJz=W*)A{X@>}o7hpPl?CzPbKhCFIfEJwltk<+wMmn9ou=(Ndvt`hMN%Y*SDC;5)^B zb6-RLgXj!h^`^7^G6`-HM^F0ZvK#wnT4`O&`Q@N@pk7NJqZ6;-2*G?CSR}&hzVnLKh|b23@=&*SaF`!lrTF;m;Y~O3KS!Gy)gJ za><>Y;v9CLVZyA%otldaGJ`vRE|@i^C3%g@u8^AF)r$=3C3O@Mr+#?(K;Cb~%KJO* z_it4fK5bjs;=vc8Xa22+!EEzKiOU}Q_q1%^+I-n$Dg*z0#u*$d{M}-HH#Ye$X`a7W zbFV?%h9gE-B%LNZrmJrHz|+96`1{7f6MLGSL@WPtO&6N{aJFjsi^_eze4GEx3+?&W z*7`V6!YpRy^nX2xjuua@WliLsf0lXfihI8-)-7mYKi4v&gJaX)C9~%Hs%|?ZY&r86 zr$&Ro`%OMoU(R2A)Yrq$xI*iRvC!0$qFLu3w8R~9w%5IDl+*3i!y|JNi!`OXk{arJh`HS z?Sd^XGw0ph_c(E@hQ{NKGODLGDIa<-`R5V0=_SP`!RU``S0?{;Sw3Y;E%(mY?59n{I72)lMmCq%QX4OOD3Z= zo-vLqm>tpsUrcF}n{@Z!3!7xa6&=jqiX|7VT*|VyLaZmU>d1^kEL){hmb&_PjCd;oGDx zGsn$Q*}Qn;Mk5Z_uosGMhk71yXPQhp{pi;ss~0y9$sPI?E1^^%aihC)1xF@_psCR1 zJY}8O`OR$HMLf}qLc3(jocSb#ejK+KD(wFr6!2et+WZ#=2jpgc4|}7>YU8cg(O43| zTQh3|BRiY%iJ8rMW#?RezL(pXv4g{dk#o`G{(7}ZS5?{Tk8OIt$mR|AG6-3K1J@3UvvLRo3(=A*(-PczkU6F ze)(7KNL9b%{M|=b#kPEqkE{D1W6!9i`F|4oEUC{+g>Ut-#{OG!_rZ;zq>MdV{%GFq z>2x~x|Nj5a?_*pS8{B($KEj4?1@8}ER}HJ#3;y}o|J->|Wy=QP?%J=mEk4RT4Pnn1 zGO{1{2An*3=$4$z=Q$T9oUxFb>RJ;@MzX=$McSQ>tqV3D&^vhLT98uS9;L;* z{zOSk{*Q(+fh3{n6}woI=L;wwykWBH!5qmrY5PSt^p<|h@#ft2u`N6%x}q_) za90M;>O0rZ&3W_9W&h^&OIc3-c$eL*O7 zY|gT+eQ{sUOXI}TA7Wo@XY@B5{m?A7QRUTiS*JM8Bp;UoVGfIDP5VFgOb<*;jI~)d zi}}uhWlF|=hk0Ti@2~qmN9@DA3Afo?HCmEhuejP+!f8|TEA0TM?)OJ~|DKDB5Wc-f zq3Wz^&8`|z7WMwPyLS#8nk!n{zM*5O{kFFF~S{v(%hE3r{-hzryKTrYrg#!60ue7I%PcXdZJatE{Pr?Hh+EPOH-8c5BdH*c;}D9 zw-$d1(?Eabu(oMdKjaR)?eeMkv)S?N6EXf%x``fMk4+M}fw}6?`ggTyjo{Hp~5+gld(CgHSC%1wgZKyfx z^~r0(mmB4VclOk+x}uaGv~Fi~=jKn>>-Q_3ex&}UiM!#T+5bR$L9dGo6dbKty)I0B zuGW9+T+qbFNhK@R%br%*ZKKb+z_@4szu(4Njwn=^yEXp@*OQ^*OM~q^o5qXeb8nQwo~6;{313 zX+oc#q@A41X}QVb>!Jh8_L{%*%Pq@A%#+VKRCDq4&kNO#+M(IYw`|~6W#dxr z{&_%nX@9xbd@nD9Ul~Dqtq03bEq0n2EPi&9Wa5Sme}epG)Fn+}*f(Xy3?UQkBgQS; z`i0azk3QYMU7^pA>z%~?x<8ZueV)p`qtPekMQr`^R~a&g+kH$=MQdEjj5q=cV|*?v7d3}XG1KSSvibNot*}g~w{O#*yfQJp`*co>=E=~;tCp!J zPTwi2E~+a^n-g>3f1A3C&fGupzqD(%PDzl|&+KKIQ1YUc>G{-Hr;_PHT8~${7rTD3 zW|(q8JU@m@s^{85!}s!AF6P=!5^`s(~V!^y}#o5 zr*RIKkA=NFYV^>Rd!4@i{r&azj@=~-g?Syj&!@Xg-Jr*=-e0$$MMg8^q6UNMc5&WQ zAD3$`wAd%+b@#)R5V4R6otl^Zr+P`OS+Z)*rrWxz9c?WOLiWgB)Tq;A+`DLL%e50~ z;lir&>)v|a(fHfBQdf0>+q5M@n>3@nHuU6t-?MG;!A-%ZZXWY8>8WX|__=vfM^I;@ zdH%lNQoK*E)U4Z|Ec$!@#*J@OwJ&#=NmZFH-E4fUM)sn?VUT?NcSt0qTwl`e*=!P>V0^^wswanxX zr*Q=IA5fi^y5#cqDHRg-2~kQ{RlRRic`0!5?GBt3?#5}YxOZE1iM@fbS*sSKududf zB8zTod%uCEVFh>1-;Gv1Pm^Z4D6z8_999(X$T)lEes8TqH(yMm*Nt4Sn(pamPWdf# z*E{AduQUJG@ADs37>b)ugk6+jyOp;r#%%tYNkV?nUU#@RJT%%wP zB|li}s`9w0oUAe1>^NuDiuqhqSt`$7dTZo4+h^?H@>doU58(bysS+;%>{oC4N@b-&FqfX18ZW)0Tg^!QrB_}yp z{&wjs44iX_W0e<^$@2Mes@l(Y=zJ6nsDG{{R_mOy=KW5cGM|L~*N-LVC)%(*-d)$Z z@W}cfZ25ehCGXF_kb1TMv8JNhKGq*^WG^mA+Hrr@_eF=Vr%x-YnMO^M2KKP>F5X?h>yK^9=2W%=;dC>U~ex zy6BX>+wPa@jz`1xr)GY!%Ucw2*4Fsm?a4DmnR0E!-R(oYu1?P=)KOm{a&`M!7cqt9 zHV4+dJQ`Yk-0KX(LoE)gn@9W(2~2f3=~cXW%O}^&Cu>aXf9nW^Sm+c!RQmfxBX}u; zwW62t%nvKvUN=j&Rx@qk)86veLgBAl>h|8F$M4%Yv|9fC6ESnw+@;g6u3}VCI<-tW z>G`(Z!ckKt!#Sgtip-MVB=YH#snQam29=lUF-K3%pM8Zj>(AGEr+ud_k469a`v0lp zmKn_tCCs}01?MdMQuPA1+GIwVTeCIWx>6FTAX=}H|DO>kkFzwwZ$bV*UM1}~{)vdxyy$-W^Kl|}` zzWTSGN7Fy9Sfnwf=8#sxtNYHUY#u)kn0bBs!QJ^S|AdTQv~Q0S;5)gjeTiz%$K{2( z6XnI7SYLh?g+4r?i#LdzQSA^Z7>s6{0VVnEu?hd2Q!5qw7B; z&1c#Jjw5Z9^xW$OlOX#)_6C^pXlk^XrYp8(lt5#UdFGP-tMO&8z=hfa83Fw z`DCBe{aNIrwQG@7N(}PpDD&xf7AR63tzmC zQ&qWKxyeX#*?g&~M|KH1q)a$%E%KvFxLM^=&Q2pel~Xy7mUBqWF}*LHbaa8xi$Jx4 zi;qHj{Qq};aGKoA&X5$w^nLa(*^|4|WxBbQ`;?Ygl^F%z^kLh^e#|-QQtR~9om{P~ z6S+ic`qs|UOG!Vdxy-?i`+RG{qfYmaiHnWDOA4NGkO`@`nqMva`ibBz`GWuICypg^ zwA)TqpQRxFC|F{Z+~TIQE%HlG8l}$kW7y^^!pZzKj4y84ygkOvR&ts1RAr@-=DPA8 zWb?~=r>4Znbi{+lN2_3I(W^jtA+9yu^ zBs9f1^^tkXhtbpDs--`Cl!S81ql7rMB5R$$WL1S~&Sxu~8zAt; zTG3JUv&(!hHJ5hn6Z?1?{q1{M|JYeC^H60z8d)4P^U9w^0-?6IIhVG+{u$B|Cwlsy zVQ`(zw!EMxQh&Fsi1?a(TzdAo$_%#m=Qc8&O1|Rpb$7~C$yTOI%PYiHM@NkMG4PsKb@|Cb~A(9C$QeDU=!lNUTXe4oR0+nNh{?wWz= zthn-jJZ>Su56z>yQRln>w`?(J*{(1wZ+LcJ1c+9 z{bsX%o00y{rKTG*c}1t)`Y`ij^#zZJUuugi&xqG?K6jtFnx|s*xw)zhoQx8RaWB3K zFHHIse{kt}@k*{MpL?pV`L*AgI6omvhwGCJk0rx=c6O^ptNuu@Hj=e$ea$K+&~kp0 zhHl*~%i|`@lc)4}Sw9Ppo_YO`&0{|4>V2hxokxVcv$s#(c_c}9gNF~d!Ds$wazDi% zdL?W+tzx+Rgp_+Z&nJ(bo`5TTqM>XaHm6N{3Ow#>CCa#-TG#pbfJg`XjGVe{&6Qzl z>g%27=Wk3F|J!$8AT*5CO(s*T^W+Dq~@q(416DGFT zXy4jh+2dd-Cp5vaGG}+?->E|IY_7`sHxoU(?3sq`Wme@#q-~KNeN}v>B`?9t^B$9-@U1pa~ZBn zZEm!0wRt6zV5)S7?daX*q?T5Q@B_+vtuQ^={~c`E~!864g8{-ne{z9XCJ zx6HHB-Ex8}KDq6X|Fw$FLJgZEokt~F7z!N=;{@i)pS^9eFJ!}>IgSjEkKeC&z`ypX z^7-U8g%%5&lMW%XIBs43q4>ph=P3=A2l>;TbQL9-+%yedznsC=A5nhim;Cdk!sjx2 z?f;pv7FZ}p^etSg|0s*^vBnz~_Le!KiY-Tr^4=_*;nuup)VA3O36ylRUe$Qn_ZDyQubicd>f-h=O-RN`}4=_ z?4vd6Tjfu6at0@v1{~)&n$gE?)R;Z#`tdJ|UQG}v&WIF_lbhhWxtiN5RaIauTls=b zAq=}WxZCmmpYQUO=``cjOzlMZeV_J}-?`bu@IWHJhxI@`Q|c*osh>A&jAf3`IsBK^ z;QD;lmY}vXTvO*rJoy#ev)BLcvF?SF&hk5&o2-=Ns&9JF!pCl@^lk3b4?KSPyGqoz zynFp!{{N$vZ-*Sy1aID{8-dJTJj4FTOH`wP4}1 zyE&X^n%4*%ii zPa|aI#C!p7j;0N~_aDt%%fo8ffBldjgC(yQyJR$H_nJ%QjoJbaU$IURRml!L*uP$< zXv&$6(|x%YT;A!_JFz*&U#d?GUNnQj@!0GB`nUyFZej8s={`K0RZiGgtmp?T(?mQBCB z+bcG6!Q%ce>ugspUF?%uE9E@FApdI=bKa+OYxxV5H_6rgJ9_`$+xwG0^GeyjeDWvI zV4tej;lt<8%QtQkh+3~$`Qf4F6KfvX+qLFPiu7!3jgw9p+G`%rTcm&TdXCMZa08VC z=Nywdt|%JGa2}11(O2o}eEeYj`uM$-Vt<)tKKUXmz9skJT-Ap@#?yKA>z)_?I{&gm zr$6~=P$BzL72o;{w&dG-PCUBC?(u0el?vNWKkahNzZyF^HTLM=gPWXvj~o3K*?r{y zTqe1`m-nULuc^Md=s3S#?4F8A&o}K>-n_JJM{k?+jKdEF`rA_?EDlR{J^Ox8evV>~ z&|;4^m)(n>=pTNWVE5|5KL7Wnw^gGJrsU>XD3t_rKcD>dw7ICP!g94Z&Z{4{wHnX3 zGi%f3uiGD`S>>8YJ-L_h^<4Dhk6-pA$9+A|-t6{zkE!fe>BWxA%a6(~@8m7)is<_J zWQ&t`bK?rv^H1Lw zdrm`oZjZ`AzVe+@wz%_OH!98(uI-b_4_R^e$Be!=k*ll=x__^GnR9|KM7DKX_54?y z2O^pbcMAS``u*#@P3hYgKC2V5(VMrQRpjBVDRb8us&RK`yjh?e<&f`wd#=gjb6fho zc7+IMXX(u?i0}|wqsw?%I5I-rC(HAX>+GCW{MV#@CGuta)OZwJ-2B6P+FX5~h^DLR zyJVWQX3aa7c<+c?^3=7?dqOAOpR(*^km%vQ61B3ME zy!GDazOFg0z*)0*U%- zzPBa)UOip#)6=Ee9&h(u*He73Ni%-Gc>X;5>)V=m_i9VDJdwRTKgOrlX!&7Rk>C2! zS2T`P99@)G!pu{9TC3>g<>i~#@2fcKEV`{tA$ZQ;*#}Q;@k|w+`zY$_HrsVGs_rXG z=X?)0zolED`pmi0EM!uZ<`*u`dg~nlx_|%d4*7RuTYOx@+%xiOM>JnvSYBS{9{c0o zT-(UP{5!8clt_1-;ktTO%GTAMVasQw zl&uS$y3udLnhECGqSShpan%LKuk5=#1h)PKfjKA@1?pm{tk4(+$OwNDQ z-`jg?&aa)*601&6S(|am#M3-2_($}P9s0Kp-Isls|B!3b3(orQt^3&z-4B;+)l@3< z`0Bpus)(|A;)f&oLRo_U&2rz0^(=fdJI$y1)D_?L-B&hEQ`Ne=sbI2Ll(>(={M8v= z@onM4%TM$4ZBttL)H-!{-?qFIA@Q}RRxb2rpR%{+vhxGu$7WA$f21E`k&FHQA^6Y+ z-I$se{hZP}GGzNpivLWxso^ty>EFV~a>jEuy*Uw`4*~Vne@V(pd^Lo(Xbr}r%yxvaZk(@a@ z{7Q0(WLMAOvrmqPEec=O?=EkBvj6Ur<8hyo?SB?d_){_U$Bap@Z4F} zN6qVZyyIEtf8=|<)BUpa^^bp?-u@>)V$yrx|96WDi|+3Gr@CX`F1w%p|8LiGeQ2Gm z-}E}|`L8FP4Ch|&{E^EoZ!9?_y5JM*+?r3`%=L-Co9q8)f3vyx*Rjsl@@LZO!&igk z*DblN@{lz^M*U}__qO6Q?Cy1j8FZ+#J|_B?NPXTDX_TN@#mQZvBu06o=-mW-mjRN z%04%5jZTDJ%Duk(tm$)y#?FPpmf8Smb& zmCnh&_b#lgWS*x`((~Q&9g0NSvN&F zV9JUF4%7H;37j|6`evzbIrW_L?kx2KlCNUt+c3Y_VT-M@*&hGpioONB;7RKbd#1ALw%xPMI}UoD(fTx3*YDAT2*0GwoN8r@ zWG*jVvu4V>iOb@m`;sqw>-oN&!P(d3r-F*E^y${eGgI6h=O(RrWNDbU_j|$X{pKem zO$B;PHmFrkcoiNrFX{Z*nWj9p=PT3OZ|(Godwu*&cvN+|PPqHwh!d<2tZ%fj-ENzj zs{5C3=c+qZaS4L!lKS&`qgA9U&P@7~;(u^L#+_N^GTQTVyqYh0{}8OMlE2QjZu_&l z(oCoKZ$2Jo$QJzP)r6dHGb~TPd(T&Mv;W;EhUKsKM<_Sv?^_kCH0x7^jXg(OLx#*6 z&9|xPI>lO{z1Q7~rf;&VRr%>>(PZqI@?!OD>8|;5cevEI7CqX>xy7z`PxF&5hr0|; z>(hVe>ZT-C1ULV&;qPJn*)ZWr!ES}`{GWLKDj76I=fCvnndsUm&~*BO(aD{>ddt0! zTee@hRr`Wf+ey4}r_UPe(;vk?PYvwJUd=XhTK`PZw}-c#nEwCAmu9t0t$VdsQ(c-_ z=2o=cIQ`dA?gocXA%}skq9y0M8%>Ymv=2=WoAa0F@QIg;o{3q9#RlDJ%I{K65a0WH z^83fO9Dz(%d5c~NE{dD|o@MLN*?zLOw=$f+Ezmc~(XQ`-?xH;s%Ef=qeTb>ZlmFu? zC*pZUQ>TFWdEH*=z`$>d-aTBg^R!&g0?BumET!H#O_@0Tqum;vB%kZW@1Nfj(lVZKxv^ZaXj{+nC!g5s|6k^PX!h>OUR%!mi&j?K z>)nE8tSr&z>a$_H{4vegXw9S<{d>MHPP3_z{dTfqm;2!gkKpq!<(3#u*!TXYRqj%C zk9X02`l=C58(W@i7d)Gvyy(7C?p?m0@7m@{KC$RC;JCc;kHLe+IpW9q1MVhE);d~D z&3<5+l=tXz!_Tdmp$$o#(l+P}z9HIiBtp zp?qgGDo?9@$W3CqueR*NT7&kB`upeQ96cCzyo0YcyKSAu*|Iq)o88auH%o}WeXF3# z^INHj*&MNpZgCsuwyV#-{$}MGCRSfpk>Z8*Zac2uDA~cq!Yp`7!{J$>W%1f(a8dGKbgtxi8AAd>5_1GR?_`})ihj$}i->j244M~e zIbT*tp0t~DJ>1i;$V7a;nnK}&V~ZD<=bX|$?RLx7z_{0OGgH2Zt#P{GU5k#{>Gp3L z^9y9Hr{{CHyUE`dkh0C%xACNIy7#_=yKSuYIrcsD-D+HM>xtC2>eE|m9*ADicpd%3 zRr}bh8`DFVsP^AD`a$IOQY*oixpxoT<&mGjeqcrQik-*v-s@++JNW(R^7D2I9M9NT zc5IN;KJEF7A-3b`mKB#6k9SpO@)SFjIWxSIIX-*lyT}yngHDuVhNjl;uutjHup!XwQ<%4KM6n#7w6zWS^7ov$IRWM|{@7-Fr85 z+MEeI#xQN$v)|nLA7)e@aoebM`(ErVPqjjma&eCnmBJDG8m~q#PisB=*EJv||fZkL22JyJ#7-%`xhi ze$M^SY4Ihu1W)Zc$j`ZRmCu_C&0gCsmREcK%RHH!EWCVoz|7{Ym2RFf`AVXg&I=@y$jnCvAO~tJ}rq$*#K-_NgUTJeKY8JEgtrt=4I^TTht2F3#O+e&eTw@icCZ+Z-&x&*P?WS8mA^ znDww|YGrWImCf&j7cNYG#umjh>*p`$S<+kjM0bf4oXsn^zwvU|SC30}E|dPsDw4qx+fy3?S9Pwa$U6D- zfO@q?-P|r0>FVMap*C+S=RMrAJly1Xij)=0wgV^DwH%4PJ#BUh&)ei)Yv~866J_Uh z6}9XAe6&;c!mMoq=1$GQH@_|Zku6YrY@fjy);GbI4gYP}GVOPVQ}*&j7dCjAC$s3B zu3+8GQK495c{sqVf+L5y)81p*ML)yd9A#rt?JpLKC`s7vYJ|KIY(Y)Y0r(D;>%pzxu*H#3x%e*rY@GHS4f{9wz^R7QuI?lE7gjUgEt49yl=!s`Gi=W?a@$SMLqbVCbe%t+U z)0&Z+6@4yc#}<8wX6+#PWY*m$GCv9IU{T*Ml#_Iq;it)Li)TN!t(TON$l3pDQ)k?F ztJ;m7CA@2XR;S36;0FvopLRnUB1j_Q*TXyoSSP(V>T@Ul(>fn^@Gb zjNxctuD;iH>6`Y)l@2a4HQBQ@$DYaj$-1ev1rw)D>27((e*WvT?}x4PbNZ(By}bYW znY!yP3zl<-j(_wln4YX_#kV6NM^^iEc-3DIR!(1?Rpn_toYQAk+N}<7UF=g>_I9Oh zTC4SP&c`q9Dtw|(CBLzhda--u#fnkmIhI+OIN*by*KQkp2+642i z9#GiRCaL!QU~*95>M8y)EZ^VlkZ_NTl(4w`NU=ar@ao$QH$8TV7{q_@pWnY_-J{2z zu2ydjM&B=C|_Uw5=CKa_h7F*R~4sAzji*6eam&HMiqD0>+7C*Iu~w57W%B4*J2># zX1n+OovQcB&fT&SC8vd2pZ;AdnyGRvMczhDbQPDtJ95alLm%u|Q-& zjJ^F$_l>L0ZERcgZJmEy)V)J1_0Cyu*z?1!`NF$r65Maz9X&RS%QjVv>miT-VpHLr zj`tML->_b?R@Tt@#*$Z0r)jy(QY`6P?q;6I>HmUJd$G&*cOFw*o@kaI>WER2Ix;hH zcXGNVqcQt2#fkX}y?tBU)+g=z+P?H{w1pMh^{&=6&%y-Wth5MK7hPy2X?gF>q6c%; z#J7iDyQH{5V##hExy8*#*RbC?CI0=z6uuQ}exH(Rp5!lPY!yHCsZoFx)8Ul0)@Q!B zSHD_YnJzeuadE-B-ifYy8Yu>w|K9Oimy*NOu&r$!`^h}-@=dmzCu}W0qLa+7cbDh5 z#hj=+OH(dv|Mg_`^?OX;KAtf;5ohuuF6F?h=+wjBH#{_(Grpe)Kj9~`*g&pKYVL#2 zwNJm5OBQ20`FL4Ahywt@>Ddijyd+np24Mg6BoPJS$tyF+`)=>uL;eX<#> zudlv-s2cz0z#B$^Ot)MW0j?ygKF5Bs-nzSod6#SV=el}l2Hu-^+IWesEK|S6@n^R# z9+dwS7`WS1>s8~91gk=&*hBw|(tgZ4>>aJEQ=iAqC=hN`zhG~=g^QMvDE}9$h{r3% z`@X-){>bfQ0I4##%gvp-Vs5CvHh^0$zP3#M}&W;cSp^Yxbk}6CAQrwH|%Vcyq71kK>yT6ll}m+Dh?i|4*iE( z+Z{_kt^3#hD7am zM~`W@CogfAJAG{J+~_&S^|(yxIeMH|-V8s?wMF*5g`CPUvFq=8U6&?5+;!HaX`_Qt zRO3x?iN}2>k4`yKTOe%dm0a-p=fes~p=$!`&id{6w=PMwGFP5OKaqLG3*FScDhES! z*S@=Wzq76;q zPux~K*q-Yt2p> z$5-)hmOi?2=H{90X=yJmUYMj9`R!0$@z>q$2Y8cSef`X;8+LZe^@;0a-j@1oYJKj){j;1F8$N&*8)~styV5sc73Xh z#>11n+MAc(vV7ni#(HpTScT8~h;HTS1t(5<&d!;h- zpB-p3PhY)O-tBdW&b)%>cXgEdZEUuQOnW2RE6*gY`8jHDzr^e-vJ1*>K2|=Rwdu>R z57rw+6&O0|W+&zU|M00=YOVW;{ab4e|8h9jmTlEpb;|IN-h-D_!Jn8zGc}Fy%VFOQ_s;UcvOP#K}%K3*;6}xC(7|PzE3&6aQ^=--xqvb z@@Z<7yD;aCSIbWKa%4wG-erHa`BVGGJ&*2b_k0PS*mx#PXril|Nr_MSwmT~Biu1Rx zxq4O6K+<4 z+|rB6wefWvsqK^Y*^Is zLt#;SUr#n?h!a2gyE#FldEbeE2YN?%4&F047`UvAn0Y_QnyYxBT`hm(N*Nza(ebP4SyPS0hg^2<_Rrp)jOzy2s_b z-zyJ99%4BD{@R+nNwv=fcCanpwP=^8*7s@p!E>u;Karff;+C zBK9iTTf%*zQ|9{S1t|a3m-#%;_V#YOg_~y?a6-%B*t6$dZczAb$2ijxa28%jTW zQFG_jmUGs+#Z`7MOr@R&uf8s8a{KMQ6sr^SRw$^@acq44N9;`s^8K zYOvSP;H~MJKhAfqEKhfmvu7=8<$QhBWNVPg*2^YGf3zDq+6E|}_7YGMxeapjrWRNZ!h%WjS5 z@e}jrdhOzxRvchu_SR>qzgAWA=_bj%z2{EG9c|6qSoN+|boCFFWf9Iv?n}&HWwCmk ze078W^&FRv*Gttx|Ag)@J9=YZ$Z;XInKLe2DM@#mHYYLh)6rtV`e(Dv|EWo>jk&?K zdQ!+~mqvlRpM`y9y{>$@^wF+qE)UctxbjU)5BTqkvH8_i^Y!V|M;D|2udSXW8+&Gj z(d$|(Bj#$GJ-pBT78)MUif?4xF2X!*wZLm0iFMz0OKw;YCMHoBZJ4z6R`gy$?I}l? z7Rzh6ofo~R+n(Q3w(V@W8T&!C;)FXoKG*s3ww^tj=Jor=>|meMQTgk?ev8V#U!->< z^U+U>rIQxjTQq;mzSX|@Pv_*jugcEK4v8?Inv;~1RIO>8(iNebofR2;dY0~UrNU)d zoy8VH?S%(rPtQGKw(`x=$ek;C-Gvq-N+c;_@rL_2hv^ z*W&tHStcbJxeGZ1Dz{z=)6U&`Y1`A7BkZfVtZo;2yqvmOw|0$t(lg(D@9UnCDXx4w{tG}$49-KW;o^I+ptp|)(e9eomL<5 zt>Rv6a#yVoK=?lsqb0Rceng|rKxA`%~^2k!`|82rH#oe zsy5{;UA~cjt-7rPXZD1>lg*mc&rf~QZp!oU>ZNs;s-JGT8R9GQ&*vlemC0hzHga3Q{cg?0JC~i^6D4H6cY;-~ z)Y_;^S0}BTRuZKeyLwv5?x`g|h1XSW%JIB@t9?nf?3N|o`b+#gudh>$)qR=exjgjJ z)@;x1(Vo-oAFfhAJ+0(zt;eo!j^4YzIK7%uG8bV~y1PQrNxSkkwdrrRwN2IbZ+d=a z-ItA2V`o>!G#j1SW;~ys#guW`)|JYmR#kfJJ`o%RZ zm$gn;v|7SM7wzU2eKc8Y=~9jZ@9bC-z9%%VJ{nuo)#Nk(%FC-k%cogwy>d~jw2F0! zUtP$?BB#C|V$0`TJ;Hv}JN@JNv#Zm-eEhsgH8x*<(z@~ull)>H2fIjL%UJyO`l5AW zrCV2A)_V2JTDWv(Uw5=mc68>i>%PxS{m*=xye#-n?ed~+`}r+zhtCZ8-JWg!_Vl}1 zmDNi`qF*c!ySjD7I@hgXfwniAtxE%bn|e>VYPngvc1@0=&5d>exfLxR9u%~GNU(kW zbU{gFP3Y;zQF7NmMXa{jw`%PXtCS?oNpG^`C%t)oU76&*`bp;1 zuVsARGH;bvZ`|s)b*`7^;%Wa*S#P;3)w4m&b*siD?JlX*g!^hQetvQFd#E|pHgwyI zTkH$w80>JK9Q)|eT(ebn4LV%0MGR+G@h{k##ISZ1|AM_q47s(h{CO{gueRU%YjOBr zO{Tx^^`1}5@9(~_<-=OTb>&Un0Y%4`DI09Jx`g;s_-DEZ2sU$g$n%=pt{Hr0mA+xfyiY*}J{@$FJS-mGx%xlylP zOtpG@izlXL_q(8HZz_+n`@0$z=gqObaI)yRe@Mer z#j0&xqtR_PJGc7PZ0RD7qAc0kP4gy%o?rQ7;Uw1=b`Jvh#dx<)@0oK&{7?|{!fQ>d#bTmZ!&h3Y z*t>XQOzMd_wGPeS_(PwmJg~37p7(9m+Op-hU-PfBo06loC`%*!){~6hps3Rqqx!O@ zE^gkn>!Y83`_Ip7D>kGw?&X)bcu+Ci%uj#Ov7C0PADhJrw{~3CdbDnp!lO$nzHbs9 z&iEPHf0bpW&1_5eQB|v^9CHX1HB++pURd8?7(dd}7-fRr1KY^=N9eqMr5Zm%Kl-D{kHNx-#?e zMo|%=g1np0L$pFy9Y~zbYWe00c&GLD!#C5vH|XH=Q>>9k z5TteTm&mg{tPzcafcJco}|EKp}eP8hGSbFO2E$f-QB;RN4e124C zv0eXy-5>H^%+xMk5$L}?W&fKc%Uj={-7EBUUq$DekGp;UrXJnhnfF@pq7~C|mTi_M z%YzR&n9n=MbZ^%UulA|xcfNa?YuT6RV8*K5t94@!pgxli&Qr z{G{JgqrZB|*HY$r&wn$k)pBy+;hjNy7%K|bzA)Z2c{9`J6Q`niMTP9|ZrU)VGt+Zh z=b_MxDUY00I?g}RpB29G;q%YNSEH3=+03oE)}JstEp*K`f3e=_jqKdJ(*L#2$ZxBt zSZTd!!iv+GqSG}tUg#8_aKre~zX(O)4}ve-&L^)sbzgbg_D^~DdeU1~g&sO`L3+DC z+ruU4ob`{Mr714`Zn{%K(*K3_v7H|eRpl>v7W5`m=jSz_b2@+5UEcR z`F{2E6|OEmhMd6_opF0A|NRM$U96Da+cUfM<*kEn&9bj%8657fS^LZPZ1&XpIZ{Wb zb-ll18kVKJp5&uIbsWhxSEC z3u&i%tm$q0Z7Ox`+riq~?Ag%|=DqO=e|_fv!N^~H35=hD1NiG$`A%MonjN${+3W9= zo)u4+GP}>#N|jxyIGiilzjs=o-mB8$%UKKmh51*ybUr>?q-H;r_akfW+mNyo)a`q-QsXZkjDIn`ah?)5M#{I#e^nN+4zNx+V4Pm4uc*OsJh;^Vr$YtGsw z2E3+=nh$MVr~gyLjD6{xDPO<*t`SOBEnpVf9<;md@I>>S>m7r$E=)P4wWOVS7L)r* zhAWkQ^L7|rHNF_SVNUa+h)qGKs%IZcd6M3h_dL+IH8iK;`y|$IOC63Ge=5c5bpun= zloH()^bgJKwEx^ITQAI8ZTi7mY0^H1FWylH#DdOkzM#MIaQ&yJk1mEkS*@=x-hb~` z{@uxMUL>hai~MnUqU4Ro4|6Tb%dDQol_iNZxC2!dryRTm7jPfjIRj#yqG6mv|+jidgpx@;UJshu{JWSjx#V^$_e;8Bfetp)JZ7Vv<1=UTp#&dE&6hK!r~t1cM-GHwgsg6s-5Cp@9T5%2G^!eMW1bAL0c!RYP~Y8 zSaHq@tt(a@fhkt4fAYAhuE=fAQ@f#W$iGxIz+8H*pWpHKZ#k=r@*V4yEVoay-F;U? zDV*K*__D2Q3gw=jpSp^%^HBM6(;X>`&ur*?^SMyX@mo*ozO?GShrV%rJ@??(?4IIz zc7f-8bta0$yx4N{z1H$Btuo$HD<@VTwb1#-x~~c{&b@jSztt=z`|z$U@)iN10d4(Z zey(~MTI=rRtmD3U+U2ct);-;#XW8q% z%HhG!YZ1}M)jGW=&!58iZeLTmG1peRh6mn9-??>$FI;f&?91yK0n%Gt)~aUd25$Ab z;wGxMUvgI2TkfuBN#E}&+$&A}<2Yx*E#)odlRX+IudFIc?}|;9pA}oRL};60wfb9G zuX&ay`LioJw3a$9`+g>K^U7K3e|~1y?@Txzc#_lqsnSs?C`%SNx7=?Nr_0)gi7IcO!v}vy-T03JA8d|&ZR0_UTJUX2_@UT3)nR;T?HwToxQfq|LbA1e5lWX7cthBh9%Nw~TI8-(L(9-_5KAtb%ID5YA*l_IAV}+lYybB(C zWtz?vv3a(A+T#jO4LHECL`<6Uv zezbJ+kLS-qjeq_4dCsLOUtVc%`3j}jnCvLo-vV>REEiwUxbk~z!1~rI-78zUzWzJc zQnl>yBRdw?^IN|!m|?eY-Yc8dMe|G49=!j3QRCO|3mU())Sdq)*mBn1JZqi5US?al z!|?*sEdA!F>XlokM^#^3wU_6cK(XP9X8E$!`=0ph__A^COV#Gu7plxtnx zG{i|aDO+%L=#g!&v{uaTyK|R)nPc``sTH9@yVvrb>IwIHqQ$l#@Xj@ldt3LceY!TT z^0vle3%90ui>It^O^^I`<=m6cb{A%}2FlH75EK9Sg<)amYQu&_+!I`V{Vv7-)HuD0 zZ@~+uEnyepD@C`iV%FHj@K*H8_SO3sTGGGlN$9CM~EOR<3JG<||T;-;|x4#0`-P+Ip*7yc&#jU#XjEqB zN9a~&pIjaOX&aZvy_Jt=ZmnGx#8jr=xBl8ft{Y*ZYm{z#g#TnP>AEI$V7J)Xtr=If zqi%0~{Q3jSYdeLli{};a8(rpRNkq8RfDjZH zH!RaKV^__&>wdQFT;r+8!fxfn{8#HV_)_6%gvM9`g`Za1sZ>5y{ujGer0`b0Iz%6U z&;LkRuEuO-zZGspposB(={pXjI)n*NWbHJjrH9gR~GFNdm82XGgQ>2a@LYgSsfW;Iq-jH z)SH_NP2)?OPD4I~9DJH!{~~c}SM#gtClSA0{jyy9P8>>EpV5C% z(~n`MVY!Fexs7)xJ!<5-WVH1&_lfD%J%#V5oL_h6X^l(S&qH6F&#L}pG79sRQMP*V z^NrHh%8+KSbf2Z)??nCy{;Xw|TqoBbH^+GIF0scFL36ccu~zx~jF-Gs_&A7_?YqFg znTsOV8M?;2_;UK=rSF|#Up!t2)bBX+Z<6JPne9J3AEh-_Kkwc1;PZRy ze_xrcZ!>+*k8h%tN6ONFtS>FHeNnQ$-f;c;b@iO9hu!`5dH+Ju@ z|MqMD{yz_&eLX3@|IvCKMvl0Q!`!}?9?zJNYn@VcyibzlL(=S;-_z6tCp!KNE3)yw z`PqWy(-Q&p6pO90M$_kr{odtRm-lty&l`Fsd$yk8e3_Zo=JM=^N9bm8)5M+Ims$In zGX>B2^S3F7rI=4_x%DRlNrB9cK7QAksy?DW`}{cSu6Nx!veNSBp?!ImGW*qDa%s-H zp=hSPj(N7a(bklkp3Iv#lZuTKx$o!kCp?_(yX{lU%kI-RmQ*M1_^@{6U&no_52R~O zY)=!bZR>gY{@?AV(f@ATcCY_mz9T2Fdg1qTMMphF-27HByl0lL+I2YorAUIYW|nkG zagkHp2Dy*BcewxhAo|>J0pk-dK1VMD9=V#gDZIxn@~`=Zk{hd*DNbX`Js`o3PZU2S{fZoSjVRVR|R zJ=DJO<=;+D>4kN2k0w3dD=%iW<5m7qrz=)1c3~H<9@O#>cfKxtiLq}{=(?TmXKnfB zRL`g=+-0C%d|P(bWY4z#2l~@f3YUL-W3+?cDZ9=yp6f*Z}q3V?=odI?ZIne@91BB^6qY2{HeQ(4P!s*y7(#1ZPq!S zzdcMoZKunNxP=}OM>*vFJwC0ktR?sNbN%i=)9?R%SG-jwv(WO=!^IL0PUILQsHb+; z-d%L3!Hg?@%jU&x=2wDN-uRFjq@6yk)N50mx8|u^u0K97cW!w7l*`&wVS~b(G-D$R z<1aO8ANE)$XkPm*8r1(u)+zE!U18wzD)Vdmc1wHj3iGaNZExN&smt_;^a;fW9s8ae zJiGt;SdvoSq<~ZMRlik!nf?3pORDo%qi>a)hMDK;`w`cU2&{|=c49IYRaug~m%m3d zvp83A<RGKIsD5+$_8pBPDtY1IQ`XJeC_eY7 zNc{UJpT3?`tFhhSbVK6ct(w0^pP#Yu*j@EF^76K{bkwZ1e$G|PPrhQbd?J$mvqjL| zd}f*dsn`1z?f36Z)U7`}&v(P;F!jUddS^_Twf=fdZS1~#uh$*Fe%)R!lI{LW@uUxd z+R+8SN>APuJe|M#Y|v}}g0Ao7#g+Btw)gn|IOH7`%J?|VZj!ow@QZU1HlgYn3*}@m{EE{j)voiK%kDy+q=MG=oE3%@d#A(p@&q zJN{;q>vN$^%5`_bH$4`;Jmt~ew=wr_-)s2p2;z-`zK*yqw+DWnos&ZA+(dNL}?LplC2Gh1~+e9Ru7c$OQJgDxw5 z_SzD)F&^m^_J7unwB_HnY_bico48?9L% zi@oUfxU`MCzoo|OldSOTv%c$^opvf&e+m}aeY@ai(6;?dPqlA0?GwGTPCsgTcjwC3 zEt}j-yROAmb6;E~^|-9B@7pu;<>4h;mmK=eE416`$2N1peI){o_DjvP~iOI=kt_v5xFlT<1ZZ#DuyIG!MQ8ZRx4LfH z<`H&utBPF5*;wyAQ!mAO8}76=O8s^#`cq|L)9ELlxr@_yPbTse*LWZOt-~HFbZ1>*-Ikx7R{kN3&B(aurht-yFrnDcQblc=fYOl_OH|M4=S@SKZ zZ((kc^Cj7L_P#3CthbEa+|>NV8VA~A{6}rAeYKAe0XC*`v1=Yi)ZxC2YPd_1rG z-o-Pe#5Ky~5#O4qtG06cZoNGbdiO`${9CD9(`(dv?Ctc6uHBxxV)sXD{{J7PbhQf4 z-%|yD%qoS_}o<9l{4>#YQ?D~J0J4#HeA~y(=XE*8u{Gu zh5qq}m(*Dfel~HgeyEdfR&?!jypx4Jt4r&egY_jEUX!wB-S!EQ z*)9_q_ja_+TK}M1eR5~UGRdR&CvH_g^3jB^NMfSguFpp1lV4OaN8dQpBrJVr1xj8!&O9_1Rat&Qb?M%% z8bWOTsu#^NpB=jLkIVmQOj+2Ol|D<>ZtRGf93u7V^m&Epywmj`s9n3Gt?}@|#j{7H z_N@(Ex0T&@<;pdy=LAgrw>E}E0hMZcpK1_!U_uHTWcR;1|f zoyp60M4J{Zk&(O6W1{^zYU;#Pua}#%HtaNC^|xcz>Y8&JlTD?1au=-;T%EmE$UNIy zqLy=lY$a2Qw`qMe=j6QVsRosPKelQF$b6c4VfNO|f=nM-n|+KVy=%X(d~cV%%&zR3 zPwg37p-E?s@0)cyfAWtR&d2_JmMeblQGIK1%l)9g8x~CBKa*OlDu4gl$|v8K99u1; z8o%WKg&&`mue>48c7L7dZ(ot>8=s^#zEybe`)yp_Y^!l}-lxZxM5~X>{ah9wuyKEi zf4*{R26NO}&mzagX6Ki>ZJfJiXOwRChV5H+{M1VNI&)3)^gheDrz|U3{d5aXaXiY( zS1-8L8@k+2vG~?bqxN~%v%2OgIj@`dBvbpnnPIR6K`M2P20bt*Edtucej&8$m_qX%XE)cM(>=nJ#@-vzMC%_ zJ_$;QYNhWonWXWNZQk;jsqwNbS8vORt=9IHId)-3jo0>|*VS`HRzJ=4{(JPvZGk%W{YLgPRnnQZ zy76nfDjT$lCWg$4(d7)(@U`kWp`r41%UxZm@J}Ld&Xir9)VQ~^;`FSwRU*5~_wYF7 z$FYC7_NI1m(xKO4FSHLFn0;4;`Tn*kAGrK>UCwqX`=c5!RS+!hzb3(4=GQ0HJ$s}S zYyY;DJPBh43lv_)tzGv`$HMR8JPvLX&2eU*amRTDfYw^- z`P^IkNQk@co?BXMI-hxR;y;TXo&J?EVgBZK3@@hrEBnd)YX&!m-p8fvk)2yD+d`gu zaanYn{OaY!eNsF0PvG{zKa&{t+dDIbwQNXh737((xKXcWc7glKn4t|X=P`@L+mNz*!5Tewo$>C+Ovul2{ChbI@TR^WQvDSc^v zRkg~*EiY~^TXA z%8nLYopJl9n*Z(~&u>TP9P?TwyZlc5>3O;=Tj$m~w!hw@Zr-bs^}oYbJZV?PdXEj~ z85^dZliVEhGCZ|b_0=5)L&^KEyo-+sAKlU0VDh-hF*#P(^yISROdCy$?YN%p;We1> zWWpK-Hm|)4*(EfbkNvY~${Q_`&v5iJ@A}%*s6)=6-uuI&0=_UE+65 z<=oCGZM>2uANHH;_B*2graxZ)vcFe^W&KOXPY*k)^Uv+EuHCvn(DPMW z&Fnb`)C-xlg=VO%nU(oeX>*$Y(pjnhoX_o?SX`*9d_G(AtF6;2&#b`YPt5gR=DM?m z`Yr~GvM;qL>FnPm{8NL~_xa`0V6EB-XJl^q|K&Ly9ol#)_oTAcVoUG$zt(g}9!ZbU z^Rl`kfAS~84!N86Ct6RM+rbp)G1cZ^giYPLZKWn^Y;)gd`}EkEJE_@Dwo;uD)nLlX zlzc4yRp^ne_xN|_S+Rt_njr95FMHYZ^D#m7PYSM9XLW|H;gmgL7yc>eYj4G*@QXnn zuU0O~`L(vxRa*5~>(_bGi{k{m<^?-tZBMH`eBzG5uIy(w*X{nU`e~u|srJy^oXJvK z#a33Ie-K-qw)OdUHy+ttAJ=jw3O&wwlDy=8vVh{k;)i#{ceir%XYFX-@-)Li;)2%V zLTxvm*3|1y4ww9jb6M#6`mX$?jomK!$~D(#>&RwXY!usId1qs8;m1SGtgDNfEj|ex ze|BoOv*}XD?TY7T=}M{X|CD#&jL)OH4m{pV)Jwaw86^~MWL_7jm1s45wNr44Smumk z*%zwom<5$}-Wp91Vb7e|xIgZnQbbhU)A=XlgKrn9IcH3+iCCj?VNTAcMwNN{wpOy; z2n~*!yi@z!vsuZSd4DH$&Of;8d&5l8eN0SC7uqGvVQP_E6eDq{P*pmMvGq&bllvkK zj{|e$9pk>vdVN1cqSAkn+bX5KRWVK{pNM-TsqGi)))!7W-k~~Ou(D)*Na&MT(yHwfN31xmfu(3*VXAg zT{8B_RQJzaJ!RYdcstUPy>HH$m#wyF`^v+znrR=-nk`wn{q*_=@~1rGCgd>A6bn35 zcV%VMmZD4Fq$F4VbeQ;IgY6>r)CJm0Iw=Pk&+K z>3F96m;JhW$DA*#Crz!>5^)OLGCxP{!83)Owo=RIg~k4=y|{5@A`{n3<5QPbbJnu` z^3&q}(7QsL!ElZyr^}jP-EC10Rh?mXu9(M6xs!6JbX(`W zCr+k0dE0k#uAhGLvEw=$xi#wjoWY8BYIyGE>CS51rf{L<|KHc^T(;fVf8^7JyEaqn zFHCc)HI<&N^GfY<2=}+B4e}cj_6I5K-J;xgx1sE3pnzmqSO4~|?%#3AyAQ9N@aMmM z_4{qNEheqy-PaZ9ko0W-2Gw~d=XCeZTDR&L+p7P1CF%KRS{WQOH88~G7nVx>*~emF_mF)Tc4Dg!|IBk&Fq5wO1tI-cTKEfOK0+6T;46KwzIv2-M~IT z;>_O@KMM4=Uz^DHfAU`Y(ERd~cCYQXt@AwVe=TI;kL_<1J!Un|3*XuGEx1f<$p_VC z%qLIVemnn4+Whan1A-cSl^h}ay&ehNdJXKu}*5x|u`J{y(d8Rb+*Q~Q2d*?l|i3-ROdaY_uCADV4g%6s$ z^OrT1PCjcf?dj)-7tbACpLhJ)QU3h1OS|Lmt~b=H`~UaE?jL`@FaCCP{ku)=x2KQ8PKD zUrV-B;pyUAd-^8)+8DNI@0)q&j=wVYoz(I6Rbi*vEoU<$|BRox<_%3sbuMo0bP*q`TbMNi9-)tM- zm3=p@o2tI((T$ofR`s^i->-i){haI-xv=|XzB7Wu$q9eFw?(l8#X}mRK>w%4i3_DLP(z||o9rqPU{gbCZ zC7MTl4@>m%yP|*R>hA!)TI-3K7sZvD*2l;eB~&jw{r0Mywb%o=XIlF^Yjd_W5AcbVUJ9y$3+ zUHH|3jEEx=ha%$t&s^)c{`i)3o>_}ao7Jb}hX0K*@O{zFu%Tr`GUr+2c`7>7R8m?S zRK8d{&Qfk^eIRrAio*E^Qqy-ZI4p?&dq|k+Wq$Ibj`Qp)*LuB~TcVHVv6*e_vp(nI zpv3%dTaD7u2m6n@PBju<@vr)}iKCM0#SOlb80w0BRGsHFSKcf7HqCUtnE4GBtwN{o zRR`}hnJOrJ&v7#9J;*(;OlMk|NcIjs_xJhdZ>U^SVF^||?ZGx<5)0$vcV+j_rD-Ht zbvb>x^I7!g1pa9U9&Z+Z%KH3x^@_LqSALPsT+mj2PQ!9m%Z^n%%g-*peaQS?kF1^X zk3%c6`gzWUa<5%^?|^KgPGUHB-p80$DXspIgc7Q@8dbtdRjW!oFOSw7`VcUQP7SWf@81kA7_{b_Ocy0#6 zUe7*5p%1eDzSF#Yi!7$CY8E*cHu1T}6j|A60yoQ)4Dm^?ylZc$FjHj_pc8X5m$NVSg$!6wRNRJVqL%y z%cjx=^Vg~NA1u+eoUJ77*P|@6WRA?5-QLR-4o_s@S#rHcz`u%VQw&p3M~r9NZKr$f zEvuBYY<}sqdYlOCSg_4(fsEr9=GVK_HM}aFJy)uIkh>U}m3S;*W^TIad*{x2pM8@y zZTQ<-JiYSw$-D^KdM$?zpSdD&e0^0@8%NQ3!;Q?uC2J8V`qE_yTL zkwe@0fU`La8=E>#ZMZ(~{E5$!5hpl3dLIRS{@HVC+w3#)Wouh<&q-9y>iqMm;Kz2! znU1>mDr#q%?cz9xh+Ustva+X%BSBzhDU(Wg@@YXA{}1P?*cLze z@3d}n$6k%K>n;eoW%c_$OZI*~F_G1quFb~t$!rKryKK6Bb&`P8$i zK5A1d)mTdzEMJuH3Wm=BB)atzRs;mi@_VNS;XA1J4n5pr=T9{RN z!hW-VaZ|s2EZ)-N{%J)d%kZesXO*;GeX;Lg<<2jir+e ztj^uE;}kxAakJ-)7=^v+iQ*22*aH7asrbk|&CmaS-sh0Y$wpixzNyM+*hnmxtN1R?9k$7l%gzM&`x-WMe*yXt+ zAYtNa4wdj03&%YxUax*0I{o146Mxkogb3~KKE0yH>~~5I7uV}aF17AEuDpJC{_^FQ zA75{ixwY78W!AlS87|lFOuzj1-Q(MZ-#>l*{pt&=(Wn-<$n@)8;ktz)pYG&Zy=&{cU%;r7aXeyo=n|F5x4LU|XD)3{GW{OH`P-*% zdQ+8f>8ghv$8SV)>Sj&sJ>P!$^T!QZsvlpjb$PXMk(A_oN#jL^+C>K8=2Ois=WyLw zko=%gn?yzebFaaZ`!0i@UGGhPWy=rSlF9j?26pBVM0cu5c+j z+m26(dvS5$gm(8Q_0@HMtET8}`4wTeJvvnXUYPzjhMuiyjZGWuP1v~?Zc3VQu36b+ z$sCb2yS>#E4^J$3-3l%2CUtR56Oux9>}lFa9O*D(AzGhvS4 zqKU^2|J7ld{BDU;dge^Q-Hrd4!+$IdVknYe;D7Py?Ed5PKBpvXOi@Vxv8k*`j%&As z{`ce@1tAVR+jqQOyhyX)x$W|a|IEVKyskf-6jiQw_u`Gt z;ED1+yVtQ^FE(8GIq`c@yxf&d*_*yBuS;!>dl||RVI6iV_u_mBQ!Q0*hvht3pI`Og zGoW%5zdrk4Y zMh(k^2}Rxy8WgwBaJtStbFInD*RBf9Zs#mw=hWNp-E(jM-f2o9R=-$Sz38wCaUWoaH3f{Dy#Wpo>eL9ujEOv39AoQGKD6f07=j#7dw4G1+}X7R#0xsk05rGOaV0r*8~tHB~xr>9X~_ zhWv_0n_?bK;`$TF8oB70?`$`hO)r-Fe$H_{5oVEjVh5M#Ta%Pq(m7g}eU&EbT#;<% zeH2u_bxz26%Xg17tj7p9p852wn^OjHSzXk&jF=xDWeYmN4I#mfxfz&(4-Ck}(jjym{i#hMw-knYKLI z=XbRnPc>%vl9QkRKF)lnud{By)Lg*>fiw3m^eSJI#}IvS$u5`L*bk{QW!TJ3n5)m- z?-u9Y8L4=}!1W!+&kH?M$~PoFIs5Tfno?~#!RGVNITel#ufI-FXbe^8X zzukfblZ~(RS6qnKd-1%{z|wi|iBA>$uKT~T&tUwq;g+=ZcaDn}?QL$XUXqrvWCFu; zS8cUZXAay|oSay5h`sNp-~A!p9c6LD+bJ~TV~Kubs~D_3V%%(o2( zX3Ty%VRPO6D{OWZ(-%FzHp|`o>s`(VPxMu9sb8-)zw|NYU()XnA?n#~Nq$0{tG9>0 zcpLpDm)k=l=Z2M#+Jf8G4J}>CWz3utr?+IRwNdbU3FQZriF&)9rdFJ|30j!u-#&I z;co3$@tZO_rt7Zj&z*f=>FoRMzruOE6aRW%{jK;{G-zed_AE_V?imGoi~rp2S>`CL z%FR3F&&pp4+#08oqsz+=wgu<#G`uu<<+J>)^Sz2)5ogXNJNhQ%=$|;w7x;C3M7s2` zcL}^Mw#G-9554)deN)-hs1%7AVS>B16{VlN78(=5>C`4NZAx~Q==CJ@OLZ zywLse(JarZj~^>`{dYcid{x!H&ra*=jGl<}Y*Ss)GV``+M4o=@nrEw$%i0{KoDJU_ zYf%59o#8^eUfQeL&pqkt?Q zk*RV}J-pwWzePIjnnRM}4c}M&tP`4a^|nosbozS#_A*W(>&`aa$?P9CD`%^IQW9Ts zP(HP2PNJm7T&=s`S&R9uH8kwe;5_NTre9&TDZ(m+Aiq0T)WHw7%H++;Ej-a72>-gr~lxH-GL7zEbuuW#zpj(>KLFnn9RylOJmViHZe&f8d15BHW#6sCaabJ^UR#U+m~*& zU9if(xMr`W$X(6nn{&#_W47wAyU@*1)9CiLqTayHa@(|}ej9vMk1g-%{FZh^GERt1 z_Yu#o{RvHnB!w5GpEO*?wC}Oz=^{<Jlk9M^mF~5byA2yht=y)-~v!@$;5FB%j;e0dQx8}dfrs~;CC^yAaQHT%(LmH zY&(uPsr7r_6k}HX!&>3H;hE6vgxubnCPCYrWTzNAI!@nIZ(%QA9-n_P`+3#^*%JQf zt;?bk>x*+%2eP&OOgM7v-;o{8IlE@D)SjPyChx#QhGUEDR?Vop^LY;IXBo#D!#$2q zPV$u;Oyy#goab!1nX!di$>4BY^}NNWiW36W6|B3s&po%)nw@WCA9Lbn1aD8eiJ0l- z&P$=QC(hA&_?6-G?l5;H%OB=*RV{xBKUO;VvZ_u}gncyY1OXowFy68_(8=C z?ePA#m|Vftfle^3)s?PW|F}VP>-? zN`^g?6ia_FS3#Gv`{MDND~p2UPHvv4b^P1Kjj!@zFEOg|p1I<7{<-3W%|Qps!?=zq zw&reQ2(>zKUe8$T=i*E3CxrJYUB6b``g#MyXRc)j_HD4SJ~v@^TY_y>)bq@{MVWW4 zPO@z2o9K45;Xx;K(0TfB=bLS8nvYqR_4}M+o7gTqaTCXvtw|G%R&RdHqshJTLP*l{ilS#HZ!Vo= zY$bHt&QkdJ@69J?#vItMo-Xcuj_oFg$%&a3(v5qK4U8=(Kj(TkVe|5$Pg5i%Cw;Be zsk?fFMat;WYT>|*3lgr}Z76Hln_1Y_y72Mkd_n)cHeaLUzIG+qebt(!o9C&{7B=OO zD|2&6tER^;j)hG>g06?3->%o0KXG@!fvqavB&KId=Kfq65vC;dB*@|#qM!6&vDMA2 zd+$12(fdgU&po`a9K69X{$Akysh&!qDYrbAI6diL`?cJ$?ajvJ=Okyf-MQQl`|Rhe z=h@wlvsc`bhz|`*n7!BjgqcZNfW&Qw4uc!fJkvd-y%byyH0&#n$KtoOs>rn)x5f-OeKDG+RGggXXl0nF{r&i?QpkC>~q0!<+p2FB)58;et!7n&x(kt zK|jBQE&A3GIITy&S2j`7B_Xd!OLoOa7Ypah7b;(xH>Ib~o2%P9_i3g@l!t1pKeOG> zH3g?;@GVd2;FI^VG+jL@{&s3>;3d@{kpm^y1iVyOL@!UxWld3U7S>PH&rd$R6nxhKVTgvIW^P7+g! zYC6Y+Su+y$emUbZbtc0jpQ*DpgiZJNU1ENt=8g+vX!;X1{{9o!zyJC5RU>x6w~aM< z+gHWySsV98Q8N21pJ`%!wpy7}>Zc6`((f)zE-HywKHbN!P5I$9U&VP}j->27q9QC> zBAv%w8ReAeHIse*Q6HmOGZS)i*e)>}@~>GvZ+6BNPsP-k4Kr8hY}jDebw+Kr&To;@ z#bM4@C2x9mTI6$C9=iBg_SYi$H9sFc(Cv?PE914g+h7@ZmF*4B`3^w=o4vX-;!Bhn zDqJso?D{3>uOa5Gv5BcH{g~sDxRgvK!DoMpc{aDpe5*Kk-hL7Di}dp%BKz-pE895> zte2TC*0JqWNN9ZWiObj&}@L$}=r=pq3#=NRM=$iMu%{tRIi!5x|{K2f-FVl!~;=v8G7tA|QHhJI7 zv$}cCD_?NmsXSjQvj6PVmP@6lmW0jsZZ`S$IAjUOFuW?2`C8xFqLeS;Ze_ntbTRZyS~#QsB9F!4q6?V^to9~kIrp}_e&=ZO((_D` zr;l9spMdt;PWSFIYuI|oR!&=dTuRH-jhn~CX2ZS8tVItWI(F$dwzuDz#Z_yaQg$UJ zZ}~&{k#q(zBOrI&zX;CyiCbx1am+GgVN(~2t z0yvINSh}FiOeQhNP;AZhd7Cm?KJmHCc4%L;=f@S}WR*ET~OtScSbqANk+do;iZs!;smzdeJqA#*e;PS53smrRGwipI2 z?3{eF?N^OTTk*}V;!`?}WeTq~_N-Di?mxoy`NIQSt%~Ja*)3V`F|skd`ndi~F;jC1 z+m6Bw{jCWi|Uvt_T=e_m) zdG~eO_WTteHy(CXvZ&eOzbDBcDV}c5UEh! zQnQBRdxbHR>xV!01>@c4$T#8Z>- zfE)0>(pt^u8{6EUv1c;2Pj=cRx%8pcVcrQ5y4JfBqAv6{%#K}DcVu$o(MgSKBDgnu zU+LC4&usM0u&vX9Z}s_&m-{Ek{XIOH;p-itULBza`!nvktW@3cJH_ZtyHN_qf?U22 z_Vu=l=f`=?{P?oq#{7xeELIEB1MfJi+MQqh>FDj}+xw5Ve}4ZodfFmcm)!n^!u|)U zc5ex8J9c93LgvJqcEtzxR^2&VFzaxtS;&>ghN*5sa*}Lf>;WGfK)t29=}Yym&+;|@ z`iyhxhp4zq=NH=Nt32KL=kB+ME6>IDy3A8?3d>)A;r8|$x61^AZhVvAnAw!~gTZN4 z{~gH|mpaKsrQaQ1HWsNY5Sc5(y5P<1TLyj)k1{Wk;S}u6Io&t^P?C&3vVxOPgQ8e8shht9*aI+zs8WZ)}7tQWC2j?WS}VO-r4d-IgA9ZqMyYlNc4t{zgZ>)|n*6wk^`- zb#~+Cl+!wT%UKe=xmKSvz1+3^Qq5H^(E`B);m57fk8>V9{#f$Ay=i;c*P7=KWB#VN zC`#yZ&uoq~UEs4zYQn7w*@xVzk3;>%eZ+q$GUP1mK2vqy=JClxNhh7cI8He27e2G; z&tvtOg}d9inFN&>8tcDu`}2tG>*ZAGJ@fC$slt~H1)I;j+NRpD!}IPo4WSK3k4`mG zhD<6wQoXn#bQ42eNyt*?dCm7?SwjvVymiFlkXFF9@Ll)0pGmA?WQ>dunpDUW_u)(O z#xIK_4j103E#o<+Hu1df@qJ+qn;4g=F-GaAnXmk}Tas&L-zovy?|WQTwYj~Ya2lOi zsb^_#-+ha3j?P&bk-JM;PH)z<^|Ji9;$X?F>sA8CXKy@`%{E^moOe=Vj9T-x(Bc>C z45n{5)OOtafzFkH9XIn&y4(6k>iC~j?tHWTN!IDvVN4G@({F@4P}ttM!Ql(j`UX4|YUN;aSr*Blw-gwzR{7azbpnhj@1FOK<{pl-y4mrhz(2r;0Sa7~74$ ze0_E!+I8M)k5e4eq*yx&5;$hg+QzW=>mS#p*A(5KaCY>3@%r2?qm{qwq>P(Jd|jr_ zyujj5Uv}+Y-`O+i*^(;WVEHd+BQDPom|x&gyvVe~UBbIo{6+PighfvLt_v&=%75LG zvU7`zUvbm=Z7ZL#*njMrCF~SoBC_Q5%yhX^vxJ>WGBf>79G!Auj>nrNGfmZ*mdx=j z-gI9vF`RX&)@$zzySK0B?{5#i>oC7fJp1aZLoGjD6~A*_b4&?f;qY^xD_>7iI;Dw)S!DKGr>@cEz#45~bx+sqcIIGTXENLpQ{ z(>-^pebBoYnUlzxHnTU~RB!tc2eo|9o4e#$udr75Y~SU=D5 zIgovTSIIw5VXIcK!if)3t7h^lLs+_2RY$He|9KZB+j`|ee94q6FZ{Zymn?hzHFbhij)l<@w(2{RXRTH+ zz0q}B#dL;)fs*Ntgo7Tw*R%bzzIgEJJ?ru0-FRcu61P1cWt2>7IOg?Usj0G%`OeF8 z_pM#MUV7H|s;ZS)QaPaMq^Ru46TYuqvx@E9>ii$!YnH?$*JsC6F^3;I)4XusxkD)y zPB{Ux83plkru*bOm8|)lDqwMVLVs1%=9s9-oHZpcdlmgNuYGcAaLl--xjcwn*Hggv zp!MsSJ&Wpjc3x5vTfAkTle^@~ShJb>dZE5CoQZc6^iwA6kSV|DAD%S#mWSKK)0gHH z?7jBw18+0Kmk+#5M;DY!8$ajbkK(^9P$Bjt@`6%iKxI$j{0AO-&)Hbw7piz}n#8O2 zEOpi8Q*6dsi%;1sPFnWieM^RCK#$!yztG8_Jm&U>m~QLu4gLON5}QG0Jlo2(Uv98J z$r1T5x3|gABSCuSdawUKB;(vvszVg^>m1ZB%C!yK!FQnRt?QaOztd)>tWyl>pLeWM zYI}^-cE1O=90b>;Hw4X;5U_ZgV##fd}_W!v?8->=V ze#y5wli=q6p7H0Z=Ko%n6?(hZI3B7v_-OH@4URq!R8(|WYL`l=oOyJ{!s(EcPRx`W zhVyzVjmlQ0^z`*@^FMav+Vi#t`1QTKYLqt=8IXsi+0_wt+9R=x34aK?mmSbmVc^4PMN+qY5i*T zBNac_Wpj^c@?2XWUpsYv*`v(jmT8LLjS|W$>z@6*`RIpak?_;ihq!V!e{a9h=EhSL zAj=^zEm$%pDMzDL;2~&6Y5hW(PcnI4eC>P>3OIE#PDlI>U1Bo%R&UMPnM)TZnU;rg z{`HwRy(uNEIe*8az;9uPx}#K{e17<)#%7IIW=)m$#i}hD9>>a$^)|$~C%nto(wzNJ z#lq?I1<9A@4e81AdUbnypLQ-du*dO)a_nLzyRT~sj!)n#PwC*5e`TTCJt_WrYpZ3D zs{0bfl4AnyDt|;SH*K%`eYoYiOR|{;$7AQmK@)yec?M3X*|B5U<_BEtE6vQWJyqQ- z0O~BQG<9?CNVnyW)Z_QO&LroQ&&#aDG{06%ka1I;af`dJ%Z9irwMBIG8SCZd)A>yVOeA8)ndV;yOfv62pb4a zJt}%ldg9H5$$^5eo~>zGx_RS7q0D4z~+FMmEfowz!8=Zo7rj$Tn*onLVK z+Z&0V_kCUlT?(wims~bfow#+y!pZhfSEfU4yn*0DUak*&UdTE`>R0w{is%b!Vd^_{ zTgPhYUX>%PhxwXf8WOBM?w@%kw!Jf?g!SE?=Vn~@pLsdHw2BYXKEKpfs=821s3r5x zSA%LZw-UQIaqmtajwKZd{_ee(SuNa^9qkPw$$h^jSOapX5AsS4L!G1=}^t^DZK? zCLSkM3ocBE_FI_Ub|!7s8Pn!PAw?0EvxATQ{C@fL>%X_NHQkmj4h?8{`qo*KJKpZ? zJO0(%I_2^=n&n>LJ^1}tsd%rj!DpGLyg8XcF^P&#?T%INNs)5mZI$-$wtEGxG4+&` zt{j_ieddv@57E}>+K3Mfuvnwg(t-~755S3Hhx;-1F-YS|b>a^Tq zhS804Zm|s}+FEgHL6N82PTezG6sXbf80xvNji)iK_yJdVV%qOWoz%o$jtvZ7`!pX& z&pV(q{lF5Y{h^NQRu*1fFE~;E*URfR*@oWf$3iz`EH}P)}1IM+Wr;iJ6qkcmx1Ki9QPnZ^X!1gCgg znW>d-2?6IA^m)D+US_y+!uLSvEDMhJH&&;Z@~59Dydtvf!=wY7db(3*y6R}3-`$d) zX3X*>C%^Z7ocXR;XWxG5vx0{%&e_}KQN5*)A?D(eb1r*hKRgA^DNO;*DNPpV-up9Z z!pg2Yf}a-3Xui)l%rWP2=`V%G28Zphd-k)gW-Wa1$W!2mVuW=dOMAtBAF+cI3mA_r zwASyay?_4d|LgWG{2vvxE%|KU?7NEXi>(!HcOMFneaPg|Gfg(ufcJ&l0pE84 z_KyzMZ+tNS=|+Q{ph=}2{Hz(@-DfcV*|8)d^n? zSO^((`SmgxeDlqfQ2(%~G0k$iQ1)i9iA9|Af zs%k}=6&l(P)sG(DmbWR^J)!vcea17czXUHO{*-7a>N?j`lp$s^;p49&E3;3#Mf7a~ zetUm6;LZJe|K5K0?yu4FtB>?O&u3ze*{yDKVr4_j8Rng3Ug<2mEE;VaUi#kqu}0}Q5do}G8{jFMH#f~0`p@9#~# zByOCs35XF6c(S2u0;k9|o>a~N^Uxd(V+X$Mww0NJF2#q^ohNP73HYYtC&sAC{<=Kt z)tOi}5pFg0er>t%DFv?Q&#^q}x^ON|@r}pKOkZ=R%rcLa zb7PN*ICu9RpS=2z@QtFy4eGPfW~p2;xE#?c?7R8IodPA(`@siJK7RLeXU>W}YI{F@ zTr_9VC+I3p7b(q_+%MN^YLn|`xGT5?Y-P3BJJFq8r8!PM?)8b3C6TLC|K0Y!dhYB3 zUk-1jT%DiMTg&!O^Zx$t@9Bq`_fNSph*qg+->;~#m_M7Z_38E9w&lhB-}kwnU zxwZd9b}A&iGL_~KSh`@L^ct<6Qiq3L4NF3Voo@ZgQT%wxB<%0Ib(s?xIKEuy|NYnZ z^8?=NCTFMIOjTcjGN`YuuVn_)Z6 zn{}b-9JV=}PDamX9-FJd^tgWGcb*Aucb5J<=$dxR?eJu;>5X1F0S%XI4l?sUnkc97 zC7+8?LbmJK@}E;gR9vpuDy&||n9I!Y(!KSZ!KMCrG6uC@v}3}r*nB--^e<|vpl_wr6mwM%XZu5WKwk|@yJ!+-(Mc-wt-^=tePh`rx zzAy1rATY7~-`1tI)!lo)&yCpl(vC~VG~iUi-NrW$B1@;luG!arVvpZ~eCvJtD&$mB zUdP^*ogjJI;gE++>Ep%QU2Kisgp>&CzwK*vw8?GNW%8zR9GG)YEExoI;|q2a+ka!+qFM+U)TO@*ZiGz zTY7T+TH_h@uA=ut<=jRpbSw*u?LN zW^4WayiM2oTUqD8l2Y8S_?yId+mUymz*|5D$?=1Ju zM>A3-xgDmr$8{-NxtC7zSnznK;?q}xW}S`40`?dxxa^w3wZr^}l;z~wEc3Tj$Cgau z4B71LF-c+f%USsrvC)ra_yz-*^2AJ^w-`rR46WqV7vq`YUd2v$!=)lyUyH(%0*~uS{}tGMZAjb>U{Ag&q2~ z4>`GQug-Ggz22Q?xBk`iNv9WxY(EonYx|DYtoD%n=lA{f*MHA%>TsTN=)G90+rFAx zcjd$0dTSpE@NT;JC*#z@C-#~uQHhJrZ*j6nQ++>o>)P|DmIfJ#Sl;((o_5yc)&1{x z&N$||tC)TdTG;L`@_sfW|D`(m?S7_T^|8q=u ze`lvWr$Ei8<-6>6hy*4dj|yF@nlo=kkmB*Km<%`F+mLytjVg@n3W4RnuZ#ZDRU(arKqt+-c7R3 z{Jh|R->OZi%eG85syL)mcIofKh^DT}cfGsj?$Xl~dhn{!{FT_6iAxpYo2Ry|y5K*T z(KB$_jH%oCH7ic;5fNCv!tR!O^qY-Sl$@UO+lSgddA;<>r_3uS_k{j9x9{h-kecOA zwMlL@o4Qoh`AX(ZykdDoOsIg?dNrz;B0I;lM61+((0 z%Vv!ygbYFq^^WXR)|uR{@%FQJkDs(kkYmNZg4&y6Hm(w4oAeV-2bc$ztk}b1E}#~1 zf@>=a_dH3SPYNG28V&fHPCfEF!nVlN`s2YrH3@&duzOu`)Lq4&BEoi)ze$O;RH*X( z-_$}m9#JvPDPjpVOIw4YnEhR9_A#9Idr&ibqC?}s?jzF_w4yYbnl2P|H5}bAn}z4` z_GNz(+&+E2(dVbK|JlEpIwkf&e0S4}mNcE7$W<-lsaq4@`QAaX^4eFGr$G)?lRCur z=0`gVnFhXFEG!bJvTwP{b&(J6Dvt+fPdXT>QOI-X@pRQ0Z1%@&yHk?yh#wYpyWH|% z;R~Cj1N^Sj<4$QB+iz;j^Lu-|L-2)E7JqMtb_DYx`35A)yoKx35*b-`JqRDu8=|+`->ddi3TU`5mICb*p%mHoxV! zFKI7oXSF1~4>sTlX?k+PO;WtEZo<|9QZ+ha+8nPi$!8g zYmOK%*f38sSNGFmgY8>GCTDr;b$+s(d$Je&Z@9>0R@jH(1JNU+4)7eZbXoK<0FgqTYpBLNLmC#QY{mPZ z|H+yWRa_8glKf`E)$AmhaFI<_xh5+7#^TCB*QY55O?ON_#L?rvb;*qn7gzY2WF2Vr z6I;fdl2Idmwu@(_>mn@yX$_m>oA^{1n7to0h__aq+;XID!7Ee2iQe2Hd(E~@G-EFtmtVki*VWV`6)CsofaprI0 zGZHdy-_7LJsNc75>ZG?%KWt$y*j=AwTEWEgg+cz^1j|co&lvPlq^{^~ZC>xCSa850 zLBzmGq2Ov!@3yPk{OZOu+Z)%K z*1r56U;ppJ{QLj@o#$uBQZozK{D{S4$2OOQ@BiQZyHj^(F8|ZEUw8hNDXzG5J};O< zW`2#O&dbX>A(QW~G{67nU~h=a-oSOd>!-r z_9Z#SY_p9_lDY!E?cqsDKQVRg!j?C8>TTxP-8Yrat*@xEcq6IyZ2IBPD|4zs?W?UT zre*3p+jGq`#4GogvudFET#utES=)bRF>cU2nkDhbv3PdYL$j;%PM)4$@%P3Rr?Oz( zE6eN{X3Lv>^~tyL-0gT;eBrappSFKJy7(W%ub+os{(Sa7gC)^;&+NmePrrP+C$sDs zoA~*w`odoxEt{G>J4@8;$KH(3mygH$&o9*cTUDi3|9Sf-?WG3R<+kocS(jJ1o7)TA zy|G29*7?L2UcD>kJ3`jq*8Ej=j(>go?6hZQTLbQI3EDe*Y1q1ase}76Re!UIzn$Hf zbKm5U?EE&b9Xw(?rhX{Be<9+->qBh2^>f%3)f!KED?P8^{+3I%&Yj=S2JFjsVXC|A z_2aC=k^DBJy2C=BW`~{1k22hU@admrqF-h=E?Ivq`SR&sXZio$68S1}<ycnK?O;V`u!l0~Nk^49uoJxi7G&zWH=r>tV??x5Kq3-hMypoQ>DM-8Z-7Pd{*B zzCDkWnNH4)kOvoh=lcBLXFmCsDYu*i#TRHJHZ!veqGynu8YhSYp+jH{ncW_&RHq? z_}I$^5!3Z5IhEqCg109{ZH#*GKj`05kuOi}{}`?z#Z`;osoBLA4SIC4LE%luLI*;}LM&1oM5-(6wamww>s z(b!oXSJ^qEjg<^@nVaN`IqP(E=kUkh__!e@ewBLo{Z;>O+r3e}F>|9CN zgPlf!uKX(*PjF{D^iMkCJhQj3q-#<5{XZ{1?5ehyr}=U2LYQ-*-y19-r72<1!tsW4>#ARw z!izN;T$Cf+FD|&QQ248fr?I{M^n(^9oemMZPd&DM4#)PjrJwcru|Bk=-nx3q1NTe6 z<>#%a7BL9lkiKEI`0N$MeXI+T{38zCYnfrZ+dxn;eYe8Lv~-0e<#ioX!zU>?U-|a( z%dWpARnV|CM;g9J%k}x7m&_R_{~Vw6WIa?ft&?xBou$==}2k&VSea_rmID?`PVd z{quRN(&y)M^%{OHXZX54-r(WCH-2aQ|5Xa7%>Ao;|M=z8cbB&xF5F*Rz3PwB#MloT z?l0n8%u@09&nxL?r~mE!yYi3wUB0Y;)o(Y~$EUjdYWu?PaYDvr*6(G1%isQQd-W?I z{8l^Tt;G&E&n)r`PP5X|EJ@husy2gj+q*N*p1=BE5b&d>;;;BVC;3&fXD7d{d48gO z`R(VA-~B6S-WTB)s+xa&Z;O`np8t!xEHj@ioz}rsy7h8Xc^ozbb z4tY+I8~m6APEXPc(^Y7y*f5Lp?Y>pL%o+c`8YMrtS%3eDP?z+%CT_uLttzimM0zGM zo(hdRl%jlG>$dy-^Lj@X{u;YE+JB^4+idlcV`-uZZCSUwG8>N8&Q?67 z<50BWlJ9|*vg#XQzxuXycwTRt{ngs�E>jea97qOulMv$hyWgvqbyF@w=P(8nR}( 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 Cache::PERMANENT, ], '#sorted' => TRUE, + '#menu_name' => 'mock', '#theme' => 'menu__mock', '#items' => [ // To be filled when generating test cases, using $get_built_element(). diff --git a/core/modules/system/tests/src/Unit/Menu/SystemLocalTasksTest.php b/core/modules/system/tests/src/Unit/Menu/SystemLocalTasksTest.php index 802f5ef84..54e67902f 100644 --- a/core/modules/system/tests/src/Unit/Menu/SystemLocalTasksTest.php +++ b/core/modules/system/tests/src/Unit/Menu/SystemLocalTasksTest.php @@ -44,6 +44,10 @@ class SystemLocalTasksTest extends LocalTaskIntegrationTestBase { ->will($this->returnValue(array( 'bartik' => $theme, ))); + $this->themeHandler->expects($this->any()) + ->method('hasUi') + ->with('bartik') + ->willReturn(TRUE); $this->container->set('theme_handler', $this->themeHandler); } diff --git a/core/modules/system/tests/themes/test_basetheme/test_basetheme.info.yml b/core/modules/system/tests/themes/test_basetheme/test_basetheme.info.yml index afa55cb55..3efb45f3d 100644 --- a/core/modules/system/tests/themes/test_basetheme/test_basetheme.info.yml +++ b/core/modules/system/tests/themes/test_basetheme/test_basetheme.info.yml @@ -4,6 +4,8 @@ description: 'Test theme which acts as a base theme for other test subthemes.' version: VERSION core: 8.x base theme: false +hidden: true + libraries: - test_basetheme/global-styling stylesheets-remove: diff --git a/core/modules/system/tests/themes/test_theme/test_theme.info.yml b/core/modules/system/tests/themes/test_theme/test_theme.info.yml index 4c1568c4c..fca49c240 100644 --- a/core/modules/system/tests/themes/test_theme/test_theme.info.yml +++ b/core/modules/system/tests/themes/test_theme/test_theme.info.yml @@ -44,12 +44,12 @@ libraries-override: core/drupal.dropbutton: css: component: - misc/dropbutton/dropbutton.css: /themes/my_theme/css/dropbutton.css + /core/themes/stable/css/core/dropbutton/dropbutton.css: /themes/my_theme/css/dropbutton.css # Use stream wrappers. core/drupal.vertical-tabs: css: component: - misc/vertical-tabs.css: public://my_css/vertical-tabs.css + /core/themes/stable/css/core/vertical-tabs.css: public://my_css/vertical-tabs.css # Use a protocol-relative URI. core/jquery.ui: css: diff --git a/core/modules/taxonomy/migration_templates/d6_vocabulary_field_instance.yml b/core/modules/taxonomy/migration_templates/d6_vocabulary_field_instance.yml index b4aca4899..bda89d41c 100644 --- a/core/modules/taxonomy/migration_templates/d6_vocabulary_field_instance.yml +++ b/core/modules/taxonomy/migration_templates/d6_vocabulary_field_instance.yml @@ -19,6 +19,7 @@ process: - plugin: skip_on_empty method: row + label: name 'settings/handler': 'constants/selection_handler' 'settings/handler_settings/target_bundles/0': '@field_name' 'settings/handler_settings/auto_create': 'constants/auto_create' diff --git a/core/modules/taxonomy/src/Plugin/migrate/destination/EntityTaxonomyTerm.php b/core/modules/taxonomy/src/Plugin/migrate/destination/EntityTaxonomyTerm.php deleted file mode 100644 index 0a28f5ba7..000000000 --- a/core/modules/taxonomy/src/Plugin/migrate/destination/EntityTaxonomyTerm.php +++ /dev/null @@ -1,30 +0,0 @@ -isStub()) { - $row->setDestinationProperty('name', $this->t('Stub name for source tid:') . $row->getSourceProperty('tid')); - } - return parent::getEntity($row, $old_destination_id_values); - } - -} diff --git a/core/modules/taxonomy/src/Tests/Migrate/MigrateTaxonomyTermStubTest.php b/core/modules/taxonomy/src/Tests/Migrate/MigrateTaxonomyTermStubTest.php new file mode 100644 index 000000000..a7cd9ca7f --- /dev/null +++ b/core/modules/taxonomy/src/Tests/Migrate/MigrateTaxonomyTermStubTest.php @@ -0,0 +1,118 @@ +installEntitySchema('taxonomy_term'); + } + + /** + * Tests creation of taxonomy term stubs. + */ + public function testStub() { + Vocabulary::create([ + 'vid' => 'test_vocabulary', + 'name' => 'Test vocabulary', + ])->save(); + $this->performStubTest('taxonomy_term'); + } + + /** + * Tests creation of stubs when weight is mapped. + */ + public function testStubWithWeightMapping() { + // Create a vocabulary via migration for the terms to reference. + $vocabulary_data_rows = [ + ['id' => '1', 'name' => 'tags'], + ]; + $ids = ['id' => ['type' => 'integer']]; + $config = [ + 'id' => 'vocabularies', + 'migration_tags' => ['Stub test'], + 'source' => [ + 'plugin' => 'embedded_data', + 'data_rows' => $vocabulary_data_rows, + 'ids' => $ids, + ], + 'process' => [ + 'vid' => 'id', + 'name' => 'name', + ], + 'destination' => ['plugin' => 'entity:taxonomy_vocabulary'], + ]; + $vocabulary_migration = Migration::create($config); + $vocabulary_executable = new MigrateExecutable($vocabulary_migration, $this); + $vocabulary_executable->import(); + + // We have a term referencing an unmigrated parent, forcing a stub to be + // created. + $term_data_rows = [ + ['id' => '1', 'vocab' => '1', 'name' => 'music', 'parent' => '2'], + ]; + $ids = ['id' => ['type' => 'integer']]; + $config = [ + 'id' => 'terms', + 'migration_tags' => ['Import and rollback test'], + 'source' => [ + 'plugin' => 'embedded_data', + 'data_rows' => $term_data_rows, + 'ids' => $ids, + ], + 'process' => [ + 'tid' => 'id', + 'vid' => 'vocab', + 'name' => 'name', + 'weight' => 'weight', + 'parent' => [ + 'plugin' => 'migration', + 'migration' => 'terms', + 'source' => 'parent', + ], + ], + 'destination' => ['plugin' => 'entity:taxonomy_term'], + 'migration_dependencies' => ['required' => ['vocabularies']], + ]; + + $term_migration = Migration::create($config); + $term_migration->save(); + $term_executable = new MigrateExecutable($term_migration, $this); + $term_executable->import(); + // Load the referenced term, which should exist as a stub. + /** @var \Drupal\Core\Entity\ContentEntityBase $stub_entity */ + $stub_entity = Term::load(2); + $this->assertTrue($stub_entity, 'Stub successfully created'); + if ($stub_entity) { + $this->assertIdentical(count($stub_entity->validate()), 0, 'Stub is a valid entity'); + } + } +} diff --git a/core/modules/taxonomy/src/Tests/Migrate/d6/MigrateVocabularyFieldInstanceTest.php b/core/modules/taxonomy/src/Tests/Migrate/d6/MigrateVocabularyFieldInstanceTest.php index 903957fc3..967dc6824 100644 --- a/core/modules/taxonomy/src/Tests/Migrate/d6/MigrateVocabularyFieldInstanceTest.php +++ b/core/modules/taxonomy/src/Tests/Migrate/d6/MigrateVocabularyFieldInstanceTest.php @@ -39,11 +39,13 @@ class MigrateVocabularyFieldInstanceTest extends MigrateDrupal6TestBase { $field_id = 'node.article.tags'; $field = FieldConfig::load($field_id); $this->assertIdentical($field_id, $field->id(), 'Field instance exists on article bundle.'); + $this->assertIdentical('Tags', $field->label()); // Test the page bundle as well. $field_id = 'node.page.tags'; $field = FieldConfig::load($field_id); $this->assertIdentical($field_id, $field->id(), 'Field instance exists on page bundle.'); + $this->assertIdentical('Tags', $field->label()); $settings = $field->getSettings(); $this->assertIdentical('default:taxonomy_term', $settings['handler'], 'The handler plugin ID is correct.'); diff --git a/core/modules/taxonomy/taxonomy.routing.yml b/core/modules/taxonomy/taxonomy.routing.yml index a7a75f30f..8a3bd1a58 100644 --- a/core/modules/taxonomy/taxonomy.routing.yml +++ b/core/modules/taxonomy/taxonomy.routing.yml @@ -23,6 +23,7 @@ entity.taxonomy_term.edit_form: _admin_route: TRUE requirements: _entity_access: 'taxonomy_term.update' + taxonomy_term: \d+ entity.taxonomy_term.delete_form: path: '/taxonomy/term/{taxonomy_term}/delete' @@ -33,6 +34,7 @@ entity.taxonomy_term.delete_form: _admin_route: TRUE requirements: _entity_access: 'taxonomy_term.delete' + taxonomy_term: \d+ entity.taxonomy_vocabulary.add_form: path: '/admin/structure/taxonomy/add' @@ -82,3 +84,4 @@ entity.taxonomy_term.canonical: _title_callback: '\Drupal\taxonomy\Controller\TaxonomyController::termTitle' requirements: _entity_access: 'taxonomy_term.view' + taxonomy_term: \d+ diff --git a/core/modules/toolbar/js/views/ToolbarVisualView.js b/core/modules/toolbar/js/views/ToolbarVisualView.js index 7e0401926..c3b0c85cb 100644 --- a/core/modules/toolbar/js/views/ToolbarVisualView.js +++ b/core/modules/toolbar/js/views/ToolbarVisualView.js @@ -124,7 +124,7 @@ var orientation = this.model.get('orientation'); // Determine the toggle-to orientation. var antiOrientation = (orientation === 'vertical') ? 'horizontal' : 'vertical'; - var locked = (antiOrientation === 'vertical') ? true : false; + var locked = antiOrientation === 'vertical'; // Remember the locked state. if (locked) { localStorage.setItem('Drupal.toolbar.trayVerticalLocked', 'true'); diff --git a/core/modules/toolbar/src/Menu/ToolbarMenuLinkTree.php b/core/modules/toolbar/src/Menu/ToolbarMenuLinkTree.php index 6742e6c61..d1e22a9e4 100644 --- a/core/modules/toolbar/src/Menu/ToolbarMenuLinkTree.php +++ b/core/modules/toolbar/src/Menu/ToolbarMenuLinkTree.php @@ -30,6 +30,7 @@ class ToolbarMenuLinkTree extends MenuLinkTree { $menu_name = $first_link->getMenuName(); // Add a more specific theme suggestion to differentiate this rendered // menu from others. + $build['#menu_name'] = $menu_name; $build['#theme'] = 'menu__toolbar__' . strtr($menu_name, '-', '_'); return $build; } diff --git a/core/modules/tracker/tracker.routing.yml b/core/modules/tracker/tracker.routing.yml index d227f6d97..ed2f8681c 100644 --- a/core/modules/tracker/tracker.routing.yml +++ b/core/modules/tracker/tracker.routing.yml @@ -14,6 +14,7 @@ tracker.users_recent_content: requirements: _permission: 'access content' _access_tracker_own_information: 'TRUE' + user: \d+ tracker.user_tab: path: '/user/{user}/activity' @@ -23,4 +24,5 @@ tracker.user_tab: requirements: _permission: 'access content' _entity_access: 'user.view' + user: \d+ diff --git a/core/modules/update/migration_templates/d6_update_settings.yml b/core/modules/update/migration_templates/update_settings.yml similarity index 94% rename from core/modules/update/migration_templates/d6_update_settings.yml rename to core/modules/update/migration_templates/update_settings.yml index 37e0ef1ee..ad2247235 100644 --- a/core/modules/update/migration_templates/d6_update_settings.yml +++ b/core/modules/update/migration_templates/update_settings.yml @@ -1,7 +1,8 @@ -id: d6_update_settings +id: update_settings label: Update configuration migration_tags: - Drupal 6 + - Drupal 7 source: plugin: variable variables: diff --git a/core/modules/update/src/Tests/Migrate/d6/MigrateUpdateConfigsTest.php b/core/modules/update/src/Tests/Migrate/d6/MigrateUpdateConfigsTest.php index 679350a85..29cf50293 100644 --- a/core/modules/update/src/Tests/Migrate/d6/MigrateUpdateConfigsTest.php +++ b/core/modules/update/src/Tests/Migrate/d6/MigrateUpdateConfigsTest.php @@ -29,7 +29,7 @@ class MigrateUpdateConfigsTest extends MigrateDrupal6TestBase { */ protected function setUp() { parent::setUp(); - $this->executeMigration('d6_update_settings'); + $this->executeMigration('update_settings'); } /** diff --git a/core/modules/user/config/schema/user.source.schema.yml b/core/modules/user/config/schema/user.source.schema.yml index 19990aa0b..81d3a38c6 100644 --- a/core/modules/user/config/schema/user.source.schema.yml +++ b/core/modules/user/config/schema/user.source.schema.yml @@ -17,7 +17,7 @@ migrate.source.d6_user: migrate.source.d6_user_picture_file: type: migrate_source_sql - label: 'Drupal 6 user picure display' + label: 'Drupal 6 user picture display' mapping: constants: type: mapping @@ -29,7 +29,7 @@ migrate.source.d6_user_picture_file: migrate.source.d6_user_picture_instance: type: migrate_source_sql - label: 'Drupal 6 user picure display' + label: 'Drupal 6 user picture display' mapping: provider: type: string diff --git a/core/modules/user/src/Entity/UserRouteProvider.php b/core/modules/user/src/Entity/UserRouteProvider.php index f4cfd7928..fb2ea6918 100644 --- a/core/modules/user/src/Entity/UserRouteProvider.php +++ b/core/modules/user/src/Entity/UserRouteProvider.php @@ -27,6 +27,7 @@ class UserRouteProvider implements EntityRouteProviderInterface { '_entity_view' => 'user.full', '_title_callback' => 'Drupal\user\Controller\UserController::userTitle', ]) + ->setRequirement('user', '\d+') ->setRequirement('_entity_access', 'user.view'); $route_collection->add('entity.user.canonical', $route); @@ -36,6 +37,7 @@ class UserRouteProvider implements EntityRouteProviderInterface { '_title_callback' => 'Drupal\user\Controller\UserController::userTitle', ]) ->setOption('_admin_route', TRUE) + ->setRequirement('user', '\d+') ->setRequirement('_entity_access', 'user.update'); $route_collection->add('entity.user.edit_form', $route); @@ -45,6 +47,7 @@ class UserRouteProvider implements EntityRouteProviderInterface { '_entity_form' => 'user.cancel', ]) ->setOption('_admin_route', TRUE) + ->setRequirement('user', '\d+') ->setRequirement('_entity_access', 'user.delete'); $route_collection->add('entity.user.cancel_form', $route); diff --git a/core/modules/user/src/Plugin/EntityReferenceSelection/UserSelection.php b/core/modules/user/src/Plugin/EntityReferenceSelection/UserSelection.php index 160c50efd..3964f29db 100644 --- a/core/modules/user/src/Plugin/EntityReferenceSelection/UserSelection.php +++ b/core/modules/user/src/Plugin/EntityReferenceSelection/UserSelection.php @@ -168,6 +168,42 @@ class UserSelection extends DefaultSelection { return $query; } + /** + * {@inheritdoc} + */ + public function createNewEntity($entity_type_id, $bundle, $label, $uid) { + $user = parent::createNewEntity($entity_type_id, $bundle, $label, $uid); + + // In order to create a referenceable user, it needs to be active. + if (!$this->currentUser->hasPermission('administer users')) { + /** @var \Drupal\user\UserInterface $user */ + $user->activate(); + } + + return $user; + } + + /** + * {@inheritdoc} + */ + public function validateReferenceableNewEntities(array $entities) { + $entities = parent::validateReferenceableNewEntities($entities); + // Mirror the conditions checked in buildEntityQuery(). + if (!empty($this->configuration['handler_settings']['filter']['role'])) { + $entities = array_filter($entities, function ($user) { + /** @var \Drupal\user\UserInterface $user */ + return !empty(array_intersect($user->getRoles(), $this->configuration['handler_settings']['filter']['role'])); + }); + } + if (!$this->currentUser->hasPermission('administer users')) { + $entities = array_filter($entities, function ($user) { + /** @var \Drupal\user\UserInterface $user */ + return $user->isActive(); + }); + } + return $entities; + } + /** * {@inheritdoc} */ diff --git a/core/modules/user/src/Plugin/migrate/destination/EntityUser.php b/core/modules/user/src/Plugin/migrate/destination/EntityUser.php index 53520921e..beda7c806 100644 --- a/core/modules/user/src/Plugin/migrate/destination/EntityUser.php +++ b/core/modules/user/src/Plugin/migrate/destination/EntityUser.php @@ -7,8 +7,11 @@ namespace Drupal\user\Plugin\migrate\destination; +use Drupal\Component\Utility\Unicode; use Drupal\Core\Entity\EntityManagerInterface; use Drupal\Core\Entity\EntityStorageInterface; +use Drupal\Core\Field\FieldTypePluginManagerInterface; +use Drupal\Core\Field\Plugin\Field\FieldType\EmailItem; use Drupal\Core\Password\PasswordInterface; use Drupal\migrate\Entity\MigrationInterface; use Drupal\migrate\MigrateException; @@ -50,11 +53,13 @@ class EntityUser extends EntityContentBase { * The migrate plugin manager. * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager * The entity manager service. + * @param \Drupal\Core\Field\FieldTypePluginManagerInterface $field_type_manager + * The field type plugin manager service. * @param \Drupal\Core\Password\PasswordInterface $password * The password service. */ - public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, EntityStorageInterface $storage, array $bundles, EntityManagerInterface $entity_manager, PasswordInterface $password) { - parent::__construct($configuration, $plugin_id, $plugin_definition, $migration, $storage, $bundles, $entity_manager); + public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, EntityStorageInterface $storage, array $bundles, EntityManagerInterface $entity_manager, FieldTypePluginManagerInterface $field_type_manager, PasswordInterface $password) { + parent::__construct($configuration, $plugin_id, $plugin_definition, $migration, $storage, $bundles, $entity_manager, $field_type_manager); if (isset($configuration['md5_passwords'])) { $this->password = $password; } @@ -73,6 +78,7 @@ class EntityUser extends EntityContentBase { $container->get('entity.manager')->getStorage($entity_type), array_keys($container->get('entity.manager')->getBundleInfo($entity_type)), $container->get('entity.manager'), + $container->get('plugin.manager.field.field_type'), $container->get('password') ); } @@ -90,6 +96,10 @@ class EntityUser extends EntityContentBase { throw new MigrateException('Password service has been altered by another module, aborting.'); } } + // Do not overwrite the root account password. + if ($row->getDestinationProperty('uid') == 1) { + $row->removeDestinationProperty('pass'); + } $ids = parent::import($row, $old_destination_id_values); if ($this->password) { $this->password->disableMd5Prefixing(); @@ -98,4 +108,28 @@ class EntityUser extends EntityContentBase { return $ids; } + /** + * {@inheritdoc} + */ + protected function processStubRow(Row $row) { + parent::processStubRow($row); + // Email address is not defined as required in the base field definition but + // is effectively required by the UserMailRequired constraint. This means + // that Entity::processStubRow() did not populate it - we do it here. + $field_definitions = $this->entityManager + ->getFieldDefinitions($this->storage->getEntityTypeId(), + $this->getKey('bundle')); + $mail = EmailItem::generateSampleValue($field_definitions['mail']); + $row->setDestinationProperty('mail', reset($mail)); + + // @todo Work-around for https://www.drupal.org/node/2602066. + $name = $row->getDestinationProperty('name'); + if (is_array($name)) { + $name = reset($name); + } + if (Unicode::strlen($name) > USERNAME_MAX_LENGTH) { + $row->setDestinationProperty('name', Unicode::substr($name, 0, USERNAME_MAX_LENGTH)); + } + } + } diff --git a/core/modules/user/src/Tests/Migrate/MigrateUserAdminPassTest.php b/core/modules/user/src/Tests/Migrate/MigrateUserAdminPassTest.php new file mode 100644 index 000000000..58496508f --- /dev/null +++ b/core/modules/user/src/Tests/Migrate/MigrateUserAdminPassTest.php @@ -0,0 +1,116 @@ +container->get('module_handler')->loadInclude('user', 'install'); + $this->installEntitySchema('user'); + user_install(); + /** @var \Drupal\user\Entity\User $admin_account */ + $admin_account = User::load(1); + $admin_account->setPassword('original'); + $admin_account->save(); + $this->originalPasswords[1] = $admin_account->getPassword(); + + /** @var \Drupal\user\Entity\User $user_account */ + $user_account = User::create([ + 'uid' => 2, + 'name' => 'original_username', + 'mail' => 'original_email@example.com', + 'pass' => 'original_password', + ]); + $user_account->save(); + $this->originalPasswords[2] = $user_account->getPassword(); + } + + /** + * Tests preserving the admin user's password. + */ + public function testAdminPasswordPreserved() { + $user_data_rows = [ + [ + 'id' => '1', + 'username' => 'site_admin', + 'password' => 'new_password', + 'email' => 'site_admin@example.com', + ], + [ + 'id' => '2', + 'username' => 'random_user', + 'password' => 'random_password', + 'email' => 'random_user@example.com', + ], + ]; + $ids = ['id' => ['type' => 'integer']]; + $config = [ + 'id' => 'users', + 'migration_tags' => ['Admin password test'], + 'source' => [ + 'plugin' => 'embedded_data', + 'data_rows' => $user_data_rows, + 'ids' => $ids, + ], + 'process' => [ + 'uid' => 'id', + 'name' => 'username', + 'mail' => 'email', + 'pass' => 'password', + ], + 'destination' => ['plugin' => 'entity:user'], + ]; + $migration = Migration::create($config); + $this->executeMigration($migration); + + // Verify that admin username and email were changed, but password was not. + /** @var \Drupal\user\Entity\User $admin_account */ + $admin_account = User::load(1); + $this->assertIdentical($admin_account->getUsername(), 'site_admin'); + $this->assertIdentical($admin_account->getEmail(), 'site_admin@example.com'); + $this->assertIdentical($admin_account->getPassword(), $this->originalPasswords[1]); + + // Verify that everything changed for the regular user. + /** @var \Drupal\user\Entity\User $user_account */ + $user_account = User::load(2); + $this->assertIdentical($user_account->getUsername(), 'random_user'); + $this->assertIdentical($user_account->getEmail(), 'random_user@example.com'); + $this->assertNotIdentical($user_account->getPassword(), $this->originalPasswords[2]); + } + +} diff --git a/core/modules/user/src/Tests/Migrate/MigrateUserStubTest.php b/core/modules/user/src/Tests/Migrate/MigrateUserStubTest.php new file mode 100644 index 000000000..0a65ddf2d --- /dev/null +++ b/core/modules/user/src/Tests/Migrate/MigrateUserStubTest.php @@ -0,0 +1,43 @@ +installEntitySchema('user'); + $this->installSchema('system', ['sequences']); + } + + /** + * Tests creation of user stubs. + */ + public function testStub() { + $this->performStubTest('user'); + } + +} diff --git a/core/modules/user/src/Tests/Migrate/d6/MigrateUserTest.php b/core/modules/user/src/Tests/Migrate/d6/MigrateUserTest.php index ddb93cf4f..eb94627c6 100644 --- a/core/modules/user/src/Tests/Migrate/d6/MigrateUserTest.php +++ b/core/modules/user/src/Tests/Migrate/d6/MigrateUserTest.php @@ -119,8 +119,11 @@ class MigrateUserTest extends MigrateDrupal6TestBase { } // Use the API to check if the password has been salted and re-hashed to - // conform the Drupal >= 7. - $this->assertTrue(\Drupal::service('password')->check($source->pass_plain, $user->getPassword())); + // conform to Drupal >= 7 for non-admin users. + if ($user->id() != 1) { + $this->assertTrue(\Drupal::service('password') + ->check($source->pass_plain, $user->getPassword())); + } } // Rollback the migration and make sure everything is deleted but uid 1. (new MigrateExecutable($this->migration, $this))->rollback(); diff --git a/core/modules/user/src/Tests/UserValidationTest.php b/core/modules/user/src/Tests/UserValidationTest.php index 4891d5a15..dfa8a2114 100644 --- a/core/modules/user/src/Tests/UserValidationTest.php +++ b/core/modules/user/src/Tests/UserValidationTest.php @@ -176,7 +176,7 @@ class UserValidationTest extends KernelTestBase { $user->roles[1]->target_id = 'unknown_role'; $violations = $user->validate(); $this->assertEqual(count($violations), 1); - $this->assertEqual($violations[0]->getPropertyPath(), 'roles.1'); + $this->assertEqual($violations[0]->getPropertyPath(), 'roles.1.target_id'); $this->assertEqual($violations[0]->getMessage(), t('The referenced entity (%entity_type: %name) does not exist.', array('%entity_type' => 'user_role', '%name' => 'unknown_role'))); } diff --git a/core/modules/user/user.routing.yml b/core/modules/user/user.routing.yml index 6eb709fe5..6eea7ecec 100644 --- a/core/modules/user/user.routing.yml +++ b/core/modules/user/user.routing.yml @@ -138,6 +138,7 @@ user.cancel_confirm: hashed_pass: '' requirements: _entity_access: 'user.delete' + user: \d+ user.reset: path: '/user/reset/{uid}/{timestamp}/{hash}' diff --git a/core/modules/views/src/Plugin/views/argument_default/Raw.php b/core/modules/views/src/Plugin/views/argument_default/Raw.php index b94a2db0f..b4efe9cf6 100644 --- a/core/modules/views/src/Plugin/views/argument_default/Raw.php +++ b/core/modules/views/src/Plugin/views/argument_default/Raw.php @@ -112,11 +112,15 @@ class Raw extends ArgumentDefaultPluginBase implements CacheableDependencyInterf * {@inheritdoc} */ public function getArgument() { - $path = trim($this->currentPath->getPath($this->view->getRequest()), '/'); + // Don't trim the leading slash since getAliasByPath() requires it. + $path = rtrim($this->currentPath->getPath($this->view->getRequest()), '/'); if ($this->options['use_alias']) { $path = $this->aliasManager->getAliasByPath($path); } $args = explode('/', $path); + // Drop the empty first element created by the leading slash since the path + // component index doesn't take it into account. + array_shift($args); if (isset($args[$this->options['index']])) { return $args[$this->options['index']]; } diff --git a/core/modules/views/src/Tests/DefaultViewsTest.php b/core/modules/views/src/Tests/DefaultViewsTest.php index 23e7c97e5..197d25e5a 100644 --- a/core/modules/views/src/Tests/DefaultViewsTest.php +++ b/core/modules/views/src/Tests/DefaultViewsTest.php @@ -210,6 +210,13 @@ class DefaultViewsTest extends ViewTestBase { ), ); $this->assertIdenticalResultset($view, $expected_result, $column_map); + + $view->storage->setStatus(TRUE); + $view->save(); + \Drupal::service('router.builder')->rebuild(); + + $this->drupalGet('archive'); + $this->assertResponse(200); } } diff --git a/core/modules/views/src/Tests/Plugin/StyleGridTest.php b/core/modules/views/src/Tests/Plugin/StyleGridTest.php index 6dbac6bd9..698d2ba10 100644 --- a/core/modules/views/src/Tests/Plugin/StyleGridTest.php +++ b/core/modules/views/src/Tests/Plugin/StyleGridTest.php @@ -53,7 +53,7 @@ class StyleGridTest extends PluginTestBase { // Ensure styles are properly added for grid views. $this->drupalGet('test-grid'); - $this->assertRaw('views/css/views.module.css'); + $this->assertRaw('stable/css/views/views.module.css'); } /** diff --git a/core/modules/views/src/Tests/Plugin/StyleSummaryTest.php b/core/modules/views/src/Tests/Plugin/StyleSummaryTest.php new file mode 100644 index 000000000..cea8fba1b --- /dev/null +++ b/core/modules/views/src/Tests/Plugin/StyleSummaryTest.php @@ -0,0 +1,77 @@ +entities[] = $entity = EntityTest::create([ + 'name' => 'Entity ' . ($i * 5 + $j), + 'type' => 'type' . $i, + ]); + $entity->save(); + } + } + } + + /** + * Tests a summary view. + */ + public function testSummaryView() { + $this->drupalGet('test-summary'); + + $summary_list = $this->cssSelect('ul.views-summary li'); + $this->assertEqual(4, count($summary_list)); + + foreach ($summary_list as $summary_list_item) { + $this->assertEqual('(5)', trim((string) $summary_list_item)); + } + + $summary_links = $this->cssSelect('ul.views-summary a'); + $this->assertEqual(4, count($summary_links)); + foreach ($summary_links as $index => $summary_link) { + $this->assertEqual('type' . $index, trim((string) $summary_link)); + } + + $this->clickLink('type1'); + $entries = $this->cssSelect('div.view-content div.views-row'); + $this->assertEqual(2, count($entries)); + } + +} diff --git a/core/modules/views/src/Tests/Plugin/StyleTestBase.php b/core/modules/views/src/Tests/Plugin/StyleTestBase.php index 38db4d903..508fc1214 100644 --- a/core/modules/views/src/Tests/Plugin/StyleTestBase.php +++ b/core/modules/views/src/Tests/Plugin/StyleTestBase.php @@ -18,7 +18,7 @@ abstract class StyleTestBase extends ViewKernelTestBase { /** * Stores the SimpleXML representation of the output. * - * @var SimpleXMLElement + * @var \SimpleXMLElement */ protected $elements; diff --git a/core/modules/views/src/Tests/Wizard/BasicTest.php b/core/modules/views/src/Tests/Wizard/BasicTest.php index 8a64df8cb..b87bca611 100644 --- a/core/modules/views/src/Tests/Wizard/BasicTest.php +++ b/core/modules/views/src/Tests/Wizard/BasicTest.php @@ -189,7 +189,10 @@ class BasicTest extends WizardTestBase { $this->drupalPostAjaxForm(NULL, array('show[wizard_key]' => 'users'), 'show[wizard_key]'); $this->assertNoFieldByName('show[type]', NULL, 'The "of type" filter is not added for users.'); $this->drupalPostAjaxForm(NULL, array('show[wizard_key]' => 'node'), 'show[wizard_key]'); - $this->assertFieldByName('show[type]', 'all', 'The "of type" filter is added for nodes.'); + $this->assertNoFieldByName('show[type]', 'all', 'The "of type" filter is not added for nodes when there are no node types.'); + $this->drupalCreateContentType(array('type' => 'page')); + $this->drupalPostAjaxForm(NULL, array('show[wizard_key]' => 'node'), 'show[wizard_key]'); + $this->assertFieldByName('show[type]', 'all', 'The "of type" filter is added for nodes when there is at least one node type.'); } /** diff --git a/core/modules/views/src/ViewExecutable.php b/core/modules/views/src/ViewExecutable.php index 9f5d32a88..3ac4e1792 100644 --- a/core/modules/views/src/ViewExecutable.php +++ b/core/modules/views/src/ViewExecutable.php @@ -553,7 +553,11 @@ class ViewExecutable implements \Serializable { * The items per page. */ public function setItemsPerPage($items_per_page) { - $this->element['#cache']['keys'][] = 'items_per_page:' . $items_per_page; + // Check whether the element is pre rendered. At that point, the cache keys + // cannot longer be manipulated. + if (empty($this->element['#pre_rendered'])) { + $this->element['#cache']['keys'][] = 'items_per_page:' . $items_per_page; + } $this->items_per_page = $items_per_page; // If the pager is already initialized, pass it through to the pager. @@ -583,9 +587,15 @@ class ViewExecutable implements \Serializable { * The pager offset. */ public function setOffset($offset) { - $this->element['#cache']['keys'][] = 'offset:' . $offset; + // Check whether the element is pre rendered. At that point, the cache keys + // cannot longer be manipulated. + if (empty($this->element['#pre_rendered'])) { + $this->element['#cache']['keys'][] = 'offset:' . $offset; + } + $this->offset = $offset; + // If the pager is already initialized, pass it through to the pager. if (!empty($this->pager)) { $this->pager->setOffset($offset); diff --git a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_summary.yml b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_summary.yml new file mode 100644 index 000000000..daf92fa2a --- /dev/null +++ b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_summary.yml @@ -0,0 +1,127 @@ +langcode: en +status: true +id: test_summary +label: Test Summary +module: views +description: '' +tag: default +base_table: entity_test +base_field: id +core: '8' +display: + default: + id: default + display_title: Master + display_plugin: default + position: 0 + display_options: + query: + type: views_query + options: + query_comment: '' + disable_sql_rewrite: false + distinct: false + replica: false + query_tags: { } + title: 'Summary test' + access: + type: none + cache: + type: tag + options: { } + pager: + type: mini + options: + items_per_page: 2 + offset: 0 + id: 0 + total_pages: 0 + expose: + items_per_page: false + items_per_page_label: 'Items per page' + items_per_page_options: '1, 2, 3, 4' + items_per_page_options_all: false + items_per_page_options_all_label: '- All -' + offset: false + offset_label: Offset + tags: + previous: ‹‹ + next: ›› + sorts: + id: + id: id + table: entity_test + field: id + order: ASC + plugin_id: standard + relationship: none + arguments: + type: + id: type + field: type + table: entity_test + default_action: summary + exception: + title_enable: true + title_enable: true + title: '{{ arguments.type }}' + default_argument_type: fixed + summary: + sort_order: asc + format: default_summary + summary_options: + override: true + items_per_page: 4 + specify_validation: true + plugin_id: string + entity_type: entity_test + fields: + id: + id: id + field: id + table: entity_test + plugin_id: field + entity_type: entity_test + style: + type: default + options: + grouping: { } + row_class: '' + default_row_class: true + uses_fields: false + row: + type: fields + header: { } + footer: { } + empty: { } + relationships: { } + fields: { } + display_extenders: { } + cache_metadata: + contexts: + - 'languages:language_interface' + - url + - url.query_args + - user.permissions + max-age: -1 + tags: { } + page_1: + id: page_1 + display_title: Page + display_plugin: page + position: 2 + display_options: + query: + type: views_query + options: { } + path: test-summary + display_extenders: { } + cache_metadata: + contexts: + - 'languages:language_interface' + - url + - url.query_args + - 'user.node_grants:view' + - user.permissions + max-age: -1 + tags: { } diff --git a/core/modules/views/tests/src/Unit/Plugin/argument_default/QueryParameterTest.php b/core/modules/views/tests/src/Unit/Plugin/argument_default/QueryParameterTest.php index 0df15f2ca..f19e20b3b 100644 --- a/core/modules/views/tests/src/Unit/Plugin/argument_default/QueryParameterTest.php +++ b/core/modules/views/tests/src/Unit/Plugin/argument_default/QueryParameterTest.php @@ -48,41 +48,33 @@ class QueryParameterTest extends UnitTestCase { * - third entry: the expected default argument value. */ public function providerGetArgument() { - $data = array(); + $data = []; - $single[] = array( - 'query_param' => 'test', - ); - $single[] = new Request(array('test' => 'data')); - $single[] = 'data'; - $data[] = $single; + $data[] = [ + ['query_param' => 'test'], + new Request(['test' => 'data']), + 'data', + ]; - $single[] = array( - 'query_param' => 'test', - 'multiple' => 'AND' - ); - $single[] = new Request(array('test' => array('data1', 'data2'))); - $single[] = 'data1+data2'; - $data[] = $single; + $data[] = [ + ['query_param' => 'test', 'multiple' => 'and'], + new Request(['test' => ['data1', 'data2']]), + 'data1,data2', + ]; - $single[] = array( - 'query_param' => 'test', - 'multiple' => 'OR' - ); - $single[] = new Request(array('test' => array('data1', 'data2'))); - $single[] = 'data1,data2'; - $data[] = $single; + $data[] = [ + ['query_param' => 'test', 'multiple' => 'or'], + new Request(['test' => ['data1', 'data2']]), + 'data1+data2', + ]; - $single[] = array( - 'query_param' => 'test', - 'fallback' => 'blub', - ); - $single[] = new Request(array()); - $single[] = 'blub'; - $data[] = $single; + $data[] = [ + ['query_param' => 'test', 'fallback' => 'blub'], + new Request([]), + 'blub', + ]; return $data; } } - diff --git a/core/modules/views/tests/src/Unit/Plugin/argument_default/RawTest.php b/core/modules/views/tests/src/Unit/Plugin/argument_default/RawTest.php index f50b928f4..f33cbaa2f 100644 --- a/core/modules/views/tests/src/Unit/Plugin/argument_default/RawTest.php +++ b/core/modules/views/tests/src/Unit/Plugin/argument_default/RawTest.php @@ -42,7 +42,15 @@ class RawTest extends UnitTestCase { $alias_manager->expects($this->never()) ->method('getAliasByPath'); - // Don't use aliases. + // Don't use aliases. Check against NULL and nonexistent path component + // values in addition to valid ones. + $raw = new Raw(array(), 'raw', array(), $alias_manager, $current_path); + $options = array( + 'use_alias' => FALSE, + ); + $raw->init($view, $display_plugin, $options); + $this->assertEquals(NULL, $raw->getArgument()); + $raw = new Raw(array(), 'raw', array(), $alias_manager, $current_path); $options = array( 'use_alias' => FALSE, @@ -59,12 +67,27 @@ class RawTest extends UnitTestCase { $raw->init($view, $display_plugin, $options); $this->assertEquals('example', $raw->getArgument()); + $raw = new Raw(array(), 'raw', array(), $alias_manager, $current_path); + $options = array( + 'use_alias' => FALSE, + 'index' => 2, + ); + $raw->init($view, $display_plugin, $options); + $this->assertEquals(NULL, $raw->getArgument()); + // Setup an alias manager with a path alias. $alias_manager = $this->getMock('Drupal\Core\Path\AliasManagerInterface'); $alias_manager->expects($this->any()) ->method('getAliasByPath') - ->with($this->equalTo('test/example')) - ->will($this->returnValue('other/example')); + ->with($this->equalTo('/test/example')) + ->will($this->returnValue('/other/example')); + + $raw = new Raw(array(), 'raw', array(), $alias_manager, $current_path); + $options = array( + 'use_alias' => TRUE, + ); + $raw->init($view, $display_plugin, $options); + $this->assertEquals(NULL, $raw->getArgument()); $raw = new Raw(array(), 'raw', array(), $alias_manager, $current_path); $options = array( @@ -82,6 +105,13 @@ class RawTest extends UnitTestCase { $raw->init($view, $display_plugin, $options); $this->assertEquals('example', $raw->getArgument()); + $raw = new Raw(array(), 'raw', array(), $alias_manager, $current_path); + $options = array( + 'use_alias' => TRUE, + 'index' => 2, + ); + $raw->init($view, $display_plugin, $options); + $this->assertEquals(NULL, $raw->getArgument()); } } diff --git a/core/modules/views/tests/src/Unit/ViewExecutableTest.php b/core/modules/views/tests/src/Unit/ViewExecutableTest.php index fea412b63..049df8d9e 100644 --- a/core/modules/views/tests/src/Unit/ViewExecutableTest.php +++ b/core/modules/views/tests/src/Unit/ViewExecutableTest.php @@ -469,4 +469,100 @@ class ViewExecutableTest extends UnitTestCase { return array($view, $display); } + /** + * @covers ::setItemsPerPage + * @covers ::getItemsPerPage + */ + public function testSetItemsPerPageBeforePreRender() { + /** @var \Drupal\views\ViewExecutable|\PHPUnit_Framework_MockObject_MockObject $view */ + /** @var \Drupal\views\Plugin\views\display\DisplayPluginBase|\PHPUnit_Framework_MockObject_MockObject $display */ + list($view, $display) = $this->setupBaseViewAndDisplay(); + + $view->setItemsPerPage(12); + $this->assertEquals(12, $view->getItemsPerPage()); + $this->assertContains('items_per_page:12', $view->element['#cache']['keys']); + } + + /** + * @covers ::setItemsPerPage + * @covers ::getItemsPerPage + */ + public function testSetItemsPerPageDuringPreRender() { + /** @var \Drupal\views\ViewExecutable|\PHPUnit_Framework_MockObject_MockObject $view */ + /** @var \Drupal\views\Plugin\views\display\DisplayPluginBase|\PHPUnit_Framework_MockObject_MockObject $display */ + list($view, $display) = $this->setupBaseViewAndDisplay(); + + $elements = &$view->element; + $elements['#cache'] += ['keys' => []]; + $elements['#pre_rendered'] = TRUE; + + $view->setItemsPerPage(12); + $this->assertEquals(12, $view->getItemsPerPage()); + $this->assertNotContains('items_per_page:12', $view->element['#cache']['keys']); + } + + /** + * @covers ::setOffset + * @covers ::getOffset + */ + public function testSetOffsetBeforePreRender() { + /** @var \Drupal\views\ViewExecutable|\PHPUnit_Framework_MockObject_MockObject $view */ + /** @var \Drupal\views\Plugin\views\display\DisplayPluginBase|\PHPUnit_Framework_MockObject_MockObject $display */ + list($view, $display) = $this->setupBaseViewAndDisplay(); + + $view->setOffset(12); + $this->assertEquals(12, $view->getOffset()); + $this->assertContains('offset:12', $view->element['#cache']['keys']); + } + + /** + * @covers ::setOffset + * @covers ::getOffset + */ + public function testSetOffsetDuringPreRender() { + /** @var \Drupal\views\ViewExecutable|\PHPUnit_Framework_MockObject_MockObject $view */ + /** @var \Drupal\views\Plugin\views\display\DisplayPluginBase|\PHPUnit_Framework_MockObject_MockObject $display */ + list($view, $display) = $this->setupBaseViewAndDisplay(); + + $elements = &$view->element; + $elements['#cache'] += ['keys' => []]; + $elements['#pre_rendered'] = TRUE; + + $view->setOffset(12); + $this->assertEquals(12, $view->getOffset()); + $this->assertNotContains('offset:12', $view->element['#cache']['keys']); + } + + /** + * @covers ::setCurrentPage + * @covers ::getCurrentPage + */ + public function testSetCurrentPageBeforePreRender() { + /** @var \Drupal\views\ViewExecutable|\PHPUnit_Framework_MockObject_MockObject $view */ + /** @var \Drupal\views\Plugin\views\display\DisplayPluginBase|\PHPUnit_Framework_MockObject_MockObject $display */ + list($view, $display) = $this->setupBaseViewAndDisplay(); + + $view->setCurrentPage(12); + $this->assertEquals(12, $view->getCurrentPage()); + $this->assertContains('page:12', $view->element['#cache']['keys']); + } + + /** + * @covers ::setCurrentPage + * @covers ::getCurrentPage + */ + public function testSetCurrentPageDuringPreRender() { + /** @var \Drupal\views\ViewExecutable|\PHPUnit_Framework_MockObject_MockObject $view */ + /** @var \Drupal\views\Plugin\views\display\DisplayPluginBase|\PHPUnit_Framework_MockObject_MockObject $display */ + list($view, $display) = $this->setupBaseViewAndDisplay(); + + $elements = &$view->element; + $elements['#cache'] += ['keys' => []]; + $elements['#pre_rendered'] = TRUE; + + $view->setCurrentPage(12); + $this->assertEquals(12, $view->getCurrentPage()); + $this->assertNotContains('page:12', $view->element['#cache']['keys']); + } + } diff --git a/core/modules/views_ui/src/ViewPreviewForm.php b/core/modules/views_ui/src/ViewPreviewForm.php index 7ec8f4de1..d87f593d1 100644 --- a/core/modules/views_ui/src/ViewPreviewForm.php +++ b/core/modules/views_ui/src/ViewPreviewForm.php @@ -94,6 +94,7 @@ class ViewPreviewForm extends ViewFormBase { 'event' => 'click', 'progress' => array('type' => 'fullscreen'), 'method' => 'replaceWith', + 'disable-refocus' => TRUE, ), ), ); diff --git a/core/modules/views_ui/src/ViewUI.php b/core/modules/views_ui/src/ViewUI.php index 47b8e88fe..fe3198b26 100644 --- a/core/modules/views_ui/src/ViewUI.php +++ b/core/modules/views_ui/src/ViewUI.php @@ -1031,6 +1031,13 @@ class ViewUI implements ViewEntityInterface { return $this->storage->urlInfo($rel, $options); } + /** + * {@inheritdoc} + */ + public function toUrl($rel = 'edit-form', array $options = []) { + return $this->storage->toUrl($rel, $options); + } + /** * {@inheritdoc} */ @@ -1038,6 +1045,13 @@ class ViewUI implements ViewEntityInterface { return $this->storage->link($text, $rel, $options); } + /** + * {@inheritdoc} + */ + public function toLink($text = NULL, $rel = 'edit-form', array $options = []) { + return $this->storage->toLink($text, $rel, $options); + } + /** * {@inheritdoc} */ diff --git a/core/profiles/standard/config/install/block.block.classy_page_title.yml b/core/profiles/standard/config/install/block.block.classy_page_title.yml deleted file mode 100644 index 42362242b..000000000 --- a/core/profiles/standard/config/install/block.block.classy_page_title.yml +++ /dev/null @@ -1,17 +0,0 @@ -langcode: en -status: true -dependencies: - theme: - - classy -id: classy_page_title -theme: classy -region: content -weight: -50 -provider: null -plugin: page_title_block -settings: - id: page_title_block - label: 'Page title' - provider: core - label_display: '0' -visibility: { } diff --git a/core/scripts/run-tests.sh b/core/scripts/run-tests.sh index 9ca309f48..bf46a4018 100755 --- a/core/scripts/run-tests.sh +++ b/core/scripts/run-tests.sh @@ -12,6 +12,7 @@ use Drupal\Core\Database\Database; use Drupal\Core\StreamWrapper\PublicStream; use Drupal\Core\Test\TestRunnerKernel; use Drupal\simpletest\Form\SimpletestResultsForm; +use Drupal\simpletest\TestBase; use Symfony\Component\HttpFoundation\Request; $autoloader = require_once __DIR__ . '/../../autoload.php'; @@ -23,46 +24,68 @@ const SIMPLETEST_SCRIPT_COLOR_EXCEPTION = 33; // Brown. // Restricting the chunk of queries prevents memory exhaustion. const SIMPLETEST_SCRIPT_SQLITE_VARIABLE_LIMIT = 350; +const SIMPLETEST_SCRIPT_EXIT_SUCCESS = 0; +const SIMPLETEST_SCRIPT_EXIT_FAILURE = 1; +const SIMPLETEST_SCRIPT_EXIT_EXCEPTION = 2; + // Set defaults and get overrides. list($args, $count) = simpletest_script_parse_args(); if ($args['help'] || $count == 0) { simpletest_script_help(); - exit; + exit(($count == 0) ? SIMPLETEST_SCRIPT_EXIT_FAILURE : SIMPLETEST_SCRIPT_EXIT_SUCCESS); } simpletest_script_init(); -$request = Request::createFromGlobals(); -$kernel = TestRunnerKernel::createFromRequest($request, $autoloader); -$kernel->prepareLegacyRequest($request); +try { + $request = Request::createFromGlobals(); + $kernel = TestRunnerKernel::createFromRequest($request, $autoloader); + $kernel->prepareLegacyRequest($request); +} +catch (Exception $e) { + echo (string) $e; + exit(SIMPLETEST_SCRIPT_EXIT_EXCEPTION); +} if ($args['execute-test']) { simpletest_script_setup_database(); simpletest_script_run_one_test($args['test-id'], $args['execute-test']); // Sub-process exited already; this is just for clarity. - exit; + exit(SIMPLETEST_SCRIPT_EXIT_SUCCESS); } if ($args['list']) { // Display all available tests. echo "\nAvailable test groups & classes\n"; echo "-------------------------------\n\n"; - $groups = simpletest_test_get_all($args['module']); + try { + $groups = simpletest_test_get_all($args['module']); + } + catch (Exception $e) { + echo (string) $e; + exit(SIMPLETEST_SCRIPT_EXIT_EXCEPTION); + } foreach ($groups as $group => $tests) { echo $group . "\n"; foreach ($tests as $class => $info) { echo " - $class\n"; } } - exit; + exit(SIMPLETEST_SCRIPT_EXIT_SUCCESS); } simpletest_script_setup_database(TRUE); if ($args['clean']) { // Clean up left-over tables and directories. - simpletest_clean_environment(); + try { + simpletest_clean_environment(); + } + catch (Exception $e) { + echo (string) $e; + exit(SIMPLETEST_SCRIPT_EXIT_EXCEPTION); + } echo "\nEnvironment cleaned.\n"; // Get the status messages and print them. @@ -70,7 +93,7 @@ if ($args['clean']) { foreach ($messages['status'] as $text) { echo " - " . $text . "\n"; } - exit; + exit(SIMPLETEST_SCRIPT_EXIT_SUCCESS); } $test_list = simpletest_script_get_test_list(); @@ -85,7 +108,7 @@ for ($i = 0; $i < $args['repeat']; $i++) { } // Execute tests. -simpletest_script_execute_batch($tests_to_run); +$status = simpletest_script_execute_batch($tests_to_run); // Stop the timer. simpletest_script_reporter_timer_stop(); @@ -104,11 +127,17 @@ if ($args['xml']) { // Clean up all test results. if (!$args['keep-results']) { - simpletest_clean_results_table(); + try { + simpletest_clean_results_table(); + } + catch (Exception $e) { + echo (string) $e; + exit(SIMPLETEST_SCRIPT_EXIT_EXCEPTION); + } } // Test complete, exit. -exit; +exit($status); /** * Print help text. @@ -295,7 +324,7 @@ function simpletest_script_parse_args() { else { // Argument not found in list. simpletest_script_print_error("Unknown argument '$arg'."); - exit; + exit(SIMPLETEST_SCRIPT_EXIT_FAILURE); } } else { @@ -308,7 +337,7 @@ function simpletest_script_parse_args() { // Validate the concurrency argument if (!is_numeric($args['concurrency']) || $args['concurrency'] <= 0) { simpletest_script_print_error("--concurrency must be a strictly positive integer."); - exit; + exit(SIMPLETEST_SCRIPT_EXIT_FAILURE); } if ($args['browser']) { @@ -343,7 +372,7 @@ function simpletest_script_init() { else { simpletest_script_print_error('Unable to automatically determine the path to the PHP interpreter. Supply the --php command line argument.'); simpletest_script_help(); - exit(); + exit(SIMPLETEST_SCRIPT_EXIT_FAILURE); } // Get URL from arguments. @@ -441,7 +470,7 @@ function simpletest_script_setup_database($new = FALSE) { } catch (\InvalidArgumentException $e) { simpletest_script_print_error('Invalid --dburl. Reason: ' . $e->getMessage()); - exit(1); + exit(SIMPLETEST_SCRIPT_EXIT_FAILURE); } } // Otherwise, use the default database connection from settings.php. @@ -452,7 +481,7 @@ function simpletest_script_setup_database($new = FALSE) { // If there is no default database connection for tests, we cannot continue. if (!isset($databases['default']['default'])) { simpletest_script_print_error('Missing default database connection for tests. Use --dburl to specify one.'); - exit(1); + exit(SIMPLETEST_SCRIPT_EXIT_FAILURE); } Database::addConnectionInfo('default', 'default', $databases['default']['default']); @@ -496,21 +525,33 @@ function simpletest_script_setup_database($new = FALSE) { } catch (\PDOException $e) { simpletest_script_print_error($databases['test-runner']['default']['driver'] . ': ' . $e->getMessage()); - exit(1); + exit(SIMPLETEST_SCRIPT_EXIT_FAILURE); } if ($new && $sqlite) { require_once DRUPAL_ROOT . '/' . drupal_get_path('module', 'simpletest') . '/simpletest.install'; foreach (simpletest_schema() as $name => $table_spec) { - if ($schema->tableExists($name)) { - $schema->dropTable($name); + try { + if ($schema->tableExists($name)) { + $schema->dropTable($name); + } + $schema->createTable($name, $table_spec); + } + catch (Exception $e) { + echo (string) $e; + exit(SIMPLETEST_SCRIPT_EXIT_EXCEPTION); } - $schema->createTable($name, $table_spec); } } // Verify that the Simpletest database schema exists by checking one table. - if (!$schema->tableExists('simpletest')) { - simpletest_script_print_error('Missing Simpletest database schema. Either install Simpletest module or use the --sqlite parameter.'); - exit(1); + try { + if (!$schema->tableExists('simpletest')) { + simpletest_script_print_error('Missing Simpletest database schema. Either install Simpletest module or use the --sqlite parameter.'); + exit(SIMPLETEST_SCRIPT_EXIT_FAILURE); + } + } + catch (Exception $e) { + echo (string) $e; + exit(SIMPLETEST_SCRIPT_EXIT_EXCEPTION); } } @@ -520,6 +561,8 @@ function simpletest_script_setup_database($new = FALSE) { function simpletest_script_execute_batch($test_classes) { global $args, $test_ids; + $total_status = SIMPLETEST_SCRIPT_EXIT_SUCCESS; + // Multi-process execution. $children = array(); while (!empty($test_classes) || !empty($children)) { @@ -528,8 +571,16 @@ function simpletest_script_execute_batch($test_classes) { break; } - $test_id = Database::getConnection('default', 'test-runner') - ->insert('simpletest_test_id')->useDefaults(array('test_id'))->execute(); + try { + $test_id = Database::getConnection('default', 'test-runner') + ->insert('simpletest_test_id') + ->useDefaults(array('test_id')) + ->execute(); + } + catch (Exception $e) { + echo (string) $e; + exit(SIMPLETEST_SCRIPT_EXIT_EXCEPTION); + } $test_ids[] = $test_id; $test_class = array_shift($test_classes); @@ -539,7 +590,7 @@ function simpletest_script_execute_batch($test_classes) { if (!is_resource($process)) { echo "Unable to fork test process. Aborting.\n"; - exit; + exit(SIMPLETEST_SCRIPT_EXIT_SUCCESS); } // Register our new child. @@ -560,8 +611,16 @@ function simpletest_script_execute_batch($test_classes) { if (empty($status['running'])) { // The child exited, unregister it. proc_close($child['process']); - if ($status['exitcode']) { - echo 'FATAL ' . $child['class'] . ': test runner returned a non-zero error code (' . $status['exitcode'] . ').' . "\n"; + if ($status['exitcode'] === SIMPLETEST_SCRIPT_EXIT_FAILURE) { + $total_status = max($status['exitcode'], $total_status); + } + elseif ($status['exitcode']) { + $message = 'FATAL ' . $child['class'] . ': test runner returned a non-zero error code (' . $status['exitcode'] . ').'; + echo $message . "\n"; + // Insert a fail for xml results. + TestBase::insertAssert($child['test_id'], $child['class'], FALSE, $message, 'run-tests.sh check'); + /// Ensure that an error line is displayed for the class. + simpletest_script_reporter_display_summary($child['class'], ['#pass' => 0, '#fail' => 1, '#exception' => 0, '#debug' => 0]); if ($args['die-on-fail']) { list($db_prefix, ) = simpletest_last_test_get($child['test_id']); $test_directory = 'sites/simpletest/' . substr($db_prefix, 10); @@ -581,19 +640,19 @@ function simpletest_script_execute_batch($test_classes) { } } } + return $total_status; } /** * Run a group of phpunit tests. */ function simpletest_script_run_phpunit($test_id, $class) { - $reflection = new \ReflectionClass($class); if ($reflection->hasProperty('runLimit')) { set_time_limit($reflection->getStaticPropertyValue('runLimit')); } - $results = simpletest_run_phpunit_tests($test_id, array($class)); + $results = simpletest_run_phpunit_tests($test_id, array($class), $status); simpletest_process_phpunit_results($results); // Map phpunit results to a data structure we can pass to @@ -628,6 +687,7 @@ function simpletest_script_run_phpunit($test_id, $class) { foreach ($summaries as $class => $summary) { simpletest_script_reporter_display_summary($class, $summary); } + return $status; } /** @@ -648,23 +708,28 @@ function simpletest_script_run_one_test($test_id, $test_class) { } $test = new $class_name($test_id); if (is_subclass_of($test_class, '\PHPUnit_Framework_TestCase')) { - simpletest_script_run_phpunit($test_id, $test_class); + $status = simpletest_script_run_phpunit($test_id, $test_class); } else { $test->dieOnFail = (bool) $args['die-on-fail']; $test->verbose = (bool) $args['verbose']; $test->run($methods); simpletest_script_reporter_display_summary($test_class, $test->results); + + $status = SIMPLETEST_SCRIPT_EXIT_SUCCESS; + // Finished, kill this runner. + if ($test->results['#fail'] || $test->results['#exception']) { + $status = SIMPLETEST_SCRIPT_EXIT_FAILURE; + } } - // Finished, kill this runner. - exit(0); + exit($status); } // DrupalTestCase::run() catches exceptions already, so this is only reached // when an exception is thrown in the wrapping test runner environment. catch (Exception $e) { echo (string) $e; - exit(1); + exit(SIMPLETEST_SCRIPT_EXIT_EXCEPTION); } } @@ -726,7 +791,13 @@ function simpletest_script_cleanup($test_id, $test_class, $exitcode) { return; } // Retrieve the last database prefix used for testing. - list($db_prefix, ) = simpletest_last_test_get($test_id); + try { + list($db_prefix,) = simpletest_last_test_get($test_id); + } + catch (Exception $e) { + echo (string) $e; + exit(SIMPLETEST_SCRIPT_EXIT_EXCEPTION); + } // If no database prefix was found, then the test was not set up correctly. if (empty($db_prefix)) { @@ -741,7 +812,13 @@ function simpletest_script_cleanup($test_id, $test_class, $exitcode) { $messages[] = "- Found database prefix '$db_prefix' for test ID $test_id."; // Read the log file in case any fatal errors caused the test to crash. - simpletest_log_read($test_id, $db_prefix, $test_class); + try { + simpletest_log_read($test_id, $db_prefix, $test_class); + } + catch (Exception $e) { + echo (string) $e; + exit(SIMPLETEST_SCRIPT_EXIT_EXCEPTION); + } // Check whether a test site directory was setup already. // @see \Drupal\simpletest\TestBase::prepareEnvironment() @@ -763,12 +840,19 @@ function simpletest_script_cleanup($test_id, $test_class, $exitcode) { } // Clear out all database tables from the test. - $schema = Database::getConnection('default', 'default')->schema(); - $count = 0; - foreach ($schema->findTables($db_prefix . '%') as $table) { - $schema->dropTable($table); - $count++; + try { + $schema = Database::getConnection('default', 'default')->schema(); + $count = 0; + foreach ($schema->findTables($db_prefix . '%') as $table) { + $schema->dropTable($table); + $count++; + } } + catch (Exception $e) { + echo (string) $e; + exit(SIMPLETEST_SCRIPT_EXIT_EXCEPTION); + } + if ($count) { $messages[] = "- Removed $count leftover tables."; } @@ -792,7 +876,13 @@ function simpletest_script_get_test_list() { $test_list = array(); if ($args['all'] || $args['module']) { - $groups = simpletest_test_get_all($args['module']); + try { + $groups = simpletest_test_get_all($args['module']); + } + catch (Exception $e) { + echo (string) $e; + exit(SIMPLETEST_SCRIPT_EXIT_EXCEPTION); + } $all_tests = array(); foreach ($groups as $group => $tests) { $all_tests = array_merge($all_tests, array_keys($tests)); @@ -808,14 +898,20 @@ function simpletest_script_get_test_list() { $test_list[] = $test_class; } else { - $groups = simpletest_test_get_all(); + try { + $groups = simpletest_test_get_all(); + } + catch (Exception $e) { + echo (string) $e; + exit(SIMPLETEST_SCRIPT_EXIT_EXCEPTION); + } $all_classes = array(); foreach ($groups as $group) { $all_classes = array_merge($all_classes, array_keys($group)); } simpletest_script_print_error('Test class not found: ' . $class_name); simpletest_script_print_alternatives($class_name, $all_classes, 6); - exit(1); + exit(SIMPLETEST_SCRIPT_EXIT_FAILURE); } } } @@ -824,7 +920,7 @@ function simpletest_script_get_test_list() { foreach ($args['test_names'] as $file) { if (!file_exists($file)) { simpletest_script_print_error('File not found: ' . $file); - exit; + exit(SIMPLETEST_SCRIPT_EXIT_FAILURE); } $content = file_get_contents($file); // Extract a potential namespace. @@ -903,7 +999,13 @@ function simpletest_script_get_test_list() { } } else { - $groups = simpletest_test_get_all(); + try { + $groups = simpletest_test_get_all(); + } + catch (Exception $e) { + echo (string) $e; + exit(SIMPLETEST_SCRIPT_EXIT_EXCEPTION); + } foreach ($args['test_names'] as $group_name) { if (isset($groups[$group_name])) { $test_list = array_merge($test_list, array_keys($groups[$group_name])); @@ -911,7 +1013,7 @@ function simpletest_script_get_test_list() { else { simpletest_script_print_error('Test group not found: ' . $group_name); simpletest_script_print_alternatives($group_name, array_keys($groups)); - exit(1); + exit(SIMPLETEST_SCRIPT_EXIT_FAILURE); } } } @@ -919,7 +1021,7 @@ function simpletest_script_get_test_list() { if (empty($test_list)) { simpletest_script_print_error('No valid tests were specified.'); - exit; + exit(SIMPLETEST_SCRIPT_EXIT_FAILURE); } return $test_list; } @@ -993,7 +1095,13 @@ function simpletest_script_reporter_display_summary($class, $results) { function simpletest_script_reporter_write_xml_results() { global $args, $test_ids, $results_map; - $results = simpletest_script_load_messages_by_test_id($test_ids); + try { + $results = simpletest_script_load_messages_by_test_id($test_ids); + } + catch (Exception $e) { + echo (string) $e; + exit(SIMPLETEST_SCRIPT_EXIT_EXCEPTION); + } $test_class = ''; $xml_files = array(); @@ -1083,7 +1191,13 @@ function simpletest_script_reporter_display_results() { echo "Detailed test results\n"; echo "---------------------\n"; - $results = simpletest_script_load_messages_by_test_id($test_ids); + try { + $results = simpletest_script_load_messages_by_test_id($test_ids); + } + catch (Exception $e) { + echo (string) $e; + exit(SIMPLETEST_SCRIPT_EXIT_EXCEPTION); + } $test_class = ''; foreach ($results as $result) { if (isset($results_map[$result->status])) { @@ -1231,10 +1345,16 @@ function simpletest_script_load_messages_by_test_id($test_ids) { } foreach ($test_id_chunks as $test_id_chunk) { - $result_chunk = Database::getConnection('default', 'test-runner') - ->query("SELECT * FROM {simpletest} WHERE test_id IN ( :test_ids[] ) ORDER BY test_class, message_id", array( - ':test_ids[]' => $test_id_chunk, - ))->fetchAll(); + try { + $result_chunk = Database::getConnection('default', 'test-runner') + ->query("SELECT * FROM {simpletest} WHERE test_id IN ( :test_ids[] ) ORDER BY test_class, message_id", array( + ':test_ids[]' => $test_id_chunk, + ))->fetchAll(); + } + catch (Exception $e) { + echo (string) $e; + exit(SIMPLETEST_SCRIPT_EXIT_EXCEPTION); + } if ($result_chunk) { $results = array_merge($results, $result_chunk); } @@ -1249,14 +1369,20 @@ function simpletest_script_load_messages_by_test_id($test_ids) { function simpletest_script_open_browser() { global $test_ids; - $connection = Database::getConnection('default', 'test-runner'); - $results = $connection->select('simpletest') - ->fields('simpletest') - ->condition('test_id', $test_ids, 'IN') - ->orderBy('test_class') - ->orderBy('message_id') - ->execute() - ->fetchAll(); + try { + $connection = Database::getConnection('default', 'test-runner'); + $results = $connection->select('simpletest') + ->fields('simpletest') + ->condition('test_id', $test_ids, 'IN') + ->orderBy('test_class') + ->orderBy('message_id') + ->execute() + ->fetchAll(); + } + catch (Exception $e) { + echo (string) $e; + exit(SIMPLETEST_SCRIPT_EXIT_EXCEPTION); + } // Get the results form. $form = array(); diff --git a/core/tests/Drupal/KernelTests/Core/Cache/CacheCollectorTest.php b/core/tests/Drupal/KernelTests/Core/Cache/CacheCollectorTest.php new file mode 100644 index 000000000..e9ca67a0a --- /dev/null +++ b/core/tests/Drupal/KernelTests/Core/Cache/CacheCollectorTest.php @@ -0,0 +1,79 @@ +installSchema('system', ['semaphore']); + } + + /** + * {@inheritdoc} + */ + public function register(ContainerBuilder $container) { + parent::register($container); + // Change container to database cache backends. + $container + ->register('cache_factory', 'Drupal\Core\Cache\CacheFactory') + ->addArgument(new Reference('settings')) + ->addMethodCall('setContainer', [new Reference('service_container')]); + + // Change container to use database lock backends. + $container + ->register('lock', 'Drupal\Core\Lock\DatabaseLockBackend') + ->addArgument(new Reference('database')); + } + + /** + * Tests setting and invalidating + * + * @dataProvider providerTestInvalidCharacters + */ + public function testCacheCollector($cid, $key, $value) { + $collector = new CacheCollectorHelper($cid, $this->container->get('cache.default'), $this->container->get('lock')); + $this->assertNull($collector->get($key)); + $collector->set($key, $value); + $this->assertEquals($value, $collector->get($key)); + $collector->destruct(); + // @todo Shouldn't this be empty after destruction? + $this->assertEquals($value, $collector->get($key)); + } + + /** + * Data provider for ::testCacheCollector(). + */ + public function providerTestInvalidCharacters() { + return [ + // Nothing special. + ['foo', 'bar', 'baz'], + // Invalid characters in CID. + ['éøïвβ中國書۞', 'foo', 'bar'], + // Really long CID. + [$this->randomString(1024), 'foo', 'bar'], + ]; + } + +} diff --git a/core/tests/Drupal/KernelTests/Core/Path/AliasStorageTest.php b/core/tests/Drupal/KernelTests/Core/Path/AliasStorageTest.php new file mode 100644 index 000000000..98180e3a3 --- /dev/null +++ b/core/tests/Drupal/KernelTests/Core/Path/AliasStorageTest.php @@ -0,0 +1,86 @@ +installSchema('system', 'url_alias'); + $this->storage = $this->container->get('path.alias_storage'); + } + + /** + * @covers ::load + */ + public function testLoad() { + $this->storage->save('/test-source-Case', '/test-alias-Case'); + + $expected = [ + 'pid' => 1, + 'alias' => '/test-alias-Case', + 'source' => '/test-source-Case', + 'langcode' => LanguageInterface::LANGCODE_NOT_SPECIFIED, + ]; + + $this->assertEquals($expected, $this->storage->load(['alias' => '/test-alias-Case'])); + $this->assertEquals($expected, $this->storage->load(['alias' => '/test-alias-case'])); + $this->assertEquals($expected, $this->storage->load(['source' => '/test-source-Case'])); + $this->assertEquals($expected, $this->storage->load(['source' => '/test-source-case'])); + } + + /** + * @covers ::lookupPathAlias + */ + public function testLookupPathAlias() { + $this->storage->save('/test-source-Case', '/test-alias'); + + $this->assertEquals('/test-alias', $this->storage->lookupPathAlias('/test-source-Case', LanguageInterface::LANGCODE_NOT_SPECIFIED)); + $this->assertEquals('/test-alias', $this->storage->lookupPathAlias('/test-source-case', LanguageInterface::LANGCODE_NOT_SPECIFIED)); + } + + /** + * @covers ::lookupPathSource + */ + public function testLookupPathSource() { + $this->storage->save('/test-source', '/test-alias-Case'); + + $this->assertEquals('/test-source', $this->storage->lookupPathSource('/test-alias-Case', LanguageInterface::LANGCODE_NOT_SPECIFIED)); + $this->assertEquals('/test-source', $this->storage->lookupPathSource('/test-alias-case', LanguageInterface::LANGCODE_NOT_SPECIFIED)); + } + + /** + * @covers ::aliasExists + */ + public function testAliasExists() { + $this->storage->save('/test-source-Case', '/test-alias-Case'); + + $this->assertTrue($this->storage->aliasExists('/test-alias-Case', LanguageInterface::LANGCODE_NOT_SPECIFIED)); + $this->assertTrue($this->storage->aliasExists('/test-alias-case', LanguageInterface::LANGCODE_NOT_SPECIFIED)); + } + +} diff --git a/core/tests/Drupal/KernelTests/Core/Theme/MaintenanceThemeTest.php b/core/tests/Drupal/KernelTests/Core/Theme/MaintenanceThemeTest.php new file mode 100644 index 000000000..7cadffa25 --- /dev/null +++ b/core/tests/Drupal/KernelTests/Core/Theme/MaintenanceThemeTest.php @@ -0,0 +1,43 @@ +setSetting('maintenance_theme', 'seven'); + // Get the maintenance theme loaded. + drupal_maintenance_theme(); + + // Do we have an active theme? + $this->assertTrue(\Drupal::theme()->hasActiveTheme()); + + $active_theme = \Drupal::theme()->getActiveTheme(); + $this->assertEquals('seven', $active_theme->getName()); + + $base_themes = $active_theme->getBaseThemes(); + $base_theme_names = array_keys($base_themes); + $this->assertSame(['classy', 'stable'], $base_theme_names); + + // Ensure Classy has the correct base themes and amount of base themes. + $classy_base_themes = $base_themes['classy']->getBaseThemes(); + $classy_base_theme_names = array_keys($classy_base_themes); + $this->assertSame(['stable'], $classy_base_theme_names); + } + +} diff --git a/core/tests/Drupal/KernelTests/Core/Theme/StableTemplateOverrideTest.php b/core/tests/Drupal/KernelTests/Core/Theme/StableTemplateOverrideTest.php new file mode 100644 index 000000000..69d9e8c61 --- /dev/null +++ b/core/tests/Drupal/KernelTests/Core/Theme/StableTemplateOverrideTest.php @@ -0,0 +1,108 @@ +themeHandler = $this->container->get('theme_handler'); + + $this->container->get('theme_installer')->install(['stable']); + + $this->installSchema('system', 'router'); + $this->installAllModules(); + } + + /** + * Installs all core modules. + */ + protected function installAllModules() { + // Needed for system_rebuild_module_data(). + include_once $this->root . '/core/modules/system/system.module'; + + // Enable all core modules. + $all_modules = system_rebuild_module_data(); + $all_modules = array_filter($all_modules, function ($module) { + // Filter contrib, hidden, already enabled modules and modules in the + // Testing package. + if ($module->origin !== 'core' || !empty($module->info['hidden']) || $module->status == TRUE || $module->info['package'] == 'Testing') { + return FALSE; + } + return TRUE; + }); + $this->allModules = array_keys($all_modules); + sort($this->allModules); + + $module_installer = $this->container->get('module_installer'); + $module_installer->install($this->allModules); + + $this->installConfig(['system', 'user']); + } + + /** + * Ensures that Stable overrides all relevant core templates. + */ + public function testStableTemplateOverrides() { + $registry = new Registry(\Drupal::root(), \Drupal::cache(), \Drupal::lock(), \Drupal::moduleHandler(), $this->themeHandler, \Drupal::service('theme.initialization'), 'stable'); + $registry->setThemeManager(\Drupal::theme()); + + $registry_full = $registry->get(); + + foreach ($registry_full as $hook => $info) { + if (isset($info['template'])) { + // Allow skipping templates. + if (in_array($info['template'], $this->templatesToSkip)) { + continue; + } + + $this->assertEquals('core/themes/stable', $info['theme path'], $info['template'] . '.html.twig overridden in Stable.'); + } + } + } + +} diff --git a/core/tests/Drupal/KernelTests/RequestProcessing/RedirectOnExceptionTest.php b/core/tests/Drupal/KernelTests/RequestProcessing/RedirectOnExceptionTest.php new file mode 100644 index 000000000..4c7a6860f --- /dev/null +++ b/core/tests/Drupal/KernelTests/RequestProcessing/RedirectOnExceptionTest.php @@ -0,0 +1,50 @@ +installSchema('system', ['router', 'url_alias']); + \Drupal::service('router.builder')->rebuild(); + } + + public function testRedirectOn404() { + \Drupal::configFactory()->getEditable('system.site') + ->set('page.404', '/test-http-response-exception/' . Response::HTTP_PERMANENTLY_REDIRECT) + ->save(); + + /** @var \Symfony\Component\HttpKernel\HttpKernelInterface $http_kernel */ + $http_kernel = \Drupal::service('http_kernel'); + + // Foo doesn't exist, so this triggers the 404 page. + $request = Request::create('/foo'); + $response = $http_kernel->handle($request); + $this->assertEquals(Response::HTTP_PERMANENTLY_REDIRECT, $response->getStatusCode()); + } + +} diff --git a/core/tests/Drupal/Tests/Core/Asset/AssetResolverTest.php b/core/tests/Drupal/Tests/Core/Asset/AssetResolverTest.php new file mode 100644 index 000000000..8b1b3399f --- /dev/null +++ b/core/tests/Drupal/Tests/Core/Asset/AssetResolverTest.php @@ -0,0 +1,168 @@ +libraryDiscovery = $this->getMockBuilder('Drupal\Core\Asset\LibraryDiscovery') + ->disableOriginalConstructor() + ->getMock(); + $this->libraryDependencyResolver = $this->getMock('\Drupal\Core\Asset\LibraryDependencyResolverInterface'); + $this->libraryDependencyResolver->expects($this->any()) + ->method('getLibrariesWithDependencies') + ->willReturnArgument(0); + $this->moduleHandler = $this->getMock('\Drupal\Core\Extension\ModuleHandlerInterface'); + $this->themeManager = $this->getMock('\Drupal\Core\Theme\ThemeManagerInterface'); + $active_theme = $this->getMockBuilder('\Drupal\Core\Theme\ActiveTheme') + ->disableOriginalConstructor() + ->getMock(); + $active_theme->expects($this->any()) + ->method('getName') + ->willReturn('bartik'); + $this->themeManager->expects($this->any()) + ->method('getActiveTheme') + ->willReturn($active_theme); + + $this->languageManager = $this->getMock('\Drupal\Core\Language\LanguageManagerInterface'); + $english = $this->getMock('\Drupal\Core\Language\LanguageInterface'); + $english->expects($this->any()) + ->method('getId') + ->willReturn('en'); + $japanese = $this->getMock('\Drupal\Core\Language\LanguageInterface'); + $japanese->expects($this->any()) + ->method('getId') + ->willReturn('jp'); + $this->languageManager = $this->getMock('\Drupal\Core\Language\LanguageManagerInterface'); + $this->languageManager->expects($this->any()) + ->method('getCurrentLanguage') + ->will($this->onConsecutiveCalls($english, $english, $japanese, $japanese)); + $this->cache = new TestMemoryBackend('llama'); + + $this->assetResolver = new AssetResolver($this->libraryDiscovery, $this->libraryDependencyResolver, $this->moduleHandler, $this->themeManager, $this->languageManager, $this->cache); + } + + /** + * @covers ::getCssAssets + * @dataProvider providerAttachedAssets + */ + public function testGetCssAssets(AttachedAssetsInterface $assets_a, AttachedAssetsInterface $assets_b, $expected_cache_item_count) { + $this->assetResolver->getCssAssets($assets_a, FALSE); + $this->assetResolver->getCssAssets($assets_b, FALSE); + $this->assertCount($expected_cache_item_count, $this->cache->getAllCids()); + } + + /** + * @covers ::getJsAssets + * @dataProvider providerAttachedAssets + */ + public function testGetJsAssets(AttachedAssetsInterface $assets_a, AttachedAssetsInterface $assets_b, $expected_cache_item_count) { + $this->assetResolver->getJsAssets($assets_a, FALSE); + $this->assetResolver->getJsAssets($assets_b, FALSE); + $this->assertCount($expected_cache_item_count, $this->cache->getAllCids()); + + $this->assetResolver->getJsAssets($assets_a, FALSE); + $this->assetResolver->getJsAssets($assets_b, FALSE); + $this->assertCount($expected_cache_item_count * 2, $this->cache->getAllCids()); + } + + public function providerAttachedAssets() { + $time = time(); + return [ + 'same libraries, different timestamps' => [ + (new AttachedAssets())->setAlreadyLoadedLibraries([])->setLibraries(['core/drupal'])->setSettings(['currentTime' => $time]), + (new AttachedAssets())->setAlreadyLoadedLibraries([])->setLibraries(['core/drupal'])->setSettings(['currentTime' => $time + 100]), + 1 + ], + 'different libraries, same timestamps' => [ + (new AttachedAssets())->setAlreadyLoadedLibraries([])->setLibraries(['core/drupal'])->setSettings(['currenttime' => $time]), + (new AttachedAssets())->setAlreadyLoadedLibraries([])->setLibraries(['core/drupal', 'core/jquery'])->setSettings(['currentTime' => $time]), + 2 + ], + ]; + } + +} + +if (!defined('CSS_AGGREGATE_DEFAULT')) { + define('CSS_AGGREGATE_DEFAULT', 0); +} + +if (!defined('JS_DEFAULT')) { + define('JS_DEFAULT', 0); +} + +class TestMemoryBackend extends MemoryBackend { + public function getAllCids() { + return array_keys($this->cache); + } +} diff --git a/core/tests/Drupal/Tests/Core/Asset/LibraryDiscoveryParserTest.php b/core/tests/Drupal/Tests/Core/Asset/LibraryDiscoveryParserTest.php index 2f5ed21ba..ed0c9ceec 100644 --- a/core/tests/Drupal/Tests/Core/Asset/LibraryDiscoveryParserTest.php +++ b/core/tests/Drupal/Tests/Core/Asset/LibraryDiscoveryParserTest.php @@ -10,20 +10,6 @@ namespace Drupal\Tests\Core\Asset; use Drupal\Core\Asset\LibraryDiscoveryParser; use Drupal\Tests\UnitTestCase; -if (!defined('CSS_AGGREGATE_DEFAULT')) { - define('CSS_AGGREGATE_DEFAULT', 0); - define('CSS_AGGREGATE_THEME', 100); - define('CSS_BASE', -200); - define('CSS_LAYOUT', -100); - define('CSS_COMPONENT', 0); - define('CSS_STATE', 100); - define('CSS_THEME', 200); - define('JS_SETTING', -200); - define('JS_LIBRARY', -100); - define('JS_DEFAULT', 0); - define('JS_THEME', 100); -} - /** * @coversDefaultClass \Drupal\Core\Asset\LibraryDiscoveryParser * @group Asset @@ -575,3 +561,37 @@ class TestLibraryDiscoveryParser extends LibraryDiscoveryParser { } } + +if (!defined('CSS_AGGREGATE_DEFAULT')) { + define('CSS_AGGREGATE_DEFAULT', 0); +} +if (!defined('CSS_AGGREGATE_THEME')) { + define('CSS_AGGREGATE_THEME', 100); +} +if (!defined('CSS_BASE')) { + define('CSS_BASE', -200); +} +if (!defined('CSS_LAYOUT')) { + define('CSS_LAYOUT', -100); +} +if (!defined('CSS_COMPONENT')) { + define('CSS_COMPONENT', 0); +} +if (!defined('CSS_STATE')) { + define('CSS_STATE', 100); +} +if (!defined('CSS_THEME')) { + define('CSS_THEME', 200); +} +if (!defined('JS_SETTING')) { + define('JS_SETTING', -200); +} +if (!defined('JS_LIBRARY')) { + define('JS_LIBRARY', -100); +} +if (!defined('JS_DEFAULT')) { + define('JS_DEFAULT', 0); +} +if (!defined('JS_THEME')) { + define('JS_THEME', 100); +} diff --git a/core/tests/Drupal/Tests/Core/Common/AttributesTest.php b/core/tests/Drupal/Tests/Core/Common/AttributesTest.php index 1dafef988..4fc57ae6f 100644 --- a/core/tests/Drupal/Tests/Core/Common/AttributesTest.php +++ b/core/tests/Drupal/Tests/Core/Common/AttributesTest.php @@ -71,4 +71,20 @@ class AttributesTest extends UnitTestCase { } } + /** + * Test AttributeValueBase copy. + */ + public function testAttributeValueBaseCopy() { + $original_attributes = new Attribute([ + 'checked' => TRUE, + 'class' => ['who', 'is', 'on'], + 'id' => 'first', + ]); + $attributes['selected'] = $original_attributes['checked']; + $attributes['id'] = $original_attributes['id']; + $attributes = new Attribute($attributes); + $this->assertSame((string) $original_attributes, ' checked class="who is on" id="first"', 'Original boolean value used with original name.'); + $this->assertSame((string) $attributes, ' selected id="first"', 'Original boolean value used with new name.'); + } + } diff --git a/core/tests/Drupal/Tests/Core/Datetime/DateHelperTest.php b/core/tests/Drupal/Tests/Core/Datetime/DateHelperTest.php new file mode 100644 index 000000000..a88861ca5 --- /dev/null +++ b/core/tests/Drupal/Tests/Core/Datetime/DateHelperTest.php @@ -0,0 +1,112 @@ + ['first_day' => $first_day]]; + $container->set('config.factory', $this->getConfigFactoryStub($config)); + \Drupal::setContainer($container); + + $weekdays = DateHelper::weekDaysUntranslated(); + // self::assertSame() MUST be used here as it checks for array key order. + $this->assertSame($expected, DateHelper::weekDaysOrdered($weekdays)); + } + + public function providerTestWeekDaysOrdered() { + $data = []; + $data[] = [0, [ + 0 => 'Sunday', + 1 => 'Monday', + 2 => 'Tuesday', + 3 => 'Wednesday', + 4 => 'Thursday', + 5 => 'Friday', + 6 => 'Saturday', + ]]; + $data[] = [1, [ + 1 => 'Monday', + 2 => 'Tuesday', + 3 => 'Wednesday', + 4 => 'Thursday', + 5 => 'Friday', + 6 => 'Saturday', + 0 => 'Sunday', + ]]; + $data[] = [2, [ + 2 => 'Tuesday', + 3 => 'Wednesday', + 4 => 'Thursday', + 5 => 'Friday', + 6 => 'Saturday', + 0 => 'Sunday', + 1 => 'Monday', + ]]; + $data[] = [3, [ + 3 => 'Wednesday', + 4 => 'Thursday', + 5 => 'Friday', + 6 => 'Saturday', + 0 => 'Sunday', + 1 => 'Monday', + 2 => 'Tuesday', + ]]; + $data[] = [4, [ + 4 => 'Thursday', + 5 => 'Friday', + 6 => 'Saturday', + 0 => 'Sunday', + 1 => 'Monday', + 2 => 'Tuesday', + 3 => 'Wednesday', + ]]; + $data[] = [5, [ + 5 => 'Friday', + 6 => 'Saturday', + 0 => 'Sunday', + 1 => 'Monday', + 2 => 'Tuesday', + 3 => 'Wednesday', + 4 => 'Thursday', + ]]; + $data[] = [6, [ + 6 => 'Saturday', + 0 => 'Sunday', + 1 => 'Monday', + 2 => 'Tuesday', + 3 => 'Wednesday', + 4 => 'Thursday', + 5 => 'Friday', + ]]; + $data[] = [7, [ + 0 => 'Sunday', + 1 => 'Monday', + 2 => 'Tuesday', + 3 => 'Wednesday', + 4 => 'Thursday', + 5 => 'Friday', + 6 => 'Saturday', + ]]; + return $data; + } + +} diff --git a/core/tests/Drupal/Tests/Core/DrupalTest.php b/core/tests/Drupal/Tests/Core/DrupalTest.php index 315ce38c0..d22ed78b5 100644 --- a/core/tests/Drupal/Tests/Core/DrupalTest.php +++ b/core/tests/Drupal/Tests/Core/DrupalTest.php @@ -86,6 +86,16 @@ class DrupalTest extends UnitTestCase { $this->assertNotNull(\Drupal::entityManager()); } + /** + * Tests the entityTypeManager() method. + * + * @covers ::entityTypeManager + */ + public function testEntityTypeManager() { + $this->setMockContainerService('entity_type.manager'); + $this->assertNotNull(\Drupal::entityTypeManager()); + } + /** * Tests the database() method. * diff --git a/core/tests/Drupal/Tests/Core/Enhancer/ParamConversionEnhancerTest.php b/core/tests/Drupal/Tests/Core/Enhancer/ParamConversionEnhancerTest.php index a4c8af62e..41b2104bc 100644 --- a/core/tests/Drupal/Tests/Core/Enhancer/ParamConversionEnhancerTest.php +++ b/core/tests/Drupal/Tests/Core/Enhancer/ParamConversionEnhancerTest.php @@ -59,7 +59,7 @@ class ParamConversionEnhancerTest extends UnitTestCase { $expected['id'] = 'something_better!'; $expected['_raw_variables'] = new ParameterBag($raw_variables); - $this->paramConverterManager->expects($this->any()) + $this->paramConverterManager->expects($this->once()) ->method('convert') ->with($this->isType('array')) ->will($this->returnValue($expected)); @@ -67,6 +67,12 @@ class ParamConversionEnhancerTest extends UnitTestCase { $result = $this->paramConversionEnhancer->enhance($defaults, new Request()); $this->assertEquals($expected, $result); + + // Now run with the results as the new defaults to ensure that the + // conversion is just run once. + $result = $this->paramConversionEnhancer->enhance($result, new Request()); + + $this->assertEquals($expected, $result); } /** diff --git a/core/tests/Drupal/Tests/Core/Entity/EntityLinkTest.php b/core/tests/Drupal/Tests/Core/Entity/EntityLinkTest.php index 9e54ebedb..efcf1b89a 100644 --- a/core/tests/Drupal/Tests/Core/Entity/EntityLinkTest.php +++ b/core/tests/Drupal/Tests/Core/Entity/EntityLinkTest.php @@ -57,6 +57,8 @@ class EntityLinkTest extends UnitTestCase { } /** + * Tests for the Entity::link() method + * * @covers ::link * * @dataProvider providerTestLink @@ -98,7 +100,7 @@ class EntityLinkTest extends UnitTestCase { /** @var \Drupal\Core\Entity\Entity $entity */ $entity = $this->getMockForAbstractClass('Drupal\Core\Entity\Entity', [ ['id' => $entity_id, 'label' => $entity_label, 'langcode' => 'es'], - $entity_type_id + $entity_type_id, ]); $expected_link = Link::createFromRoute( @@ -116,6 +118,64 @@ class EntityLinkTest extends UnitTestCase { $this->assertSame($expected, $entity->link($link_text, $link_rel, $link_options)); } + /** + * Tests for the Entity::toLink() method + * + * @covers ::toLink + * + * @dataProvider providerTestLink + */ + public function testToLink($entity_label, $link_text, $expected_text, $link_rel = 'canonical', array $link_options = []) { + $language = new Language(['id' => 'es']); + $link_options += ['language' => $language]; + $this->languageManager->expects($this->any()) + ->method('getLanguage') + ->with('es') + ->willReturn($language); + + $route_name_map = [ + 'canonical' => 'entity.test_entity_type.canonical', + 'edit-form' => 'entity.test_entity_type.edit_form', + ]; + $route_name = $route_name_map[$link_rel]; + $entity_id = 'test_entity_id'; + $entity_type_id = 'test_entity_type'; + $expected = '' . $expected_text . ''; + + $entity_type = $this->getMock('Drupal\Core\Entity\EntityTypeInterface'); + $entity_type->expects($this->once()) + ->method('getLinkTemplates') + ->willReturn($route_name_map); + $entity_type->expects($this->any()) + ->method('getKey') + ->willReturnMap([ + ['label', 'label'], + ['langcode', 'langcode'], + ]); + + $this->entityManager + ->expects($this->any()) + ->method('getDefinition') + ->with($entity_type_id) + ->will($this->returnValue($entity_type)); + + /** @var \Drupal\Core\Entity\Entity $entity */ + $entity = $this->getMockForAbstractClass('Drupal\Core\Entity\Entity', [ + ['id' => $entity_id, 'label' => $entity_label, 'langcode' => 'es'], + $entity_type_id, + ]); + + $expected_link = Link::createFromRoute( + $expected_text, + $route_name, + [$entity_type_id => $entity_id], + ['entity_type' => $entity_type_id, 'entity' => $entity] + $link_options + ); + + $result_link = $entity->toLink($link_text, $link_rel, $link_options); + $this->assertEquals($expected_link, $result_link); + } + /** * Provides test data for testLink(). */ diff --git a/core/tests/Drupal/Tests/Core/Entity/EntityTypeBundleInfoTest.php b/core/tests/Drupal/Tests/Core/Entity/EntityTypeBundleInfoTest.php index 82626ec74..9003bc581 100644 --- a/core/tests/Drupal/Tests/Core/Entity/EntityTypeBundleInfoTest.php +++ b/core/tests/Drupal/Tests/Core/Entity/EntityTypeBundleInfoTest.php @@ -175,11 +175,11 @@ class EntityTypeBundleInfoTest extends UnitTestCase { $apple = $this->prophesize(EntityTypeInterface::class); $apple->getLabel()->willReturn('Apple'); - $apple->getBundleOf()->willReturn(NULL); + $apple->getBundleEntityType()->willReturn(NULL); $banana = $this->prophesize(EntityTypeInterface::class); $banana->getLabel()->willReturn('Banana'); - $banana->getBundleOf()->willReturn(NULL); + $banana->getBundleEntityType()->willReturn(NULL); $this->setUpEntityTypeDefinitions([ 'apple' => $apple, @@ -223,11 +223,11 @@ class EntityTypeBundleInfoTest extends UnitTestCase { $apple = $this->prophesize(EntityTypeInterface::class); $apple->getLabel()->willReturn('Apple'); - $apple->getBundleOf()->willReturn(NULL); + $apple->getBundleEntityType()->willReturn(NULL); $banana = $this->prophesize(EntityTypeInterface::class); $banana->getLabel()->willReturn('Banana'); - $banana->getBundleOf()->willReturn(NULL); + $banana->getBundleEntityType()->willReturn(NULL); $this->setUpEntityTypeDefinitions([ 'apple' => $apple, @@ -271,4 +271,49 @@ class EntityTypeBundleInfoTest extends UnitTestCase { $this->assertSame('cached data', $bundle_info); } + /** + * @covers ::getAllBundleInfo + */ + public function testGetAllBundleInfoWithEntityBundleInfo() { + // Ensure that EntityTypeBundleInfo::getAllBundleInfo() does not add + // additional bundles if hook_entity_bundle_info() defines some and the + // entity_type does not define a bundle entity type. + $this->moduleHandler->invokeAll('entity_bundle_info')->willReturn([ + 'banana' => [ + 'fig' => [ + 'label' => 'Fig banana', + ], + ], + ]); + $this->moduleHandler->alter('entity_bundle_info', Argument::type('array'))->willReturn(NULL); + + $apple = $this->prophesize(EntityTypeInterface::class); + $apple->getLabel()->willReturn('Apple'); + $apple->getBundleEntityType()->willReturn(NULL); + + $banana = $this->prophesize(EntityTypeInterface::class); + $banana->getLabel()->willReturn('Banana'); + $banana->getBundleEntityType()->willReturn(NULL); + + $this->setUpEntityTypeDefinitions([ + 'apple' => $apple, + 'banana' => $banana, + ]); + + $expected = [ + 'banana' => [ + 'fig' => [ + 'label' => 'Fig banana', + ], + ], + 'apple' => [ + 'apple' => [ + 'label' => 'Apple', + ], + ], + ]; + $bundle_info = $this->entityTypeBundleInfo->getAllBundleInfo(); + $this->assertSame($expected, $bundle_info); + } + } diff --git a/core/tests/Drupal/Tests/Core/Entity/EntityUrlTest.php b/core/tests/Drupal/Tests/Core/Entity/EntityUrlTest.php index d19f473d1..c60a18fd7 100644 --- a/core/tests/Drupal/Tests/Core/Entity/EntityUrlTest.php +++ b/core/tests/Drupal/Tests/Core/Entity/EntityUrlTest.php @@ -28,6 +28,8 @@ class EntityUrlTest extends UnitTestCase { protected $entityManager; /** + * The mocked URL generator. + * * @var \Drupal\Core\Routing\UrlGeneratorInterface|\PHPUnit_Framework_MockObject_MockObject */ protected $urlGenerator; @@ -50,12 +52,15 @@ class EntityUrlTest extends UnitTestCase { /** * Tests the urlInfo() method. * + * Note that urlInfo() is a deprecated alias for toUrl(). + * See testToUrl(). + * * @covers ::urlInfo * - * @dataProvider providerTestUrlInfo + * @dataProvider providerTestToUrl */ public function testUrlInfo($entity_class, $link_template, $expected, $langcode = NULL) { - /** @var $entity \Drupal\Core\Entity\EntityInterface */ + /** @var \Drupal\Core\Entity\EntityInterface $entity */ $entity = $this->getMockForAbstractClass($entity_class, array(array('id' => 'test_entity_id'), 'test_entity_type')); $uri = $this->getTestUrlInfo($entity, $link_template, [], $langcode); @@ -75,27 +80,57 @@ class EntityUrlTest extends UnitTestCase { } } } + /** + * Tests the toUrl() method. + * + * @covers ::toUrl + * + * @dataProvider providerTestToUrl + */ + public function testToUrl($entity_class, $link_template, $expected, $langcode = NULL) { + /** @var \Drupal\Core\Entity\EntityInterface $entity */ + $entity = $this->getMockForAbstractClass($entity_class, array(array('id' => 'test_entity_id'), 'test_entity_type')); + $uri = $this->getTestToUrl($entity, $link_template, [], $langcode); + + $this->assertSame($expected, $uri->getRouteName()); + $this->assertSame($entity, $uri->getOption('entity')); + + if ($langcode) { + $this->assertEquals($langcode, $uri->getOption('language')->getId()); + } + else { + if ($entity instanceof ConfigEntityInterface) { + // Config entities do not provide a language with their URIs. + $this->assertEquals(NULL, $uri->getOption('language')); + } + else { + $this->assertEquals(LanguageInterface::LANGCODE_NOT_SPECIFIED, $uri->getOption('language')->getId()); + } + } + } /** - * @covers ::urlInfo + * Tests for Entity::toUrl() exercising different language options. + * + * @covers ::toUrl */ - public function testUrlInfoWithSpecificLanguageInOptions() { - /** @var $entity \Drupal\Core\Entity\EntityInterface */ + public function testToUrlWithSpecificLanguageInOptions() { + /** @var \Drupal\Core\Entity\EntityInterface $entity */ $entity = $this->getMockForAbstractClass('Drupal\Core\Entity\Entity', array(array('id' => 'test_entity_id'), 'test_entity_type')); // Ensure that a specified language overrides the current translation // language. - $uri = $this->getTestUrlInfo($entity, 'edit-form', [], 'en'); + $uri = $this->getTestToUrl($entity, 'edit-form', [], 'en'); $this->assertEquals('en', $uri->getOption('language')->getId()); - $uri = $this->getTestUrlInfo($entity, 'edit-form', ['language' => new Language(['id' => 'fr'])], 'en'); + $uri = $this->getTestToUrl($entity, 'edit-form', ['language' => new Language(['id' => 'fr'])], 'en'); $this->assertEquals('fr', $uri->getOption('language')->getId()); } /** * Provides test data for testUrlInfo(). */ - public function providerTestUrlInfo() { + public function providerTestToUrl() { return array( array('Drupal\Core\Entity\Entity', 'edit-form', 'entity.test_entity_type.edit_form', NULL), // Specify a langcode. @@ -108,19 +143,20 @@ class EntityUrlTest extends UnitTestCase { } /** - * Tests the urlInfo() method with an invalid link template. + * Tests the toUrl() method with an invalid link template. * - * @covers ::urlInfo + * @covers ::toUrl * * @expectedException \Drupal\Core\Entity\Exception\UndefinedLinkTemplateException + * * @expectedExceptionMessage No link template 'canonical' found for the 'test_entity_type' entity type * - * @dataProvider providerTestUrlInfoForInvalidLinkTemplate + * @dataProvider providerTestToUrlForInvalidLinkTemplate */ - public function testUrlInfoForInvalidLinkTemplate($entity_class, $link_template) { - /** @var $entity \Drupal\Core\Entity\EntityInterface */ + public function testToUrlForInvalidLinkTemplate($entity_class, $link_template) { + /** @var \Drupal\Core\Entity\EntityInterface $entity */ $entity = $this->getMockForAbstractClass($entity_class, array(array('id' => 'test_entity_id'), 'test_entity_type')); - $uri = $this->getTestUrlInfo($entity, $link_template); + $uri = $this->getTestToUrl($entity, $link_template); $this->assertEmpty($uri); } @@ -128,7 +164,7 @@ class EntityUrlTest extends UnitTestCase { /** * Provides test data for testUrlInfoForInvalidLinkTemplate(). */ - public function providerTestUrlInfoForInvalidLinkTemplate() { + public function providerTestToUrlForInvalidLinkTemplate() { return array( array('Drupal\Core\Entity\Entity', 'canonical'), array('Drupal\Core\Entity\Entity', FALSE), @@ -139,6 +175,9 @@ class EntityUrlTest extends UnitTestCase { /** * Creates a \Drupal\Core\Url object based on the entity and link template. * + * Method urlInfo() is deprecated and replaced with toUrl(). + * See also getTestToUrl(). + * * @param \Drupal\Core\Entity\EntityInterface $entity * The test entity. * @param string $link_template @@ -184,17 +223,64 @@ class EntityUrlTest extends UnitTestCase { } /** - * Tests the urlInfo() method when an entity is still "new". + * Creates a \Drupal\Core\Url object based on the entity and link template. + * + * @param \Drupal\Core\Entity\EntityInterface $entity + * The test entity. + * @param string $link_template + * The link template. + * @param string $langcode + * The langcode. + * + * @return \Drupal\Core\Url + * The URL for this entity's link template. + */ + protected function getTestToUrl(EntityInterface $entity, $link_template, array $options = [], $langcode = NULL) { + $entity_type = $this->getMock('Drupal\Core\Entity\EntityTypeInterface'); + $entity_type->expects($this->any()) + ->method('getLinkTemplates') + ->will($this->returnValue(array( + 'edit-form' => 'test_entity_type.edit', + ))); + + if ($langcode) { + $entity->langcode = $langcode; + } + + $this->entityManager + ->expects($this->any()) + ->method('getDefinition') + ->with('test_entity_type') + ->will($this->returnValue($entity_type)); + + // If no link template is given, call without a value to test the default. + if ($link_template) { + $uri = $entity->toUrl($link_template, $options); + } + else { + if ($entity instanceof ConfigEntityInterface) { + $uri = $entity->toUrl('edit-form', $options); + } + else { + $uri = $entity->toUrl('canonical', $options); + } + } + + return $uri; + } + + /** + * Tests the toUrl() method when an entity is still "new". * * @see \Drupal\Core\Entity\EntityInterface::isNew() * - * @covers ::urlInfo + * @covers ::toUrl * * @expectedException \Drupal\Core\Entity\EntityMalformedException */ - public function testUrlInfoForNewEntity() { + public function testToUrlForNewEntity() { $entity = $this->getMockForAbstractClass('Drupal\Core\Entity\Entity', array(array(), 'test_entity_type')); - $entity->urlInfo(); + $entity->toUrl(); } /** @@ -236,7 +322,7 @@ class EntityUrlTest extends UnitTestCase { if ($route_name === 'entity.test_entity_type.canonical' && $route_parameters === array('test_entity_type' => 'test_entity_id') && array_keys($options) === ['absolute', 'entity_type', 'entity', 'language'] && $options['language'] == $language) { return 'http://drupal/entity/test_entity_type/test_entity_id'; } - }); + }); $this->assertSame('/entity/test_entity_type/test_entity_id', $valid_entity->url()); $this->assertSame('http://drupal/entity/test_entity_type/test_entity_id', $valid_entity->url('canonical', array('absolute' => TRUE))); diff --git a/core/tests/Drupal/Tests/Core/Entity/Routing/DefaultHtmlRouteProviderTest.php b/core/tests/Drupal/Tests/Core/Entity/Routing/DefaultHtmlRouteProviderTest.php new file mode 100644 index 000000000..cdfd0f292 --- /dev/null +++ b/core/tests/Drupal/Tests/Core/Entity/Routing/DefaultHtmlRouteProviderTest.php @@ -0,0 +1,155 @@ +prophesize(EntityManagerInterface::class); + $route_provider = new TestDefaultHtmlRouteProvider($entity_manager->reveal()); + + $entity_type = $this->prophesize(EntityTypeInterface::class); + $entity_type->isSubclassOf(FieldableEntityInterface::class)->willReturn(TRUE); + $entity_type_id = 'the_entity_type_id'; + $entity_type->id()->willReturn($entity_type_id); + $entity_type->getKey('id')->willReturn('id'); + + $field_storage_definition = $this->prophesize(FieldStorageDefinitionInterface::class); + $field_storage_definition->getType()->willReturn('integer'); + $entity_manager->getFieldStorageDefinitions($entity_type_id)->willReturn(['id' => $field_storage_definition]); + + $type = $route_provider->getEntityTypeIdKeyType($entity_type->reveal()); + $this->assertSame('integer', $type); + } + + /** + * @covers ::getEntityTypeIdKeyType + */ + public function testGetEntityTypeIdKeyTypeNotFieldable() { + $entity_manager = $this->prophesize(EntityManagerInterface::class); + $route_provider = new TestDefaultHtmlRouteProvider($entity_manager->reveal()); + + $entity_type = $this->prophesize(EntityTypeInterface::class); + $entity_type->isSubclassOf(FieldableEntityInterface::class)->willReturn(FALSE); + $entity_manager->getFieldStorageDefinitions(Argument::any())->shouldNotBeCalled(); + + $type = $route_provider->getEntityTypeIdKeyType($entity_type->reveal()); + $this->assertNull($type); + } + + /** + * @covers ::getCanonicalRoute + * @dataProvider providerTestGetCanonicalRoute + */ + public function testGetCanonicalRoute($entity_type_prophecy, $expected, $field_storage_definition = NULL) { + $entity_manager = $this->prophesize(EntityManagerInterface::class); + $route_provider = new TestDefaultHtmlRouteProvider($entity_manager->reveal()); + $entity_type = $entity_type_prophecy->reveal(); + + if ($field_storage_definition) { + $entity_manager->getFieldStorageDefinitions($entity_type->id()) + ->willReturn([$entity_type->getKey('id') => $field_storage_definition]); + } + + $route = $route_provider->getCanonicalRoute($entity_type); + $this->assertEquals($expected, $route); + } + + public function providerTestGetCanonicalRoute() { + $data = []; + + $entity_type1 = $this->prophesize(EntityTypeInterface::class); + $entity_type1->hasLinkTemplate('canonical')->willReturn(FALSE); + $data['no_canonical_link_template'] = [$entity_type1, NULL]; + + $entity_type2 = $this->prophesize(EntityTypeInterface::class); + $entity_type2->hasLinkTemplate('canonical')->willReturn(TRUE); + $entity_type2->hasViewBuilderClass()->willReturn(FALSE); + $data['no_view_builder'] = [$entity_type2, NULL]; + + $entity_type3 = $this->prophesize(EntityTypeInterface::class); + $entity_type3->hasLinkTemplate('canonical')->willReturn(TRUE); + $entity_type3->hasViewBuilderClass()->willReturn(TRUE); + $entity_type3->id()->willReturn('the_entity_type_id'); + $entity_type3->getLinkTemplate('canonical')->willReturn('/the/canonical/link/template'); + $entity_type3->isSubclassOf(FieldableEntityInterface::class)->willReturn(FALSE); + $route3 = (new Route('/the/canonical/link/template')) + ->setDefaults([ + '_entity_view' => 'the_entity_type_id.full', + '_title_callback' => '\Drupal\Core\Entity\Controller\EntityController::title', + ]) + ->setRequirements([ + '_entity_access' => 'the_entity_type_id.view', + ]) + ->setOptions([ + 'parameters' => [ + 'the_entity_type_id' => [ + 'type' => 'entity:the_entity_type_id', + ], + ], + ]); + $data['id_key_type_null'] = [$entity_type3, $route3]; + + $entity_type4 = $this->prophesize(EntityTypeInterface::class); + $entity_type4->hasLinkTemplate('canonical')->willReturn(TRUE); + $entity_type4->hasViewBuilderClass()->willReturn(TRUE); + $entity_type4->id()->willReturn('the_entity_type_id'); + $entity_type4->getLinkTemplate('canonical')->willReturn('/the/canonical/link/template'); + $entity_type4->isSubclassOf(FieldableEntityInterface::class)->willReturn(TRUE); + $entity_type4->getKey('id')->willReturn('id'); + $route4 = (new Route('/the/canonical/link/template')) + ->setDefaults([ + '_entity_view' => 'the_entity_type_id.full', + '_title_callback' => '\Drupal\Core\Entity\Controller\EntityController::title', + ]) + ->setRequirements([ + '_entity_access' => 'the_entity_type_id.view', + 'the_entity_type_id' => '\d+', + ]) + ->setOptions([ + 'parameters' => [ + 'the_entity_type_id' => [ + 'type' => 'entity:the_entity_type_id', + ], + ], + ]); + $field_storage_definition = $this->prophesize(FieldStorageDefinitionInterface::class); + $field_storage_definition->getType()->willReturn('integer'); + $data['id_key_type_integer'] = [$entity_type4, $route4, $field_storage_definition]; + + return $data; + } + +} + +class TestDefaultHtmlRouteProvider extends DefaultHtmlRouteProvider { + + public function getEntityTypeIdKeyType(EntityTypeInterface $entity_type) { + return parent::getEntityTypeIdKeyType($entity_type); + } + public function getCanonicalRoute(EntityTypeInterface $entity_type) { + return parent::getCanonicalRoute($entity_type); + } + +} diff --git a/core/tests/Drupal/Tests/Core/PathProcessor/PathProcessorTest.php b/core/tests/Drupal/Tests/Core/PathProcessor/PathProcessorTest.php index d01a1f6ef..da61f5fc6 100644 --- a/core/tests/Drupal/Tests/Core/PathProcessor/PathProcessorTest.php +++ b/core/tests/Drupal/Tests/Core/PathProcessor/PathProcessorTest.php @@ -150,11 +150,16 @@ class PathProcessorTest extends UnitTestCase { $current_user = $this->getMockBuilder('Drupal\Core\Session\AccountInterface') ->getMock(); + // Create a config event subscriber stub. + $config_subscriber = $this->getMockBuilder('Drupal\language\EventSubscriber\ConfigSubscriber') + ->disableOriginalConstructor() + ->getMock(); + // Create the processors. $alias_processor = new PathProcessorAlias($alias_manager); $decode_processor = new PathProcessorDecode(); $front_processor = new PathProcessorFront($config_factory_stub); - $language_processor = new PathProcessorLanguage($config_factory_stub, $this->languageManager, $negotiator, $current_user); + $language_processor = new PathProcessorLanguage($config_factory_stub, $this->languageManager, $negotiator, $current_user, $config_subscriber); // First, test the processor manager with the processors in the incorrect // order. The alias processor will run before the language processor, meaning diff --git a/core/tests/Drupal/Tests/Core/StringTranslation/TranslationManagerTest.php b/core/tests/Drupal/Tests/Core/StringTranslation/TranslationManagerTest.php index 1a99bbf3a..1a1b3904e 100644 --- a/core/tests/Drupal/Tests/Core/StringTranslation/TranslationManagerTest.php +++ b/core/tests/Drupal/Tests/Core/StringTranslation/TranslationManagerTest.php @@ -43,6 +43,8 @@ class TranslationManagerTest extends UnitTestCase { // @todo support locale_get_plural [2, 'Singular', '@count @arg', array('@arg' => '

m=q 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%0Dh!+gDXS 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