Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVincent Lorenzo2015-01-26 08:24:42 -0500
committerVincent Lorenzo2015-01-26 08:31:14 -0500
commit5f6348c54e34c37c1a0c4cca5f6512ed1ca6f003 (patch)
tree7d8a982212da565f1f621966fb3a72263318aa35
parent90c57a08467186b757ba11161c33b5fac7d516ab (diff)
downloadorg.eclipse.papyrus-5f6348c54e34c37c1a0c4cca5f6512ed1ca6f003.tar.gz
org.eclipse.papyrus-5f6348c54e34c37c1a0c4cca5f6512ed1ca6f003.tar.xz
org.eclipse.papyrus-5f6348c54e34c37c1a0c4cca5f6512ed1ca6f003.zip
move oep.emf.commandstack and oep.dev.project.managment from sandbox to plugins/developer + destroy old plugin oep.dev.project.management_old from sandbox + rename oep.emf.commandstack to oep.infra.emf.commandstack
-rw-r--r--plugins/developer/org.eclipse.papyrus.dev.project.management/.classpath (renamed from sandbox/org.eclipse.papyrus.dev.project.management/.classpath)14
-rw-r--r--plugins/developer/org.eclipse.papyrus.dev.project.management/.project (renamed from sandbox/org.eclipse.papyrus.dev.project.management/.project)56
-rw-r--r--plugins/developer/org.eclipse.papyrus.dev.project.management/.settings/org.eclipse.jdt.core.prefs (renamed from sandbox/org.eclipse.papyrus.dev.project.management/.settings/org.eclipse.jdt.core.prefs)14
-rw-r--r--plugins/developer/org.eclipse.papyrus.dev.project.management/META-INF/MANIFEST.MF (renamed from sandbox/org.eclipse.papyrus.dev.project.management/META-INF/MANIFEST.MF)38
-rw-r--r--plugins/developer/org.eclipse.papyrus.dev.project.management/OSGI-INF/l10n/bundle.properties (renamed from sandbox/org.eclipse.papyrus.dev.project.management/OSGI-INF/l10n/bundle.properties)6
-rw-r--r--plugins/developer/org.eclipse.papyrus.dev.project.management/about.html (renamed from sandbox/org.eclipse.papyrus.dev.project.management/about.html)56
-rw-r--r--plugins/developer/org.eclipse.papyrus.dev.project.management/build.properties (renamed from sandbox/org.eclipse.papyrus.dev.project.management/build.properties)20
-rw-r--r--plugins/developer/org.eclipse.papyrus.dev.project.management/icons/copyright_icon.png (renamed from sandbox/org.eclipse.papyrus.dev.project.management/icons/copyright_icon.png)bin281 -> 281 bytes
-rw-r--r--plugins/developer/org.eclipse.papyrus.dev.project.management/icons/feature_obj.gif (renamed from sandbox/org.eclipse.papyrus.dev.project.management/icons/feature_obj.gif)bin585 -> 585 bytes
-rw-r--r--plugins/developer/org.eclipse.papyrus.dev.project.management/icons/html.gif (renamed from sandbox/org.eclipse.papyrus.dev.project.management/icons/html.gif)bin362 -> 362 bytes
-rw-r--r--plugins/developer/org.eclipse.papyrus.dev.project.management/icons/papyrus.png (renamed from sandbox/org.eclipse.papyrus.dev.project.management/icons/papyrus.png)bin602 -> 602 bytes
-rw-r--r--plugins/developer/org.eclipse.papyrus.dev.project.management/icons/plugin_mf_obj.gif (renamed from sandbox/org.eclipse.papyrus.dev.project.management/icons/plugin_mf_obj.gif)bin597 -> 597 bytes
-rw-r--r--plugins/developer/org.eclipse.papyrus.dev.project.management/icons/plugin_obj.gif (renamed from sandbox/org.eclipse.papyrus.dev.project.management/icons/plugin_obj.gif)bin328 -> 328 bytes
-rw-r--r--plugins/developer/org.eclipse.papyrus.dev.project.management/icons/version.gif (renamed from sandbox/org.eclipse.papyrus.dev.project.management/icons/version.gif)bin868 -> 868 bytes
-rw-r--r--plugins/developer/org.eclipse.papyrus.dev.project.management/icons/version.png (renamed from sandbox/org.eclipse.papyrus.dev.project.management/icons/version.png)bin289 -> 289 bytes
-rw-r--r--plugins/developer/org.eclipse.papyrus.dev.project.management/plugin.xml (renamed from sandbox/org.eclipse.papyrus.dev.project.management/plugin.xml)240
-rw-r--r--plugins/developer/org.eclipse.papyrus.dev.project.management/resources/about.html.file (renamed from sandbox/org.eclipse.papyrus.dev.project.management/resources/about.html.file)210
-rw-r--r--plugins/developer/org.eclipse.papyrus.dev.project.management/resources/epl-v10.html.file (renamed from sandbox/org.eclipse.papyrus.dev.project.management/resources/epl-v10.html.file)0
-rw-r--r--plugins/developer/org.eclipse.papyrus.dev.project.management/resources/license.html.file (renamed from sandbox/org.eclipse.papyrus.dev.project.management/resources/license.html.file)0
-rw-r--r--plugins/developer/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/Activator.java (renamed from sandbox/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/Activator.java)122
-rw-r--r--plugins/developer/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/dialog/InputDialogWithCheckBox.java (renamed from sandbox/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/dialog/InputDialogWithCheckBox.java)188
-rw-r--r--plugins/developer/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/dialog/TwoInputDialog.java (renamed from sandbox/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/dialog/TwoInputDialog.java)274
-rw-r--r--plugins/developer/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/AbstractAddFileHandler.java (renamed from sandbox/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/AbstractAddFileHandler.java)244
-rw-r--r--plugins/developer/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/AbstractChangeProjectVersionHandler.java (renamed from sandbox/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/AbstractChangeProjectVersionHandler.java)247
-rw-r--r--plugins/developer/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/features/AddFEPLFileHandler.java (renamed from sandbox/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/features/AddFEPLFileHandler.java)96
-rw-r--r--plugins/developer/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/features/AddFeatureLicenseFileHandler.java (renamed from sandbox/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/features/AddFeatureLicenseFileHandler.java)96
-rw-r--r--plugins/developer/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/features/ChangeFeatureVersionHandler.java (renamed from sandbox/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/features/ChangeFeatureVersionHandler.java)112
-rw-r--r--plugins/developer/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/features/SetCopyrightNoticeHandler.java (renamed from sandbox/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/features/SetCopyrightNoticeHandler.java)188
-rw-r--r--plugins/developer/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/plugins/AddProjectAboutFileHandler.java (renamed from sandbox/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/plugins/AddProjectAboutFileHandler.java)96
-rw-r--r--plugins/developer/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/plugins/ChangeDependencyVersionNumberHandler.java (renamed from sandbox/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/plugins/ChangeDependencyVersionNumberHandler.java)342
-rw-r--r--plugins/developer/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/plugins/ChangePluginVersionHandler.java (renamed from sandbox/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/plugins/ChangePluginVersionHandler.java)94
-rw-r--r--plugins/developer/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/utils/Utils.java (renamed from sandbox/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/utils/Utils.java)142
-rw-r--r--plugins/developer/org.eclipse.papyrus.emf.commandstack/.classpath (renamed from sandbox/org.eclipse.papyrus.emf.commandstack/.classpath)14
-rw-r--r--plugins/developer/org.eclipse.papyrus.emf.commandstack/.project (renamed from sandbox/org.eclipse.papyrus.emf.commandstack/.project)56
-rw-r--r--plugins/developer/org.eclipse.papyrus.emf.commandstack/.settings/org.eclipse.jdt.core.prefs (renamed from sandbox/org.eclipse.papyrus.emf.commandstack/.settings/org.eclipse.jdt.core.prefs)16
-rw-r--r--plugins/developer/org.eclipse.papyrus.emf.commandstack/META-INF/MANIFEST.MF (renamed from sandbox/org.eclipse.papyrus.emf.commandstack/META-INF/MANIFEST.MF)42
-rw-r--r--plugins/developer/org.eclipse.papyrus.emf.commandstack/about.html (renamed from sandbox/org.eclipse.papyrus.dev.project.management_old/about.html)56
-rw-r--r--plugins/developer/org.eclipse.papyrus.emf.commandstack/build.properties (renamed from sandbox/org.eclipse.papyrus.emf.commandstack/build.properties)16
-rw-r--r--plugins/developer/org.eclipse.papyrus.emf.commandstack/icons/stack.gif (renamed from sandbox/org.eclipse.papyrus.emf.commandstack/icons/stack.gif)bin575 -> 575 bytes
-rw-r--r--plugins/developer/org.eclipse.papyrus.emf.commandstack/plugin.properties (renamed from sandbox/org.eclipse.papyrus.emf.commandstack/plugin.properties)8
-rw-r--r--plugins/developer/org.eclipse.papyrus.emf.commandstack/plugin.xml (renamed from sandbox/org.eclipse.papyrus.emf.commandstack/plugin.xml)32
-rw-r--r--plugins/developer/org.eclipse.papyrus.emf.commandstack/src/org/eclipse/papyrus/infra/emf/commandstack/Activator.java (renamed from sandbox/org.eclipse.papyrus.emf.commandstack/src/org/eclipse/papyrus/emf/commandstack/Activator.java)126
-rw-r--r--plugins/developer/org.eclipse.papyrus.emf.commandstack/src/org/eclipse/papyrus/infra/emf/commandstack/view/CommandStackView.java (renamed from sandbox/org.eclipse.papyrus.emf.commandstack/src/org/eclipse/papyrus/emf/commandstack/view/CommandStackView.java)570
-rw-r--r--sandbox/org.eclipse.papyrus.dev.project.management_old/.classpath7
-rw-r--r--sandbox/org.eclipse.papyrus.dev.project.management_old/.project28
-rw-r--r--sandbox/org.eclipse.papyrus.dev.project.management_old/.settings/org.eclipse.jdt.core.prefs8
-rw-r--r--sandbox/org.eclipse.papyrus.dev.project.management_old/META-INF/MANIFEST.MF15
-rw-r--r--sandbox/org.eclipse.papyrus.dev.project.management_old/build.properties10
-rw-r--r--sandbox/org.eclipse.papyrus.dev.project.management_old/icons/update-plugin.pngbin805 -> 0 bytes
-rw-r--r--sandbox/org.eclipse.papyrus.dev.project.management_old/plugin.xml32
-rw-r--r--sandbox/org.eclipse.papyrus.dev.project.management_old/resources/about.html.file28
-rw-r--r--sandbox/org.eclipse.papyrus.dev.project.management_old/resources/epl-v10.html.file304
-rw-r--r--sandbox/org.eclipse.papyrus.dev.project.management_old/resources/license.html.file79
-rw-r--r--sandbox/org.eclipse.papyrus.dev.project.management_old/src/org/eclipse/papyrus/dev/project/management/Activator.java68
-rw-r--r--sandbox/org.eclipse.papyrus.dev.project.management_old/src/org/eclipse/papyrus/dev/project/management/handler/RefactoringHandler.java529
-rw-r--r--sandbox/org.eclipse.papyrus.dev.project.management_old/src/org/eclipse/papyrus/dev/project/management/helper/AbstractProjectManagementHelper.java107
-rw-r--r--sandbox/org.eclipse.papyrus.dev.project.management_old/src/org/eclipse/papyrus/dev/project/management/helper/FeatureManagementHelper.java65
-rw-r--r--sandbox/org.eclipse.papyrus.dev.project.management_old/src/org/eclipse/papyrus/dev/project/management/helper/PluginManagmentHelper.java206
-rw-r--r--sandbox/org.eclipse.papyrus.dev.project.management_old/src/org/eclipse/papyrus/dev/project/management/ui/ParameterDialog.java213
-rw-r--r--sandbox/org.eclipse.papyrus.dev.project.management_old/src/org/eclipse/papyrus/plugin/management/Activator.java68
-rw-r--r--sandbox/org.eclipse.papyrus.dev.project.management_old/src/org/eclipse/papyrus/plugin/management/handler/RefactoringHandler.java529
-rw-r--r--sandbox/org.eclipse.papyrus.dev.project.management_old/src/org/eclipse/papyrus/plugin/management/helper/AbstractProjectManagementHelper.java107
-rw-r--r--sandbox/org.eclipse.papyrus.dev.project.management_old/src/org/eclipse/papyrus/plugin/management/helper/FeatureManagementHelper.java65
-rw-r--r--sandbox/org.eclipse.papyrus.dev.project.management_old/src/org/eclipse/papyrus/plugin/management/helper/PluginManagmentHelper.java206
-rw-r--r--sandbox/org.eclipse.papyrus.dev.project.management_old/src/org/eclipse/papyrus/plugin/management/ui/ParameterDialog.java213
-rw-r--r--sandbox/org.eclipse.papyrus.emf.commandstack/about.html28
-rw-r--r--sandbox/org.eclipse.papyrus.emf.commandstack/plugin.pdoc4
67 files changed, 1921 insertions, 4829 deletions
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management/.classpath b/plugins/developer/org.eclipse.papyrus.dev.project.management/.classpath
index 2d1a4302f04..64c5e31b7a2 100644
--- a/sandbox/org.eclipse.papyrus.dev.project.management/.classpath
+++ b/plugins/developer/org.eclipse.papyrus.dev.project.management/.classpath
@@ -1,7 +1,7 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
- <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
- <classpathentry kind="src" path="src"/>
- <classpathentry kind="output" path="bin"/>
-</classpath>
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management/.project b/plugins/developer/org.eclipse.papyrus.dev.project.management/.project
index 87953a6014f..f7bd68fe1d4 100644
--- a/sandbox/org.eclipse.papyrus.dev.project.management/.project
+++ b/plugins/developer/org.eclipse.papyrus.dev.project.management/.project
@@ -1,28 +1,28 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
- <name>org.eclipse.papyrus.dev.project.management</name>
- <comment></comment>
- <projects>
- </projects>
- <buildSpec>
- <buildCommand>
- <name>org.eclipse.jdt.core.javabuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.ManifestBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.SchemaBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- </buildSpec>
- <natures>
- <nature>org.eclipse.pde.PluginNature</nature>
- <nature>org.eclipse.jdt.core.javanature</nature>
- </natures>
-</projectDescription>
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.papyrus.dev.project.management</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management/.settings/org.eclipse.jdt.core.prefs b/plugins/developer/org.eclipse.papyrus.dev.project.management/.settings/org.eclipse.jdt.core.prefs
index 44217f8c068..af0f20f97a5 100644
--- a/sandbox/org.eclipse.papyrus.dev.project.management/.settings/org.eclipse.jdt.core.prefs
+++ b/plugins/developer/org.eclipse.papyrus.dev.project.management/.settings/org.eclipse.jdt.core.prefs
@@ -1,7 +1,7 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
-org.eclipse.jdt.core.compiler.compliance=1.5
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.5
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management/META-INF/MANIFEST.MF b/plugins/developer/org.eclipse.papyrus.dev.project.management/META-INF/MANIFEST.MF
index 87bb48e45d3..2de509d3ae2 100644
--- a/sandbox/org.eclipse.papyrus.dev.project.management/META-INF/MANIFEST.MF
+++ b/plugins/developer/org.eclipse.papyrus.dev.project.management/META-INF/MANIFEST.MF
@@ -1,19 +1,19 @@
-Manifest-Version: 1.0
-Require-Bundle: org.eclipse.ui,
- org.eclipse.core.runtime,
- org.eclipse.core.commands,
- org.eclipse.core.resources;bundle-version="3.8.0",
- org.eclipse.papyrus.eclipse.project.editors;bundle-version="1.1.0",
- org.eclipse.papyrus.infra.core.log;bundle-version="1.1.0",
- org.eclipse.pde.ui,
- org.eclipse.ui.ide;bundle-version="3.10.0"
-Bundle-Vendor: %Bundle-Vendor
-Bundle-ActivationPolicy: lazy
-Bundle-Version: 1.1.0.qualifier
-Bundle-Name: %Bundle-Name
-Bundle-ManifestVersion: 2
-Bundle-Activator: org.eclipse.papyrus.dev.project.management.Activator
-Bundle-SymbolicName: org.eclipse.papyrus.dev.project.management;single
- ton:=true
-Bundle-RequiredExecutionEnvironment: J2SE-1.5
-
+Manifest-Version: 1.0
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.core.commands,
+ org.eclipse.core.resources;bundle-version="3.8.0",
+ org.eclipse.papyrus.eclipse.project.editors;bundle-version="1.1.0",
+ org.eclipse.papyrus.infra.core.log;bundle-version="1.1.0",
+ org.eclipse.pde.ui,
+ org.eclipse.ui.ide;bundle-version="3.10.0"
+Bundle-Vendor: %Bundle-Vendor
+Bundle-ActivationPolicy: lazy
+Bundle-Version: 1.1.0.qualifier
+Bundle-Name: %Bundle-Name
+Bundle-ManifestVersion: 2
+Bundle-Activator: org.eclipse.papyrus.dev.project.management.Activator
+Bundle-SymbolicName: org.eclipse.papyrus.dev.project.management;single
+ ton:=true
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management/OSGI-INF/l10n/bundle.properties b/plugins/developer/org.eclipse.papyrus.dev.project.management/OSGI-INF/l10n/bundle.properties
index f8261c4601c..0c4249d2390 100644
--- a/sandbox/org.eclipse.papyrus.dev.project.management/OSGI-INF/l10n/bundle.properties
+++ b/plugins/developer/org.eclipse.papyrus.dev.project.management/OSGI-INF/l10n/bundle.properties
@@ -1,3 +1,3 @@
-#Properties file for org.eclipse.papyrus.dev.project.managment
-Bundle-Vendor = Eclipse Modeling Project
-Bundle-Name = Papyrus Project Management (Incubation)
+#Properties file for org.eclipse.papyrus.dev.project.managment
+Bundle-Vendor = Eclipse Modeling Project
+Bundle-Name = Papyrus Project Management (Incubation)
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management/about.html b/plugins/developer/org.eclipse.papyrus.dev.project.management/about.html
index 82d49bf5f81..d35d5aed64c 100644
--- a/sandbox/org.eclipse.papyrus.dev.project.management/about.html
+++ b/plugins/developer/org.eclipse.papyrus.dev.project.management/about.html
@@ -1,28 +1,28 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
-<title>About</title>
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
-
-<p>June 5, 2007</p>
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise
-indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available
-at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
-being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
-apply to your use of any object code in the Content. Check the Redistributor's license that was
-provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content
-and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
-
-</body>
-</html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 5, 2007</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management/build.properties b/plugins/developer/org.eclipse.papyrus.dev.project.management/build.properties
index 697678ca5ca..6d4fb79f8a8 100644
--- a/sandbox/org.eclipse.papyrus.dev.project.management/build.properties
+++ b/plugins/developer/org.eclipse.papyrus.dev.project.management/build.properties
@@ -1,10 +1,10 @@
-source.. = src/
-output.. = bin/
-bin.includes = META-INF/,\
- .,\
- plugin.xml,\
- icons/,\
- OSGI-INF/,\
- resources/,\
- about.html
-src.includes = about.html
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ plugin.xml,\
+ icons/,\
+ OSGI-INF/,\
+ resources/,\
+ about.html
+src.includes = about.html
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management/icons/copyright_icon.png b/plugins/developer/org.eclipse.papyrus.dev.project.management/icons/copyright_icon.png
index df9393d4f01..df9393d4f01 100644
--- a/sandbox/org.eclipse.papyrus.dev.project.management/icons/copyright_icon.png
+++ b/plugins/developer/org.eclipse.papyrus.dev.project.management/icons/copyright_icon.png
Binary files differ
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management/icons/feature_obj.gif b/plugins/developer/org.eclipse.papyrus.dev.project.management/icons/feature_obj.gif
index 8706680c793..8706680c793 100644
--- a/sandbox/org.eclipse.papyrus.dev.project.management/icons/feature_obj.gif
+++ b/plugins/developer/org.eclipse.papyrus.dev.project.management/icons/feature_obj.gif
Binary files differ
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management/icons/html.gif b/plugins/developer/org.eclipse.papyrus.dev.project.management/icons/html.gif
index ec6cca4525b..ec6cca4525b 100644
--- a/sandbox/org.eclipse.papyrus.dev.project.management/icons/html.gif
+++ b/plugins/developer/org.eclipse.papyrus.dev.project.management/icons/html.gif
Binary files differ
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management/icons/papyrus.png b/plugins/developer/org.eclipse.papyrus.dev.project.management/icons/papyrus.png
index 0f74e27b483..0f74e27b483 100644
--- a/sandbox/org.eclipse.papyrus.dev.project.management/icons/papyrus.png
+++ b/plugins/developer/org.eclipse.papyrus.dev.project.management/icons/papyrus.png
Binary files differ
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management/icons/plugin_mf_obj.gif b/plugins/developer/org.eclipse.papyrus.dev.project.management/icons/plugin_mf_obj.gif
index eedacd2b7aa..eedacd2b7aa 100644
--- a/sandbox/org.eclipse.papyrus.dev.project.management/icons/plugin_mf_obj.gif
+++ b/plugins/developer/org.eclipse.papyrus.dev.project.management/icons/plugin_mf_obj.gif
Binary files differ
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management/icons/plugin_obj.gif b/plugins/developer/org.eclipse.papyrus.dev.project.management/icons/plugin_obj.gif
index 8493df40dfe..8493df40dfe 100644
--- a/sandbox/org.eclipse.papyrus.dev.project.management/icons/plugin_obj.gif
+++ b/plugins/developer/org.eclipse.papyrus.dev.project.management/icons/plugin_obj.gif
Binary files differ
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management/icons/version.gif b/plugins/developer/org.eclipse.papyrus.dev.project.management/icons/version.gif
index d2d5d765def..d2d5d765def 100644
--- a/sandbox/org.eclipse.papyrus.dev.project.management/icons/version.gif
+++ b/plugins/developer/org.eclipse.papyrus.dev.project.management/icons/version.gif
Binary files differ
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management/icons/version.png b/plugins/developer/org.eclipse.papyrus.dev.project.management/icons/version.png
index 248a6ae5ce1..248a6ae5ce1 100644
--- a/sandbox/org.eclipse.papyrus.dev.project.management/icons/version.png
+++ b/plugins/developer/org.eclipse.papyrus.dev.project.management/icons/version.png
Binary files differ
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management/plugin.xml b/plugins/developer/org.eclipse.papyrus.dev.project.management/plugin.xml
index f87c3828012..c56c5431a7a 100644
--- a/sandbox/org.eclipse.papyrus.dev.project.management/plugin.xml
+++ b/plugins/developer/org.eclipse.papyrus.dev.project.management/plugin.xml
@@ -1,120 +1,120 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.4"?>
-<plugin>
- <extension
- point="org.eclipse.ui.commands">
- <command
- defaultHandler="org.eclipse.papyrus.dev.project.management.handlers.plugins.ChangePluginVersionHandler"
- description="Change Plugin Version"
- id="org.eclipse.papyrus.dev.project.management.command.plugin.change.version"
- name="Change Plugin Version">
- </command>
- <command
- defaultHandler="org.eclipse.papyrus.dev.project.management.handlers.features.ChangeFeatureVersionHandler"
- description="Change Feature Version"
- id="org.eclipse.papyrus.dev.project.management.command.feature.change.version"
- name="Change Feature Version">
- </command>
- <command
- defaultHandler="org.eclipse.papyrus.dev.project.management.handlers.plugins.ChangeDependencyVersionNumberHandler"
- description="Change Dependencies Version"
- id="org.eclipse.papyrus.dev.project.management.command.plugin.change.dependency.version"
- name="Change Dependencies Version">
- </command>
- <command
- defaultHandler="org.eclipse.papyrus.dev.project.management.handlers.plugins.AddProjectAboutFileHandler"
- id="org.eclipse.papyrus.dev.project.management.command.plugin.add.about"
- name="Add the file about.html to the project">
- </command>
- <command
- defaultHandler="org.eclipse.papyrus.dev.project.management.handlers.features.AddFeatureLicenseFileHandler"
- description="Add the license file to the feature"
- id="org.eclipse.papyrus.dev.project.management.command.feature.add.license"
- name="Add License File">
- </command>
- <command
- defaultHandler="org.eclipse.papyrus.dev.project.management.handlers.features.AddFEPLFileHandler"
- description="Add the EPL file to the feature"
- id="org.eclipse.papyrus.dev.project.management.command.feature.add.epl"
- name="Add EPL file">
- </command>
- <command
- defaultHandler="org.eclipse.papyrus.dev.project.management.handlers.features.SetCopyrightNoticeHandler"
- description="Set Feature Copyright"
- id="org.eclipse.papyrus.dev.project.management.command.feature.set.copyright"
- name="Set Feature Copyright">
- </command>
- <command
- defaultHandler="org.eclipse.papyrus.dev.project.management.handlers.features.ExternalizeFeatureStringHandler"
- id="org.eclipse.papyrus.dev.project.management.command.feature.externalize"
- name="Externalize String for Feature">
- </command>
- </extension>
- <extension
- point="org.eclipse.ui.menus">
- <menuContribution
- allPopups="false"
- locationURI="menu:org.eclipse.ui.main.menu?after=edit">
- <menu
- icon="icons/papyrus.png"
- label="Project management">
- <menu
- icon="icons/feature_obj.gif"
- label="Feature">
- <command
- commandId="org.eclipse.papyrus.dev.project.management.command.feature.add.license"
- icon="icons/html.gif"
- label="Add License File (no undo)"
- style="push">
- </command>
- <command
- commandId="org.eclipse.papyrus.dev.project.management.command.feature.add.epl"
- icon="icons/html.gif"
- label="Add EPL File (no undo)"
- style="push">
- </command>
- <command
- commandId="org.eclipse.papyrus.dev.project.management.command.feature.change.version"
- icon="icons/version.png"
- label="Change Feature Version (no undo)"
- style="push">
- </command>
- <command
- commandId="org.eclipse.papyrus.dev.project.management.command.feature.set.copyright"
- icon="icons/copyright_icon.png"
- label="Set Copyright (doesn&apos;t erase existing value)"
- style="push">
- </command>
- <command
- commandId="org.eclipse.papyrus.dev.project.management.command.feature.externalize"
- label="Externalize String"
- style="push">
- </command>
- </menu>
- <menu
- icon="icons/plugin_obj.gif"
- label="Plugin">
- <command
- commandId="org.eclipse.papyrus.dev.project.management.command.plugin.add.about"
- icon="icons/html.gif"
- label="Add about.html file (no undo)"
- style="push">
- </command>
- <command
- commandId="org.eclipse.papyrus.dev.project.management.command.plugin.change.dependency.version"
- icon="icons/plugin_mf_obj.gif"
- label="Change Dependencies Versions (no undo)"
- style="push">
- </command>
- <command
- commandId="org.eclipse.papyrus.dev.project.management.command.plugin.change.version"
- icon="icons/version.png"
- label="Change Plugin Version (no undo)"
- style="push">
- </command>
- </menu>
- </menu>
- </menuContribution>
- </extension>
-
-</plugin>
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+ <extension
+ point="org.eclipse.ui.commands">
+ <command
+ defaultHandler="org.eclipse.papyrus.dev.project.management.handlers.plugins.ChangePluginVersionHandler"
+ description="Change Plugin Version"
+ id="org.eclipse.papyrus.dev.project.management.command.plugin.change.version"
+ name="Change Plugin Version">
+ </command>
+ <command
+ defaultHandler="org.eclipse.papyrus.dev.project.management.handlers.features.ChangeFeatureVersionHandler"
+ description="Change Feature Version"
+ id="org.eclipse.papyrus.dev.project.management.command.feature.change.version"
+ name="Change Feature Version">
+ </command>
+ <command
+ defaultHandler="org.eclipse.papyrus.dev.project.management.handlers.plugins.ChangeDependencyVersionNumberHandler"
+ description="Change Dependencies Version"
+ id="org.eclipse.papyrus.dev.project.management.command.plugin.change.dependency.version"
+ name="Change Dependencies Version">
+ </command>
+ <command
+ defaultHandler="org.eclipse.papyrus.dev.project.management.handlers.plugins.AddProjectAboutFileHandler"
+ id="org.eclipse.papyrus.dev.project.management.command.plugin.add.about"
+ name="Add the file about.html to the project">
+ </command>
+ <command
+ defaultHandler="org.eclipse.papyrus.dev.project.management.handlers.features.AddFeatureLicenseFileHandler"
+ description="Add the license file to the feature"
+ id="org.eclipse.papyrus.dev.project.management.command.feature.add.license"
+ name="Add License File">
+ </command>
+ <command
+ defaultHandler="org.eclipse.papyrus.dev.project.management.handlers.features.AddFEPLFileHandler"
+ description="Add the EPL file to the feature"
+ id="org.eclipse.papyrus.dev.project.management.command.feature.add.epl"
+ name="Add EPL file">
+ </command>
+ <command
+ defaultHandler="org.eclipse.papyrus.dev.project.management.handlers.features.SetCopyrightNoticeHandler"
+ description="Set Feature Copyright"
+ id="org.eclipse.papyrus.dev.project.management.command.feature.set.copyright"
+ name="Set Feature Copyright">
+ </command>
+ <command
+ defaultHandler="org.eclipse.papyrus.dev.project.management.handlers.features.ExternalizeFeatureStringHandler"
+ id="org.eclipse.papyrus.dev.project.management.command.feature.externalize"
+ name="Externalize String for Feature">
+ </command>
+ </extension>
+ <extension
+ point="org.eclipse.ui.menus">
+ <menuContribution
+ allPopups="false"
+ locationURI="menu:org.eclipse.ui.main.menu?after=edit">
+ <menu
+ icon="icons/papyrus.png"
+ label="Project management">
+ <menu
+ icon="icons/feature_obj.gif"
+ label="Feature">
+ <command
+ commandId="org.eclipse.papyrus.dev.project.management.command.feature.add.license"
+ icon="icons/html.gif"
+ label="Add License File (no undo)"
+ style="push">
+ </command>
+ <command
+ commandId="org.eclipse.papyrus.dev.project.management.command.feature.add.epl"
+ icon="icons/html.gif"
+ label="Add EPL File (no undo)"
+ style="push">
+ </command>
+ <command
+ commandId="org.eclipse.papyrus.dev.project.management.command.feature.change.version"
+ icon="icons/version.png"
+ label="Change Feature Version (no undo)"
+ style="push">
+ </command>
+ <command
+ commandId="org.eclipse.papyrus.dev.project.management.command.feature.set.copyright"
+ icon="icons/copyright_icon.png"
+ label="Set Copyright (doesn&apos;t erase existing value)"
+ style="push">
+ </command>
+ <command
+ commandId="org.eclipse.papyrus.dev.project.management.command.feature.externalize"
+ label="Externalize String"
+ style="push">
+ </command>
+ </menu>
+ <menu
+ icon="icons/plugin_obj.gif"
+ label="Plugin">
+ <command
+ commandId="org.eclipse.papyrus.dev.project.management.command.plugin.add.about"
+ icon="icons/html.gif"
+ label="Add about.html file (no undo)"
+ style="push">
+ </command>
+ <command
+ commandId="org.eclipse.papyrus.dev.project.management.command.plugin.change.dependency.version"
+ icon="icons/plugin_mf_obj.gif"
+ label="Change Dependencies Versions (no undo)"
+ style="push">
+ </command>
+ <command
+ commandId="org.eclipse.papyrus.dev.project.management.command.plugin.change.version"
+ icon="icons/version.png"
+ label="Change Plugin Version (no undo)"
+ style="push">
+ </command>
+ </menu>
+ </menu>
+ </menuContribution>
+ </extension>
+
+</plugin>
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management/resources/about.html.file b/plugins/developer/org.eclipse.papyrus.dev.project.management/resources/about.html.file
index 34ab520eed4..670d10856a8 100644
--- a/sandbox/org.eclipse.papyrus.dev.project.management/resources/about.html.file
+++ b/plugins/developer/org.eclipse.papyrus.dev.project.management/resources/about.html.file
@@ -1,106 +1,106 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
-<title>Eclipse Foundation Software User Agreement</title>
-</head>
-
-<body lang="EN-US">
-<h2>Eclipse Foundation Software User Agreement</h2>
-<p>April 14, 2010</p>
-
-<h3>Usage Of Content</h3>
-
-<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
- (COLLECTIVELY &quot;CONTENT&quot;). USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
- CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE
- OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
- NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
- CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
-
-<h3>Applicable Licenses</h3>
-
-<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
- (&quot;EPL&quot;). A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
- For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
-
-<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
- repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
-
-<ul>
- <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content. Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
- <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
- <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material. Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;. Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
- and/or Fragments associated with that Feature.</li>
- <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
-</ul>
-
-<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
-Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;). Abouts and Feature Licenses may be located in any directory of a Download or Module
-including, but not limited to the following locations:</p>
-
-<ul>
- <li>The top-level (root) directory</li>
- <li>Plug-in and Fragment directories</li>
- <li>Inside Plug-ins and Fragments packaged as JARs</li>
- <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
- <li>Feature directories</li>
-</ul>
-
-<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
-installation process. If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
-inform you where you can locate them. Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
-that directory.</p>
-
-<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS. SOME OF THESE
-OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
-
-<ul>
- <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
- <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
- <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
- <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
- <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
-</ul>
-
-<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License is provided, please
-contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
-
-
-<h3>Use of Provisioning Technology</h3>
-
-<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
- Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
- other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
- install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
- href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
- (&quot;Specification&quot;).</p>
-
-<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
- applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
- in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
- Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
-
-<ol>
- <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
- on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
- product.</li>
- <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
- accessed and copied to the Target Machine.</li>
- <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
- Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
- Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
- the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
- indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
-</ol>
-
-<h3>Cryptography</h3>
-
-<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
- another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
- possession, or use, and re-export of encryption software, to see if this is permitted.</p>
-
-<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
-</body>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 14, 2010</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+ (COLLECTIVELY &quot;CONTENT&quot;). USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+ CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+ OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+ NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+ CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+ (&quot;EPL&quot;). A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+ For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+ repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+ <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content. Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+ <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+ <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material. Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;. Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+ and/or Fragments associated with that Feature.</li>
+ <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;). Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+ <li>The top-level (root) directory</li>
+ <li>Plug-in and Fragment directories</li>
+ <li>Inside Plug-ins and Fragments packaged as JARs</li>
+ <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+ <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process. If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them. Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS. SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+ <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+ <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+ <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+ <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+ <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+ Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+ other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+ install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+ href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+ (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+ applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+ in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+ Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+ <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+ on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+ product.</li>
+ <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+ accessed and copied to the Target Machine.</li>
+ <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+ Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+ Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+ the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+ indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+ another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+ possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
</html> \ No newline at end of file
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management/resources/epl-v10.html.file b/plugins/developer/org.eclipse.papyrus.dev.project.management/resources/epl-v10.html.file
index cb1073a4bad..cb1073a4bad 100644
--- a/sandbox/org.eclipse.papyrus.dev.project.management/resources/epl-v10.html.file
+++ b/plugins/developer/org.eclipse.papyrus.dev.project.management/resources/epl-v10.html.file
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management/resources/license.html.file b/plugins/developer/org.eclipse.papyrus.dev.project.management/resources/license.html.file
index f19c483b9c8..f19c483b9c8 100644
--- a/sandbox/org.eclipse.papyrus.dev.project.management/resources/license.html.file
+++ b/plugins/developer/org.eclipse.papyrus.dev.project.management/resources/license.html.file
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/Activator.java b/plugins/developer/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/Activator.java
index 82021fc4b9b..fe18ab13360 100644
--- a/sandbox/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/Activator.java
+++ b/plugins/developer/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/Activator.java
@@ -1,61 +1,61 @@
-package org.eclipse.papyrus.dev.project.management;
-
-import org.eclipse.papyrus.infra.core.log.LogHelper;
-import org.eclipse.ui.plugin.AbstractUIPlugin;
-import org.osgi.framework.BundleContext;
-
-/**
- * The activator class controls the plug-in life cycle
- */
-public class Activator extends AbstractUIPlugin {
-
- // The plug-in ID
- public static final String PLUGIN_ID = "org.eclipse.papyrus.dev.project.management"; //$NON-NLS-1$
-
- // The shared instance
- private static Activator plugin;
-
- /**
- * the log helper for this plugin
- */
- public static LogHelper log;
-
- /**
- * The constructor
- */
- public Activator() {
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
- */
- @Override
- public void start(final BundleContext context) throws Exception {
- super.start(context);
- log = new LogHelper(this);
- plugin = this;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
- */
- @Override
- public void stop(final BundleContext context) throws Exception {
- plugin = null;
- super.stop(context);
- }
-
- /**
- * Returns the shared instance
- *
- * @return the shared instance
- */
- public static Activator getDefault() {
- return plugin;
- }
-
-}
+package org.eclipse.papyrus.dev.project.management;
+
+import org.eclipse.papyrus.infra.core.log.LogHelper;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends AbstractUIPlugin {
+
+ // The plug-in ID
+ public static final String PLUGIN_ID = "org.eclipse.papyrus.dev.project.management"; //$NON-NLS-1$
+
+ // The shared instance
+ private static Activator plugin;
+
+ /**
+ * the log helper for this plugin
+ */
+ public static LogHelper log;
+
+ /**
+ * The constructor
+ */
+ public Activator() {
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+ */
+ @Override
+ public void start(final BundleContext context) throws Exception {
+ super.start(context);
+ log = new LogHelper(this);
+ plugin = this;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+ */
+ @Override
+ public void stop(final BundleContext context) throws Exception {
+ plugin = null;
+ super.stop(context);
+ }
+
+ /**
+ * Returns the shared instance
+ *
+ * @return the shared instance
+ */
+ public static Activator getDefault() {
+ return plugin;
+ }
+
+}
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/dialog/InputDialogWithCheckBox.java b/plugins/developer/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/dialog/InputDialogWithCheckBox.java
index 7726cc06463..bfaaae2f469 100644
--- a/sandbox/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/dialog/InputDialogWithCheckBox.java
+++ b/plugins/developer/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/dialog/InputDialogWithCheckBox.java
@@ -1,94 +1,94 @@
-package org.eclipse.papyrus.dev.project.management.dialog;
-
-import org.eclipse.jface.dialogs.IInputValidator;
-import org.eclipse.jface.dialogs.InputDialog;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Shell;
-
-/**
- *
- * This input dialog provides a field to edit and a checkbox
- *
- */
-//TODO move this class in an upper project
-public class InputDialogWithCheckBox extends InputDialog {
-
- /**
- * the checkbox
- */
- private Button checkbox;
-
- /**
- * the message for the checkbox
- */
- final private String checkboxMessage;
-
- /**
- * the initial state of the checkbox
- */
- final private boolean checkboxStatus;
-
- /**
- * the state of the checkbox when the dialog is closed
- */
- private boolean finalState;
-
- /**
- *
- * Constructor.
- *
- * @param parentShell
- * @param dialogTitle
- * @param dialogMessage
- * @param initialValue
- * @param checkboxMessage
- * @param checkboxStatus
- * @param validator
- */
- public InputDialogWithCheckBox(Shell parentShell, String dialogTitle, String dialogMessage, String initialValue, final String checkboxMessage, final boolean checkboxStatus, final IInputValidator validator) {
- super(parentShell, dialogTitle, dialogMessage, initialValue, validator);
- this.checkboxMessage = checkboxMessage;
- this.checkboxStatus = checkboxStatus;
- }
-
- /**
- *
- * @see org.eclipse.jface.dialogs.Dialog#createContents(org.eclipse.swt.widgets.Composite)
- *
- * @param parent
- * @return
- */
- @Override
- protected Control createContents(Composite parent) {
- Control ctrl = super.createContents(parent);
- checkbox = new Button((Composite)((Composite)ctrl).getChildren()[0], SWT.CHECK);
- checkbox.setText(checkboxMessage);
- checkbox.setSelection(checkboxStatus);
- return ctrl;
- }
-
-
- /**
- *
- * @return
- * <code>true</code> if the checkbox is checked
- */
- public boolean isChecked() {
- return this.finalState;
- }
-
- /**
- * save the state of the checkbox
- *
- * @see org.eclipse.jface.dialogs.Dialog#okPressed()
- *
- */
- @Override
- protected void okPressed() {
- finalState = this.checkbox.getSelection();
- super.okPressed();
- }
-}
+package org.eclipse.papyrus.dev.project.management.dialog;
+
+import org.eclipse.jface.dialogs.IInputValidator;
+import org.eclipse.jface.dialogs.InputDialog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ *
+ * This input dialog provides a field to edit and a checkbox
+ *
+ */
+//TODO move this class in an upper project
+public class InputDialogWithCheckBox extends InputDialog {
+
+ /**
+ * the checkbox
+ */
+ private Button checkbox;
+
+ /**
+ * the message for the checkbox
+ */
+ final private String checkboxMessage;
+
+ /**
+ * the initial state of the checkbox
+ */
+ final private boolean checkboxStatus;
+
+ /**
+ * the state of the checkbox when the dialog is closed
+ */
+ private boolean finalState;
+
+ /**
+ *
+ * Constructor.
+ *
+ * @param parentShell
+ * @param dialogTitle
+ * @param dialogMessage
+ * @param initialValue
+ * @param checkboxMessage
+ * @param checkboxStatus
+ * @param validator
+ */
+ public InputDialogWithCheckBox(Shell parentShell, String dialogTitle, String dialogMessage, String initialValue, final String checkboxMessage, final boolean checkboxStatus, final IInputValidator validator) {
+ super(parentShell, dialogTitle, dialogMessage, initialValue, validator);
+ this.checkboxMessage = checkboxMessage;
+ this.checkboxStatus = checkboxStatus;
+ }
+
+ /**
+ *
+ * @see org.eclipse.jface.dialogs.Dialog#createContents(org.eclipse.swt.widgets.Composite)
+ *
+ * @param parent
+ * @return
+ */
+ @Override
+ protected Control createContents(Composite parent) {
+ Control ctrl = super.createContents(parent);
+ checkbox = new Button((Composite)((Composite)ctrl).getChildren()[0], SWT.CHECK);
+ checkbox.setText(checkboxMessage);
+ checkbox.setSelection(checkboxStatus);
+ return ctrl;
+ }
+
+
+ /**
+ *
+ * @return
+ * <code>true</code> if the checkbox is checked
+ */
+ public boolean isChecked() {
+ return this.finalState;
+ }
+
+ /**
+ * save the state of the checkbox
+ *
+ * @see org.eclipse.jface.dialogs.Dialog#okPressed()
+ *
+ */
+ @Override
+ protected void okPressed() {
+ finalState = this.checkbox.getSelection();
+ super.okPressed();
+ }
+}
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/dialog/TwoInputDialog.java b/plugins/developer/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/dialog/TwoInputDialog.java
index b46bb7e3ba7..1a7dbef6889 100644
--- a/sandbox/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/dialog/TwoInputDialog.java
+++ b/plugins/developer/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/dialog/TwoInputDialog.java
@@ -1,137 +1,137 @@
-/*****************************************************************************
- * Copyright (c) 2011 CEA LIST.
- *
- *
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
- *
- *****************************************************************************/
-package org.eclipse.papyrus.dev.project.management.dialog;
-
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.dialogs.IInputValidator;
-import org.eclipse.jface.dialogs.InputDialog;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
-
-/**
- * This Dialog provides 2 texts field. It was created to be used during the table creation.
- * It doesn't provide validator for the second field.
- *
- *
- */
-//TODO move this class in an upper project
-//TODO generalize this class to have several text field
-//FIXME : duplicated code from oep.infra.table.common
-public class TwoInputDialog extends InputDialog {
-
- /** widget for the second value */
- private Text text_2;
-
- /** the second values */
- private String value_2;
-
- /** the message for the second Text */
- protected String message_2;
-
- /**
- *
- * Constructor.
- *
- * @param parentShell
- * the parent shell
- * @param dialogTitle
- * the dialog title
- * @param message1
- * the first message for the dialog
- * @param message2
- * the second message for the dialog
- * @param initialValue1
- * the first initial value
- * @param initialValue2
- * the second initial value
- * @param validator
- * the validator
- */
- public TwoInputDialog(final Shell parentShell, final String dialogTitle, final String message1, final String message2, final String initialValue1, final String initialValue2, final IInputValidator validator) {
- super(parentShell, dialogTitle, message1, initialValue1, validator);
- this.message_2 = message2;
- this.value_2 = initialValue2;
- }
-
- /**
- * Create the second Text Area
- *
- * @see org.eclipse.jface.dialogs.InputDialog#createDialogArea(org.eclipse.swt.widgets.Composite)
- *
- * @param parent
- * @return
- */
- @Override
- protected Control createDialogArea(final Composite parent) {
- final Composite composite = (Composite)super.createDialogArea(parent);
- if(this.message_2 != null) {
- final Label label = new Label(composite, SWT.WRAP);
- label.setText(this.message_2);
- final GridData data = new GridData(GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL | GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_CENTER);
- data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH);
- label.setLayoutData(data);
- label.setFont(parent.getFont());
- }
- this.text_2 = new Text(composite, getInputTextStyle());
- this.text_2.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL));
- applyDialogFont(composite);
- return composite;
- }
-
- /**
- *
- * @see org.eclipse.jface.dialogs.InputDialog#buttonPressed(int)
- *
- * @param buttonId
- */
- @Override
- protected void buttonPressed(final int buttonId) {
- if(buttonId == IDialogConstants.OK_ID) {
- this.value_2 = this.text_2.getText();
- } else {
- this.value_2 = null;
- }
- super.buttonPressed(buttonId);
- }
-
- /**
- *
- * @see org.eclipse.jface.dialogs.InputDialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)
- *
- * @param parent
- */
- @Override
- protected void createButtonsForButtonBar(final Composite parent) {
- super.createButtonsForButtonBar(parent);
- if(this.value_2 != null) {
- this.text_2.setText(this.value_2);
- }
- }
-
- /**
- * Getter for {@link #value_2}
- *
- * @return
- * the description for the table
- */
- public String getValue_2() {
- return this.value_2;
- }
-
-}
+/*****************************************************************************
+ * Copyright (c) 2011 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.dev.project.management.dialog;
+
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.IInputValidator;
+import org.eclipse.jface.dialogs.InputDialog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * This Dialog provides 2 texts field. It was created to be used during the table creation.
+ * It doesn't provide validator for the second field.
+ *
+ *
+ */
+//TODO move this class in an upper project
+//TODO generalize this class to have several text field
+//FIXME : duplicated code from oep.infra.table.common
+public class TwoInputDialog extends InputDialog {
+
+ /** widget for the second value */
+ private Text text_2;
+
+ /** the second values */
+ private String value_2;
+
+ /** the message for the second Text */
+ protected String message_2;
+
+ /**
+ *
+ * Constructor.
+ *
+ * @param parentShell
+ * the parent shell
+ * @param dialogTitle
+ * the dialog title
+ * @param message1
+ * the first message for the dialog
+ * @param message2
+ * the second message for the dialog
+ * @param initialValue1
+ * the first initial value
+ * @param initialValue2
+ * the second initial value
+ * @param validator
+ * the validator
+ */
+ public TwoInputDialog(final Shell parentShell, final String dialogTitle, final String message1, final String message2, final String initialValue1, final String initialValue2, final IInputValidator validator) {
+ super(parentShell, dialogTitle, message1, initialValue1, validator);
+ this.message_2 = message2;
+ this.value_2 = initialValue2;
+ }
+
+ /**
+ * Create the second Text Area
+ *
+ * @see org.eclipse.jface.dialogs.InputDialog#createDialogArea(org.eclipse.swt.widgets.Composite)
+ *
+ * @param parent
+ * @return
+ */
+ @Override
+ protected Control createDialogArea(final Composite parent) {
+ final Composite composite = (Composite)super.createDialogArea(parent);
+ if(this.message_2 != null) {
+ final Label label = new Label(composite, SWT.WRAP);
+ label.setText(this.message_2);
+ final GridData data = new GridData(GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL | GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_CENTER);
+ data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH);
+ label.setLayoutData(data);
+ label.setFont(parent.getFont());
+ }
+ this.text_2 = new Text(composite, getInputTextStyle());
+ this.text_2.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL));
+ applyDialogFont(composite);
+ return composite;
+ }
+
+ /**
+ *
+ * @see org.eclipse.jface.dialogs.InputDialog#buttonPressed(int)
+ *
+ * @param buttonId
+ */
+ @Override
+ protected void buttonPressed(final int buttonId) {
+ if(buttonId == IDialogConstants.OK_ID) {
+ this.value_2 = this.text_2.getText();
+ } else {
+ this.value_2 = null;
+ }
+ super.buttonPressed(buttonId);
+ }
+
+ /**
+ *
+ * @see org.eclipse.jface.dialogs.InputDialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)
+ *
+ * @param parent
+ */
+ @Override
+ protected void createButtonsForButtonBar(final Composite parent) {
+ super.createButtonsForButtonBar(parent);
+ if(this.value_2 != null) {
+ this.text_2.setText(this.value_2);
+ }
+ }
+
+ /**
+ * Getter for {@link #value_2}
+ *
+ * @return
+ * the description for the table
+ */
+ public String getValue_2() {
+ return this.value_2;
+ }
+
+}
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/AbstractAddFileHandler.java b/plugins/developer/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/AbstractAddFileHandler.java
index 7b5fb2e2073..d6b34ab1297 100644
--- a/sandbox/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/AbstractAddFileHandler.java
+++ b/plugins/developer/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/AbstractAddFileHandler.java
@@ -1,122 +1,122 @@
-package org.eclipse.papyrus.dev.project.management.handlers;
-
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URL;
-
-import org.eclipse.core.commands.AbstractHandler;
-import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.jobs.IJobChangeEvent;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.core.runtime.jobs.JobChangeAdapter;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.papyrus.dev.project.management.Activator;
-import org.eclipse.papyrus.eclipse.project.editors.interfaces.IProjectEditor;
-import org.eclipse.papyrus.eclipse.project.editors.project.ProjectEditor;
-import org.eclipse.swt.widgets.Display;
-
-
-public abstract class AbstractAddFileHandler extends AbstractHandler {
-
-
- public Object execute(final ExecutionEvent event) {
-
- Job job = new Job(getJobName()) {
-
- @Override
- protected IStatus run(IProgressMonitor monitor) {
- return runAsJob(monitor);
- }
-
- };
-
- job.setUser(true);
- job.schedule();
-
- job.addJobChangeListener(new JobChangeAdapter() {
-
- @Override
- public void done(final IJobChangeEvent event) {
- Display.getDefault().asyncExec(new Runnable() {
-
- public void run() {
- MessageDialog.openInformation(Display.getDefault().getActiveShell(), getJobName(), "Done.");
- }
- });
- }
- });
-
- return null;
- }
-
- protected IStatus runAsJob(IProgressMonitor monitor) {
- final IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
-
- URL sourceURL = getSourceURL();
- if(sourceURL == null) {
- MessageDialog.openError(Display.getCurrent().getActiveShell(), "Cannot find the source file", "The source file is invalid");
- }
- String targetPath = getTargetPath();
-
- monitor.beginTask(getJobName(), projects.length);
-
- for(final IProject current : projects) {
- if(current.isOpen() && isValidProject(current)) {
- try {
- addFile(current, sourceURL, targetPath);
- } catch (final CoreException e) {
- Activator.log.error(e);
- } catch (final MalformedURLException e) {
- Activator.log.error(e);
- } catch (final IOException e) {
- Activator.log.error(e);
- }
- }
-
- monitor.worked(1);
- }
-
- return Status.OK_STATUS;
- }
-
- //Subclasses should override this
- protected String getJobName() {
- return "Add files";
- }
-
- protected abstract boolean isValidProject(IProject current);
-
- protected abstract URL getSourceURL();
-
- protected abstract String getTargetPath();
-
- /**
- *
- * @param project
- * the project
- * @param file
- * the file to add
- * @param fileDestinationPath
- * the path where add the file
- * @throws CoreException
- * @throws IOException
- */
- protected void addFile(final IProject project, final URL url, final String fileDestinationPath) throws CoreException, IOException {
- Assert.isNotNull(url);
- Assert.isNotNull(fileDestinationPath);
- Assert.isNotNull(project);
-
- final IProjectEditor editor = new ProjectEditor(project);
- editor.init();
- editor.addFile(url, fileDestinationPath, true);
- editor.save();
-
- }
-}
+package org.eclipse.papyrus.dev.project.management.handlers;
+
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.IJobChangeEvent;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.core.runtime.jobs.JobChangeAdapter;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.papyrus.dev.project.management.Activator;
+import org.eclipse.papyrus.eclipse.project.editors.interfaces.IProjectEditor;
+import org.eclipse.papyrus.eclipse.project.editors.project.ProjectEditor;
+import org.eclipse.swt.widgets.Display;
+
+
+public abstract class AbstractAddFileHandler extends AbstractHandler {
+
+
+ public Object execute(final ExecutionEvent event) {
+
+ Job job = new Job(getJobName()) {
+
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ return runAsJob(monitor);
+ }
+
+ };
+
+ job.setUser(true);
+ job.schedule();
+
+ job.addJobChangeListener(new JobChangeAdapter() {
+
+ @Override
+ public void done(final IJobChangeEvent event) {
+ Display.getDefault().asyncExec(new Runnable() {
+
+ public void run() {
+ MessageDialog.openInformation(Display.getDefault().getActiveShell(), getJobName(), "Done.");
+ }
+ });
+ }
+ });
+
+ return null;
+ }
+
+ protected IStatus runAsJob(IProgressMonitor monitor) {
+ final IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
+
+ URL sourceURL = getSourceURL();
+ if(sourceURL == null) {
+ MessageDialog.openError(Display.getCurrent().getActiveShell(), "Cannot find the source file", "The source file is invalid");
+ }
+ String targetPath = getTargetPath();
+
+ monitor.beginTask(getJobName(), projects.length);
+
+ for(final IProject current : projects) {
+ if(current.isOpen() && isValidProject(current)) {
+ try {
+ addFile(current, sourceURL, targetPath);
+ } catch (final CoreException e) {
+ Activator.log.error(e);
+ } catch (final MalformedURLException e) {
+ Activator.log.error(e);
+ } catch (final IOException e) {
+ Activator.log.error(e);
+ }
+ }
+
+ monitor.worked(1);
+ }
+
+ return Status.OK_STATUS;
+ }
+
+ //Subclasses should override this
+ protected String getJobName() {
+ return "Add files";
+ }
+
+ protected abstract boolean isValidProject(IProject current);
+
+ protected abstract URL getSourceURL();
+
+ protected abstract String getTargetPath();
+
+ /**
+ *
+ * @param project
+ * the project
+ * @param file
+ * the file to add
+ * @param fileDestinationPath
+ * the path where add the file
+ * @throws CoreException
+ * @throws IOException
+ */
+ protected void addFile(final IProject project, final URL url, final String fileDestinationPath) throws CoreException, IOException {
+ Assert.isNotNull(url);
+ Assert.isNotNull(fileDestinationPath);
+ Assert.isNotNull(project);
+
+ final IProjectEditor editor = new ProjectEditor(project);
+ editor.init();
+ editor.addFile(url, fileDestinationPath, true);
+ editor.save();
+
+ }
+}
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/AbstractChangeProjectVersionHandler.java b/plugins/developer/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/AbstractChangeProjectVersionHandler.java
index bc12f057e12..b55ad7cf452 100644
--- a/sandbox/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/AbstractChangeProjectVersionHandler.java
+++ b/plugins/developer/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/AbstractChangeProjectVersionHandler.java
@@ -1,118 +1,129 @@
-package org.eclipse.papyrus.dev.project.management.handlers;
-
-import org.eclipse.core.commands.AbstractHandler;
-import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.jface.dialogs.IInputValidator;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.window.Window;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.papyrus.dev.project.management.dialog.InputDialogWithCheckBox;
-import org.eclipse.swt.widgets.Display;
-
-
-public abstract class AbstractChangeProjectVersionHandler extends AbstractHandler {
-
- private static final String TITLE = "Enter the new version number for Papyrus plugin.";
-
- private static final String MESSAGE = "Enter the new version number.";
-
- private static final String INITIAL_VALUE = "0.0.0.qualifier";
-
- private static final String CHECKBOX_MESSAGE = "Only projects beginning with 'org.eclipse.papyrus.*'";
-
- private static final String WARNING_DIALOG_TITLE = "Change Version Name Report";
-
- private static final String WARNING_DIALOG_MESSAGE = "The following project were NOT managed : ";
-
- private static final String WARNING_DIALOG_MESSAGE2 = "Done.";
-
- private static final String PAPYRUS_NAME = "org.eclipse.papyrus";
-
-
- public Object execute(final ExecutionEvent event) throws ExecutionException {
-
- final IInputValidator validator = new IInputValidator() {
-
- public String isValid(final String newText) {
- final boolean match = newText.matches("[0-9]+\\.[0-9]+\\.[0-9]+\\.qualifier");
- if(!match) {
- return NLS.bind("The version number should be : something like this : {0}.", INITIAL_VALUE);
- }
- return null;
- }
- };
-
-
- final InputDialogWithCheckBox dialog = new InputDialogWithCheckBox(Display.getCurrent().getActiveShell(), TITLE, MESSAGE, INITIAL_VALUE, CHECKBOX_MESSAGE, true, validator);
- if(dialog.open() == Window.OK) {
- Job job = new Job("Update version numbers") {
-
- @Override
- protected IStatus run(IProgressMonitor monitor) {
- IStatus result = runAsJob(dialog.getValue(), dialog.isChecked(), monitor);
- return result;
- }
-
- };
- job.setUser(true);
-
- job.schedule();
- }
-
- return null;
- }
-
- protected IStatus runAsJob(final String newVersion, final boolean papyrusProjectsOnly, IProgressMonitor monitor) {
- String notManagedProjectNames = "";
- final IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
-
- monitor.beginTask("Update version numbers", projects.length);
-
- for(final IProject current : projects) {
- final String name = current.getName();
- if(papyrusProjectsOnly) {
- if(name.startsWith(PAPYRUS_NAME)) {//we test the project name
- setVersionNumber(current, newVersion, notManagedProjectNames);
- } else {
- notManagedProjectNames += NLS.bind("- {0} \n", current.getName());
- }
- } else {
- setVersionNumber(current, newVersion, notManagedProjectNames);
- }
-
- monitor.worked(1);
- }
-
- //FIXME: We're not in the UI Thread anymore. We can't open a Dialog.
- if(notManagedProjectNames.equals("")) {
- final MessageDialog informationDialog = new MessageDialog(Display.getCurrent().getActiveShell(), WARNING_DIALOG_TITLE, null, WARNING_DIALOG_MESSAGE2, MessageDialog.INFORMATION, new String[]{ "OK" }, 0);
- informationDialog.open();
- } else {
- final MessageDialog informationDialog = new MessageDialog(Display.getCurrent().getActiveShell(), WARNING_DIALOG_TITLE, null, WARNING_DIALOG_MESSAGE + "\n" + notManagedProjectNames, MessageDialog.INFORMATION, new String[]{ "OK" }, 0);
- informationDialog.open();
- }
-
- return Status.OK_STATUS;
- }
-
- /**
- *
- * @param project
- * the project to manage
- * @param newVersion
- * the new version for the project
- * @param notManagedProjectNames
- * a String used to build the message with the not managed projects
- */
- protected abstract void setVersionNumber(final IProject project, final String newVersion, String notManagedProjectNames);
-
-
-
-}
+package org.eclipse.papyrus.dev.project.management.handlers;
+
+import java.lang.reflect.InvocationTargetException;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.dialogs.IInputValidator;
+import org.eclipse.jface.window.Window;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.papyrus.dev.project.management.Activator;
+import org.eclipse.papyrus.dev.project.management.dialog.InputDialogWithCheckBox;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+import org.eclipse.ui.progress.IProgressService;
+import org.eclipse.ui.statushandlers.StatusManager;
+
+
+public abstract class AbstractChangeProjectVersionHandler extends AbstractHandler {
+
+ private static final String TITLE = "Enter the new version number for Papyrus plugin.";
+
+ private static final String MESSAGE = "Enter the new version number.";
+
+ private static final String INITIAL_VALUE = "0.0.0.qualifier";
+
+ private static final String CHECKBOX_MESSAGE = "Only projects beginning with 'org.eclipse.papyrus.*'";
+
+ private static final String WARNING_DIALOG_TITLE = "Change Version Name Report";
+
+ private static final String WARNING_DIALOG_MESSAGE = "The following project were NOT managed : ";
+
+ private static final String WARNING_DIALOG_MESSAGE2 = "Done.";
+
+ private static final String PAPYRUS_NAME = "org.eclipse.papyrus";
+
+
+ public Object execute(final ExecutionEvent event) throws ExecutionException {
+
+ final IInputValidator validator = new IInputValidator() {
+
+ public String isValid(final String newText) {
+ final boolean match = newText.matches("[0-9]+\\.[0-9]+\\.[0-9]+\\.qualifier");
+ if(!match) {
+ return NLS.bind("The version number should be : something like this : {0}.", INITIAL_VALUE);
+ }
+ return null;
+ }
+ };
+
+
+ final InputDialogWithCheckBox dialog = new InputDialogWithCheckBox(Display.getCurrent().getActiveShell(), TITLE, MESSAGE, INITIAL_VALUE, CHECKBOX_MESSAGE, true, validator);
+ if(dialog.open() == Window.OK) {
+ WorkspaceModifyOperation workspaceOperation = new WorkspaceModifyOperation(){
+ protected void execute(IProgressMonitor monitor) throws CoreException ,InvocationTargetException ,InterruptedException {
+ IStatus result = runAsJob(dialog.getValue(), dialog.isChecked(), monitor);
+ StatusManager.getManager().handle(result, StatusManager.SHOW);
+ }
+ };
+
+ try {
+ IProgressService service = PlatformUI.getWorkbench().getProgressService();
+ service.run(true, true, workspaceOperation);
+ } catch (InvocationTargetException e) {
+ Activator.log.error(e);
+ } catch (InterruptedException e) {
+ Activator.log.error(e);
+ }
+
+ }
+
+ return null;
+ }
+
+ protected IStatus runAsJob(final String newVersion, final boolean papyrusProjectsOnly, IProgressMonitor monitor) {
+ String notManagedProjectNames = "";
+ final IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
+
+ monitor.beginTask("Update version numbers", projects.length);
+
+ for(final IProject current : projects) {
+
+ if (monitor.isCanceled()){
+ return new Status(IStatus.CANCEL, Activator.PLUGIN_ID, "Operation canceled");
+ }
+
+ final String name = current.getName();
+ if(papyrusProjectsOnly) {
+ if(name.startsWith(PAPYRUS_NAME)) {//we test the project name
+ setVersionNumber(current, newVersion, notManagedProjectNames);
+ } else {
+ notManagedProjectNames += NLS.bind("- {0} \n", current.getName());
+ }
+ } else {
+ setVersionNumber(current, newVersion, notManagedProjectNames);
+ }
+
+ monitor.worked(1);
+ }
+
+ if ("".equals(notManagedProjectNames)){
+ return Status.OK_STATUS;
+ } else {
+ return new Status(IStatus.WARNING, Activator.PLUGIN_ID, WARNING_DIALOG_MESSAGE + "\n" + notManagedProjectNames);
+ }
+
+ }
+
+ /**
+ *
+ * @param project
+ * the project to manage
+ * @param newVersion
+ * the new version for the project
+ * @param notManagedProjectNames
+ * a String used to build the message with the not managed projects
+ */
+ protected abstract void setVersionNumber(final IProject project, final String newVersion, String notManagedProjectNames);
+
+
+
+}
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/features/AddFEPLFileHandler.java b/plugins/developer/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/features/AddFEPLFileHandler.java
index 40e2ee36717..8c90af90a31 100644
--- a/sandbox/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/features/AddFEPLFileHandler.java
+++ b/plugins/developer/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/features/AddFEPLFileHandler.java
@@ -1,48 +1,48 @@
-package org.eclipse.papyrus.dev.project.management.handlers.features;
-
-import java.net.MalformedURLException;
-import java.net.URL;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.papyrus.dev.project.management.Activator;
-import org.eclipse.papyrus.dev.project.management.handlers.AbstractAddFileHandler;
-import org.eclipse.papyrus.dev.project.management.utils.Utils;
-
-
-public class AddFEPLFileHandler extends AbstractAddFileHandler {
-
- public static final String EPL_HTML_SOURCE_PATH = "/resources/epl-v10.html.file"; //$NON-NLS-1$
-
- public static final String EPL_HTML_PATH = "epl-v10.html"; //$NON-NLS-1$
-
- @Override
- protected boolean isValidProject(IProject current) {
- try {
- return current.hasNature(Utils.FEATURE_NATURE);
- } catch (CoreException ex) {
- Activator.log.error(ex);
- }
- return false;
- }
-
- @Override
- protected URL getSourceURL() {
- try {
- return new URL("platform:/plugin/" + Activator.PLUGIN_ID + EPL_HTML_SOURCE_PATH); //$NON-NLS-1$
- } catch (MalformedURLException ex) {
- Activator.log.error(ex);
- }
- return null;
- }
-
- @Override
- protected String getTargetPath() {
- return EPL_HTML_PATH;
- }
-
- @Override
- protected String getJobName() {
- return "Add EPL file";
- }
-}
+package org.eclipse.papyrus.dev.project.management.handlers.features;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.papyrus.dev.project.management.Activator;
+import org.eclipse.papyrus.dev.project.management.handlers.AbstractAddFileHandler;
+import org.eclipse.papyrus.dev.project.management.utils.Utils;
+
+
+public class AddFEPLFileHandler extends AbstractAddFileHandler {
+
+ public static final String EPL_HTML_SOURCE_PATH = "/resources/epl-v10.html.file"; //$NON-NLS-1$
+
+ public static final String EPL_HTML_PATH = "epl-v10.html"; //$NON-NLS-1$
+
+ @Override
+ protected boolean isValidProject(IProject current) {
+ try {
+ return current.hasNature(Utils.FEATURE_NATURE);
+ } catch (CoreException ex) {
+ Activator.log.error(ex);
+ }
+ return false;
+ }
+
+ @Override
+ protected URL getSourceURL() {
+ try {
+ return new URL("platform:/plugin/" + Activator.PLUGIN_ID + EPL_HTML_SOURCE_PATH); //$NON-NLS-1$
+ } catch (MalformedURLException ex) {
+ Activator.log.error(ex);
+ }
+ return null;
+ }
+
+ @Override
+ protected String getTargetPath() {
+ return EPL_HTML_PATH;
+ }
+
+ @Override
+ protected String getJobName() {
+ return "Add EPL file";
+ }
+}
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/features/AddFeatureLicenseFileHandler.java b/plugins/developer/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/features/AddFeatureLicenseFileHandler.java
index 3fa6a7b5370..6969911a387 100644
--- a/sandbox/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/features/AddFeatureLicenseFileHandler.java
+++ b/plugins/developer/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/features/AddFeatureLicenseFileHandler.java
@@ -1,48 +1,48 @@
-package org.eclipse.papyrus.dev.project.management.handlers.features;
-
-import java.net.MalformedURLException;
-import java.net.URL;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.papyrus.dev.project.management.Activator;
-import org.eclipse.papyrus.dev.project.management.handlers.AbstractAddFileHandler;
-import org.eclipse.papyrus.dev.project.management.utils.Utils;
-
-
-public class AddFeatureLicenseFileHandler extends AbstractAddFileHandler {
-
- public static final String LICENSE_HTML_SOURCE_PATH = "/resources/license.html.file"; //$NON-NLS-1$
-
- public static final String LICENSE_HTML_PATH = "license.html"; //$NON-NLS-1$
-
- @Override
- protected boolean isValidProject(IProject current) {
- try {
- return current.hasNature(Utils.FEATURE_NATURE);
- } catch (CoreException ex) {
- Activator.log.error(ex);
- }
- return false;
- }
-
- @Override
- protected URL getSourceURL() {
- try {
- return new URL("platform:/plugin/" + Activator.PLUGIN_ID + LICENSE_HTML_SOURCE_PATH);
- } catch (MalformedURLException ex) {
- Activator.log.error(ex);
- }
- return null;
- }
-
- @Override
- protected String getTargetPath() {
- return LICENSE_HTML_PATH;
- }
-
- @Override
- protected String getJobName() {
- return "Add about.html file";
- }
-}
+package org.eclipse.papyrus.dev.project.management.handlers.features;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.papyrus.dev.project.management.Activator;
+import org.eclipse.papyrus.dev.project.management.handlers.AbstractAddFileHandler;
+import org.eclipse.papyrus.dev.project.management.utils.Utils;
+
+
+public class AddFeatureLicenseFileHandler extends AbstractAddFileHandler {
+
+ public static final String LICENSE_HTML_SOURCE_PATH = "/resources/license.html.file"; //$NON-NLS-1$
+
+ public static final String LICENSE_HTML_PATH = "license.html"; //$NON-NLS-1$
+
+ @Override
+ protected boolean isValidProject(IProject current) {
+ try {
+ return current.hasNature(Utils.FEATURE_NATURE);
+ } catch (CoreException ex) {
+ Activator.log.error(ex);
+ }
+ return false;
+ }
+
+ @Override
+ protected URL getSourceURL() {
+ try {
+ return new URL("platform:/plugin/" + Activator.PLUGIN_ID + LICENSE_HTML_SOURCE_PATH);
+ } catch (MalformedURLException ex) {
+ Activator.log.error(ex);
+ }
+ return null;
+ }
+
+ @Override
+ protected String getTargetPath() {
+ return LICENSE_HTML_PATH;
+ }
+
+ @Override
+ protected String getJobName() {
+ return "Add about.html file";
+ }
+}
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/features/ChangeFeatureVersionHandler.java b/plugins/developer/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/features/ChangeFeatureVersionHandler.java
index 53859bd631a..2ff35d0a709 100644
--- a/sandbox/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/features/ChangeFeatureVersionHandler.java
+++ b/plugins/developer/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/features/ChangeFeatureVersionHandler.java
@@ -1,56 +1,56 @@
-package org.eclipse.papyrus.dev.project.management.handlers.features;
-
-import java.io.IOException;
-
-import javax.xml.parsers.ParserConfigurationException;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.papyrus.dev.project.management.Activator;
-import org.eclipse.papyrus.dev.project.management.handlers.AbstractChangeProjectVersionHandler;
-import org.eclipse.papyrus.dev.project.management.utils.Utils;
-import org.eclipse.papyrus.eclipse.project.editors.interfaces.IFeatureProjectEditor;
-import org.eclipse.papyrus.eclipse.project.editors.project.FeatureProjectEditor;
-import org.xml.sax.SAXException;
-
-
-public class ChangeFeatureVersionHandler extends AbstractChangeProjectVersionHandler {
-
-
- @Override
- protected void setVersionNumber(final IProject project, final String newVersion, String notManagedProjectNames) {
- if(project.isOpen()) {
- try {
- if(project.hasNature(Utils.FEATURE_NATURE)) {//for features
- try {
- final IFeatureProjectEditor editor = new FeatureProjectEditor(project);
- editor.init();
- editor.setVersion(newVersion);
- editor.save();
- } catch (final ParserConfigurationException e) {
- Activator.log.error(e);
- notManagedProjectNames += NLS.bind("- {0} \n", project.getName());
- } catch (final SAXException e) {
- Activator.log.error(e);
- notManagedProjectNames += NLS.bind("- {0} \n", project.getName());
- } catch (final IOException e) {
- Activator.log.error(e);
- notManagedProjectNames += NLS.bind("- {0} \n", project.getName());
- } catch (final Throwable e) {
- Activator.log.error(e);
- notManagedProjectNames += NLS.bind("- {0} \n", project.getName());
- }
-
- } else {
- notManagedProjectNames += NLS.bind("- {0} \n", project.getName());
- }
- } catch (final CoreException e) {
- Activator.log.error(e);
- }
- } else {
- notManagedProjectNames += NLS.bind("- {0} \n", project.getName());
- }
- }
-
-}
+package org.eclipse.papyrus.dev.project.management.handlers.features;
+
+import java.io.IOException;
+
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.papyrus.dev.project.management.Activator;
+import org.eclipse.papyrus.dev.project.management.handlers.AbstractChangeProjectVersionHandler;
+import org.eclipse.papyrus.dev.project.management.utils.Utils;
+import org.eclipse.papyrus.eclipse.project.editors.interfaces.IFeatureProjectEditor;
+import org.eclipse.papyrus.eclipse.project.editors.project.FeatureProjectEditor;
+import org.xml.sax.SAXException;
+
+
+public class ChangeFeatureVersionHandler extends AbstractChangeProjectVersionHandler {
+
+
+ @Override
+ protected void setVersionNumber(final IProject project, final String newVersion, String notManagedProjectNames) {
+ if(project.isOpen()) {
+ try {
+ if(project.hasNature(Utils.FEATURE_NATURE)) {//for features
+ try {
+ final IFeatureProjectEditor editor = new FeatureProjectEditor(project);
+ editor.init();
+ editor.setVersion(newVersion);
+ editor.save();
+ } catch (final ParserConfigurationException e) {
+ Activator.log.error(e);
+ notManagedProjectNames += NLS.bind("- {0} \n", project.getName());
+ } catch (final SAXException e) {
+ Activator.log.error(e);
+ notManagedProjectNames += NLS.bind("- {0} \n", project.getName());
+ } catch (final IOException e) {
+ Activator.log.error(e);
+ notManagedProjectNames += NLS.bind("- {0} \n", project.getName());
+ } catch (final Throwable e) {
+ Activator.log.error(e);
+ notManagedProjectNames += NLS.bind("- {0} \n", project.getName());
+ }
+
+ } else {
+ notManagedProjectNames += NLS.bind("- {0} \n", project.getName());
+ }
+ } catch (final CoreException e) {
+ Activator.log.error(e);
+ }
+ } else {
+ notManagedProjectNames += NLS.bind("- {0} \n", project.getName());
+ }
+ }
+
+}
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/features/SetCopyrightNoticeHandler.java b/plugins/developer/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/features/SetCopyrightNoticeHandler.java
index 830cd9924b5..2b6947eac76 100644
--- a/sandbox/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/features/SetCopyrightNoticeHandler.java
+++ b/plugins/developer/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/features/SetCopyrightNoticeHandler.java
@@ -1,94 +1,94 @@
-/*****************************************************************************
- * Copyright (c) 2012 CEA LIST.
- *
- *
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Vincent Lorenzo (CEA LIST) Vincent.Lorenzo@cea.fr - Initial API and implementation
- *
- *****************************************************************************/
-package org.eclipse.papyrus.dev.project.management.handlers.features;
-
-import java.util.List;
-
-import org.eclipse.core.commands.AbstractHandler;
-import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.jface.window.Window;
-import org.eclipse.papyrus.dev.project.management.Activator;
-import org.eclipse.papyrus.dev.project.management.dialog.TwoInputDialog;
-import org.eclipse.papyrus.dev.project.management.utils.Utils;
-import org.eclipse.papyrus.eclipse.project.editors.interfaces.IFeatureProjectEditor;
-import org.eclipse.papyrus.eclipse.project.editors.project.FeatureProjectEditor;
-import org.eclipse.swt.widgets.Display;
-
-/**
- *
- * set the Copyright and the URL only if it not yet set.
- *
- */
-public class SetCopyrightNoticeHandler extends AbstractHandler {
-
- final static String OPTIONAL_URL = "url";
-
- final static String TEXT = "text";
-
- public Object execute(final ExecutionEvent event) throws ExecutionException {
- Utils.getSelectedOpenProject();
- final TwoInputDialog dialog = new TwoInputDialog(Display.getDefault().getActiveShell(), "Set Copyright Notice", "Licence url", "text", OPTIONAL_URL, TEXT, null);
- if(dialog.open() == Window.OK) {
- final String newVersion = dialog.getValue();
- final List<IProject> featureProjects = Utils.getOpenedFeatureProject();
- for(final IProject current : featureProjects) {
- try {
- setCopyrightNotice(current, dialog.getValue(), dialog.getValue_2());
- } catch (final Throwable e) {
- Activator.log.error(e);
- }
- }
- }
- return null;
- }
-
- /**
- *
- * @param featureProject
- * @param url
- * @param text
- * @throws Throwable
- *
- * TODO : doesn't erase existing value!
- * TODO : add a checkbox in the dialog to erase existing value
- */
- protected void setCopyrightNotice(final IProject featureProject, final String url, final String text) throws Throwable {
- final IFeatureProjectEditor editor = new FeatureProjectEditor(featureProject);
- editor.init();
- final String copyrirghtText = editor.getCopyrightText();
- final String copyrightURL = editor.getCopyrightURL();
- String settedURL = null;
- String settedText = null;
- //TODO improve these tests
- if((copyrightURL == null) || copyrightURL.equals("")) {
- settedURL = url;
- } else {
- settedURL = copyrightURL;
- }
-
- if((copyrirghtText == null) || copyrirghtText.equals("")) {
- settedText = text;
- }
- if(settedText.equals(copyrirghtText) && settedURL.equals(copyrightURL)) {
- //do nothing
- } else {
- editor.setCopyright(settedURL, settedText);
- editor.save();
- }
-
- }
-
-}
+/*****************************************************************************
+ * Copyright (c) 2012 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Vincent Lorenzo (CEA LIST) Vincent.Lorenzo@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.dev.project.management.handlers.features;
+
+import java.util.List;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.jface.window.Window;
+import org.eclipse.papyrus.dev.project.management.Activator;
+import org.eclipse.papyrus.dev.project.management.dialog.TwoInputDialog;
+import org.eclipse.papyrus.dev.project.management.utils.Utils;
+import org.eclipse.papyrus.eclipse.project.editors.interfaces.IFeatureProjectEditor;
+import org.eclipse.papyrus.eclipse.project.editors.project.FeatureProjectEditor;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ *
+ * set the Copyright and the URL only if it not yet set.
+ *
+ */
+public class SetCopyrightNoticeHandler extends AbstractHandler {
+
+ final static String OPTIONAL_URL = "url";
+
+ final static String TEXT = "text";
+
+ public Object execute(final ExecutionEvent event) throws ExecutionException {
+ Utils.getSelectedOpenProject();
+ final TwoInputDialog dialog = new TwoInputDialog(Display.getDefault().getActiveShell(), "Set Copyright Notice", "Licence url", "text", OPTIONAL_URL, TEXT, null);
+ if(dialog.open() == Window.OK) {
+ final String newVersion = dialog.getValue();
+ final List<IProject> featureProjects = Utils.getOpenedFeatureProject();
+ for(final IProject current : featureProjects) {
+ try {
+ setCopyrightNotice(current, dialog.getValue(), dialog.getValue_2());
+ } catch (final Throwable e) {
+ Activator.log.error(e);
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
+ *
+ * @param featureProject
+ * @param url
+ * @param text
+ * @throws Throwable
+ *
+ * TODO : doesn't erase existing value!
+ * TODO : add a checkbox in the dialog to erase existing value
+ */
+ protected void setCopyrightNotice(final IProject featureProject, final String url, final String text) throws Throwable {
+ final IFeatureProjectEditor editor = new FeatureProjectEditor(featureProject);
+ editor.init();
+ final String copyrirghtText = editor.getCopyrightText();
+ final String copyrightURL = editor.getCopyrightURL();
+ String settedURL = null;
+ String settedText = null;
+ //TODO improve these tests
+ if((copyrightURL == null) || copyrightURL.equals("")) {
+ settedURL = url;
+ } else {
+ settedURL = copyrightURL;
+ }
+
+ if((copyrirghtText == null) || copyrirghtText.equals("")) {
+ settedText = text;
+ }
+ if(settedText.equals(copyrirghtText) && settedURL.equals(copyrightURL)) {
+ //do nothing
+ } else {
+ editor.setCopyright(settedURL, settedText);
+ editor.save();
+ }
+
+ }
+
+}
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/plugins/AddProjectAboutFileHandler.java b/plugins/developer/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/plugins/AddProjectAboutFileHandler.java
index efe516e0786..f452cff2fc5 100644
--- a/sandbox/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/plugins/AddProjectAboutFileHandler.java
+++ b/plugins/developer/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/plugins/AddProjectAboutFileHandler.java
@@ -1,48 +1,48 @@
-package org.eclipse.papyrus.dev.project.management.handlers.plugins;
-
-import java.net.MalformedURLException;
-import java.net.URL;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.papyrus.dev.project.management.Activator;
-import org.eclipse.papyrus.dev.project.management.handlers.AbstractAddFileHandler;
-import org.eclipse.papyrus.dev.project.management.utils.Utils;
-
-//TODO should be covered with JUnit test
-public class AddProjectAboutFileHandler extends AbstractAddFileHandler {
-
- public static final String ABOUT_HTML_SOURCE_PATH = "/resources/about.html.file"; //$NON-NLS-1$
-
- public static final String ABOUT_HTML_PATH = "about.html"; //$NON-NLS-1$
-
- @Override
- protected boolean isValidProject(IProject current) {
- try {
- return current.hasNature(Utils.PLUGIN_NATURE);
- } catch (CoreException ex) {
- Activator.log.error(ex);
- }
- return false;
- }
-
- @Override
- protected URL getSourceURL() {
- try {
- return new URL("platform:/plugin/" + Activator.PLUGIN_ID + ABOUT_HTML_SOURCE_PATH);
- } catch (MalformedURLException ex) {
- Activator.log.error(ex);
- }
- return null;
- }
-
- @Override
- protected String getTargetPath() {
- return ABOUT_HTML_PATH;
- }
-
- @Override
- protected String getJobName() {
- return "Add about.html file";
- }
-}
+package org.eclipse.papyrus.dev.project.management.handlers.plugins;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.papyrus.dev.project.management.Activator;
+import org.eclipse.papyrus.dev.project.management.handlers.AbstractAddFileHandler;
+import org.eclipse.papyrus.dev.project.management.utils.Utils;
+
+//TODO should be covered with JUnit test
+public class AddProjectAboutFileHandler extends AbstractAddFileHandler {
+
+ public static final String ABOUT_HTML_SOURCE_PATH = "/resources/about.html.file"; //$NON-NLS-1$
+
+ public static final String ABOUT_HTML_PATH = "about.html"; //$NON-NLS-1$
+
+ @Override
+ protected boolean isValidProject(IProject current) {
+ try {
+ return current.hasNature(Utils.PLUGIN_NATURE);
+ } catch (CoreException ex) {
+ Activator.log.error(ex);
+ }
+ return false;
+ }
+
+ @Override
+ protected URL getSourceURL() {
+ try {
+ return new URL("platform:/plugin/" + Activator.PLUGIN_ID + ABOUT_HTML_SOURCE_PATH);
+ } catch (MalformedURLException ex) {
+ Activator.log.error(ex);
+ }
+ return null;
+ }
+
+ @Override
+ protected String getTargetPath() {
+ return ABOUT_HTML_PATH;
+ }
+
+ @Override
+ protected String getJobName() {
+ return "Add about.html file";
+ }
+}
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/plugins/ChangeDependencyVersionNumberHandler.java b/plugins/developer/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/plugins/ChangeDependencyVersionNumberHandler.java
index 118269c028e..db0f336f7db 100644
--- a/sandbox/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/plugins/ChangeDependencyVersionNumberHandler.java
+++ b/plugins/developer/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/plugins/ChangeDependencyVersionNumberHandler.java
@@ -1,171 +1,171 @@
-package org.eclipse.papyrus.dev.project.management.handlers.plugins;
-
-import java.io.IOException;
-import java.lang.reflect.InvocationTargetException;
-import java.util.concurrent.atomic.AtomicReference;
-
-import org.eclipse.core.commands.AbstractHandler;
-import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.jface.dialogs.IInputValidator;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.window.Window;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.papyrus.dev.project.management.Activator;
-import org.eclipse.papyrus.dev.project.management.dialog.TwoInputDialog;
-import org.eclipse.papyrus.dev.project.management.utils.Utils;
-import org.eclipse.papyrus.eclipse.project.editors.file.ManifestEditor;
-import org.eclipse.papyrus.eclipse.project.editors.interfaces.IManifestEditor;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.ui.actions.WorkspaceModifyOperation;
-
-//TODO should be covered with JUnit test
-public class ChangeDependencyVersionNumberHandler extends AbstractHandler {
-
- private static final String TITLE = "Enter the new version number for Papyrus plugin.";
-
-
- private static final String INITIAL_VALUE = "0.0.0";
-
- private static final String WARNING_DIALOG_TITLE = "Change Version Name Report";
-
- private static final String WARNING_DIALOG_MESSAGE = "The following project were NOT managed : ";
-
- private static final String WARNING_DIALOG_MESSAGE2 = "Done.";
-
- private static final String PAPYRUS_NAME = "org.eclipse.papyrus";
-
- public Object execute(final ExecutionEvent event) throws ExecutionException {
-
- final IInputValidator validator = new IInputValidator() {
-
- public String isValid(final String newText) {
- final boolean match = newText.matches("[0-9]+\\.[0-9]+\\.[0-9]");
- if(!match) {
- return NLS.bind("The version number should be : something like this : {0}.", INITIAL_VALUE);
- }
- return null;
- }
- };
- final TwoInputDialog dialog = new TwoInputDialog(Display.getCurrent().getActiveShell(), TITLE, "Enter the new version for the Papyrus dependencies", "pattern plugin name", INITIAL_VALUE, PAPYRUS_NAME, validator);
-
- if(dialog.open() == Window.OK) {
- final String newVersion = dialog.getValue();
- final String pattern = dialog.getValue_2();
-
- Job job = new Job("Update dependency versions") {
-
- @Override
- protected IStatus run(IProgressMonitor monitor) {
-
- final AtomicReference<IStatus> result = new AtomicReference<IStatus>();
-
- WorkspaceModifyOperation operation = new WorkspaceModifyOperation() {
-
- @Override
- protected void execute(IProgressMonitor monitor) throws CoreException, InvocationTargetException, InterruptedException {
- result.set(runAsJob(newVersion, pattern, monitor));
- }
-
- };
-
- try {
- operation.run(monitor);
- } catch (InvocationTargetException e) {
- return new Status(IStatus.ERROR, Activator.PLUGIN_ID, e.getMessage());
- } catch (InterruptedException e) {
- return new Status(IStatus.ERROR, Activator.PLUGIN_ID, e.getMessage());
- }
-
- return result.get();
- }
-
- };
- job.setUser(true);
- job.schedule();
- }
- return null;
- }
-
- protected IStatus runAsJob(final String newVersion, final String pattern, IProgressMonitor monitor) {
- String notManagedProjectNames = "";
-
- final IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
-
- monitor.beginTask("Update dependency versions", projects.length);
-
- for(final IProject current : projects) {
- final String name = current.getName();
-
- if(name.startsWith(PAPYRUS_NAME)) {//TODO : add the possibility to manage other plugins
- setVersionNumber(current, pattern, newVersion, notManagedProjectNames);
- } else {
- notManagedProjectNames += NLS.bind("- {0} \n", current.getName());
- }
-
- monitor.worked(1);
- }
-
-
- final String textResult = notManagedProjectNames;
- Display.getDefault().asyncExec(new Runnable() {
-
- public void run() {
- if(textResult.equals("")) {
- final MessageDialog informationDialog = new MessageDialog(Display.getCurrent().getActiveShell(), WARNING_DIALOG_TITLE, null, WARNING_DIALOG_MESSAGE2, MessageDialog.INFORMATION, new String[]{ "OK" }, 0);
- informationDialog.open();
- } else {
- final MessageDialog informationDialog = new MessageDialog(Display.getCurrent().getActiveShell(), WARNING_DIALOG_TITLE, null, WARNING_DIALOG_MESSAGE + "\n" + textResult, MessageDialog.INFORMATION, new String[]{ "OK" }, 0);
- informationDialog.open();
- }
- }
- });
-
- return Status.OK_STATUS;
- }
-
- /**
- *
- * @param project
- * the project to manage
- * @param dependencyPattern
- * the pattern used to find the dependency to update
- * @param newVersion
- * the new version for the project
- * @param notManagedProjectNames
- * a String used to build the message with the not managed projects
- */
- private void setVersionNumber(final IProject project, final String dependencyPattern, final String newValue, String notManagedProjectNames) {
- if(project.isOpen()) {
- try {
- final boolean pluginnature = project.hasNature(Utils.PLUGIN_NATURE);
- if(pluginnature) {
- try {
- final IManifestEditor editor = new ManifestEditor(project);
- editor.init();
- editor.setDependenciesVersion(dependencyPattern, newValue);
- editor.save();
- } catch (final IOException e) {
- Activator.log.error(e);
- notManagedProjectNames += NLS.bind("- {0} \n", project.getName());
- } catch (final Throwable e) {
- Activator.log.error(e);
- notManagedProjectNames += NLS.bind("- {0} \n", project.getName());
- }
-
- }
- } catch (final CoreException e) {
- Activator.log.error(e);
- }
- } else {
- notManagedProjectNames += NLS.bind("- {0} \n", project.getName());
- }
- }
-}
+package org.eclipse.papyrus.dev.project.management.handlers.plugins;
+
+import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.util.concurrent.atomic.AtomicReference;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jface.dialogs.IInputValidator;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.window.Window;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.papyrus.dev.project.management.Activator;
+import org.eclipse.papyrus.dev.project.management.dialog.TwoInputDialog;
+import org.eclipse.papyrus.dev.project.management.utils.Utils;
+import org.eclipse.papyrus.eclipse.project.editors.file.ManifestEditor;
+import org.eclipse.papyrus.eclipse.project.editors.interfaces.IManifestEditor;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+
+//TODO should be covered with JUnit test
+public class ChangeDependencyVersionNumberHandler extends AbstractHandler {
+
+ private static final String TITLE = "Enter the new version number for Papyrus plugin.";
+
+
+ private static final String INITIAL_VALUE = "0.0.0";
+
+ private static final String WARNING_DIALOG_TITLE = "Change Version Name Report";
+
+ private static final String WARNING_DIALOG_MESSAGE = "The following project were NOT managed : ";
+
+ private static final String WARNING_DIALOG_MESSAGE2 = "Done.";
+
+ private static final String PAPYRUS_NAME = "org.eclipse.papyrus";
+
+ public Object execute(final ExecutionEvent event) throws ExecutionException {
+
+ final IInputValidator validator = new IInputValidator() {
+
+ public String isValid(final String newText) {
+ final boolean match = newText.matches("[0-9]+\\.[0-9]+\\.[0-9]");
+ if(!match) {
+ return NLS.bind("The version number should be : something like this : {0}.", INITIAL_VALUE);
+ }
+ return null;
+ }
+ };
+ final TwoInputDialog dialog = new TwoInputDialog(Display.getCurrent().getActiveShell(), TITLE, "Enter the new version for the Papyrus dependencies", "pattern plugin name", INITIAL_VALUE, PAPYRUS_NAME, validator);
+
+ if(dialog.open() == Window.OK) {
+ final String newVersion = dialog.getValue();
+ final String pattern = dialog.getValue_2();
+
+ Job job = new Job("Update dependency versions") {
+
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+
+ final AtomicReference<IStatus> result = new AtomicReference<IStatus>();
+
+ WorkspaceModifyOperation operation = new WorkspaceModifyOperation() {
+
+ @Override
+ protected void execute(IProgressMonitor monitor) throws CoreException, InvocationTargetException, InterruptedException {
+ result.set(runAsJob(newVersion, pattern, monitor));
+ }
+
+ };
+
+ try {
+ operation.run(monitor);
+ } catch (InvocationTargetException e) {
+ return new Status(IStatus.ERROR, Activator.PLUGIN_ID, e.getMessage());
+ } catch (InterruptedException e) {
+ return new Status(IStatus.ERROR, Activator.PLUGIN_ID, e.getMessage());
+ }
+
+ return result.get();
+ }
+
+ };
+ job.setUser(true);
+ job.schedule();
+ }
+ return null;
+ }
+
+ protected IStatus runAsJob(final String newVersion, final String pattern, IProgressMonitor monitor) {
+ String notManagedProjectNames = "";
+
+ final IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
+
+ monitor.beginTask("Update dependency versions", projects.length);
+
+ for(final IProject current : projects) {
+ final String name = current.getName();
+
+ if(name.startsWith(PAPYRUS_NAME)) {//TODO : add the possibility to manage other plugins
+ setVersionNumber(current, pattern, newVersion, notManagedProjectNames);
+ } else {
+ notManagedProjectNames += NLS.bind("- {0} \n", current.getName());
+ }
+
+ monitor.worked(1);
+ }
+
+
+ final String textResult = notManagedProjectNames;
+ Display.getDefault().asyncExec(new Runnable() {
+
+ public void run() {
+ if(textResult.equals("")) {
+ final MessageDialog informationDialog = new MessageDialog(Display.getCurrent().getActiveShell(), WARNING_DIALOG_TITLE, null, WARNING_DIALOG_MESSAGE2, MessageDialog.INFORMATION, new String[]{ "OK" }, 0);
+ informationDialog.open();
+ } else {
+ final MessageDialog informationDialog = new MessageDialog(Display.getCurrent().getActiveShell(), WARNING_DIALOG_TITLE, null, WARNING_DIALOG_MESSAGE + "\n" + textResult, MessageDialog.INFORMATION, new String[]{ "OK" }, 0);
+ informationDialog.open();
+ }
+ }
+ });
+
+ return Status.OK_STATUS;
+ }
+
+ /**
+ *
+ * @param project
+ * the project to manage
+ * @param dependencyPattern
+ * the pattern used to find the dependency to update
+ * @param newVersion
+ * the new version for the project
+ * @param notManagedProjectNames
+ * a String used to build the message with the not managed projects
+ */
+ private void setVersionNumber(final IProject project, final String dependencyPattern, final String newValue, String notManagedProjectNames) {
+ if(project.isOpen()) {
+ try {
+ final boolean pluginnature = project.hasNature(Utils.PLUGIN_NATURE);
+ if(pluginnature) {
+ try {
+ final IManifestEditor editor = new ManifestEditor(project);
+ editor.init();
+ editor.setDependenciesVersion(dependencyPattern, newValue);
+ editor.save();
+ } catch (final IOException e) {
+ Activator.log.error(e);
+ notManagedProjectNames += NLS.bind("- {0} \n", project.getName());
+ } catch (final Throwable e) {
+ Activator.log.error(e);
+ notManagedProjectNames += NLS.bind("- {0} \n", project.getName());
+ }
+
+ }
+ } catch (final CoreException e) {
+ Activator.log.error(e);
+ }
+ } else {
+ notManagedProjectNames += NLS.bind("- {0} \n", project.getName());
+ }
+ }
+}
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/plugins/ChangePluginVersionHandler.java b/plugins/developer/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/plugins/ChangePluginVersionHandler.java
index 5fc8f950bbf..68ff928fedd 100644
--- a/sandbox/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/plugins/ChangePluginVersionHandler.java
+++ b/plugins/developer/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/handlers/plugins/ChangePluginVersionHandler.java
@@ -1,47 +1,47 @@
-package org.eclipse.papyrus.dev.project.management.handlers.plugins;
-
-import java.io.IOException;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.papyrus.dev.project.management.Activator;
-import org.eclipse.papyrus.dev.project.management.handlers.AbstractChangeProjectVersionHandler;
-import org.eclipse.papyrus.dev.project.management.utils.Utils;
-import org.eclipse.papyrus.eclipse.project.editors.file.ManifestEditor;
-import org.eclipse.papyrus.eclipse.project.editors.interfaces.IManifestEditor;
-
-
-public class ChangePluginVersionHandler extends AbstractChangeProjectVersionHandler {
-
-
- @Override
- protected void setVersionNumber(final IProject project, final String newVersion, String notManagedProjectNames) {
- if(project.isOpen()) {
- try {
- if(project.hasNature(Utils.PLUGIN_NATURE)) {
- try {
- final IManifestEditor editor = new ManifestEditor(project);
- editor.init();
- editor.setBundleVersion(newVersion);
- editor.save();
- } catch (final IOException e) {
- Activator.log.error(e);
- notManagedProjectNames += NLS.bind("- {0} \n", project.getName());
- } catch (final Throwable e) {
- Activator.log.error(e);
- notManagedProjectNames += NLS.bind("- {0} \n", project.getName());
- }
-
- } else {
- notManagedProjectNames += NLS.bind("- {0} \n", project.getName());
- }
- } catch (final CoreException e) {
- Activator.log.error(e);
- }
- } else {
- notManagedProjectNames += NLS.bind("- {0} \n", project.getName());
- }
- }
-
-}
+package org.eclipse.papyrus.dev.project.management.handlers.plugins;
+
+import java.io.IOException;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.papyrus.dev.project.management.Activator;
+import org.eclipse.papyrus.dev.project.management.handlers.AbstractChangeProjectVersionHandler;
+import org.eclipse.papyrus.dev.project.management.utils.Utils;
+import org.eclipse.papyrus.eclipse.project.editors.file.ManifestEditor;
+import org.eclipse.papyrus.eclipse.project.editors.interfaces.IManifestEditor;
+
+
+public class ChangePluginVersionHandler extends AbstractChangeProjectVersionHandler {
+
+
+ @Override
+ protected void setVersionNumber(final IProject project, final String newVersion, String notManagedProjectNames) {
+ if(project.isOpen()) {
+ try {
+ if(project.hasNature(Utils.PLUGIN_NATURE)) {
+ try {
+ final IManifestEditor editor = new ManifestEditor(project);
+ editor.init();
+ editor.setBundleVersion(newVersion);
+ editor.save();
+ } catch (final IOException e) {
+ Activator.log.error(e);
+ notManagedProjectNames += NLS.bind("- {0} \n", project.getName());
+ } catch (final Throwable e) {
+ Activator.log.error(e);
+ notManagedProjectNames += NLS.bind("- {0} \n", project.getName());
+ }
+
+ } else {
+ notManagedProjectNames += NLS.bind("- {0} \n", project.getName());
+ }
+ } catch (final CoreException e) {
+ Activator.log.error(e);
+ }
+ } else {
+ notManagedProjectNames += NLS.bind("- {0} \n", project.getName());
+ }
+ }
+
+}
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/utils/Utils.java b/plugins/developer/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/utils/Utils.java
index 4d97dc41a23..5419f815b20 100644
--- a/sandbox/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/utils/Utils.java
+++ b/plugins/developer/org.eclipse.papyrus.dev.project.management/src/org/eclipse/papyrus/dev/project/management/utils/Utils.java
@@ -1,71 +1,71 @@
-package org.eclipse.papyrus.dev.project.management.utils;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.papyrus.dev.project.management.Activator;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.internal.WorkingSet;
-
-
-public class Utils {
-
- private Utils() {
- //to prevent instanciation
- }
-
- public static final String FEATURE_NATURE = "org.eclipse.pde.FeatureNature";
-
- public static final String PLUGIN_NATURE = "org.eclipse.pde.PluginNature";
-
- /**
- *
- * @return
- * the list of opened feature project
- */
- public static List<IProject> getOpenedFeatureProject() {
- final List<IProject> featureProject = new ArrayList<IProject>();
- final IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
- for(final IProject current : projects) {
- try {
- if(current.isOpen() && current.hasNature(FEATURE_NATURE)) {
- featureProject.add(current);
- }
- } catch (final CoreException e) {
- Activator.log.error(e);
- }
- }
- return featureProject;
- }
-
- public static Collection<IProject> getSelectedOpenProject() {
- final Set<IProject> selectedProject = new HashSet<IProject>();
- final ISelection selection = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getSelectionService().getSelection();
- Assert.isTrue(selection instanceof IStructuredSelection);
- final Iterator<?> iter = ((IStructuredSelection)selection).iterator();
- while(iter.hasNext()) {
- final Object current = iter.next();
- if((current instanceof IProject) && ((IProject)current).isOpen()) {
- selectedProject.add((IProject)current);
- } else if(current instanceof WorkingSet) {
- for(final IAdaptable curr : ((WorkingSet)current).getElements()) {
- if((curr instanceof IProject) && ((IProject)curr).isOpen()) {
- selectedProject.add((IProject)curr);
- }
- }
- }
- }
- return selectedProject;
- }
-}
+package org.eclipse.papyrus.dev.project.management.utils;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.papyrus.dev.project.management.Activator;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.internal.WorkingSet;
+
+
+public class Utils {
+
+ private Utils() {
+ //to prevent instanciation
+ }
+
+ public static final String FEATURE_NATURE = "org.eclipse.pde.FeatureNature";
+
+ public static final String PLUGIN_NATURE = "org.eclipse.pde.PluginNature";
+
+ /**
+ *
+ * @return
+ * the list of opened feature project
+ */
+ public static List<IProject> getOpenedFeatureProject() {
+ final List<IProject> featureProject = new ArrayList<IProject>();
+ final IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
+ for(final IProject current : projects) {
+ try {
+ if(current.isOpen() && current.hasNature(FEATURE_NATURE)) {
+ featureProject.add(current);
+ }
+ } catch (final CoreException e) {
+ Activator.log.error(e);
+ }
+ }
+ return featureProject;
+ }
+
+ public static Collection<IProject> getSelectedOpenProject() {
+ final Set<IProject> selectedProject = new HashSet<IProject>();
+ final ISelection selection = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getSelectionService().getSelection();
+ Assert.isTrue(selection instanceof IStructuredSelection);
+ final Iterator<?> iter = ((IStructuredSelection)selection).iterator();
+ while(iter.hasNext()) {
+ final Object current = iter.next();
+ if((current instanceof IProject) && ((IProject)current).isOpen()) {
+ selectedProject.add((IProject)current);
+ } else if(current instanceof WorkingSet) {
+ for(final IAdaptable curr : ((WorkingSet)current).getElements()) {
+ if((curr instanceof IProject) && ((IProject)curr).isOpen()) {
+ selectedProject.add((IProject)curr);
+ }
+ }
+ }
+ }
+ return selectedProject;
+ }
+}
diff --git a/sandbox/org.eclipse.papyrus.emf.commandstack/.classpath b/plugins/developer/org.eclipse.papyrus.emf.commandstack/.classpath
index 2d1a4302f04..64c5e31b7a2 100644
--- a/sandbox/org.eclipse.papyrus.emf.commandstack/.classpath
+++ b/plugins/developer/org.eclipse.papyrus.emf.commandstack/.classpath
@@ -1,7 +1,7 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
- <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
- <classpathentry kind="src" path="src"/>
- <classpathentry kind="output" path="bin"/>
-</classpath>
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/sandbox/org.eclipse.papyrus.emf.commandstack/.project b/plugins/developer/org.eclipse.papyrus.emf.commandstack/.project
index 8e14462e9d4..d305eea197c 100644
--- a/sandbox/org.eclipse.papyrus.emf.commandstack/.project
+++ b/plugins/developer/org.eclipse.papyrus.emf.commandstack/.project
@@ -1,28 +1,28 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
- <name>org.eclipse.papyrus.emf.commandstack</name>
- <comment></comment>
- <projects>
- </projects>
- <buildSpec>
- <buildCommand>
- <name>org.eclipse.jdt.core.javabuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.ManifestBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.SchemaBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- </buildSpec>
- <natures>
- <nature>org.eclipse.pde.PluginNature</nature>
- <nature>org.eclipse.jdt.core.javanature</nature>
- </natures>
-</projectDescription>
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.papyrus.infra.emf.commandstack</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/sandbox/org.eclipse.papyrus.emf.commandstack/.settings/org.eclipse.jdt.core.prefs b/plugins/developer/org.eclipse.papyrus.emf.commandstack/.settings/org.eclipse.jdt.core.prefs
index f4085e3b57a..b2cf4145e6c 100644
--- a/sandbox/org.eclipse.papyrus.emf.commandstack/.settings/org.eclipse.jdt.core.prefs
+++ b/plugins/developer/org.eclipse.papyrus.emf.commandstack/.settings/org.eclipse.jdt.core.prefs
@@ -1,8 +1,8 @@
-#Fri Dec 02 10:21:08 CET 2011
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
-org.eclipse.jdt.core.compiler.compliance=1.5
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.5
+#Fri Dec 02 10:21:08 CET 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/sandbox/org.eclipse.papyrus.emf.commandstack/META-INF/MANIFEST.MF b/plugins/developer/org.eclipse.papyrus.emf.commandstack/META-INF/MANIFEST.MF
index aee1e3a4e70..0edee1616af 100644
--- a/sandbox/org.eclipse.papyrus.emf.commandstack/META-INF/MANIFEST.MF
+++ b/plugins/developer/org.eclipse.papyrus.emf.commandstack/META-INF/MANIFEST.MF
@@ -1,21 +1,21 @@
-Manifest-Version: 1.0
-Require-Bundle: org.eclipse.ui,
- org.eclipse.core.runtime,
- org.eclipse.emf.edit;bundle-version="2.7.1",
- org.eclipse.papyrus.infra.core;bundle-version="0.10.0",
- org.eclipse.gmf.runtime.common.core;bundle-version="1.4.1",
- org.eclipse.emf.workspace;bundle-version="1.4.0",
- org.eclipse.papyrus.infra.gmfdiag.commands;bundle-version="0.10.0",
- org.eclipse.gmf.runtime.diagram.ui;bundle-version="1.7.0",
- org.eclipse.papyrus.emf.facet.common.ui
-Bundle-Vendor: %providerName
-Bundle-ActivationPolicy: lazy
-Bundle-Version: 0.10.0.qualifier
-Bundle-Name: %pluginName
-Bundle-Localization: plugin
-Bundle-ManifestVersion: 2
-Bundle-Activator: org.eclipse.papyrus.emf.commandstack.Activator
-Bundle-SymbolicName: org.eclipse.papyrus.emf.commandstack;singleton:=t
- rue
-Bundle-RequiredExecutionEnvironment: J2SE-1.5
-
+Manifest-Version: 1.0
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.emf.edit;bundle-version="2.7.1",
+ org.eclipse.papyrus.infra.core;bundle-version="0.10.0",
+ org.eclipse.gmf.runtime.common.core;bundle-version="1.4.1",
+ org.eclipse.emf.workspace;bundle-version="1.4.0",
+ org.eclipse.papyrus.infra.gmfdiag.commands;bundle-version="0.10.0",
+ org.eclipse.gmf.runtime.diagram.ui;bundle-version="1.7.0",
+ org.eclipse.papyrus.emf.facet.common.ui
+Bundle-Vendor: %providerName
+Bundle-ActivationPolicy: lazy
+Bundle-Version: 1.1.0.qualifier
+Bundle-Name: %pluginName
+Bundle-Localization: plugin
+Bundle-ManifestVersion: 2
+Bundle-Activator: org.eclipse.papyrus.infra.emf.commandstack.Activator
+Bundle-SymbolicName: org.eclipse.papyrus.infra.emf.commandstack;singleton:=true
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-Description: This plugin allows to show the command owned by the emf command stack
+
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management_old/about.html b/plugins/developer/org.eclipse.papyrus.emf.commandstack/about.html
index 82d49bf5f81..d35d5aed64c 100644
--- a/sandbox/org.eclipse.papyrus.dev.project.management_old/about.html
+++ b/plugins/developer/org.eclipse.papyrus.emf.commandstack/about.html
@@ -1,28 +1,28 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
-<title>About</title>
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
-
-<p>June 5, 2007</p>
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise
-indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available
-at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
-being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
-apply to your use of any object code in the Content. Check the Redistributor's license that was
-provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content
-and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
-
-</body>
-</html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 5, 2007</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/sandbox/org.eclipse.papyrus.emf.commandstack/build.properties b/plugins/developer/org.eclipse.papyrus.emf.commandstack/build.properties
index 1b0480c3481..69d0f2e3ef2 100644
--- a/sandbox/org.eclipse.papyrus.emf.commandstack/build.properties
+++ b/plugins/developer/org.eclipse.papyrus.emf.commandstack/build.properties
@@ -1,8 +1,8 @@
-source.. = src/
-output.. = bin/
-bin.includes = META-INF/,\
- .,\
- plugin.xml,\
- plugin.properties,\
- icons/,\
- about.html
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ plugin.xml,\
+ plugin.properties,\
+ icons/,\
+ about.html
diff --git a/sandbox/org.eclipse.papyrus.emf.commandstack/icons/stack.gif b/plugins/developer/org.eclipse.papyrus.emf.commandstack/icons/stack.gif
index 3d49e781ea1..3d49e781ea1 100644
--- a/sandbox/org.eclipse.papyrus.emf.commandstack/icons/stack.gif
+++ b/plugins/developer/org.eclipse.papyrus.emf.commandstack/icons/stack.gif
Binary files differ
diff --git a/sandbox/org.eclipse.papyrus.emf.commandstack/plugin.properties b/plugins/developer/org.eclipse.papyrus.emf.commandstack/plugin.properties
index 83c4b9fdab1..04e571f6f13 100644
--- a/sandbox/org.eclipse.papyrus.emf.commandstack/plugin.properties
+++ b/plugins/developer/org.eclipse.papyrus.emf.commandstack/plugin.properties
@@ -1,4 +1,4 @@
-#Properties file for org.eclipse.papyrus.emf.commandstack
-providerName = Eclipse Modeling Project
-pluginName = A View for the commandstack
-view.name = CommandStack
+#Properties file for org.eclipse.papyrus.emf.commandstack
+providerName = Eclipse Modeling Project
+pluginName = A View for the commandstack
+view.name = CommandStack
diff --git a/sandbox/org.eclipse.papyrus.emf.commandstack/plugin.xml b/plugins/developer/org.eclipse.papyrus.emf.commandstack/plugin.xml
index b0a51014f86..2a1e8e4a703 100644
--- a/sandbox/org.eclipse.papyrus.emf.commandstack/plugin.xml
+++ b/plugins/developer/org.eclipse.papyrus.emf.commandstack/plugin.xml
@@ -1,16 +1,16 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.4"?>
-<plugin>
- <extension
- point="org.eclipse.ui.views">
- <view
- category="org.eclipse.papyrus.views.category"
- class="org.eclipse.papyrus.emf.commandstack.view.CommandStackView"
- icon="icons/stack.gif"
- id="org.eclipse.papyrus.command.view.commandstackview"
- name="%view.name"
- restorable="true">
- </view>
- </extension>
-
-</plugin>
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+ <extension
+ point="org.eclipse.ui.views">
+ <view
+ category="org.eclipse.papyrus.views.category"
+ class="org.eclipse.papyrus.infra.emf.commandstack.view.CommandStackView"
+ icon="icons/stack.gif"
+ id="org.eclipse.papyrus.command.view.commandstackview"
+ name="%view.name"
+ restorable="true">
+ </view>
+ </extension>
+
+</plugin>
diff --git a/sandbox/org.eclipse.papyrus.emf.commandstack/src/org/eclipse/papyrus/emf/commandstack/Activator.java b/plugins/developer/org.eclipse.papyrus.emf.commandstack/src/org/eclipse/papyrus/infra/emf/commandstack/Activator.java
index c5e5141eee0..309d259bfd6 100644
--- a/sandbox/org.eclipse.papyrus.emf.commandstack/src/org/eclipse/papyrus/emf/commandstack/Activator.java
+++ b/plugins/developer/org.eclipse.papyrus.emf.commandstack/src/org/eclipse/papyrus/infra/emf/commandstack/Activator.java
@@ -1,63 +1,63 @@
-/*****************************************************************************
- * Copyright (c) 2011 CEA LIST.
- *
- *
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Vincent Lorenzo (CEA LIST) Vincent.Lorenzo@cea.fr - Initial API and implementation
- *
- *****************************************************************************/
-package org.eclipse.papyrus.emf.commandstack;
-
-import org.eclipse.ui.plugin.AbstractUIPlugin;
-import org.osgi.framework.BundleContext;
-
-/**
- * The activator class controls the plug-in life cycle
- */
-public class Activator extends AbstractUIPlugin {
-
- // The plug-in ID
- public static final String PLUGIN_ID = "org.eclipse.papyrus.command.view"; //$NON-NLS-1$
-
- // The shared instance
- private static Activator plugin;
-
- /**
- * The constructor
- */
- public Activator() {
- }
-
- /*
- * (non-Javadoc)
- * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
- */
- public void start(BundleContext context) throws Exception {
- super.start(context);
- plugin = this;
- }
-
- /*
- * (non-Javadoc)
- * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
- */
- public void stop(BundleContext context) throws Exception {
- plugin = null;
- super.stop(context);
- }
-
- /**
- * Returns the shared instance
- *
- * @return the shared instance
- */
- public static Activator getDefault() {
- return plugin;
- }
-
-}
+/*****************************************************************************
+ * Copyright (c) 2011 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Vincent Lorenzo (CEA LIST) Vincent.Lorenzo@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.infra.emf.commandstack;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends AbstractUIPlugin {
+
+ // The plug-in ID
+ public static final String PLUGIN_ID = "org.eclipse.papyrus.infra.emf.commandstack"; //$NON-NLS-1$
+
+ // The shared instance
+ private static Activator plugin;
+
+ /**
+ * The constructor
+ */
+ public Activator() {
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+ */
+ public void start(BundleContext context) throws Exception {
+ super.start(context);
+ plugin = this;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+ */
+ public void stop(BundleContext context) throws Exception {
+ plugin = null;
+ super.stop(context);
+ }
+
+ /**
+ * Returns the shared instance
+ *
+ * @return the shared instance
+ */
+ public static Activator getDefault() {
+ return plugin;
+ }
+
+}
diff --git a/sandbox/org.eclipse.papyrus.emf.commandstack/src/org/eclipse/papyrus/emf/commandstack/view/CommandStackView.java b/plugins/developer/org.eclipse.papyrus.emf.commandstack/src/org/eclipse/papyrus/infra/emf/commandstack/view/CommandStackView.java
index 752cd7316b6..093c1a345a9 100644
--- a/sandbox/org.eclipse.papyrus.emf.commandstack/src/org/eclipse/papyrus/emf/commandstack/view/CommandStackView.java
+++ b/plugins/developer/org.eclipse.papyrus.emf.commandstack/src/org/eclipse/papyrus/infra/emf/commandstack/view/CommandStackView.java
@@ -1,285 +1,285 @@
-/*****************************************************************************
- * Copyright (c) 2011 CEA LIST.
- *
- *
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Vincent Lorenzo (CEA LIST) Vincent.Lorenzo@cea.fr - Initial API and implementation
- *
- *****************************************************************************/
-package org.eclipse.papyrus.emf.commandstack.view;
-
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.ListIterator;
-import java.util.Map;
-
-import org.eclipse.core.commands.operations.AbstractOperation;
-import org.eclipse.core.commands.operations.IOperationHistory;
-import org.eclipse.core.commands.operations.IOperationHistoryListener;
-import org.eclipse.core.commands.operations.IUndoContext;
-import org.eclipse.core.commands.operations.IUndoableOperation;
-import org.eclipse.core.commands.operations.OperationHistoryEvent;
-import org.eclipse.core.commands.operations.OperationHistoryFactory;
-import org.eclipse.emf.common.command.AbstractCommand;
-import org.eclipse.emf.common.command.Command;
-import org.eclipse.emf.common.command.CompoundCommand;
-import org.eclipse.emf.workspace.EMFCommandOperation;
-import org.eclipse.gmf.runtime.common.core.command.CompositeCommand;
-import org.eclipse.gmf.runtime.diagram.ui.commands.CommandProxy;
-import org.eclipse.gmf.runtime.emf.commands.core.command.EditingDomainUndoContext;
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.IToolBarManager;
-import org.eclipse.jface.viewers.ColumnLabelProvider;
-import org.eclipse.jface.viewers.IContentProvider;
-import org.eclipse.jface.viewers.ITreeContentProvider;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.papyrus.commands.wrappers.GEFtoEMFCommandWrapper;
-import org.eclipse.papyrus.commands.wrappers.GMFtoEMFCommandWrapper;
-import org.eclipse.papyrus.emf.facet.common.ui.internal.views.AbstractTreeView;
-
-public class CommandStackView extends AbstractTreeView {
-
- private final int maxSize = 25;
-
- private final IOperationHistory history;
-
- private final List<IUndoableOperation> commandList = new ArrayList<IUndoableOperation>();
-
- private final Map<IUndoableOperation, String> dates = new HashMap<IUndoableOperation, String>();
-
- private final IOperationHistoryListener historyListener;
-
- public CommandStackView() {
- this.history = OperationHistoryFactory.getOperationHistory();
- this.history.addOperationHistoryListener(historyListener = new IOperationHistoryListener() {
-
- public void historyNotification(final OperationHistoryEvent event) {
- if(!CommandStackView.this.commandList.contains(event.getOperation())) {
- if(CommandStackView.this.commandList.size() == CommandStackView.this.maxSize) {
- IUndoableOperation removedOperation = CommandStackView.this.commandList.remove(CommandStackView.this.maxSize - 1);
- dates.remove(removedOperation);
- }
- CommandStackView.this.commandList.add(0, event.getOperation());
- final DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
- final Calendar cal = Calendar.getInstance();
- CommandStackView.this.dates.put(event.getOperation(), dateFormat.format(cal.getTime()));
- refresh(true);
- }
- }
- });
- }
-
- private boolean isValidUndoContext(IUndoableOperation operation) {
- for(IUndoContext undoContext : operation.getContexts()) {
- if(undoContext instanceof EditingDomainUndoContext) {
- return true;
- }
- }
- return false;
- }
-
- @Override
- protected void createColumns() {
- createNameColumn();
- createDescriptionColumn();
- createCommandTypeColumn();
- createTimeColumn();
- createUndoContextColumn();
- }
-
- @Override
- public void createPartControl(final org.eclipse.swt.widgets.Composite parent) {
- super.createPartControl(parent);
- final IToolBarManager tbm = getViewSite().getActionBars().getToolBarManager();
- tbm.add(new Action() {
-
- @Override
- public void run() {
- clear();
- refresh(true);
- }
-
- @Override
- public boolean isEnabled() {
- return true;
- }
-
- @Override
- public String getToolTipText() {
- return getText();
- }
-
- @Override
- public String getText() {
- return "Clear the view";
- }
- });
- }
-
- private void createCommandTypeColumn() {
- final ColumnLabelProvider columnLabelProvider = new ColumnLabelProvider() {
-
- @Override
- public String getText(final Object element) {
- return element.getClass().getName();
- }
- };
- createColumn("Type", "TYPE_COLUMN_ID", 200, columnLabelProvider);
- }
-
- protected void createNameColumn() {
- final ColumnLabelProvider columnLabelProvider = new ColumnLabelProvider() {
-
- @Override
- public String getText(final Object element) {
- if(element instanceof AbstractOperation) {
- return ((AbstractOperation)element).getLabel();
- } else if(element instanceof AbstractCommand) {
- return ((AbstractCommand)element).getLabel();
- } else if(element instanceof org.eclipse.gef.commands.Command) {
- return ((org.eclipse.gef.commands.Command)element).getLabel();
- }
- return "no managed";
- }
- };
- createColumn("Name", "NAME_COLUMN_ID", 200, columnLabelProvider);
- }
-
- protected void createUndoContextColumn() {
- final ColumnLabelProvider columnLabelProvider = new ColumnLabelProvider() {
-
- @Override
- public String getText(final Object element) {
- if(element instanceof IUndoableOperation) {
- return Boolean.toString(isValidUndoContext((IUndoableOperation)element));
- }
- return "?";
- }
- };
- createColumn("EMF Command Stack", "UNDO_CONTEXT_COLUMN_ID", 100, columnLabelProvider);
- }
-
- protected void createDescriptionColumn() {
- final ColumnLabelProvider columnLabelProvider = new ColumnLabelProvider() {
-
- @Override
- public String getText(final Object element) {
- if(element instanceof AbstractCommand) {
- return ((AbstractCommand)element).getDescription();
- }
- return "no description";
- }
- };
- createColumn("Description", "DESCRIPTION_COLUMN_ID", 150, columnLabelProvider);
- }
-
- protected void createTimeColumn() {
- final ColumnLabelProvider columnLabelProvider = new ColumnLabelProvider() {
-
- @Override
- public String getText(final Object element) {
- if(CommandStackView.this.dates.containsKey(element)) {
- return CommandStackView.this.dates.get(element);
- }
- return "";
- }
- };
- createColumn("Time", "TIME_COLUMN_ID", 100, columnLabelProvider);
- }
-
- @Override
- protected IContentProvider getContentProvider() {
- return new ITreeContentProvider() {
-
- public Object[] getElements(final Object inputElement) {
- if(inputElement instanceof Command) {
- return new Object[]{ inputElement };
- } else if(inputElement instanceof Collection<?>) {
- return ((Collection<?>)inputElement).toArray();
- }
- return new Object[0];
- }
-
- public void inputChanged(final Viewer viewer, final Object oldInput, final Object newInput) {
- // nothing
- }
-
- public void dispose() {
- // nothing
- }
-
- public boolean hasChildren(final Object element) {
- return getChildren(element).length != 0;
- }
-
- public Object getParent(final Object element) {
- return null;
- }
-
- public Object[] getChildren(final Object parentElement) {
- if(parentElement instanceof CompoundCommand) {
- return ((CompoundCommand)parentElement).getCommandList().toArray();
- } else if(parentElement instanceof CompositeCommand) {
- final List<Object> children = new ArrayList<Object>();
- final ListIterator<Object> iter = ((CompositeCommand)parentElement).listIterator();
- while(iter.hasNext()) {
- children.add(iter.next());
- }
- return children.toArray();
- } else if(parentElement instanceof EMFCommandOperation) {
- final List<Object> children = new ArrayList<Object>();
- children.add(((EMFCommandOperation)parentElement).getCommand());
- return children.toArray();
- } else if(parentElement instanceof GMFtoEMFCommandWrapper) {
- return new Object[]{ ((GMFtoEMFCommandWrapper)parentElement).getGMFCommand() };
- } else if(parentElement instanceof GEFtoEMFCommandWrapper) {
- return new Object[]{ ((GEFtoEMFCommandWrapper)parentElement).getGEFCommand() };
- } else if(parentElement instanceof CommandProxy) {
- return new Object[]{ ((CommandProxy)parentElement).getCommand() };
- } else if(parentElement instanceof org.eclipse.gef.commands.CompoundCommand) {
- return ((org.eclipse.gef.commands.CompoundCommand)parentElement).getChildren();
- }
- return new Object[0];
- }
- };
- }
-
- @Override
- protected void openElement(final Object element) {
- // TODO Auto-generated method stub
- }
-
- @Override
- protected String getRefreshMessage() {
- return "Refresh CommandStack View";
- }
-
- private Object result[];// = new Object[1];
-
- @Override
- protected Object getInput() {
- return this.commandList;
- }
-
- @Override
- public void dispose() {
- super.dispose();
- history.removeOperationHistoryListener(historyListener);
- clear();
- }
-
- private void clear() {
- this.commandList.clear();
- this.dates.clear();
- }
-}
+/*****************************************************************************
+ * Copyright (c) 2011 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Vincent Lorenzo (CEA LIST) Vincent.Lorenzo@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.infra.emf.commandstack.view;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
+
+import org.eclipse.core.commands.operations.AbstractOperation;
+import org.eclipse.core.commands.operations.IOperationHistory;
+import org.eclipse.core.commands.operations.IOperationHistoryListener;
+import org.eclipse.core.commands.operations.IUndoContext;
+import org.eclipse.core.commands.operations.IUndoableOperation;
+import org.eclipse.core.commands.operations.OperationHistoryEvent;
+import org.eclipse.core.commands.operations.OperationHistoryFactory;
+import org.eclipse.emf.common.command.AbstractCommand;
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.command.CompoundCommand;
+import org.eclipse.emf.workspace.EMFCommandOperation;
+import org.eclipse.gmf.runtime.common.core.command.CompositeCommand;
+import org.eclipse.gmf.runtime.diagram.ui.commands.CommandProxy;
+import org.eclipse.gmf.runtime.emf.commands.core.command.EditingDomainUndoContext;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.viewers.ColumnLabelProvider;
+import org.eclipse.jface.viewers.IContentProvider;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.papyrus.commands.wrappers.GEFtoEMFCommandWrapper;
+import org.eclipse.papyrus.commands.wrappers.GMFtoEMFCommandWrapper;
+import org.eclipse.papyrus.emf.facet.common.ui.internal.views.AbstractTreeView;
+
+public class CommandStackView extends AbstractTreeView {
+
+ private final int maxSize = 25;
+
+ private final IOperationHistory history;
+
+ private final List<IUndoableOperation> commandList = new ArrayList<IUndoableOperation>();
+
+ private final Map<IUndoableOperation, String> dates = new HashMap<IUndoableOperation, String>();
+
+ private final IOperationHistoryListener historyListener;
+
+ public CommandStackView() {
+ this.history = OperationHistoryFactory.getOperationHistory();
+ this.history.addOperationHistoryListener(historyListener = new IOperationHistoryListener() {
+
+ public void historyNotification(final OperationHistoryEvent event) {
+ if(!CommandStackView.this.commandList.contains(event.getOperation())) {
+ if(CommandStackView.this.commandList.size() == CommandStackView.this.maxSize) {
+ IUndoableOperation removedOperation = CommandStackView.this.commandList.remove(CommandStackView.this.maxSize - 1);
+ dates.remove(removedOperation);
+ }
+ CommandStackView.this.commandList.add(0, event.getOperation());
+ final DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
+ final Calendar cal = Calendar.getInstance();
+ CommandStackView.this.dates.put(event.getOperation(), dateFormat.format(cal.getTime()));
+ refresh(true);
+ }
+ }
+ });
+ }
+
+ private boolean isValidUndoContext(IUndoableOperation operation) {
+ for(IUndoContext undoContext : operation.getContexts()) {
+ if(undoContext instanceof EditingDomainUndoContext) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ @Override
+ protected void createColumns() {
+ createNameColumn();
+ createDescriptionColumn();
+ createCommandTypeColumn();
+ createTimeColumn();
+ createUndoContextColumn();
+ }
+
+ @Override
+ public void createPartControl(final org.eclipse.swt.widgets.Composite parent) {
+ super.createPartControl(parent);
+ final IToolBarManager tbm = getViewSite().getActionBars().getToolBarManager();
+ tbm.add(new Action() {
+
+ @Override
+ public void run() {
+ clear();
+ refresh(true);
+ }
+
+ @Override
+ public boolean isEnabled() {
+ return true;
+ }
+
+ @Override
+ public String getToolTipText() {
+ return getText();
+ }
+
+ @Override
+ public String getText() {
+ return "Clear the view";
+ }
+ });
+ }
+
+ private void createCommandTypeColumn() {
+ final ColumnLabelProvider columnLabelProvider = new ColumnLabelProvider() {
+
+ @Override
+ public String getText(final Object element) {
+ return element.getClass().getName();
+ }
+ };
+ createColumn("Type", "TYPE_COLUMN_ID", 200, columnLabelProvider);
+ }
+
+ protected void createNameColumn() {
+ final ColumnLabelProvider columnLabelProvider = new ColumnLabelProvider() {
+
+ @Override
+ public String getText(final Object element) {
+ if(element instanceof AbstractOperation) {
+ return ((AbstractOperation)element).getLabel();
+ } else if(element instanceof AbstractCommand) {
+ return ((AbstractCommand)element).getLabel();
+ } else if(element instanceof org.eclipse.gef.commands.Command) {
+ return ((org.eclipse.gef.commands.Command)element).getLabel();
+ }
+ return "no managed";
+ }
+ };
+ createColumn("Name", "NAME_COLUMN_ID", 200, columnLabelProvider);
+ }
+
+ protected void createUndoContextColumn() {
+ final ColumnLabelProvider columnLabelProvider = new ColumnLabelProvider() {
+
+ @Override
+ public String getText(final Object element) {
+ if(element instanceof IUndoableOperation) {
+ return Boolean.toString(isValidUndoContext((IUndoableOperation)element));
+ }
+ return "?";
+ }
+ };
+ createColumn("EMF Command Stack", "UNDO_CONTEXT_COLUMN_ID", 100, columnLabelProvider);
+ }
+
+ protected void createDescriptionColumn() {
+ final ColumnLabelProvider columnLabelProvider = new ColumnLabelProvider() {
+
+ @Override
+ public String getText(final Object element) {
+ if(element instanceof AbstractCommand) {
+ return ((AbstractCommand)element).getDescription();
+ }
+ return "no description";
+ }
+ };
+ createColumn("Description", "DESCRIPTION_COLUMN_ID", 150, columnLabelProvider);
+ }
+
+ protected void createTimeColumn() {
+ final ColumnLabelProvider columnLabelProvider = new ColumnLabelProvider() {
+
+ @Override
+ public String getText(final Object element) {
+ if(CommandStackView.this.dates.containsKey(element)) {
+ return CommandStackView.this.dates.get(element);
+ }
+ return "";
+ }
+ };
+ createColumn("Time", "TIME_COLUMN_ID", 100, columnLabelProvider);
+ }
+
+ @Override
+ protected IContentProvider getContentProvider() {
+ return new ITreeContentProvider() {
+
+ public Object[] getElements(final Object inputElement) {
+ if(inputElement instanceof Command) {
+ return new Object[]{ inputElement };
+ } else if(inputElement instanceof Collection<?>) {
+ return ((Collection<?>)inputElement).toArray();
+ }
+ return new Object[0];
+ }
+
+ public void inputChanged(final Viewer viewer, final Object oldInput, final Object newInput) {
+ // nothing
+ }
+
+ public void dispose() {
+ // nothing
+ }
+
+ public boolean hasChildren(final Object element) {
+ return getChildren(element).length != 0;
+ }
+
+ public Object getParent(final Object element) {
+ return null;
+ }
+
+ public Object[] getChildren(final Object parentElement) {
+ if(parentElement instanceof CompoundCommand) {
+ return ((CompoundCommand)parentElement).getCommandList().toArray();
+ } else if(parentElement instanceof CompositeCommand) {
+ final List<Object> children = new ArrayList<Object>();
+ final ListIterator<Object> iter = ((CompositeCommand)parentElement).listIterator();
+ while(iter.hasNext()) {
+ children.add(iter.next());
+ }
+ return children.toArray();
+ } else if(parentElement instanceof EMFCommandOperation) {
+ final List<Object> children = new ArrayList<Object>();
+ children.add(((EMFCommandOperation)parentElement).getCommand());
+ return children.toArray();
+ } else if(parentElement instanceof GMFtoEMFCommandWrapper) {
+ return new Object[]{ ((GMFtoEMFCommandWrapper)parentElement).getGMFCommand() };
+ } else if(parentElement instanceof GEFtoEMFCommandWrapper) {
+ return new Object[]{ ((GEFtoEMFCommandWrapper)parentElement).getGEFCommand() };
+ } else if(parentElement instanceof CommandProxy) {
+ return new Object[]{ ((CommandProxy)parentElement).getCommand() };
+ } else if(parentElement instanceof org.eclipse.gef.commands.CompoundCommand) {
+ return ((org.eclipse.gef.commands.CompoundCommand)parentElement).getChildren();
+ }
+ return new Object[0];
+ }
+ };
+ }
+
+ @Override
+ protected void openElement(final Object element) {
+ // TODO Auto-generated method stub
+ }
+
+ @Override
+ protected String getRefreshMessage() {
+ return "Refresh CommandStack View";
+ }
+
+ private Object result[];// = new Object[1];
+
+ @Override
+ protected Object getInput() {
+ return this.commandList;
+ }
+
+ @Override
+ public void dispose() {
+ super.dispose();
+ history.removeOperationHistoryListener(historyListener);
+ clear();
+ }
+
+ private void clear() {
+ this.commandList.clear();
+ this.dates.clear();
+ }
+}
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management_old/.classpath b/sandbox/org.eclipse.papyrus.dev.project.management_old/.classpath
deleted file mode 100644
index 2d1a4302f04..00000000000
--- a/sandbox/org.eclipse.papyrus.dev.project.management_old/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
- <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
- <classpathentry kind="src" path="src"/>
- <classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management_old/.project b/sandbox/org.eclipse.papyrus.dev.project.management_old/.project
deleted file mode 100644
index b203890cb52..00000000000
--- a/sandbox/org.eclipse.papyrus.dev.project.management_old/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
- <name>org.eclipse.papyrus.plugin.management</name>
- <comment></comment>
- <projects>
- </projects>
- <buildSpec>
- <buildCommand>
- <name>org.eclipse.jdt.core.javabuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.ManifestBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.SchemaBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- </buildSpec>
- <natures>
- <nature>org.eclipse.pde.PluginNature</nature>
- <nature>org.eclipse.jdt.core.javanature</nature>
- </natures>
-</projectDescription>
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management_old/.settings/org.eclipse.jdt.core.prefs b/sandbox/org.eclipse.papyrus.dev.project.management_old/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 942cb7f9422..00000000000
--- a/sandbox/org.eclipse.papyrus.dev.project.management_old/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,8 +0,0 @@
-#Fri Sep 09 09:27:23 CEST 2011
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
-org.eclipse.jdt.core.compiler.compliance=1.5
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.5
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management_old/META-INF/MANIFEST.MF b/sandbox/org.eclipse.papyrus.dev.project.management_old/META-INF/MANIFEST.MF
deleted file mode 100644
index aecd7022a8b..00000000000
--- a/sandbox/org.eclipse.papyrus.dev.project.management_old/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,15 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: Plug-in management
-Bundle-SymbolicName: org.eclipse.papyrus.plugin.management;singleton:=true
-Bundle-Version: 0.9.0.qualifier
-Bundle-Activator: org.eclipse.papyrus.plugin.management.Activator
-Bundle-Vendor: Eclipse Modeling Project
-Require-Bundle: org.eclipse.ui,
- org.eclipse.core.runtime,
- org.eclipse.papyrus.eclipse.project.editors;bundle-version="0.9.0",
- org.eclipse.core.resources;bundle-version="3.7.100",
- org.eclipse.pde.ui;bundle-version="3.6.100",
- org.eclipse.papyrus.infra.core.log;bundle-version="0.9.0"
-Bundle-RequiredExecutionEnvironment: J2SE-1.5
-Bundle-ActivationPolicy: lazy
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management_old/build.properties b/sandbox/org.eclipse.papyrus.dev.project.management_old/build.properties
deleted file mode 100644
index ce9ff27f5a2..00000000000
--- a/sandbox/org.eclipse.papyrus.dev.project.management_old/build.properties
+++ /dev/null
@@ -1,10 +0,0 @@
-source.. = src/
-output.. = bin/
-bin.includes = .,\
- META-INF/,\
- resources/,\
- about.html,\
- plugin.xml
-src.includes = META-INF/,\
- resources/,\
- about.html
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management_old/icons/update-plugin.png b/sandbox/org.eclipse.papyrus.dev.project.management_old/icons/update-plugin.png
deleted file mode 100644
index d45a29d237b..00000000000
--- a/sandbox/org.eclipse.papyrus.dev.project.management_old/icons/update-plugin.png
+++ /dev/null
Binary files differ
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management_old/plugin.xml b/sandbox/org.eclipse.papyrus.dev.project.management_old/plugin.xml
deleted file mode 100644
index 3a6fe88efc1..00000000000
--- a/sandbox/org.eclipse.papyrus.dev.project.management_old/plugin.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.4"?>
-<plugin>
- <extension
- point="org.eclipse.ui.commands">
- <command
- categoryId="org.eclipse.papyrus.editor.category"
- id="org.eclipse.papyrus.plugin.management.command"
- name="Edit Meta information">
- </command>
- </extension>
- <extension
- point="org.eclipse.ui.menus">
- <menuContribution
- allPopups="false"
- locationURI="popup:org.eclipse.ui.popup.any">
- <command
- commandId="org.eclipse.papyrus.plugin.management.command"
- icon="icons/update-plugin.png"
- style="push">
- </command>
- </menuContribution>
- </extension>
- <extension
- point="org.eclipse.ui.handlers">
- <handler
- class="org.eclipse.papyrus.plugin.management.handler.RefactoringHandler"
- commandId="org.eclipse.papyrus.plugin.management.command">
- </handler>
- </extension>
-
-</plugin>
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management_old/resources/about.html.file b/sandbox/org.eclipse.papyrus.dev.project.management_old/resources/about.html.file
deleted file mode 100644
index 82d49bf5f81..00000000000
--- a/sandbox/org.eclipse.papyrus.dev.project.management_old/resources/about.html.file
+++ /dev/null
@@ -1,28 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
-<title>About</title>
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
-
-<p>June 5, 2007</p>
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise
-indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available
-at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
-being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
-apply to your use of any object code in the Content. Check the Redistributor's license that was
-provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content
-and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
-
-</body>
-</html>
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management_old/resources/epl-v10.html.file b/sandbox/org.eclipse.papyrus.dev.project.management_old/resources/epl-v10.html.file
deleted file mode 100644
index cb1073a4bad..00000000000
--- a/sandbox/org.eclipse.papyrus.dev.project.management_old/resources/epl-v10.html.file
+++ /dev/null
@@ -1,304 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html xmlns:o="urn:schemas-microsoft-com:office:office"
-xmlns:w="urn:schemas-microsoft-com:office:word"
-xmlns="http://www.w3.org/TR/REC-html40">
-
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<link rel=File-List
-href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
-<title>Eclipse Public License - Version 1.0</title>
-<style>
-<!--
- /* Font Definitions */
-@font-face
- {
- panose-1:2 11 6 4 3 5 4 4 2 4;
- mso-font-charset:0;
- mso-font-pitch:variable;
- mso-font-signature:553679495 -2147483648 8 0 66047 0;}
- /* Style Definitions */
-p.MsoNormal, li.MsoNormal, div.MsoNormal
- {mso-style-parent:"";
- margin:0in;
- margin-bottom:.0001pt;
- mso-pagination:widow-orphan;
- font-size:12.0pt;
- }
-p
- {margin-right:0in;
- mso-margin-top-alt:auto;
- mso-margin-bottom-alt:auto;
- margin-left:0in;
- mso-pagination:widow-orphan;
- font-size:12.0pt;
- }
-p.BalloonText, li.BalloonText, div.BalloonText
- {mso-style-name:"Balloon Text";
- margin:0in;
- margin-bottom:.0001pt;
- mso-pagination:widow-orphan;
- font-size:8.0pt;
-
- }
-@page Section1
- {size:8.5in 11.0in;
- margin:1.0in 1.25in 1.0in 1.25in;
- mso-header-margin:.5in;
- mso-footer-margin:.5in;
- mso-paper-source:0;}
-div.Section1
- {page:Section1;}
--->
-</style>
-</head>
-
-<body lang="EN-US" style='tab-interval:.5in'>
-
-<div class=Section1>
-
-<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
-</p>
-
-<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
-THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
-REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
-OF THIS AGREEMENT.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-in the case of the initial Contributor, the initial code and documentation
-distributed under this Agreement, and<br clear=left>
-b) in the case of each subsequent Contributor:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-changes to the Program, and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-additions to the Program;</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
-such changes and/or additions to the Program originate from and are distributed
-by that particular Contributor. A Contribution 'originates' from a Contributor
-if it was added to the Program by such Contributor itself or anyone acting on
-such Contributor's behalf. Contributions do not include additions to the
-Program which: (i) are separate modules of software distributed in conjunction
-with the Program under their own license agreement, and (ii) are not derivative
-works of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
-entity that distributes the Program.</span> </p>
-
-<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
-claims licensable by a Contributor which are necessarily infringed by the use
-or sale of its Contribution alone or when combined with the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
-distributed in accordance with this Agreement.</span> </p>
-
-<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
-receives the Program under this Agreement, including all Contributors.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-Subject to the terms of this Agreement, each Contributor hereby grants Recipient
-a non-exclusive, worldwide, royalty-free copyright license to<span
-style='color:red'> </span>reproduce, prepare derivative works of, publicly
-display, publicly perform, distribute and sublicense the Contribution of such
-Contributor, if any, and such derivative works, in source code and object code
-form.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-Subject to the terms of this Agreement, each Contributor hereby grants
-Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
-patent license under Licensed Patents to make, use, sell, offer to sell, import
-and otherwise transfer the Contribution of such Contributor, if any, in source
-code and object code form. This patent license shall apply to the combination
-of the Contribution and the Program if, at the time the Contribution is added
-by the Contributor, such addition of the Contribution causes such combination
-to be covered by the Licensed Patents. The patent license shall not apply to
-any other combinations which include the Contribution. No hardware per se is
-licensed hereunder. </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
-Recipient understands that although each Contributor grants the licenses to its
-Contributions set forth herein, no assurances are provided by any Contributor
-that the Program does not infringe the patent or other intellectual property
-rights of any other entity. Each Contributor disclaims any liability to Recipient
-for claims brought by any other entity based on infringement of intellectual
-property rights or otherwise. As a condition to exercising the rights and
-licenses granted hereunder, each Recipient hereby assumes sole responsibility
-to secure any other intellectual property rights needed, if any. For example,
-if a third party patent license is required to allow Recipient to distribute
-the Program, it is Recipient's responsibility to acquire that license before
-distributing the Program.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
-Each Contributor represents that to its knowledge it has sufficient copyright
-rights in its Contribution, if any, to grant the copyright license set forth in
-this Agreement. </span></p>
-
-<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
-Program in object code form under its own license agreement, provided that:</span>
-</p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it complies with the terms and conditions of this Agreement; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-its license agreement:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-effectively disclaims on behalf of all Contributors all warranties and
-conditions, express and implied, including warranties or conditions of title
-and non-infringement, and implied warranties or conditions of merchantability
-and fitness for a particular purpose; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-effectively excludes on behalf of all Contributors all liability for damages,
-including direct, indirect, special, incidental and consequential damages, such
-as lost profits; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
-states that any provisions which differ from this Agreement are offered by that
-Contributor alone and not by any other party; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
-states that source code for the Program is available from such Contributor, and
-informs licensees how to obtain it in a reasonable manner on or through a
-medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
-
-<p><span style='font-size:10.0pt'>When the Program is made available in source
-code form:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it must be made available under this Agreement; and </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
-copy of this Agreement must be included with each copy of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
-copyright notices contained within the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
-originator of its Contribution, if any, in a manner that reasonably allows
-subsequent Recipients to identify the originator of the Contribution. </span></p>
-
-<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
-
-<p><span style='font-size:10.0pt'>Commercial distributors of software may
-accept certain responsibilities with respect to end users, business partners
-and the like. While this license is intended to facilitate the commercial use
-of the Program, the Contributor who includes the Program in a commercial
-product offering should do so in a manner which does not create potential
-liability for other Contributors. Therefore, if a Contributor includes the
-Program in a commercial product offering, such Contributor (&quot;Commercial
-Contributor&quot;) hereby agrees to defend and indemnify every other
-Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
-costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
-legal actions brought by a third party against the Indemnified Contributor to
-the extent caused by the acts or omissions of such Commercial Contributor in
-connection with its distribution of the Program in a commercial product
-offering. The obligations in this section do not apply to any claims or Losses
-relating to any actual or alleged intellectual property infringement. In order
-to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
-Contributor in writing of such claim, and b) allow the Commercial Contributor
-to control, and cooperate with the Commercial Contributor in, the defense and
-any related settlement negotiations. The Indemnified Contributor may participate
-in any such claim at its own expense.</span> </p>
-
-<p><span style='font-size:10.0pt'>For example, a Contributor might include the
-Program in a commercial product offering, Product X. That Contributor is then a
-Commercial Contributor. If that Commercial Contributor then makes performance
-claims, or offers warranties related to Product X, those performance claims and
-warranties are such Commercial Contributor's responsibility alone. Under this
-section, the Commercial Contributor would have to defend claims against the
-other Contributors related to those performance claims and warranties, and if a
-court requires any other Contributor to pay any damages as a result, the
-Commercial Contributor must pay those damages.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
-WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
-WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
-MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
-responsible for determining the appropriateness of using and distributing the
-Program and assumes all risks associated with its exercise of rights under this
-Agreement , including but not limited to the risks and costs of program errors,
-compliance with applicable laws, damage to or loss of data, programs or
-equipment, and unavailability or interruption of operations. </span></p>
-
-<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
-OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
-THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
-THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
-
-<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
-or unenforceable under applicable law, it shall not affect the validity or
-enforceability of the remainder of the terms of this Agreement, and without
-further action by the parties hereto, such provision shall be reformed to the
-minimum extent necessary to make such provision valid and enforceable.</span> </p>
-
-<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
-against any entity (including a cross-claim or counterclaim in a lawsuit)
-alleging that the Program itself (excluding combinations of the Program with
-other software or hardware) infringes such Recipient's patent(s), then such
-Recipient's rights granted under Section 2(b) shall terminate as of the date
-such litigation is filed. </span></p>
-
-<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
-shall terminate if it fails to comply with any of the material terms or
-conditions of this Agreement and does not cure such failure in a reasonable
-period of time after becoming aware of such noncompliance. If all Recipient's
-rights under this Agreement terminate, Recipient agrees to cease use and
-distribution of the Program as soon as reasonably practicable. However,
-Recipient's obligations under this Agreement and any licenses granted by
-Recipient relating to the Program shall continue and survive. </span></p>
-
-<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
-copies of this Agreement, but in order to avoid inconsistency the Agreement is
-copyrighted and may only be modified in the following manner. The Agreement
-Steward reserves the right to publish new versions (including revisions) of
-this Agreement from time to time. No one other than the Agreement Steward has
-the right to modify this Agreement. The Eclipse Foundation is the initial
-Agreement Steward. The Eclipse Foundation may assign the responsibility to
-serve as the Agreement Steward to a suitable separate entity. Each new version
-of the Agreement will be given a distinguishing version number. The Program
-(including Contributions) may always be distributed subject to the version of
-the Agreement under which it was received. In addition, after a new version of
-the Agreement is published, Contributor may elect to distribute the Program
-(including its Contributions) under the new version. Except as expressly stated
-in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
-the intellectual property of any Contributor under this Agreement, whether
-expressly, by implication, estoppel or otherwise. All rights in the Program not
-expressly granted under this Agreement are reserved.</span> </p>
-
-<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
-State of New York and the intellectual property laws of the United States of
-America. No party to this Agreement will bring a legal action under this
-Agreement more than one year after the cause of action arose. Each party waives
-its rights to a jury trial in any resulting litigation.</span> </p>
-
-<p class=MsoNormal></p>
-
-</div>
-
-</body>
-
-</html> \ No newline at end of file
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management_old/resources/license.html.file b/sandbox/org.eclipse.papyrus.dev.project.management_old/resources/license.html.file
deleted file mode 100644
index a9b560f44cd..00000000000
--- a/sandbox/org.eclipse.papyrus.dev.project.management_old/resources/license.html.file
+++ /dev/null
@@ -1,79 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html>
-<head>
-<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
-<title>Eclipse.org Software User Agreement</title>
-</head>
-
-<body lang="EN-US" link=blue vlink=purple>
-<h2>Eclipse Foundation Software User Agreement</h2>
-<p>March 17, 2005</p>
-
-<h3>Usage Of Content</h3>
-
-<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
- (COLLECTIVELY &quot;CONTENT&quot;). USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
- CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE
- OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
- NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
- CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
-
-<h3>Applicable Licenses</h3>
-
-<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
- (&quot;EPL&quot;). A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
- For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
-
-<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse.org CVS repository (&quot;Repository&quot;) in CVS
- modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
-
-<ul>
- <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content. Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
- <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
- <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material. Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;. Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
- and/or Fragments associated with that Feature.</li>
- <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
-</ul>
-
-<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
-Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;). Abouts and Feature Licenses may be located in any directory of a Download or Module
-including, but not limited to the following locations:</p>
-
-<ul>
- <li>The top-level (root) directory</li>
- <li>Plug-in and Fragment directories</li>
- <li>Inside Plug-ins and Fragments packaged as JARs</li>
- <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
- <li>Feature directories</li>
-</ul>
-
-<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Eclipse Update Manager, you must agree to a license (&quot;Feature Update License&quot;) during the
-installation process. If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
-inform you where you can locate them. Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
-that directory.</p>
-
-<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS. SOME OF THESE
-OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
-
-<ul>
- <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
- <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
- <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
- <li>IBM Public License 1.0 (available at <a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>)</li>
- <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
- <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
-</ul>
-
-<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License is provided, please
-contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
-
-<h3>Cryptography</h3>
-
-<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
- another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
- possession, or use, and re-export of encryption software, to see if this is permitted.</p>
-
-<small>Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.</small>
-</body>
-</html>
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management_old/src/org/eclipse/papyrus/dev/project/management/Activator.java b/sandbox/org.eclipse.papyrus.dev.project.management_old/src/org/eclipse/papyrus/dev/project/management/Activator.java
deleted file mode 100644
index 1242b1aee42..00000000000
--- a/sandbox/org.eclipse.papyrus.dev.project.management_old/src/org/eclipse/papyrus/dev/project/management/Activator.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package org.eclipse.papyrus.dev.project.management;
-
-import org.eclipse.papyrus.infra.core.log.LogHelper;
-import org.eclipse.ui.plugin.AbstractUIPlugin;
-import org.osgi.framework.BundleContext;
-
-/**
- * The activator class controls the plug-in life cycle
- */
-public class Activator extends AbstractUIPlugin {
-
- // The plug-in ID
- public static final String PLUGIN_ID = "org.eclipse.papyrus.plugin.management"; //$NON-NLS-1$
-
- // The shared instance
- private static Activator plugin;
-
- public static LogHelper log;
-
- /**
- * The constructor
- */
- public Activator() {
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
- */
- @Override
- public void start(BundleContext context) throws Exception {
- super.start(context);
- plugin = this;
- log = new LogHelper(this);
-
- // RefactoringRuntime runtime = new RefactoringRuntime();
- // runtime.setPluginPattern("org.eclipse.papyrus.*");
- // runtime.setProvider(null);
- // runtime.setVersion("0.8.2.qualifier");
- // try {
- // runtime.run();
- // } catch (Throwable e) {
- // log.error(e);
- // }
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
- */
- @Override
- public void stop(BundleContext context) throws Exception {
- plugin = null;
- super.stop(context);
- }
-
- /**
- * Returns the shared instance
- *
- * @return the shared instance
- */
- public static Activator getDefault() {
- return plugin;
- }
-
-}
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management_old/src/org/eclipse/papyrus/dev/project/management/handler/RefactoringHandler.java b/sandbox/org.eclipse.papyrus.dev.project.management_old/src/org/eclipse/papyrus/dev/project/management/handler/RefactoringHandler.java
deleted file mode 100644
index fa31d0382bb..00000000000
--- a/sandbox/org.eclipse.papyrus.dev.project.management_old/src/org/eclipse/papyrus/dev/project/management/handler/RefactoringHandler.java
+++ /dev/null
@@ -1,529 +0,0 @@
-/*****************************************************************************
- * Copyright (c) 2012 CEA LIST.
- *
- *
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Camille Letavernier (CEA-LIST) camille.letavernier@cea.fr - Initial API and implementation
- * Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr
- *
- *****************************************************************************/
-package org.eclipse.papyrus.dev.project.management.handler;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.core.commands.AbstractHandler;
-import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IWorkspaceRoot;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.jface.viewers.ILabelProvider;
-import org.eclipse.jface.viewers.ILabelProviderListener;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.papyrus.dev.project.management.Activator;
-import org.eclipse.papyrus.dev.project.management.helper.AbstractProjectManagementHelper;
-import org.eclipse.papyrus.dev.project.management.helper.FeatureManagementHelper;
-import org.eclipse.papyrus.dev.project.management.helper.PluginManagmentHelper;
-import org.eclipse.papyrus.dev.project.management.ui.ParameterDialog;
-import org.eclipse.papyrus.eclipse.project.editors.file.BuildEditor;
-import org.eclipse.papyrus.eclipse.project.editors.file.ClasspathEditor;
-import org.eclipse.papyrus.eclipse.project.editors.file.ManifestEditor;
-import org.eclipse.papyrus.eclipse.project.editors.interfaces.IBuildEditor;
-import org.eclipse.papyrus.eclipse.project.editors.interfaces.IClasspathEditor;
-import org.eclipse.papyrus.eclipse.project.editors.interfaces.IJavaProjectEditor;
-import org.eclipse.papyrus.eclipse.project.editors.interfaces.IManifestEditor;
-import org.eclipse.papyrus.eclipse.project.editors.interfaces.IPluginProjectEditor;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.dialogs.ListSelectionDialog;
-import org.eclipse.ui.internal.misc.StringMatcher;
-
-
-public class RefactoringHandler extends AbstractHandler {
-
-
- private String pluginPattern;
-
- private StringMatcher matcher;
-
- private IFile aboutHtmlFile;
-
- private IFile eplHtmlFile;
-
- private IFile licenseHTMLFile;
-
- private String version;
-
- private String provider;
-
- private boolean testAboutHTML = true;
-
- private boolean testIncubation = true;
-
- public static final String ABOUT_HTML_SOURCE_PATH = "/resources/about.html.file"; //$NON-NLS-1$
-
- public static final String ABOUT_HTML_PATH = "about.html"; //$NON-NLS-1$
-
-
- /**
- *
- * Constructor.
- *
- */
- public RefactoringHandler() {
- //nothing to do
- }
-
- /**
- *
- * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
- *
- * @param event
- * @return
- * @throws ExecutionException
- */
- public Object execute(ExecutionEvent event) throws ExecutionException {
- //OLD CODE
-
-
-
- // //TODO open a dialog with the plugin to edit
- // // MessageDialog messageDialog = new MessageDialog(Display.getCurrent().getActiveShell(), "Information", null, "Warning : the modifications will be done on all opened project in the workspace", , new String[]{"OK", "CANCEL"}}, 0);
- // if(!MessageDialog.openQuestion(Display.getCurrent().getActiveShell(), "Information", "Warning : the modifications will be done on all opened project in the workspace. Are your sure ?")) {
- // return null;
- // }
- // //we open a dialog to ask for the parameters :
- // ParameterDialog parameterDialog = new ParameterDialog(Display.getCurrent().getActiveShell());
- // int value = parameterDialog.open();
- // parameterDialog.getReturnCode();
- // if(value != org.eclipse.jface.dialogs.Dialog.OK) {
- // return null;
- // }
- // //initialize the fields with the result of the dialog
- // this.provider = parameterDialog.getProviderName();
- // this.pluginPattern = parameterDialog.getPluginNamePattern();
- // this.version = parameterDialog.getVersionNumber();
- // this.testIncubation = parameterDialog.isCheckIncubation();
- // this.testAboutHTML = parameterDialog.isCheckHTMLFile();
- // matcher = new StringMatcher(pluginPattern, true, false);
- // List<IProject> projectsToHandle = Arrays.asList(ResourcesPlugin.getWorkspace().getRoot().getProjects());
- // for(IProject project : ResourcesPlugin.getWorkspace().getRoot().getProjects()) {
- // if(project.isOpen()) {
- // try {
- // if(project.getNature(IPluginProjectEditor.PLUGIN_NATURE) != null) {
- // if(matcher.match(project.getName())) {
- // handleProject(project);
- // // projectsToHandle.add(project);
- // } else {
- // // Activator.log.warn(String.format("The plugin %1$s doesn't match the pattern %2$s", project.getName(), pluginPattern)); //$NON-NLS-1$
- // }
- // } else {
- // Activator.log.warn(String.format("The project %s is not a plug-in project", project.getName())); //$NON-NLS-1$
- // // project.close(new NullProgressMonitor());
- // }
- // ResourcesPlugin.getWorkspace().getRoot().refreshLocal(IWorkspaceRoot.DEPTH_INFINITE, new NullProgressMonitor());
- // } catch (CoreException e) {
- // Activator.log.error(e);
- // } catch (IOException e) {
- // Activator.log.error(e);
- // } catch (Throwable e) {
- // Activator.log.error(e);
- // }
- // }
- // }
- // // }
- //
- //
- // return null;
-
- //-----------------NEW CODE-----------------------
- //TODO open a dialog with the plugin to edit
- // MessageDialog messageDialog = new MessageDialog(Display.getCurrent().getActiveShell(), "Information", null, "Warning : the modifications will be done on all opened project in the workspace", , new String[]{"OK", "CANCEL"}}, 0);
-
- //we ask to the user the project to edit
- Shell parentShell = Display.getCurrent().getActiveShell();
- Object input = Arrays.asList(ResourcesPlugin.getWorkspace().getRoot().getProjects());
- ISelection currentSelection = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getSelectionService().getSelection();
- Iterator<?> iterator = ((IStructuredSelection)currentSelection).iterator();
-
- List<IProject> selectedElements = new ArrayList<IProject>();
- while(iterator.hasNext()){
- Object current = iterator.next();
- if(current instanceof IProject){
- selectedElements.add((IProject)current);
- }
- }
- ListSelectionDialog projectDialog = new ListSelectionDialog(parentShell, input, new ProjectContentProvider(), new ProjectLabelProvider(), SELECT_PROJECT_MESSAGE);
-
- projectDialog.setInitialElementSelections(selectedElements);
- if(projectDialog.open() == org.eclipse.jface.dialogs.Dialog.OK) {
- Object[] selection = projectDialog.getResult();
-
-
- //we open a dialog to ask for the parameters :
- ParameterDialog parameterDialog = new ParameterDialog(Display.getCurrent().getActiveShell());
- int value = parameterDialog.open();
- parameterDialog.getReturnCode();
- if(value != org.eclipse.jface.dialogs.Dialog.OK) {
- return null;
- }
- //initialize the fields with the result of the dialog
- this.provider = parameterDialog.getProviderName();
- this.pluginPattern = parameterDialog.getPluginNamePattern();
- this.version = parameterDialog.getVersionNumber();
- this.testIncubation = parameterDialog.isCheckIncubation();
- this.testAboutHTML = parameterDialog.isCheckHTMLFile();
- matcher = new StringMatcher(pluginPattern, true, false);
-
- AbstractProjectManagementHelper pluginHelper = new PluginManagmentHelper(version, provider, testIncubation);
- AbstractProjectManagementHelper featureHelper = new FeatureManagementHelper(version, provider, testIncubation);
- for(Object current : selection) {
- IProject project = (IProject)current;
- if(project.isOpen()) {
- try {
- if(matcher.match(project.getName())) {
- if(project.getNature(IPluginProjectEditor.PLUGIN_NATURE) != null) {
- // pluginHelper.execute(project);
- } else if(project.getNature("org.eclipse.pde.FeatureNature") != null) {
- featureHelper.execute(project);
- }
- }
- ResourcesPlugin.getWorkspace().getRoot().refreshLocal(IWorkspaceRoot.DEPTH_INFINITE, new NullProgressMonitor());
- } catch (CoreException e) {
- Activator.log.error(e);
- } catch (IOException e) {
- Activator.log.error(e);
- } catch (Throwable e) {
- Activator.log.error(e);
- }
- }
- }
- }
- return null;
- }
-
- private static final String SELECT_PROJECT_MESSAGE = "Select the projects to edit.";
-
- protected void handleProject(IProject project) throws CoreException, IOException, Throwable {
- if(this.testAboutHTML) {
- checkAboutHtmlFile(project);
- }
- if(this.testIncubation) {
- checkIncubation(project);
- }
- checkProviderAndVersion(project);
- checkClasspath(project);
- project.refreshLocal(IProject.DEPTH_INFINITE, new NullProgressMonitor());
- }
-
- protected void checkIncubation(IProject project) {
- String name = project.getName();
- if(!name.endsWith("(Incubation)")) {
- // InputDialog dialog = new InputDialog(Display.getCurrent().getActiveShell(), "Edit the plugin name", "This plugin doesn't contains the String '(Incubation)' in its name", project.getName(), new IInputValidator() {
- //
- // public String isValid(String newText) {
- // if(!newText.endsWith("(Incubation)")){
- // return "The name of the plugin should be end with '(Incubation')";
- // }
- // return null;
- // }
- // });
- // while(dialog.open()!=org.eclipse.jface.dialogs.Dialog.OK);
- // String newName = dialog.getValue();
- //TODO : use the manifest editor to change the project name
- Activator.log.warn(NLS.bind("The project {0} doesn't contain (Incubation) in its name", project.getName()));
- }
- }
-
- protected void checkClasspath(IProject project) throws Throwable {
- if(!project.hasNature(IJavaProjectEditor.JAVA_NATURE)) {
- return;
- }
-
- IClasspathEditor editor = new ClasspathEditor(project);
- if(!editor.exists()) {
- return;
- }
-
- //Adds the classpath entries to the build (source.. and output..)
- IBuildEditor buildEditor = getBuildEditor(project, null);
- for(String sourceFolder : editor.getSourceFolders()) {
- buildEditor.registerSourceFolder(sourceFolder + "/");
- }
- for(String binFolder : editor.getBinFolders()) {
- buildEditor.registerBinFolder(binFolder + "/");
- }
-
- buildEditor.save();
- }
-
- protected void checkProviderAndVersion(IProject project) throws CoreException, IOException, Throwable {
- IManifestEditor manifest = new ManifestEditor(project);
- manifest.init();
- boolean manifestChange = false;
-
- if(!manifest.exists()) {
- manifest.create();
- manifestChange = true;
- }
-
- if(provider != null) {
- //TODO : If the string is already externalized, edit the *.properties language file
- //(Can be either plugin.properties or bundle.properties ; see Bundle-localization to find it)
- String bundleVendor = manifest.getBundleVendor();
- if(!provider.equals(bundleVendor)) {
- if(bundleVendor == null || !bundleVendor.startsWith("%")) { //Undefined or not externalized String
- manifest.setBundleVendor(provider);
- manifestChange = true;
- }
- }
- }
- if(version != null) {
- String currentVersion = manifest.getBundleVersion();
- if(!version.equals(currentVersion)) {
- manifest.setBundleVersion(version);
- manifestChange = true;
- }
- }
-
- if(manifestChange) {
- manifest.save();
- }
- }
-
- protected void checkSourceBuild(IProject project) throws Throwable {
- IBuildEditor sourceEditor = getBuildEditor(project, IBuildEditor.SOURCE_BUILD);
- IBuildEditor binEditor = getBuildEditor(project, IBuildEditor.BINARY_BUILD);
-
- //Copy the binary build
- for(String binaryBuildElement : binEditor.getElementsInBuild()) {
- sourceEditor.addToBuild(binaryBuildElement);
- }
-
- //Add the source folders to the build
- //Fix : the source folders are automatically added to source builds
- //for(String sourceFolder : sourceEditor.getSourceFolders()) {
- // sourceEditor.addToBuild(sourceFolder);
- //}
- sourceEditor.save();
- project.getFile(IBuildEditor.BUILD_PROPERTIES_FILE).refreshLocal(IFile.DEPTH_ZERO, new NullProgressMonitor());
- }
-
- protected void checkBinaryBuild(IProject project) throws Throwable {
- IBuildEditor editor = getBuildEditor(project, IBuildEditor.BINARY_BUILD);
- addToBuildIfExists(editor, ABOUT_HTML_PATH);
- addToBuildIfExists(editor, IManifestEditor.META_INF_PATH);
- addToBuildIfExists(editor, IPluginProjectEditor.PLUGIN_XML_FILE);
- addToBuildIfExists(editor, "plugin.properties"); //$NON-NLS-1$
- addToBuildIfExists(editor, "OSGI-INF/"); //$NON-NLS-1$
- editor.save();
- project.getFile(IBuildEditor.BUILD_PROPERTIES_FILE).refreshLocal(IFile.DEPTH_ZERO, new NullProgressMonitor());
- }
-
- protected void addToBuildIfExists(IBuildEditor editor, String file) {
- if(editor.getProject().getFile(file).exists()) {
- editor.addToBuild(file);
- }
- }
-
- protected void checkAboutHtmlFile(IProject project) throws CoreException, IOException {
- IFile targetFile = project.getFile(new Path(ABOUT_HTML_PATH));
- if(targetFile.exists()) {
- return;
- }
-
- InputStream is;
- if(this.aboutHtmlFile == null) {
- URL url = new URL("platform:/plugin/" + Activator.PLUGIN_ID + ABOUT_HTML_SOURCE_PATH); //$NON-NLS-1$
- is = url.openStream();
- } else {
- is = aboutHtmlFile.getContents();
- }
-
- targetFile.create(is, false, new NullProgressMonitor());
- is.close();
- targetFile.refreshLocal(IFile.DEPTH_ZERO, new NullProgressMonitor());
- }
-
-
- protected void checkedHTMLFile(IProject project, final String sourcePath, final String targetPath) throws CoreException, IOException {
- IFile targetFile = project.getFile(new Path(ABOUT_HTML_PATH));
- if(targetFile.exists()) {
- return;
- }
-
- InputStream is;
- if(aboutHtmlFile == null) {
- URL url = new URL("platform:/plugin/" + Activator.PLUGIN_ID + ABOUT_HTML_SOURCE_PATH); //$NON-NLS-1$
- is = url.openStream();
- } else {
- is = aboutHtmlFile.getContents();
- }
-
- targetFile.create(is, false, new NullProgressMonitor());
- is.close();
- targetFile.refreshLocal(IFile.DEPTH_ZERO, new NullProgressMonitor());
- }
-
- protected IBuildEditor getBuildEditor(IProject project, String buildKey) {
- IBuildEditor editor = new BuildEditor(project, buildKey);
- editor.init();
- if(!editor.exists()) {
- editor.create();
- }
- return editor;
- }
-
- /**
- *
- * This content provider returns IProject
- *
- */
- private class ProjectContentProvider implements IStructuredContentProvider {
-
- /**
- *
- * @see org.eclipse.jface.viewers.IContentProvider#dispose()
- *
- */
- public void dispose() {
- //nothing to do
- }
-
- /**
- *
- * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
- *
- * @param viewer
- * @param oldInput
- * @param newInput
- */
- public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
- //nothing to do
- }
-
- /**
- *
- * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
- *
- * @param inputElement
- * @return
- */
- public Object[] getElements(Object inputElement) {
-
- if(inputElement instanceof List<?>) {
- List<?> input = (List<?>)inputElement;
- List<IProject> editableProject = new ArrayList<IProject>();
- for(Object current : input) {
- if(current instanceof IProject) {
- if(((IProject)current).isOpen()) {
- editableProject.add((IProject)current);
- }
- }
- }
- return editableProject.toArray();
-
- }
- return new Object[0];
- }
-
- }
-
- /**
- *
- * This class provides label and icons for IProject
- *
- */
- private class ProjectLabelProvider implements ILabelProvider {
-
- /**
- *
- * @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener)
- *
- * @param listener
- */
- public void addListener(ILabelProviderListener listener) {
- //nothing to do
- }
-
- /**
- *
- * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
- *
- */
- public void dispose() {
- //nothing to do
- }
-
- /**
- *
- * @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang.Object, java.lang.String)
- *
- * @param element
- * @param property
- * @return
- */
- public boolean isLabelProperty(Object element, String property) {
- //nothing to do
- return false;
- }
-
- /**
- *
- * @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener)
- *
- * @param listener
- */
- public void removeListener(ILabelProviderListener listener) {
- //nothing to do
- }
-
- /**
- *
- * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object)
- *
- * @param element
- * @return
- */
- public Image getImage(Object element) {
- // TODO Auto-generated method stub
- return null;
- }
-
- /**
- *
- * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
- *
- * @param element
- * @return
- */
- public String getText(Object element) {
- if(element instanceof IProject) {
- return ((IProject)element).getName();
- }
- return "";
- }
-
- }
-}
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management_old/src/org/eclipse/papyrus/dev/project/management/helper/AbstractProjectManagementHelper.java b/sandbox/org.eclipse.papyrus.dev.project.management_old/src/org/eclipse/papyrus/dev/project/management/helper/AbstractProjectManagementHelper.java
deleted file mode 100644
index 0fe7db0829c..00000000000
--- a/sandbox/org.eclipse.papyrus.dev.project.management_old/src/org/eclipse/papyrus/dev/project/management/helper/AbstractProjectManagementHelper.java
+++ /dev/null
@@ -1,107 +0,0 @@
-package org.eclipse.papyrus.dev.project.management.helper;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.jface.dialogs.IInputValidator;
-import org.eclipse.jface.dialogs.InputDialog;
-import org.eclipse.papyrus.dev.project.management.Activator;
-import org.eclipse.papyrus.eclipse.project.editors.file.BuildEditor;
-import org.eclipse.papyrus.eclipse.project.editors.interfaces.IBuildEditor;
-import org.eclipse.swt.widgets.Display;
-
-
-public abstract class AbstractProjectManagementHelper {
-
- public static final String INCUBATION = "(Incubation)";
-
- final protected String version;
-
- final protected String provider;
-
- final protected boolean testMarkIncubation;
-
- final private String projectNature;
-
- public AbstractProjectManagementHelper(final String projectNature, final String version, final String provider, final boolean testMarkIncubation) {
- this.projectNature = projectNature;
- this.version = version;
- this.provider = provider;
- this.testMarkIncubation = testMarkIncubation;
- }
-
-
- public final void execute(final IProject project) throws Throwable {
- if(project.isOpen()) {
- Assert.isTrue(project.getNature(this.projectNature) != null);
- handleProject(project);
- }
- project.refreshLocal(IProject.DEPTH_INFINITE, new NullProgressMonitor());
- }
-
- protected abstract void handleProject(IProject project) throws CoreException, IOException, Throwable;
-
-
- /**
- * Add the file to the project if it doesn't exists
- *
- * @param project
- * the project to edit
- * @param sourcePath
- * the sourcePath for the file
- * @param targetPath
- * the target Path for the file
- * @throws CoreException
- * @throws IOException
- */
- protected void checkFile(final IProject project, final String sourcePath, final String targetPath) throws CoreException, IOException {
- IFile targetFile = project.getFile(new Path(targetPath));
- if(targetFile.exists()) {
- return;
- }
-
- InputStream is;
- URL url = new URL("platform:/plugin/" + Activator.PLUGIN_ID + sourcePath); //$NON-NLS-1$
- is = url.openStream();
- targetFile.create(is, false, new NullProgressMonitor());
- is.close();
- targetFile.refreshLocal(IFile.DEPTH_ZERO, new NullProgressMonitor());
- }
-
- protected IBuildEditor getBuildEditor(IProject project, String buildKey) {
- IBuildEditor editor = new BuildEditor(project, buildKey);
- editor.init();
- if(!editor.exists()) {
- editor.create();
- }
- return editor;
- }
-
- protected abstract void checkIncubation(final IProject project) throws IOException, CoreException, Throwable;
-
- protected String askNewName(final String label) {
- InputDialog dialog = new InputDialog(Display.getCurrent().getActiveShell(), "Edit the name", "The name should be ended by : " + INCUBATION, label, new AbstractProjectManagementHelper.IncubationValidator());
- dialog.open();
- //TODO the user can cancel the modification
- String newLabel = dialog.getValue();
- return newLabel;
- }
-
- public class IncubationValidator implements IInputValidator {
-
- public String isValid(String newText) {
-
- if(newText==null || newText.equals("") || !newText.endsWith(INCUBATION)) {
- return "The current name is not correct";
- }
- return null;
- }
- }
-}
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management_old/src/org/eclipse/papyrus/dev/project/management/helper/FeatureManagementHelper.java b/sandbox/org.eclipse.papyrus.dev.project.management_old/src/org/eclipse/papyrus/dev/project/management/helper/FeatureManagementHelper.java
deleted file mode 100644
index f7e5bf73b21..00000000000
--- a/sandbox/org.eclipse.papyrus.dev.project.management_old/src/org/eclipse/papyrus/dev/project/management/helper/FeatureManagementHelper.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package org.eclipse.papyrus.dev.project.management.helper;
-
-import java.io.IOException;
-
-import javax.xml.parsers.ParserConfigurationException;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.papyrus.eclipse.project.editors.interfaces.IFeatureProjectEditor;
-import org.eclipse.papyrus.eclipse.project.editors.project.FeatureProjectEditor;
-import org.xml.sax.SAXException;
-
-
-public class FeatureManagementHelper extends AbstractProjectManagementHelper{
-
-
- public static final String EPL_HTML_SOURCE_PATH = "/resources/epl-v10.html.file";
-
- public static final String EPL_HTML_PATH = "epl-v10.html";
-
- public static final String LICENCE_SOURCE_HTML_PATH = "/resources/license.html.file";
-
- public static final String LICENCE_HTML_PATH = "license.html";
-
-
- public FeatureManagementHelper(final String version, final String provider, final boolean testMarkIncubation) {
- super("org.eclipse.pde.FeatureNature", version, provider, testMarkIncubation);
- }
-
- @Override
- protected void handleProject(IProject project) throws CoreException, IOException, Throwable {
- checkFile(project, EPL_HTML_SOURCE_PATH, EPL_HTML_PATH);
- checkFile(project, LICENCE_SOURCE_HTML_PATH, LICENCE_HTML_PATH);
- checkIncubation(project);
- setDescription(project);
- }
-
- @Override
- protected void checkIncubation(IProject project) throws Throwable {
- IFeatureProjectEditor editor = getFeatureEditor(project);
- String label = editor.getLabel();
-// if(!label.endsWith(INCUBATION)){
- label = askNewName(label);
- editor.setLabel(label);
-
-
-
- ((FeatureProjectEditor)editor).save();
-// }
-
-
- }
-
- protected IFeatureProjectEditor getFeatureEditor(final IProject project) throws ParserConfigurationException, SAXException, IOException, CoreException{
- FeatureProjectEditor editor = new FeatureProjectEditor(project);
- editor.init();
- return editor;
- }
-
- protected void setDescription(final IProject project) throws Throwable{
- IFeatureProjectEditor editor = getFeatureEditor(project);
- editor.setCopyright("http://www.google.fr/myOwnURLNicest", "ma description perso");
- ((FeatureProjectEditor)editor).save();
- }
-}
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management_old/src/org/eclipse/papyrus/dev/project/management/helper/PluginManagmentHelper.java b/sandbox/org.eclipse.papyrus.dev.project.management_old/src/org/eclipse/papyrus/dev/project/management/helper/PluginManagmentHelper.java
deleted file mode 100644
index 3950c3128d0..00000000000
--- a/sandbox/org.eclipse.papyrus.dev.project.management_old/src/org/eclipse/papyrus/dev/project/management/helper/PluginManagmentHelper.java
+++ /dev/null
@@ -1,206 +0,0 @@
-package org.eclipse.papyrus.dev.project.management.helper;
-
-import java.io.IOException;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.dialogs.IInputValidator;
-import org.eclipse.jface.dialogs.InputDialog;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.papyrus.dev.project.management.Activator;
-import org.eclipse.papyrus.eclipse.project.editors.file.BuildEditor;
-import org.eclipse.papyrus.eclipse.project.editors.file.BundlePropertiesEditor;
-import org.eclipse.papyrus.eclipse.project.editors.file.ClasspathEditor;
-import org.eclipse.papyrus.eclipse.project.editors.file.ManifestEditor;
-import org.eclipse.papyrus.eclipse.project.editors.interfaces.IBuildEditor;
-import org.eclipse.papyrus.eclipse.project.editors.interfaces.IClasspathEditor;
-import org.eclipse.papyrus.eclipse.project.editors.interfaces.IJavaProjectEditor;
-import org.eclipse.papyrus.eclipse.project.editors.interfaces.IManifestEditor;
-import org.eclipse.papyrus.eclipse.project.editors.interfaces.IPluginProjectEditor;
-import org.eclipse.swt.widgets.Display;
-
-
-public class PluginManagmentHelper extends AbstractProjectManagementHelper {
-
- public static final String ABOUT_HTML_SOURCE_PATH = "/resources/about.html.file"; //$NON-NLS-1$
-
- public static final String ABOUT_HTML_PATH = "about.html"; //$NON-NLS-1$
-
- public PluginManagmentHelper(final String version, final String provider, final boolean testMarkIncubation) {
- super(IPluginProjectEditor.PLUGIN_NATURE, version, provider, testMarkIncubation);
- }
-
- protected void handleProject(IProject project) throws CoreException, IOException, Throwable {
- checkFile(project, ABOUT_HTML_SOURCE_PATH, ABOUT_HTML_PATH);
- if(testMarkIncubation) {
- checkIncubation(project);
- }
- checkProviderAndVersion(project);
- checkClasspath(project);
- project.refreshLocal(IProject.DEPTH_INFINITE, new NullProgressMonitor());
- }
-
- protected void checkClasspath(IProject project) throws Throwable {
- if(!project.hasNature(IJavaProjectEditor.JAVA_NATURE)) {
- return;
- }
-
- IClasspathEditor editor = new ClasspathEditor(project);
- if(!editor.exists()) {
- return;
- }
-
- //Adds the classpath entries to the build (source.. and output..)
- IBuildEditor buildEditor = getBuildEditor(project, null);
- for(String sourceFolder : editor.getSourceFolders()) {
- buildEditor.registerSourceFolder(sourceFolder + "/");
- }
- for(String binFolder : editor.getBinFolders()) {
- buildEditor.registerBinFolder(binFolder + "/");
- }
-
- buildEditor.save();
- }
-
- protected void checkProviderAndVersion(IProject project) throws CoreException, IOException, Throwable {
- IManifestEditor manifest = new ManifestEditor(project);
- manifest.init();
- boolean manifestChange = false;
-
- if(!manifest.exists()) {
- manifest.create();
- manifestChange = true;
- }
-
- if(provider != null) {
- //TODO : If the string is already externalized, edit the *.properties language file
- //(Can be either plugin.properties or bundle.properties ; see Bundle-localization to find it)
- String bundleVendor = manifest.getBundleVendor();
- if(!provider.equals(bundleVendor)) {
- if(bundleVendor == null || !bundleVendor.startsWith("%")) { //Undefined or not externalized String
- manifest.setBundleVendor(provider);
- manifestChange = true;
- }
- }
- }
- if(version != null) {
- String currentVersion = manifest.getBundleVersion();
- if(!version.equals(currentVersion)) {
- manifest.setBundleVersion(version);
- manifestChange = true;
- }
- }
-
- //test the name of the project
- String name = manifest.getBundleName();
- final String INCUBATION = "(Incubation)";
- IInputValidator validator = new IInputValidator() {
-
- public String isValid(String newText) {
- if(!newText.endsWith(INCUBATION)){
- return "The current name is not correct";
- }
- return null;
- }
- };
-
-
- if(!name.endsWith(INCUBATION)){
- InputDialog dialog = new InputDialog(Display.getCurrent().getActiveShell(), "Change the name of the bundle", "The bundle's name should be ended by : " + INCUBATION, name, validator);
- dialog.open();
- name = dialog.getValue();
- manifest.setBundleName(name);
- manifestChange = true;
-
- }
-
- if(manifestChange) {
- manifest.save();
- }
- }
-
- protected void checkSourceBuild(IProject project) throws Throwable {
- IBuildEditor sourceEditor = getBuildEditor(project, IBuildEditor.SOURCE_BUILD);
- IBuildEditor binEditor = getBuildEditor(project, IBuildEditor.BINARY_BUILD);
-
- //Copy the binary build
- for(String binaryBuildElement : binEditor.getElementsInBuild()) {
- sourceEditor.addToBuild(binaryBuildElement);
- }
-
- //Add the source folders to the build
- //Fix : the source folders are automatically added to source builds
- //for(String sourceFolder : sourceEditor.getSourceFolders()) {
- // sourceEditor.addToBuild(sourceFolder);
- //}
- sourceEditor.save();
- project.getFile(IBuildEditor.BUILD_PROPERTIES_FILE).refreshLocal(IFile.DEPTH_ZERO, new NullProgressMonitor());
- }
-
- protected void checkBinaryBuild(IProject project) throws Throwable {
- IBuildEditor editor = getBuildEditor(project, IBuildEditor.BINARY_BUILD);
- addToBuildIfExists(editor, ABOUT_HTML_PATH);
- addToBuildIfExists(editor, IManifestEditor.META_INF_PATH);
- addToBuildIfExists(editor, IPluginProjectEditor.PLUGIN_XML_FILE);
- addToBuildIfExists(editor, "plugin.properties"); //$NON-NLS-1$
- addToBuildIfExists(editor, "OSGI-INF/"); //$NON-NLS-1$
- editor.save();
- project.getFile(IBuildEditor.BUILD_PROPERTIES_FILE).refreshLocal(IFile.DEPTH_ZERO, new NullProgressMonitor());
- }
-
- protected void addToBuildIfExists(IBuildEditor editor, String file) {
- if(editor.getProject().getFile(file).exists()) {
- editor.addToBuild(file);
- }
- }
-
- @Override
- protected void checkIncubation(final IProject project) throws Throwable {
- IManifestEditor manifest = new ManifestEditor(project);
- manifest.init();
- boolean manifestChange = false;
-
- if(!manifest.exists()) {
- manifest.create();
- manifestChange = true;
- }
-
- //tests the name of the project
- String name = manifest.getBundleName();
- if(name.startsWith("%")){
- String localization = manifest.getBundleLocalization();
- if(localization==null){
- //TODO log an error
- return;
- }
- BundlePropertiesEditor editor = getBundlePropertiesEditor(project, localization);
- String value = editor.getValue(name.substring(1));
- int i=0;
- i++;
-
- }else if(!name.endsWith(INCUBATION)){
- InputDialog dialog = new InputDialog(Display.getCurrent().getActiveShell(), "Change the name of the bundle", "The bundle's name should be ended by : " + INCUBATION, name, new AbstractProjectManagementHelper.IncubationValidator());
- dialog.open();
- name = dialog.getValue();
- manifest.setBundleName(name);
- manifestChange = true;
-
- }
-
- if(manifestChange) {
- manifest.save();
- }
- }
- protected BundlePropertiesEditor getBundlePropertiesEditor(IProject project, String filePath) {
- BundlePropertiesEditor editor = new BundlePropertiesEditor(project, filePath
- );
- editor.init();
- if(!editor.exists()) {
- editor.create();
- }
- return editor;
- }
-}
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management_old/src/org/eclipse/papyrus/dev/project/management/ui/ParameterDialog.java b/sandbox/org.eclipse.papyrus.dev.project.management_old/src/org/eclipse/papyrus/dev/project/management/ui/ParameterDialog.java
deleted file mode 100644
index a2ee0436308..00000000000
--- a/sandbox/org.eclipse.papyrus.dev.project.management_old/src/org/eclipse/papyrus/dev/project/management/ui/ParameterDialog.java
+++ /dev/null
@@ -1,213 +0,0 @@
-/*****************************************************************************
- * Copyright (c) 2012 CEA LIST.
- *
- *
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
- *
- *****************************************************************************/
-package org.eclipse.papyrus.dev.project.management.ui;
-
-
-
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.dialogs.InputDialog;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
-
-
-
-/**
- * The Class ParameterDialog.
- */
-public class ParameterDialog extends InputDialog {
-
- /** boolean to check the HTML file. */
- private boolean checkHTMLFile = false;
-
- /** boolean to check the mark incubation. */
- private boolean checkIncubation = true;
-
- /** String for the version number. */
- private String versionNumber = "0.0.0";
-
- /** the plugin name pattern. */
- private String pluginNamePattern = "org.eclipse.papyrus.*";
-
- /** the provider name for these plugins. */
- private String providerName = "Eclipse Modeling Project";
-
- /** The version text. */
- private Text versionText;
-
- /** The provider text. */
- private Text providerText;
-
- /** The plugin pattern text. */
- private Text pluginPatternText;
-
- /** The verify incubation button. */
- private Button verifyIncubationButton;
-
- /** The verify html file button. */
- private Button verifyHTMLFileButton;
-
- /**
- * Instantiates a new parameter dialog.
- *
- * @param activeShell the active shell
- */
- public ParameterDialog(Shell activeShell) {
- super(activeShell, "Plugin managment", "Apply the modifications on the plugin beginning with : ", "org.eclipse.papyrus*", null);
- }
-
- /**
- * @see org.eclipse.jface.dialogs.InputDialog#createDialogArea(org.eclipse.swt.widgets.Composite)
- *
- * @param parent
- * @return
- */
- protected Control createDialogArea(Composite parent) {
- Composite composite = (Composite)super.createDialogArea(parent);
-
- // Composite composite = new Composite(parent, SWT.NONE);
- // GridLayout layout = new GridLayout();
- // layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
- // layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
- // layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING);
- // layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
- // composite.setLayout(layout);
- // composite.setLayoutData(new GridData(GridData.FILL_BOTH));
- // applyDialogFont(composite);
- // return composite;
-
- //the field with the plugin name pattern
- // Label pluginNameLabel = new Label(composite, SWT.WRAP);
- // pluginNameLabel.setText("Apply the modifications on the plugin beginning with : ");
- GridData data = new GridData(GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL | GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_CENTER);
- // data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH);
- // pluginNameLabel.setLayoutData(data);
- // pluginNameLabel.setFont(parent.getFont());
- // Text pluginNameText = new Text(composite, getInputTextStyle());
- // pluginNameText.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL));
- // applyDialogFont(composite);
- // pluginNameText.setText("org.eclipse.papyrus");
-
- // //the field for the version number
- Label versioLabel = new Label(composite, SWT.WRAP);
- versioLabel.setText("Version : ");
- // GridData data = new GridData(GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL | GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_CENTER);
- data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH);
- versioLabel.setLayoutData(data);
- versioLabel.setFont(parent.getFont());
- versionText = new Text(composite, getInputTextStyle());
- versionText.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL));
- applyDialogFont(composite);
- versionText.setText("0.0.0");
-
-
- //the field with the provider name
- Label providerNameLabel = new Label(composite, SWT.WRAP);
- providerNameLabel.setText("Provider name : ");
- // GridData data = new GridData(GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL | GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_CENTER);
- data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH);
- providerNameLabel.setLayoutData(data);
- providerNameLabel.setFont(parent.getFont());
- providerText = new Text(composite, getInputTextStyle());
- providerText.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL));
- applyDialogFont(composite);
- providerText.setText("Eclipse Modeling Project");
-
- // verify the HTML File
- verifyHTMLFileButton = new Button(composite, SWT.CHECK);
- verifyHTMLFileButton.setText("Verify the about.html file ?");
- verifyHTMLFileButton.setSelection(true);
- verifyHTMLFileButton.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL));
- applyDialogFont(composite);
-
- //verify the text ("Incubation") in the plugin name?
- verifyIncubationButton = new Button(composite, SWT.CHECK);
- verifyIncubationButton.setText("Verify the mark 'Incubation' in the plugin name?");
- verifyIncubationButton.setSelection(true);
- verifyIncubationButton.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL));
- applyDialogFont(composite);
-
- return composite;
- }
-
- /**
- * @see org.eclipse.jface.dialogs.Dialog#okPressed()
- *
- */
- @Override
- protected void okPressed() {
- //we get the value before the dispose of the widgets
- this.checkIncubation = this.verifyIncubationButton.getSelection();
- this.versionNumber = this.versionText.getText();
- this.pluginNamePattern = getText().getText();//pluginPatternText.getText();
-// this.pluginNamePattern = this.pluginPatternText.getText();
- this.providerName = this.providerText.getText();
- this.checkHTMLFile = this.verifyHTMLFileButton.getSelection();
- super.okPressed();
- }
-
-
- /**
- * Checks if there is the html file.
- *
- * @return true, if there is the html file.
- */
- public boolean isCheckHTMLFile() {
- return checkHTMLFile;
- }
-
-
-/**
- *
- * @return
- * true, if we check the mark "(Incubation)"
- */
- public boolean isCheckIncubation() {
- return checkIncubation;
- }
-
-
- /**
- * Gets the plugin name pattern.
- *
- * @return the plugin name pattern
- */
- public String getPluginNamePattern() {
- return pluginNamePattern;
- }
-
- /**
- * Gets the provider name.
- *
- * @return the provider name
- */
- public String getProviderName() {
- return providerName;
- }
-
- /**
- * Gets the version number.
- *
- * @return the version number
- */
- public String getVersionNumber() {
- return this.versionNumber;
- }
-
-}
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management_old/src/org/eclipse/papyrus/plugin/management/Activator.java b/sandbox/org.eclipse.papyrus.dev.project.management_old/src/org/eclipse/papyrus/plugin/management/Activator.java
deleted file mode 100644
index 6e50c43b61d..00000000000
--- a/sandbox/org.eclipse.papyrus.dev.project.management_old/src/org/eclipse/papyrus/plugin/management/Activator.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package org.eclipse.papyrus.plugin.management;
-
-import org.eclipse.papyrus.infra.core.log.LogHelper;
-import org.eclipse.ui.plugin.AbstractUIPlugin;
-import org.osgi.framework.BundleContext;
-
-/**
- * The activator class controls the plug-in life cycle
- */
-public class Activator extends AbstractUIPlugin {
-
- // The plug-in ID
- public static final String PLUGIN_ID = "org.eclipse.papyrus.plugin.management"; //$NON-NLS-1$
-
- // The shared instance
- private static Activator plugin;
-
- public static LogHelper log;
-
- /**
- * The constructor
- */
- public Activator() {
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
- */
- @Override
- public void start(BundleContext context) throws Exception {
- super.start(context);
- plugin = this;
- log = new LogHelper(this);
-
- // RefactoringRuntime runtime = new RefactoringRuntime();
- // runtime.setPluginPattern("org.eclipse.papyrus.*");
- // runtime.setProvider(null);
- // runtime.setVersion("0.8.2.qualifier");
- // try {
- // runtime.run();
- // } catch (Throwable e) {
- // log.error(e);
- // }
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
- */
- @Override
- public void stop(BundleContext context) throws Exception {
- plugin = null;
- super.stop(context);
- }
-
- /**
- * Returns the shared instance
- *
- * @return the shared instance
- */
- public static Activator getDefault() {
- return plugin;
- }
-
-}
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management_old/src/org/eclipse/papyrus/plugin/management/handler/RefactoringHandler.java b/sandbox/org.eclipse.papyrus.dev.project.management_old/src/org/eclipse/papyrus/plugin/management/handler/RefactoringHandler.java
deleted file mode 100644
index a12529f5d3b..00000000000
--- a/sandbox/org.eclipse.papyrus.dev.project.management_old/src/org/eclipse/papyrus/plugin/management/handler/RefactoringHandler.java
+++ /dev/null
@@ -1,529 +0,0 @@
-/*****************************************************************************
- * Copyright (c) 2012 CEA LIST.
- *
- *
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Camille Letavernier (CEA-LIST) camille.letavernier@cea.fr - Initial API and implementation
- * Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr
- *
- *****************************************************************************/
-package org.eclipse.papyrus.plugin.management.handler;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.core.commands.AbstractHandler;
-import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IWorkspaceRoot;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.jface.viewers.ILabelProvider;
-import org.eclipse.jface.viewers.ILabelProviderListener;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.papyrus.eclipse.project.editors.file.BuildEditor;
-import org.eclipse.papyrus.eclipse.project.editors.file.ClasspathEditor;
-import org.eclipse.papyrus.eclipse.project.editors.file.ManifestEditor;
-import org.eclipse.papyrus.eclipse.project.editors.interfaces.IBuildEditor;
-import org.eclipse.papyrus.eclipse.project.editors.interfaces.IClasspathEditor;
-import org.eclipse.papyrus.eclipse.project.editors.interfaces.IJavaProjectEditor;
-import org.eclipse.papyrus.eclipse.project.editors.interfaces.IManifestEditor;
-import org.eclipse.papyrus.eclipse.project.editors.interfaces.IPluginProjectEditor;
-import org.eclipse.papyrus.plugin.management.Activator;
-import org.eclipse.papyrus.plugin.management.helper.AbstractProjectManagementHelper;
-import org.eclipse.papyrus.plugin.management.helper.FeatureManagementHelper;
-import org.eclipse.papyrus.plugin.management.helper.PluginManagmentHelper;
-import org.eclipse.papyrus.plugin.management.ui.ParameterDialog;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.dialogs.ListSelectionDialog;
-import org.eclipse.ui.internal.misc.StringMatcher;
-
-
-public class RefactoringHandler extends AbstractHandler {
-
-
- private String pluginPattern;
-
- private StringMatcher matcher;
-
- private IFile aboutHtmlFile;
-
- private IFile eplHtmlFile;
-
- private IFile licenseHTMLFile;
-
- private String version;
-
- private String provider;
-
- private boolean testAboutHTML = true;
-
- private boolean testIncubation = true;
-
- public static final String ABOUT_HTML_SOURCE_PATH = "/resources/about.html.file"; //$NON-NLS-1$
-
- public static final String ABOUT_HTML_PATH = "about.html"; //$NON-NLS-1$
-
-
- /**
- *
- * Constructor.
- *
- */
- public RefactoringHandler() {
- //nothing to do
- }
-
- /**
- *
- * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
- *
- * @param event
- * @return
- * @throws ExecutionException
- */
- public Object execute(ExecutionEvent event) throws ExecutionException {
- //OLD CODE
-
-
-
- // //TODO open a dialog with the plugin to edit
- // // MessageDialog messageDialog = new MessageDialog(Display.getCurrent().getActiveShell(), "Information", null, "Warning : the modifications will be done on all opened project in the workspace", , new String[]{"OK", "CANCEL"}}, 0);
- // if(!MessageDialog.openQuestion(Display.getCurrent().getActiveShell(), "Information", "Warning : the modifications will be done on all opened project in the workspace. Are your sure ?")) {
- // return null;
- // }
- // //we open a dialog to ask for the parameters :
- // ParameterDialog parameterDialog = new ParameterDialog(Display.getCurrent().getActiveShell());
- // int value = parameterDialog.open();
- // parameterDialog.getReturnCode();
- // if(value != org.eclipse.jface.dialogs.Dialog.OK) {
- // return null;
- // }
- // //initialize the fields with the result of the dialog
- // this.provider = parameterDialog.getProviderName();
- // this.pluginPattern = parameterDialog.getPluginNamePattern();
- // this.version = parameterDialog.getVersionNumber();
- // this.testIncubation = parameterDialog.isCheckIncubation();
- // this.testAboutHTML = parameterDialog.isCheckHTMLFile();
- // matcher = new StringMatcher(pluginPattern, true, false);
- // List<IProject> projectsToHandle = Arrays.asList(ResourcesPlugin.getWorkspace().getRoot().getProjects());
- // for(IProject project : ResourcesPlugin.getWorkspace().getRoot().getProjects()) {
- // if(project.isOpen()) {
- // try {
- // if(project.getNature(IPluginProjectEditor.PLUGIN_NATURE) != null) {
- // if(matcher.match(project.getName())) {
- // handleProject(project);
- // // projectsToHandle.add(project);
- // } else {
- // // Activator.log.warn(String.format("The plugin %1$s doesn't match the pattern %2$s", project.getName(), pluginPattern)); //$NON-NLS-1$
- // }
- // } else {
- // Activator.log.warn(String.format("The project %s is not a plug-in project", project.getName())); //$NON-NLS-1$
- // // project.close(new NullProgressMonitor());
- // }
- // ResourcesPlugin.getWorkspace().getRoot().refreshLocal(IWorkspaceRoot.DEPTH_INFINITE, new NullProgressMonitor());
- // } catch (CoreException e) {
- // Activator.log.error(e);
- // } catch (IOException e) {
- // Activator.log.error(e);
- // } catch (Throwable e) {
- // Activator.log.error(e);
- // }
- // }
- // }
- // // }
- //
- //
- // return null;
-
- //-----------------NEW CODE-----------------------
- //TODO open a dialog with the plugin to edit
- // MessageDialog messageDialog = new MessageDialog(Display.getCurrent().getActiveShell(), "Information", null, "Warning : the modifications will be done on all opened project in the workspace", , new String[]{"OK", "CANCEL"}}, 0);
-
- //we ask to the user the project to edit
- Shell parentShell = Display.getCurrent().getActiveShell();
- Object input = Arrays.asList(ResourcesPlugin.getWorkspace().getRoot().getProjects());
- ISelection currentSelection = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getSelectionService().getSelection();
- Iterator<?> iterator = ((IStructuredSelection)currentSelection).iterator();
-
- List<IProject> selectedElements = new ArrayList<IProject>();
- while(iterator.hasNext()){
- Object current = iterator.next();
- if(current instanceof IProject){
- selectedElements.add((IProject)current);
- }
- }
- ListSelectionDialog projectDialog = new ListSelectionDialog(parentShell, input, new ProjectContentProvider(), new ProjectLabelProvider(), SELECT_PROJECT_MESSAGE);
-
- projectDialog.setInitialElementSelections(selectedElements);
- if(projectDialog.open() == org.eclipse.jface.dialogs.Dialog.OK) {
- Object[] selection = projectDialog.getResult();
-
-
- //we open a dialog to ask for the parameters :
- ParameterDialog parameterDialog = new ParameterDialog(Display.getCurrent().getActiveShell());
- int value = parameterDialog.open();
- parameterDialog.getReturnCode();
- if(value != org.eclipse.jface.dialogs.Dialog.OK) {
- return null;
- }
- //initialize the fields with the result of the dialog
- this.provider = parameterDialog.getProviderName();
- this.pluginPattern = parameterDialog.getPluginNamePattern();
- this.version = parameterDialog.getVersionNumber();
- this.testIncubation = parameterDialog.isCheckIncubation();
- this.testAboutHTML = parameterDialog.isCheckHTMLFile();
- matcher = new StringMatcher(pluginPattern, true, false);
-
- AbstractProjectManagementHelper pluginHelper = new PluginManagmentHelper(version, provider, testIncubation);
- AbstractProjectManagementHelper featureHelper = new FeatureManagementHelper(version, provider, testIncubation);
- for(Object current : selection) {
- IProject project = (IProject)current;
- if(project.isOpen()) {
- try {
- if(matcher.match(project.getName())) {
- if(project.getNature(IPluginProjectEditor.PLUGIN_NATURE) != null) {
- // pluginHelper.execute(project);
- } else if(project.getNature("org.eclipse.pde.FeatureNature") != null) {
- featureHelper.execute(project);
- }
- }
- ResourcesPlugin.getWorkspace().getRoot().refreshLocal(IWorkspaceRoot.DEPTH_INFINITE, new NullProgressMonitor());
- } catch (CoreException e) {
- Activator.log.error(e);
- } catch (IOException e) {
- Activator.log.error(e);
- } catch (Throwable e) {
- Activator.log.error(e);
- }
- }
- }
- }
- return null;
- }
-
- private static final String SELECT_PROJECT_MESSAGE = "Select the projects to edit.";
-
- protected void handleProject(IProject project) throws CoreException, IOException, Throwable {
- if(this.testAboutHTML) {
- checkAboutHtmlFile(project);
- }
- if(this.testIncubation) {
- checkIncubation(project);
- }
- checkProviderAndVersion(project);
- checkClasspath(project);
- project.refreshLocal(IProject.DEPTH_INFINITE, new NullProgressMonitor());
- }
-
- protected void checkIncubation(IProject project) {
- String name = project.getName();
- if(!name.endsWith("(Incubation)")) {
- // InputDialog dialog = new InputDialog(Display.getCurrent().getActiveShell(), "Edit the plugin name", "This plugin doesn't contains the String '(Incubation)' in its name", project.getName(), new IInputValidator() {
- //
- // public String isValid(String newText) {
- // if(!newText.endsWith("(Incubation)")){
- // return "The name of the plugin should be end with '(Incubation')";
- // }
- // return null;
- // }
- // });
- // while(dialog.open()!=org.eclipse.jface.dialogs.Dialog.OK);
- // String newName = dialog.getValue();
- //TODO : use the manifest editor to change the project name
- Activator.log.warn(NLS.bind("The project {0} doesn't contain (Incubation) in its name", project.getName()));
- }
- }
-
- protected void checkClasspath(IProject project) throws Throwable {
- if(!project.hasNature(IJavaProjectEditor.JAVA_NATURE)) {
- return;
- }
-
- IClasspathEditor editor = new ClasspathEditor(project);
- if(!editor.exists()) {
- return;
- }
-
- //Adds the classpath entries to the build (source.. and output..)
- IBuildEditor buildEditor = getBuildEditor(project, null);
- for(String sourceFolder : editor.getSourceFolders()) {
- buildEditor.registerSourceFolder(sourceFolder + "/");
- }
- for(String binFolder : editor.getBinFolders()) {
- buildEditor.registerBinFolder(binFolder + "/");
- }
-
- buildEditor.save();
- }
-
- protected void checkProviderAndVersion(IProject project) throws CoreException, IOException, Throwable {
- IManifestEditor manifest = new ManifestEditor(project);
- manifest.init();
- boolean manifestChange = false;
-
- if(!manifest.exists()) {
- manifest.create();
- manifestChange = true;
- }
-
- if(provider != null) {
- //TODO : If the string is already externalized, edit the *.properties language file
- //(Can be either plugin.properties or bundle.properties ; see Bundle-localization to find it)
- String bundleVendor = manifest.getBundleVendor();
- if(!provider.equals(bundleVendor)) {
- if(bundleVendor == null || !bundleVendor.startsWith("%")) { //Undefined or not externalized String
- manifest.setBundleVendor(provider);
- manifestChange = true;
- }
- }
- }
- if(version != null) {
- String currentVersion = manifest.getBundleVersion();
- if(!version.equals(currentVersion)) {
- manifest.setBundleVersion(version);
- manifestChange = true;
- }
- }
-
- if(manifestChange) {
- manifest.save();
- }
- }
-
- protected void checkSourceBuild(IProject project) throws Throwable {
- IBuildEditor sourceEditor = getBuildEditor(project, IBuildEditor.SOURCE_BUILD);
- IBuildEditor binEditor = getBuildEditor(project, IBuildEditor.BINARY_BUILD);
-
- //Copy the binary build
- for(String binaryBuildElement : binEditor.getElementsInBuild()) {
- sourceEditor.addToBuild(binaryBuildElement);
- }
-
- //Add the source folders to the build
- //Fix : the source folders are automatically added to source builds
- //for(String sourceFolder : sourceEditor.getSourceFolders()) {
- // sourceEditor.addToBuild(sourceFolder);
- //}
- sourceEditor.save();
- project.getFile(IBuildEditor.BUILD_PROPERTIES_FILE).refreshLocal(IFile.DEPTH_ZERO, new NullProgressMonitor());
- }
-
- protected void checkBinaryBuild(IProject project) throws Throwable {
- IBuildEditor editor = getBuildEditor(project, IBuildEditor.BINARY_BUILD);
- addToBuildIfExists(editor, ABOUT_HTML_PATH);
- addToBuildIfExists(editor, IManifestEditor.META_INF_PATH);
- addToBuildIfExists(editor, IPluginProjectEditor.PLUGIN_XML_FILE);
- addToBuildIfExists(editor, "plugin.properties"); //$NON-NLS-1$
- addToBuildIfExists(editor, "OSGI-INF/"); //$NON-NLS-1$
- editor.save();
- project.getFile(IBuildEditor.BUILD_PROPERTIES_FILE).refreshLocal(IFile.DEPTH_ZERO, new NullProgressMonitor());
- }
-
- protected void addToBuildIfExists(IBuildEditor editor, String file) {
- if(editor.getProject().getFile(file).exists()) {
- editor.addToBuild(file);
- }
- }
-
- protected void checkAboutHtmlFile(IProject project) throws CoreException, IOException {
- IFile targetFile = project.getFile(new Path(ABOUT_HTML_PATH));
- if(targetFile.exists()) {
- return;
- }
-
- InputStream is;
- if(this.aboutHtmlFile == null) {
- URL url = new URL("platform:/plugin/" + Activator.PLUGIN_ID + ABOUT_HTML_SOURCE_PATH); //$NON-NLS-1$
- is = url.openStream();
- } else {
- is = aboutHtmlFile.getContents();
- }
-
- targetFile.create(is, false, new NullProgressMonitor());
- is.close();
- targetFile.refreshLocal(IFile.DEPTH_ZERO, new NullProgressMonitor());
- }
-
-
- protected void checkedHTMLFile(IProject project, final String sourcePath, final String targetPath) throws CoreException, IOException {
- IFile targetFile = project.getFile(new Path(ABOUT_HTML_PATH));
- if(targetFile.exists()) {
- return;
- }
-
- InputStream is;
- if(aboutHtmlFile == null) {
- URL url = new URL("platform:/plugin/" + Activator.PLUGIN_ID + ABOUT_HTML_SOURCE_PATH); //$NON-NLS-1$
- is = url.openStream();
- } else {
- is = aboutHtmlFile.getContents();
- }
-
- targetFile.create(is, false, new NullProgressMonitor());
- is.close();
- targetFile.refreshLocal(IFile.DEPTH_ZERO, new NullProgressMonitor());
- }
-
- protected IBuildEditor getBuildEditor(IProject project, String buildKey) {
- IBuildEditor editor = new BuildEditor(project, buildKey);
- editor.init();
- if(!editor.exists()) {
- editor.create();
- }
- return editor;
- }
-
- /**
- *
- * This content provider returns IProject
- *
- */
- private class ProjectContentProvider implements IStructuredContentProvider {
-
- /**
- *
- * @see org.eclipse.jface.viewers.IContentProvider#dispose()
- *
- */
- public void dispose() {
- //nothing to do
- }
-
- /**
- *
- * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
- *
- * @param viewer
- * @param oldInput
- * @param newInput
- */
- public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
- //nothing to do
- }
-
- /**
- *
- * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
- *
- * @param inputElement
- * @return
- */
- public Object[] getElements(Object inputElement) {
-
- if(inputElement instanceof List<?>) {
- List<?> input = (List<?>)inputElement;
- List<IProject> editableProject = new ArrayList<IProject>();
- for(Object current : input) {
- if(current instanceof IProject) {
- if(((IProject)current).isOpen()) {
- editableProject.add((IProject)current);
- }
- }
- }
- return editableProject.toArray();
-
- }
- return new Object[0];
- }
-
- }
-
- /**
- *
- * This class provides label and icons for IProject
- *
- */
- private class ProjectLabelProvider implements ILabelProvider {
-
- /**
- *
- * @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener)
- *
- * @param listener
- */
- public void addListener(ILabelProviderListener listener) {
- //nothing to do
- }
-
- /**
- *
- * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
- *
- */
- public void dispose() {
- //nothing to do
- }
-
- /**
- *
- * @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang.Object, java.lang.String)
- *
- * @param element
- * @param property
- * @return
- */
- public boolean isLabelProperty(Object element, String property) {
- //nothing to do
- return false;
- }
-
- /**
- *
- * @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener)
- *
- * @param listener
- */
- public void removeListener(ILabelProviderListener listener) {
- //nothing to do
- }
-
- /**
- *
- * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object)
- *
- * @param element
- * @return
- */
- public Image getImage(Object element) {
- // TODO Auto-generated method stub
- return null;
- }
-
- /**
- *
- * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
- *
- * @param element
- * @return
- */
- public String getText(Object element) {
- if(element instanceof IProject) {
- return ((IProject)element).getName();
- }
- return "";
- }
-
- }
-}
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management_old/src/org/eclipse/papyrus/plugin/management/helper/AbstractProjectManagementHelper.java b/sandbox/org.eclipse.papyrus.dev.project.management_old/src/org/eclipse/papyrus/plugin/management/helper/AbstractProjectManagementHelper.java
deleted file mode 100644
index 5efe0471845..00000000000
--- a/sandbox/org.eclipse.papyrus.dev.project.management_old/src/org/eclipse/papyrus/plugin/management/helper/AbstractProjectManagementHelper.java
+++ /dev/null
@@ -1,107 +0,0 @@
-package org.eclipse.papyrus.plugin.management.helper;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.jface.dialogs.IInputValidator;
-import org.eclipse.jface.dialogs.InputDialog;
-import org.eclipse.papyrus.eclipse.project.editors.file.BuildEditor;
-import org.eclipse.papyrus.eclipse.project.editors.interfaces.IBuildEditor;
-import org.eclipse.papyrus.plugin.management.Activator;
-import org.eclipse.swt.widgets.Display;
-
-
-public abstract class AbstractProjectManagementHelper {
-
- public static final String INCUBATION = "(Incubation)";
-
- final protected String version;
-
- final protected String provider;
-
- final protected boolean testMarkIncubation;
-
- final private String projectNature;
-
- public AbstractProjectManagementHelper(final String projectNature, final String version, final String provider, final boolean testMarkIncubation) {
- this.projectNature = projectNature;
- this.version = version;
- this.provider = provider;
- this.testMarkIncubation = testMarkIncubation;
- }
-
-
- public final void execute(final IProject project) throws Throwable {
- if(project.isOpen()) {
- Assert.isTrue(project.getNature(this.projectNature) != null);
- handleProject(project);
- }
- project.refreshLocal(IProject.DEPTH_INFINITE, new NullProgressMonitor());
- }
-
- protected abstract void handleProject(IProject project) throws CoreException, IOException, Throwable;
-
-
- /**
- * Add the file to the project if it doesn't exists
- *
- * @param project
- * the project to edit
- * @param sourcePath
- * the sourcePath for the file
- * @param targetPath
- * the target Path for the file
- * @throws CoreException
- * @throws IOException
- */
- protected void checkFile(final IProject project, final String sourcePath, final String targetPath) throws CoreException, IOException {
- IFile targetFile = project.getFile(new Path(targetPath));
- if(targetFile.exists()) {
- return;
- }
-
- InputStream is;
- URL url = new URL("platform:/plugin/" + Activator.PLUGIN_ID + sourcePath); //$NON-NLS-1$
- is = url.openStream();
- targetFile.create(is, false, new NullProgressMonitor());
- is.close();
- targetFile.refreshLocal(IFile.DEPTH_ZERO, new NullProgressMonitor());
- }
-
- protected IBuildEditor getBuildEditor(IProject project, String buildKey) {
- IBuildEditor editor = new BuildEditor(project, buildKey);
- editor.init();
- if(!editor.exists()) {
- editor.create();
- }
- return editor;
- }
-
- protected abstract void checkIncubation(final IProject project) throws IOException, CoreException, Throwable;
-
- protected String askNewName(final String label) {
- InputDialog dialog = new InputDialog(Display.getCurrent().getActiveShell(), "Edit the name", "The name should be ended by : " + INCUBATION, label, new AbstractProjectManagementHelper.IncubationValidator());
- dialog.open();
- //TODO the user can cancel the modification
- String newLabel = dialog.getValue();
- return newLabel;
- }
-
- public class IncubationValidator implements IInputValidator {
-
- public String isValid(String newText) {
-
- if(newText==null || newText.equals("") || !newText.endsWith(INCUBATION)) {
- return "The current name is not correct";
- }
- return null;
- }
- }
-}
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management_old/src/org/eclipse/papyrus/plugin/management/helper/FeatureManagementHelper.java b/sandbox/org.eclipse.papyrus.dev.project.management_old/src/org/eclipse/papyrus/plugin/management/helper/FeatureManagementHelper.java
deleted file mode 100644
index 406b9a9fc42..00000000000
--- a/sandbox/org.eclipse.papyrus.dev.project.management_old/src/org/eclipse/papyrus/plugin/management/helper/FeatureManagementHelper.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package org.eclipse.papyrus.plugin.management.helper;
-
-import java.io.IOException;
-
-import javax.xml.parsers.ParserConfigurationException;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.papyrus.eclipse.project.editors.interfaces.IFeatureProjectEditor;
-import org.eclipse.papyrus.eclipse.project.editors.project.FeatureProjectEditor;
-import org.xml.sax.SAXException;
-
-
-public class FeatureManagementHelper extends AbstractProjectManagementHelper{
-
-
- public static final String EPL_HTML_SOURCE_PATH = "/resources/epl-v10.html.file";
-
- public static final String EPL_HTML_PATH = "epl-v10.html";
-
- public static final String LICENCE_SOURCE_HTML_PATH = "/resources/license.html.file";
-
- public static final String LICENCE_HTML_PATH = "license.html";
-
-
- public FeatureManagementHelper(final String version, final String provider, final boolean testMarkIncubation) {
- super("org.eclipse.pde.FeatureNature", version, provider, testMarkIncubation);
- }
-
- @Override
- protected void handleProject(IProject project) throws CoreException, IOException, Throwable {
- checkFile(project, EPL_HTML_SOURCE_PATH, EPL_HTML_PATH);
- checkFile(project, LICENCE_SOURCE_HTML_PATH, LICENCE_HTML_PATH);
- checkIncubation(project);
- setDescription(project);
- }
-
- @Override
- protected void checkIncubation(IProject project) throws Throwable {
- IFeatureProjectEditor editor = getFeatureEditor(project);
- String label = editor.getLabel();
-// if(!label.endsWith(INCUBATION)){
- label = askNewName(label);
- editor.setLabel(label);
-
-
-
- ((FeatureProjectEditor)editor).save();
-// }
-
-
- }
-
- protected IFeatureProjectEditor getFeatureEditor(final IProject project) throws ParserConfigurationException, SAXException, IOException, CoreException{
- FeatureProjectEditor editor = new FeatureProjectEditor(project);
- editor.init();
- return editor;
- }
-
- protected void setDescription(final IProject project) throws Throwable{
- IFeatureProjectEditor editor = getFeatureEditor(project);
- editor.setCopyright("http://www.google.fr/myOwnURLNicest", "ma description perso");
- ((FeatureProjectEditor)editor).save();
- }
-}
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management_old/src/org/eclipse/papyrus/plugin/management/helper/PluginManagmentHelper.java b/sandbox/org.eclipse.papyrus.dev.project.management_old/src/org/eclipse/papyrus/plugin/management/helper/PluginManagmentHelper.java
deleted file mode 100644
index fc1bb4cb707..00000000000
--- a/sandbox/org.eclipse.papyrus.dev.project.management_old/src/org/eclipse/papyrus/plugin/management/helper/PluginManagmentHelper.java
+++ /dev/null
@@ -1,206 +0,0 @@
-package org.eclipse.papyrus.plugin.management.helper;
-
-import java.io.IOException;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.dialogs.IInputValidator;
-import org.eclipse.jface.dialogs.InputDialog;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.papyrus.eclipse.project.editors.file.BuildEditor;
-import org.eclipse.papyrus.eclipse.project.editors.file.BundlePropertiesEditor;
-import org.eclipse.papyrus.eclipse.project.editors.file.ClasspathEditor;
-import org.eclipse.papyrus.eclipse.project.editors.file.ManifestEditor;
-import org.eclipse.papyrus.eclipse.project.editors.interfaces.IBuildEditor;
-import org.eclipse.papyrus.eclipse.project.editors.interfaces.IClasspathEditor;
-import org.eclipse.papyrus.eclipse.project.editors.interfaces.IJavaProjectEditor;
-import org.eclipse.papyrus.eclipse.project.editors.interfaces.IManifestEditor;
-import org.eclipse.papyrus.eclipse.project.editors.interfaces.IPluginProjectEditor;
-import org.eclipse.papyrus.plugin.management.Activator;
-import org.eclipse.swt.widgets.Display;
-
-
-public class PluginManagmentHelper extends AbstractProjectManagementHelper {
-
- public static final String ABOUT_HTML_SOURCE_PATH = "/resources/about.html.file"; //$NON-NLS-1$
-
- public static final String ABOUT_HTML_PATH = "about.html"; //$NON-NLS-1$
-
- public PluginManagmentHelper(final String version, final String provider, final boolean testMarkIncubation) {
- super(IPluginProjectEditor.PLUGIN_NATURE, version, provider, testMarkIncubation);
- }
-
- protected void handleProject(IProject project) throws CoreException, IOException, Throwable {
- checkFile(project, ABOUT_HTML_SOURCE_PATH, ABOUT_HTML_PATH);
- if(testMarkIncubation) {
- checkIncubation(project);
- }
- checkProviderAndVersion(project);
- checkClasspath(project);
- project.refreshLocal(IProject.DEPTH_INFINITE, new NullProgressMonitor());
- }
-
- protected void checkClasspath(IProject project) throws Throwable {
- if(!project.hasNature(IJavaProjectEditor.JAVA_NATURE)) {
- return;
- }
-
- IClasspathEditor editor = new ClasspathEditor(project);
- if(!editor.exists()) {
- return;
- }
-
- //Adds the classpath entries to the build (source.. and output..)
- IBuildEditor buildEditor = getBuildEditor(project, null);
- for(String sourceFolder : editor.getSourceFolders()) {
- buildEditor.registerSourceFolder(sourceFolder + "/");
- }
- for(String binFolder : editor.getBinFolders()) {
- buildEditor.registerBinFolder(binFolder + "/");
- }
-
- buildEditor.save();
- }
-
- protected void checkProviderAndVersion(IProject project) throws CoreException, IOException, Throwable {
- IManifestEditor manifest = new ManifestEditor(project);
- manifest.init();
- boolean manifestChange = false;
-
- if(!manifest.exists()) {
- manifest.create();
- manifestChange = true;
- }
-
- if(provider != null) {
- //TODO : If the string is already externalized, edit the *.properties language file
- //(Can be either plugin.properties or bundle.properties ; see Bundle-localization to find it)
- String bundleVendor = manifest.getBundleVendor();
- if(!provider.equals(bundleVendor)) {
- if(bundleVendor == null || !bundleVendor.startsWith("%")) { //Undefined or not externalized String
- manifest.setBundleVendor(provider);
- manifestChange = true;
- }
- }
- }
- if(version != null) {
- String currentVersion = manifest.getBundleVersion();
- if(!version.equals(currentVersion)) {
- manifest.setBundleVersion(version);
- manifestChange = true;
- }
- }
-
- //test the name of the project
- String name = manifest.getBundleName();
- final String INCUBATION = "(Incubation)";
- IInputValidator validator = new IInputValidator() {
-
- public String isValid(String newText) {
- if(!newText.endsWith(INCUBATION)){
- return "The current name is not correct";
- }
- return null;
- }
- };
-
-
- if(!name.endsWith(INCUBATION)){
- InputDialog dialog = new InputDialog(Display.getCurrent().getActiveShell(), "Change the name of the bundle", "The bundle's name should be ended by : " + INCUBATION, name, validator);
- dialog.open();
- name = dialog.getValue();
- manifest.setBundleName(name);
- manifestChange = true;
-
- }
-
- if(manifestChange) {
- manifest.save();
- }
- }
-
- protected void checkSourceBuild(IProject project) throws Throwable {
- IBuildEditor sourceEditor = getBuildEditor(project, IBuildEditor.SOURCE_BUILD);
- IBuildEditor binEditor = getBuildEditor(project, IBuildEditor.BINARY_BUILD);
-
- //Copy the binary build
- for(String binaryBuildElement : binEditor.getElementsInBuild()) {
- sourceEditor.addToBuild(binaryBuildElement);
- }
-
- //Add the source folders to the build
- //Fix : the source folders are automatically added to source builds
- //for(String sourceFolder : sourceEditor.getSourceFolders()) {
- // sourceEditor.addToBuild(sourceFolder);
- //}
- sourceEditor.save();
- project.getFile(IBuildEditor.BUILD_PROPERTIES_FILE).refreshLocal(IFile.DEPTH_ZERO, new NullProgressMonitor());
- }
-
- protected void checkBinaryBuild(IProject project) throws Throwable {
- IBuildEditor editor = getBuildEditor(project, IBuildEditor.BINARY_BUILD);
- addToBuildIfExists(editor, ABOUT_HTML_PATH);
- addToBuildIfExists(editor, IManifestEditor.META_INF_PATH);
- addToBuildIfExists(editor, IPluginProjectEditor.PLUGIN_XML_FILE);
- addToBuildIfExists(editor, "plugin.properties"); //$NON-NLS-1$
- addToBuildIfExists(editor, "OSGI-INF/"); //$NON-NLS-1$
- editor.save();
- project.getFile(IBuildEditor.BUILD_PROPERTIES_FILE).refreshLocal(IFile.DEPTH_ZERO, new NullProgressMonitor());
- }
-
- protected void addToBuildIfExists(IBuildEditor editor, String file) {
- if(editor.getProject().getFile(file).exists()) {
- editor.addToBuild(file);
- }
- }
-
- @Override
- protected void checkIncubation(final IProject project) throws Throwable {
- IManifestEditor manifest = new ManifestEditor(project);
- manifest.init();
- boolean manifestChange = false;
-
- if(!manifest.exists()) {
- manifest.create();
- manifestChange = true;
- }
-
- //tests the name of the project
- String name = manifest.getBundleName();
- if(name.startsWith("%")){
- String localization = manifest.getBundleLocalization();
- if(localization==null){
- //TODO log an error
- return;
- }
- BundlePropertiesEditor editor = getBundlePropertiesEditor(project, localization);
- String value = editor.getValue(name.substring(1));
- int i=0;
- i++;
-
- }else if(!name.endsWith(INCUBATION)){
- InputDialog dialog = new InputDialog(Display.getCurrent().getActiveShell(), "Change the name of the bundle", "The bundle's name should be ended by : " + INCUBATION, name, new AbstractProjectManagementHelper.IncubationValidator());
- dialog.open();
- name = dialog.getValue();
- manifest.setBundleName(name);
- manifestChange = true;
-
- }
-
- if(manifestChange) {
- manifest.save();
- }
- }
- protected BundlePropertiesEditor getBundlePropertiesEditor(IProject project, String filePath) {
- BundlePropertiesEditor editor = new BundlePropertiesEditor(project, filePath
- );
- editor.init();
- if(!editor.exists()) {
- editor.create();
- }
- return editor;
- }
-}
diff --git a/sandbox/org.eclipse.papyrus.dev.project.management_old/src/org/eclipse/papyrus/plugin/management/ui/ParameterDialog.java b/sandbox/org.eclipse.papyrus.dev.project.management_old/src/org/eclipse/papyrus/plugin/management/ui/ParameterDialog.java
deleted file mode 100644
index 880e5e9c7ed..00000000000
--- a/sandbox/org.eclipse.papyrus.dev.project.management_old/src/org/eclipse/papyrus/plugin/management/ui/ParameterDialog.java
+++ /dev/null
@@ -1,213 +0,0 @@
-/*****************************************************************************
- * Copyright (c) 2012 CEA LIST.
- *
- *
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
- *
- *****************************************************************************/
-package org.eclipse.papyrus.plugin.management.ui;
-
-
-
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.dialogs.InputDialog;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
-
-
-
-/**
- * The Class ParameterDialog.
- */
-public class ParameterDialog extends InputDialog {
-
- /** boolean to check the HTML file. */
- private boolean checkHTMLFile = false;
-
- /** boolean to check the mark incubation. */
- private boolean checkIncubation = true;
-
- /** String for the version number. */
- private String versionNumber = "0.0.0";
-
- /** the plugin name pattern. */
- private String pluginNamePattern = "org.eclipse.papyrus.*";
-
- /** the provider name for these plugins. */
- private String providerName = "Eclipse Modeling Project";
-
- /** The version text. */
- private Text versionText;
-
- /** The provider text. */
- private Text providerText;
-
- /** The plugin pattern text. */
- private Text pluginPatternText;
-
- /** The verify incubation button. */
- private Button verifyIncubationButton;
-
- /** The verify html file button. */
- private Button verifyHTMLFileButton;
-
- /**
- * Instantiates a new parameter dialog.
- *
- * @param activeShell the active shell
- */
- public ParameterDialog(Shell activeShell) {
- super(activeShell, "Plugin managment", "Apply the modifications on the plugin beginning with : ", "org.eclipse.papyrus*", null);
- }
-
- /**
- * @see org.eclipse.jface.dialogs.InputDialog#createDialogArea(org.eclipse.swt.widgets.Composite)
- *
- * @param parent
- * @return
- */
- protected Control createDialogArea(Composite parent) {
- Composite composite = (Composite)super.createDialogArea(parent);
-
- // Composite composite = new Composite(parent, SWT.NONE);
- // GridLayout layout = new GridLayout();
- // layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
- // layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
- // layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING);
- // layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
- // composite.setLayout(layout);
- // composite.setLayoutData(new GridData(GridData.FILL_BOTH));
- // applyDialogFont(composite);
- // return composite;
-
- //the field with the plugin name pattern
- // Label pluginNameLabel = new Label(composite, SWT.WRAP);
- // pluginNameLabel.setText("Apply the modifications on the plugin beginning with : ");
- GridData data = new GridData(GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL | GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_CENTER);
- // data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH);
- // pluginNameLabel.setLayoutData(data);
- // pluginNameLabel.setFont(parent.getFont());
- // Text pluginNameText = new Text(composite, getInputTextStyle());
- // pluginNameText.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL));
- // applyDialogFont(composite);
- // pluginNameText.setText("org.eclipse.papyrus");
-
- // //the field for the version number
- Label versioLabel = new Label(composite, SWT.WRAP);
- versioLabel.setText("Version : ");
- // GridData data = new GridData(GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL | GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_CENTER);
- data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH);
- versioLabel.setLayoutData(data);
- versioLabel.setFont(parent.getFont());
- versionText = new Text(composite, getInputTextStyle());
- versionText.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL));
- applyDialogFont(composite);
- versionText.setText("0.0.0");
-
-
- //the field with the provider name
- Label providerNameLabel = new Label(composite, SWT.WRAP);
- providerNameLabel.setText("Provider name : ");
- // GridData data = new GridData(GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL | GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_CENTER);
- data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH);
- providerNameLabel.setLayoutData(data);
- providerNameLabel.setFont(parent.getFont());
- providerText = new Text(composite, getInputTextStyle());
- providerText.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL));
- applyDialogFont(composite);
- providerText.setText("Eclipse Modeling Project");
-
- // verify the HTML File
- verifyHTMLFileButton = new Button(composite, SWT.CHECK);
- verifyHTMLFileButton.setText("Verify the about.html file ?");
- verifyHTMLFileButton.setSelection(true);
- verifyHTMLFileButton.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL));
- applyDialogFont(composite);
-
- //verify the text ("Incubation") in the plugin name?
- verifyIncubationButton = new Button(composite, SWT.CHECK);
- verifyIncubationButton.setText("Verify the mark 'Incubation' in the plugin name?");
- verifyIncubationButton.setSelection(true);
- verifyIncubationButton.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL));
- applyDialogFont(composite);
-
- return composite;
- }
-
- /**
- * @see org.eclipse.jface.dialogs.Dialog#okPressed()
- *
- */
- @Override
- protected void okPressed() {
- //we get the value before the dispose of the widgets
- this.checkIncubation = this.verifyIncubationButton.getSelection();
- this.versionNumber = this.versionText.getText();
- this.pluginNamePattern = getText().getText();//pluginPatternText.getText();
-// this.pluginNamePattern = this.pluginPatternText.getText();
- this.providerName = this.providerText.getText();
- this.checkHTMLFile = this.verifyHTMLFileButton.getSelection();
- super.okPressed();
- }
-
-
- /**
- * Checks if there is the html file.
- *
- * @return true, if there is the html file.
- */
- public boolean isCheckHTMLFile() {
- return checkHTMLFile;
- }
-
-
-/**
- *
- * @return
- * true, if we check the mark "(Incubation)"
- */
- public boolean isCheckIncubation() {
- return checkIncubation;
- }
-
-
- /**
- * Gets the plugin name pattern.
- *
- * @return the plugin name pattern
- */
- public String getPluginNamePattern() {
- return pluginNamePattern;
- }
-
- /**
- * Gets the provider name.
- *
- * @return the provider name
- */
- public String getProviderName() {
- return providerName;
- }
-
- /**
- * Gets the version number.
- *
- * @return the version number
- */
- public String getVersionNumber() {
- return this.versionNumber;
- }
-
-}
diff --git a/sandbox/org.eclipse.papyrus.emf.commandstack/about.html b/sandbox/org.eclipse.papyrus.emf.commandstack/about.html
deleted file mode 100644
index 82d49bf5f81..00000000000
--- a/sandbox/org.eclipse.papyrus.emf.commandstack/about.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
-<title>About</title>
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
-
-<p>June 5, 2007</p>
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise
-indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available
-at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
-being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
-apply to your use of any object code in the Content. Check the Redistributor's license that was
-provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content
-and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
-
-</body>
-</html>
diff --git a/sandbox/org.eclipse.papyrus.emf.commandstack/plugin.pdoc b/sandbox/org.eclipse.papyrus.emf.commandstack/plugin.pdoc
deleted file mode 100644
index 622999ad53f..00000000000
--- a/sandbox/org.eclipse.papyrus.emf.commandstack/plugin.pdoc
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<doc:Documentation xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:doc="http://www.eclipse.org/papyrus/documentation/plugin/documentation" description="This plugin allows to see the commands executed in the OperationHistory">
- <referent firstName="Vincent" lastName="Lorenzo" eMail="vincent.lorenzo@cea.fr" currentCompany="CEA-LIST"/>
-</doc:Documentation>

Back to the top

QW*̲u˹qGD[dc4ik@(*抺@e&C`Zc <(6PH?Ÿsrѩ ެxV PE Z>[K 'rTŔʚ!Įī֢ۓI䔚nd?*;(ץzXڡ~PVNC̗{f w,S27qYFOogą> [NtTBroX{䠮5O0ut( 2Ce{7=Uz[r ?W-Hתuu,g&sJU<h EwZ5eAt6Ġ "Z/|I^1ۤ2rV:MtɖZ(hhqN0랤~wo.8_94.Ǻ L7:^#HFKbM JL޸&&g^#q~; eeB^GbP84fؚJGW&T#*Eƻ9 %e(d->oR/88}#k;WZ3/)]gY0 (]y s fy@\>d%S9f.nʤg%Ar-閧+E%ӌٛHF({; aY-) M}`*Ȓ0if+ujmKaT?&Ls` " !d5XkFn7r.XӊϵFcď@MPtvc".P'>ӲD)?}X=ȀgmvHSf Zt&s%]-:gLd[d3_d w˱1 0>{3MVvr$oN\:U'6 vGF#gjTc?SXmc>}@5zԻi}.)o|Уw^Ԕ讏M(%D%?o9d~c%#LZ HТPd(U)9E(aE ,zkGw&s7m[XV Ԇ[ ӭUt=ם~Nm^C8d X߭2i`}x,4a%G.P{vyz8s\ . SS7'z89y4v{dBl|z3%=ir?l{낅HDֽh]tMq# l1whzR!˦oـ$Di?>b6-CbUi_O%̬:AjtBTQE BS=|Ǵ2NJ &H 0:9@iCtu"WMW0oٜ&rp^t}=gx]ѵo>@laWᣢ+)+:&ggZ[O r>uY`,>AstTn:W=QըZj\DG_1#0ޫ1Xv2!>x>usE^`> ^eEd~I%Ҙt' ggH{1)lwg~*nfײ o3y kXM%`ˋGf&Vfϻ Lo`?cHp=_XU, a;>Ql3%XX3yƥo|YLڅ ngCbL vᬝ K1mUGKUCR*`5$8ɕ%Oo:*ƕ1嬻؂Wt,H75?"o*"[_/`{P<Epj&DHq𺃁r =svȶk,H{1ZHHTpF}@'5IVZ7kbSEY(cD^M3~ wG,rLI|Yx%l]P6Qb:hE)ʼ҈* Ӓ찋la LD_.}Ɗ ]h BQP>cN>ŮGފ8ƥkpn`V"ѿ${3O_̟Ռ<ÓSU70E': v Džo|+r'k/w:XSs:s5"Zz䲒V5ldFAsۙɔ'2D}$gc~f `lח"F)S@$!ckMP#KAaN$H ~ O R{p32|)X=^+k č:"rSӲ!\ ~&1oFQ+ZBj1ZQB,^%PC߷:qń'$5"Tާ^AH9$Sj= TwW( [Sҕv=닿%*s!-]W!)E>CϤSIEql͏Td"W2U߸*h}[@d߮,\!5*21z!2D'? qQy LaeM󚻪.s+22+΂%F9˓‹ۨv,1@2Q}v5X>)>6k*e((tG .k`ǩ(TBStBa X5H/?]s3 AI#SV ]mōm6r乑@ %K*S)'#NM\ A $ӔD` rK)ޯܗ#)ƀM24%%$QS$ 3U 'Otz^B`hDlq8uƃfX.}=)(zT&ib(]~5X'{$[n \Zovuk:i#3X+LDwX:KL (Zkgˊ=KK5$)h<;Cr p]ps^j3QR9y\ 2H& ۦ5X;@zm \%&M몸y]rx>؁N)]꜎fX6*WjYIU/bNQPs{J_~M?Y&LS'QMT7=P,lb3$\>N*8j!UP/őD0Sg2g7Iǘn{iЂgAIeyjdNmL!bf aaۡKj䱁BKas:Yi찤4 ƸF9 t'3q^մ@}z%CDba+$~h K!m`eS$٧R6ï[ 2P,Mw/t\͈pǧϞED2 w_ Gr_' 1lŕc[c˕n@J$-/Cx2drtK=`V@ Ƚ*lIWڟ|u7sO*^Ѥa[<0+ MS&g5p6y9!EtF6U |gއ 6 ,/FVZR b..Y0BAZEbEߎEEBۿF`D.2zΣf~ųUdixpr}Sљy&JE>LCYC K!AI m[jvl)uK0%+KE 9uOoHҚɢI6eT}b#Υv `ܑy*(Y/}Xv-S*މ Z ^I,'w+ l#+5@OMm>Dfّ+޳ɪ7BK"zFW}8vʅX@W FkGC7ĭS³,[VLĽ|c*άȪb ѥ 2+{T&[0mO3%_+:_y#+h^xm'#AGߺCYv)L@Z8?Oj9N2̊%(!/y&BJ'U۠oQQ[t/وxA5'1y|K 5cf?b]gHKM}/zBGE%0}5Qp`O6"/.8~2|[+]@ NBP>QwK B9\e+Oomj/9.krC-4ysj6ʢcv< 9vٔ=n6幮:HAoaA o\EO|+,]&AYC÷ W(ñŢЛhԍᲒ!Oh2{O=ڠx oh4JK0}`"RߢVzC{Ű `^iV%^$Bd/p)1X񤏵yO F#wkMC`B$gl?g0*&v=6 7`lb_Aqav,{a"#=#ڎ|ވ҅Uc$L%ד<C'orDzme&y rB,ѷ.HW"TK:$hᒏtY;P\Ai1O8ľ 3A⻞$_ BNJQf=uqXA:bɁ? f0(v~ڱpwW*XV&.g42Z+ς}uFH*n{ J( (% t t *[!aj1zNؠo\.4%x:*'+B[7OiӚ縤!O&I)?(k7u>mtb,$ɷ3./:?XWwbLXccug3;\6ZClᮚ#`P&kdď;w!F̿i$ D#xBւLG qU1>5 k?ʍy.ZaC].Fi_*7XCQdN+oDzrZ/8JR8\=(|Lw'20ɠb_t¡'\pbS o,GaKt?2oG;z֏마=^rrş}2VE4qG9{ 3ʺ0ʦ% X>{fyT~iFxQd?Z{6aVziy.qpفl' *uGOdN+ٛ3~m>JG u;"룭zx 6 rYtUX3`xQDĿt:Kƽ_^@@&2kΙfō} |n #*>cwYu)4*˥uLF JBH~lw{ٟA,x:>JFe+Pr o02M Ȥf S) `c$yscgff0U=a4d`g#nue}hMdq {V!*A αg@ЊsLjk~-cVi+~@[r'?\Oqs@d4P#ct&~kz%e+||oD0j+:%!]ս.p-Z-A?4+&O^:#WN*XrB^#NދcX1_LpfYA`5V8$R  [V94µ8?^S:E픊fG$/ảH=Xl`u(5-c^tU=KnJH"l0FMVUXa-}W`  A#{κ`'n?o`0g2+0:'ZɡH+9Og.Y~H$T^e{E-U \AgոV GAOA$#Wa`A?wo-ԁJaɵ"_u$<՘%$8e6:YmǪ{pݕ"CʋoǍpdb-& (4) rSȃ:LRyO}aiHpiHAC1{`s4ό>lT K jsDBtEiA/yPu^E1ĬՑ+ky.$'>8q[ŚAxB`VQ*UF_ ) N *- )h'hsuQJleBOŬGcJbҩ!뭐wݺve$WX&^e )Հ{y0^XqOLKhŊ3U$]nb!Fܤ?@nN`ey#zgАubG@ {~tn3~!C{hUGǜAR=OK1 !ְ;Hނu$v6װ T?AqXhO`@ 2KNx{rD%9W3(hO*vSIӍkl9(KU52N_lZtSE6JQ}ּFڒ9[N@!NnInt;[q,=æS8`K,m4/?%#I2x࠺.!*7OX&J9 ^t;[{t=C7gQUYiU5D87%qSU8*>)=b@ dt$TnHrvQތ`M1)k>V,ĩ(KNFJWcie8]%A6i@׍!qM60'1u'VME E %p>Fk?=2fGl\7KGlsFO/&ױr=bD-cEE_;} ?a%b=dU£e @}}]M[^!ex c kLCiZeq5rG0~cB @cޱʎ+C櫈8E/oK QIl1>E$WdsӎL rJ0-u>y6*' tU12hY%s%lN 󝯃:T:ʸuQR?Y`|l^g3E]PAPQiϨޕh g|/)W L,ug!]2*a;xtF-pC 3% P+<@qCE>XO #pȣLɋcؠ0(ltϴn¨8mN%*1lF/s XO4ZvUF-W}p⿔ď= vZ- o7ya@5A̅p5 DXoAWcalV>Gqᄵ ou6ʿM̨DR"ti, izf%"^69j+͆E` 2-&`ngbgZ N1 8b`aqMwk_Bhu[l@Bpp~At;TA&/ u)=4*`q6B olE?m&aS?fPJd7s˛~ 4YbU*gvZ(Mi}a%DCGV_ʊH- \HWA/!8?WH2 ϯ';d~Lhg-gk`~&e}1K6q22R}Y-ԏn2^vKq34^\H=f b#r[ڋrBOK[.7hSUw4*CekOoΏ5F"~{#B}S!-}w$LO<[ -Z J lDhg:&qDc<=ᣊϮ0@&9 8~,5D=(};QAO `>.Jr˒R^|e1?\GPBŅyÚ_㰬İQ\U+CmyR34I &HA+UƛUpb6EH !_TNܰ(qGNj](c/=3aTlmqM;щDP_!t Rbбn<]7frY4])ݶ)DK $-@b(1ةnTpХJTScJgBfg'6eĖWo VϾD24>*>[W5PC5g9V:6>@[x zԦg#%2~/1w{6]Ay,ˢ-x\@QA,G2esޝ-Cw3Z83=,X o]QBjZ 9ǩﱘs?rdjDh[Ki뵣'mIQ08L9}k{ɖ`OԊGA]O}Rw8d߿ _(,7)#o?m7^DL`I]s_zo6OqIC\75D\v納02x~&)LׂBC8h QL bq;1fBC⺺  9Z/2b%8VuK.ud ݼL+L/< 1@ =i7RpU 6Ym0*i|_ɡޕ"cX s/n.Qب^h?HbV˦W,*R394$]_#T7t)x89.j0[D>+DTQ-vO4@˖/WAڌy% U "s9 Y~AYϩ@&jH΄C:dg"JՌѴIeg0OZosȇ}drm<%s}.S,>fȚz/TG]7۠^ixbq7: KS.]a/p"Dǩ@pH)$PHۨr4K#4F=`-tvZDTxiyu@/ـoߞ@k^ו `lK,rXfvT=X|i$I)7 f] E:7-I+5,b Y -+t3-nܩ"F>Wi(E40,̞p-KԙSǰɑ(F x@ \kBk߰8gfg^ڭ!x vsRў % 0}poصC]d AnP|NӴW`ߕI:4=Eh8d<}`Rpʑ!3*sû牌B+_=d丿"~SZOaXHІE {4,?[a'!r"z)޶&H苕v(*e9Z2Y6{ KyCag3j^W0zۯr܎ n=|C6ƇBXv-;SԮ#Sw/ &". -l/#Cqֳ$,ZJH'#Dp񖕝FcEg6@dFHRibلГaH# BJMl7nDUt !q2lOt8ubD$>(tű/-!|)T olxjP~=3DɇOZ|NINv>󅢪 Vyκw֊b3 #RTKʹVx($7zK]=RA" }Ω˗\ !NѽZXʹOD:d7K_%Qpb bbl ^>VDZKs]Z?LWpfG7i"F he. Vuw=t#gTC)"{D)]sڕ{ }N䆅ZȻë(Z7aY (gIpgl,nz1osd$r$rόem)cdG"{6@5o [*+ս9"D˲AEdIncVW.d=P%YFo/­|+Ñ̩4ȣlf\n^R!}e@FLw~C5А;.9(."^rKc+{-h^k/ 1X+ps9ȴn7[]8`8E/i~TF0LBv ۖm)R?L7N\ou{SbSxT=#G)ԊZv嗛xxŸ8}+upF.g[[S \0 iw'L?e$+pr&lQ4\:|,vPBs2@v'P{8T R8䂄 e, f7N b Mt睕n~cs&ZѺiiF9 3k FpdbcDV|:":/ |l{M$&@0%KܼVRzog_^ 5XP?yY;Ű Z6;+ucLAZ>+Jvn}:W~B.C]5➅>J:Μ0.|r%+ЯbO8=Yw)_=_%'l _7I/u{xtLvx6邼-»?^"Cv™O"]ٮda τ5o{g0%LNlrPf[ĕ֠9eZ4F7ra mQ-2^S 2]Ri6pV*`]0pթ>'˳q5Լ8ᕀ$Ԃ  b-.}{qzqW]I8  m}X /7195Sx&b x#wBy͌fYkeVԙ4Ru`l0}iCVXӑڬ(,OzWd,]$mL"BQ֌{&Ň<[gk1B(fxj*C n`*߭SkԿ&QP>x{i<-,jU@$u*nD#1310bvR$nZ2(r0VQjs+sY8iO%`DF;^b)ah>y;𡖴,z \[t)؝cdҘ1 7{ҋL@B"(-}T٧3vt{syy9]gC~ VUDNy;X%):ږd.e) fKa\dЙJbf5rݪ542#:5j1 _2ܑ%\G%52XnfE:ȳ!1=y<2C͛9 sP LIBi1D`2fJt%4;$C ͊0rMs#V H+SRCLo( )+)VNo3i@`'.~KL-ELgҟse`ˁ7: NHJ/h6ZS#F谧8T^c\FF3+",c'I]eJFZePĆ)\dmP+8qg*Xzf_= m{:-_# fVZrϴS?h ɣIx~"Y-jkL3S]ݲ/'Biʧ" C$/ɩ:Ьifi&G(> V|+]|);sxޞJ"b:K/;ve|k郓17y {>G-ƂWj -bU3g6+9}G,% ~1=L"pwDR ]F*OϐGE‰ J:ű 韛^Ҽg$\Nf >B%#R{Dx-&[F3byDdsXץdTK>#R ;.2s44ǭ'Ga7Ik p3w91dh܄AW-g`;FOL%I-=2N{ f)X|.r{Rwxiv@E[`T2@VBlw |-_5 |]+_` `+(&6W,AR/7I:t% th,1uRkv@4!j,.,~|Jn)k>8Sۭ<5^bjSJAK=:5m24ƽ a|ì5# = 'ǕދE4m=-WV"L|FLuA*`__"ϚSf7q,=m&Jti UvC *'I2tzw]feb.|݁:,1Ćv (}8imN( E)AbWP޺`/'shWȓ7NM<)D܌Ey4eg&˺I% btjsqx ]V␫Jc4DMrGxNt^ 9Ƕ-ޭ͉-ւ)7u>\a*(McWnmLc%2 87sD:Ck@$@;wpPe 2!BhDJНv6ȋen~bO5b2ӎ.,ΜRO'KG>1Han>evKu]QCoR.ԘK &J1fs>f.6G<.hBnBC!|Z6#v `CBhjCfWziS)[zhtj∀VMh7mݼs{,x/k |OjBJ%Lzjq^J w(U&!^r "ZmC9'OSwUL8LUu1hp) QQ.+WU?ڊ\T`  ezƒH 0Gh?Ub/xiuЇ :A %޽| (Mj2W lַ)d~u3f:H=/+ЩzZλ1S#Tp)ligf@L's~?7l szxpjZ bNn ?~xuˬ7HQ v;|1U3u+:4E'| &GB?UY˷v< vߎion{`>+oQYb%lo%#r*!h(Rʎ9{fmЩ?OCWB,J$$P_Y)r^W| yJU6%0Z|U2YYZ<E_҈,whn }(̙Gy(J꧂_; _)*zVc"薦X?/x__a.]m8B"gY}%qզ&6L1ԧd-$師 MT4wcd>B3X#;; 'XFqJpStʹǸmӆd2kiB=O~YVMw=O|lY%;y=ό.OtlRz0:>+3~󡯅@yĪk Bux3_!I|Q\YȾiAz+?&q^HHڰ<[ vؑzU->xct423D";4n`dʳ;IUovA0ZwפPn:;rY{G7Bl/xs[ӥ3ƌVPDnC* f"q7*c{@&lD$[jsVҶqJևh^+Lr~ άfcY0S9A PD$*Ԣ1ېCKPyK3} KGwno=.] L7 EEC) -96pϮh45r*˻OA Z1 !m w&ԦY/Zt S9EA] x1;dOeFWd5;6N8;o$h@x=Y!™V|~<CAŤ>+ 6B&|M|ZGoЁ =rH*2`wG!5;ps¢d|a}c f:>M%`,~7龜5H4[D({tHP0EcMW< 8|+?EZJ I|o[F_܆~Ҿ7䠵v'8cO.결}W")/*~Ca#v΄Q}2֞ζ@gD=c@Hb(_BR!\h,SGeOiFbftݽBz!f24puEA|ޓm8@K}N0<(TL8@vFl.*@,jz74뵐|Vf^}=VCLT-7!'K|[kl*Śx'}Ȝ*@b}ݱډK|~hݖ$]Sm_W3Өeɷgn혶5zW0r+]wk??,-EH2oR?J?OuVwevUi(P|FnauygD]E>B(:?",p&I |'%'C^(kl& Ûff1ĜEwKGkr_ 2*R.EԀϾuZ!\̈n_AAd46pf3)(Htܗuң퀎-4gʴ,'-}KxZ{B 4ŀW}bln,Ґ~PA[phGFeF-hV(OYkAF,:W ^2=s%PfW3k+4* m>/P"y'+T%'yVipAbDkk@0 Dp-(XTLXI}w1%렊x.,AN $engvvW[dZnyl:Ǝv 3KHǷڡ$~| S !0ۘX5R|o,P!+ꎰT=Nq&ӻ<_C9 k턔` Ћn]6kefJsF-Nܠ˩VVM=1ldą f*.-U=],^(-0Χ}F ?O3G l*0h%=P%b<{q1]oPš4o}V`:n,P"Ź=fȩv{<׭!5eJ]B!Cr=M(lP]j ԣ[o^2ҴfKg-] h\6ӓTp削0;Os@iAC?#|s!Л.Hˈ잠Bm>}xlVJ7^*,77=& ;o[@kGDPJQs S&RL8FiC{8"񊁗F8{:aL-]XuWjs3:U҃rEk VjZ0kN*l>G?|h]cִKH9T/>(\si2_m 49פ5oBJ񲹀vI }S::` O"};gu'[9BAOD%pɁֹґ E]4N!QK"GCGvv,ϼoMAʓ69qT9s*vb]fڼﺚ33X@ofqFPDt먿;)8O&̀?UKz3 ` wܘ uQt>PWpzta59p#7^4d$izf'E(_B`~`Uw4u`䁟;;ۑAMv# cB58+uv ּ̹tbdUn1a98F%Ҳ̌ˇ\v ϊ۰|YVrpDNy rTBūe ruyZ䖋6t0AAH8EjpxlY>v Ͷa W2:! ʡjqAB_2(u+s G Q*۾_YķO3b=/Tg5j޵b!9*{J=N!Kw!w.oWcA5pT"| { xrFKsc\T`gi t3ttN}JcrH}jspSgFsJkM~DPgc]j XpUHN\*/VGFTe/(c+b9:w f%TśpDܞ˿j6iV o;.yt-[s? "3*^~"(:U,φzE{m6EBSxꢎTC,?:6PEx紱߳PYFƴk93z%!*~s!G [2Y}f=p/l x袹{E@A؃8x܈%gb]I+mZP$u/w8>¥ m,0F:s5XXhM; -^s&ܶ5M~2hӺc/J12rsK=/W.K=WQ9똒|uGP/X7Hx?HrB"pLw4jոC ჈g1v^·*_)sde%K-}\qsWJ@H0iG HRxУZX*d4hRSu?gSF9T Zg.+5H _'L,붓qUGXj-;ؘ`?B@_7m7|AS,:w+X2̙UC|6͋JI,nwe!Po>j+}Ͱ2Zw1sG"R1D$WS$tnta _MFěW7ju)7mQ܅co0W]Vu9%K*XhٓgZL& WHJfOs8u[KaSM{Tj {̘%v>ReY_^/*Ε,gY-DžV~R~>?Z؈fok\Z(?_ZKyIQ5)~2 l|^1mJ|k";V2GLCjR!xUb9m}4.9a}Qq܏Tf6Ta٢TPBPp. XBQh*)ɻ( D$DVǥq@G}fa/1FuBF0Mw2/&_$ ]p̴$ĊjBښOv-2*:ౣT:6dóJ]T@ɃʿKRjco>XJW]WfV‡<;l@ңN!T١ŸE}UOgJ-z uXqGnn ˨^f6y&n͐ޕٺ)q9LbnD ڻ:@y ,p2&c0^j-Z|;{ +>"X dR '`&EW }?AKCQYD_tRS2hss.VA4Hߜ'uIh'pI& ꄥcA*9 4P3qZtN~gvA33)L^/Z8ntPŃ__{S. ?MF-V "񶲒{?UIHW& W`1¬uƛlq \}IFmo)FkQFQIf"J.:N 8ÜԿneJM^l8< 퓥g >Fgɇ ~yx!u73aBenjn=)&R#k!Կn͍]o&!l~ әJ}/&lIŧNAqk{n H|QwAi+w @ŧEZp1鎇əԤ_cU1ӤGe 87\wA2'օ? ʹےlzs^_3- 5XOϊvLz-c {yyt+)dku>`zP0,CWG~n$e ;O`^Ze!9SI4Ys$CyX"=B[h9-U[SXqsyۛ|{{g/2 ܸ3:v%Tʵnq"Vtca|A5K(W*3WYC>%2̼YrqHʐHsv;Jնm%,cM /[h2: rHxь#YEXMnW7j7fP=£BwW`M^۹01#== hM5 \{鄌?44"VEy E~2hQqV'QerA([N/ >/2+NMR^R[՟/3|\354 lY,c+r%~cIȋWDɒ}t5D}k7ƺ-QRj*ѩd8zCg2da;CuG6#:tĵ:BZ< S'A mdO(yM(!!YaÙwOTɩ =b`쐱YA_6qBUp*[bDm4'?@"֩"~CoAɚ8]%!WF^ Y)iNI}e=FhjКc)a ХVt稚i<}k "`TK.OEm KuBӣ?AQLVRX(^jZ"ZLܩѐ5qiNb8aR?*uDc]$ICzhL|ݲ_ެ݊Fa釜#O3 .q: 0|l=YcNszk-s:UI C4ܩ,tOߝz#Ց`eN0#d?@HL + X<:zn'c~+peo6U)|Af|t[& ?.+tN2]X!<{4 LFn|>@kys@J/ZYޱv@WJk8iA~M_[ڧķ&xdU6s![P)ǰ5'H]> bxcAC,g[8Vr1Ҡ$KTƪ\42%Vh 0qO@QY3.3"qtArl6k^~+n~ȥdCƘ#$6}$̰69^wNr9D|Q9:x>@Ӄ~F϶6E17 u3Y@㺥(BPs>SWPIl$}e=eoA,zWjQ*)Zk\a8g@A(|rB SE٘F oKeǃӰ"Dɏ|^$Zzn2] 3E=xB!e$ ‚O##PM'[γgڅQRh;ZɊc4ǧUKQ B0 BbEhT -2g;] #T[j|'Ug:( Eo9fu9}UkGZ+Ҷ]]<$7eXc:%;U _c>`mly;tMvIӠ׀+ElE xcuyd,I'oŤT4xZsJ'ptK/EtB?wnȽ3Fa}kBv3ۅbㇻ+3ֆ=(գT eO,X.I4 dN/ώCA>4C2Vwi2Y`5;b[A|4qtڢLdK\v"_h*s=.lkCijWZOv/fUIZd ^vUgIETR%L'|gMs"d;J#cT~hៃرEwĴj ~nK sG?5ΡɃbW3Ntv}Ax9PlWyYa?A:kʙv.[8_%oAIWOv{߭4"r$ B`| )0F|Ԣe׸Cѯk'gBsi54ȳ+E)ITKe]UJzBzNC64MC ?8dVA C)7zIyZrLye{6^7"yma"~zo[x&  OYrC:q4'!ɪ5B14+"hZ1= gBNβ!; :_ɡN+ѳn\Kt#Fڛu [-Y/tO4*Eh˯r=x,˵#bt;Cf qUlm:\ KfHϡfBsb}(F087V%Bţʔ\oO#@\R8uMn@n1MG5Lf&~NZx:Yfx^Ѹ%ܭftMs ~5g%Zv)O=>ako5>W RlcG3#pk@/eY-C{WM B´v8'&S=|6,؇tu\(Hҕ&`yVY}cdOsI_6 26e'yTX`*L@!I|rdA ) t{{FyH}MJ!}HkI<:4ko^ag"Ov6m5I+Lx?=4cVg D\`FbHʝRo&=кV9.]W欪N }V\1gxH_0NjzilX*NdH9w5OljughäqAWgDeF]r6+ԒG\bu#ld ȫ1JG:6|lJ !U@Sܳ6dca4 ʺB8$N"8RGW7AsXu ߺʴF3S*Nmy -5HbF/$*2ƋA?`¦ՌHLB)3Qjw6ަVIlZa"̡݃mX]KcYxlܤ_a]ֱv$FI&H:(Ɵ$Wi:0|H^%&RV]6y;9!qAdK L)MFWAc:~fI ٜa瘓1H"ϗO ^DnzSN?zs־n^4t;9 f5)Y{[@s P_LrqʹvMJ\d-s;s@5(*g2 婰w[Ty&3[ɘ fpI6ZQY["%]hfGKu ܟpl&.H"-1hfr,ijz2W u}J_rY2nY@]@3_^0莙ijnhRoƐAg>]&KW$o7@.0El+u}tufځO'Gpp;VNo7#tȺl4e|Q3i>Nvg){7w-KG"CTr_~3?=dIzJ^!nmv?A?;`tr'2@U2 4הk%2-ϏFb@{6^gs0%!ܚ/\?ۢ`G0'OpBIj|y|)I=[ eڥ!nkI{ߋмpKϸ9j<"D%;AV;\5hHwtvˆ u[3f|i|2?ϸܻjݛj8bj\VQD= Y9-I)ZTjr(ɿs}a(4~B2r ԙEp`TVڥ#rHPf!>diBfMW>Y f[JCx1א%ihHTFQ5 J.egV9UHS줁%{jS^nr=$a_Cy/4R2E dZ3Bb )_ߟebFO9¨}[@}y xAbkV[ڏCm /S_Bq?֧EPnK?ǤTδQ܁K݃ B,pYi؎x޽E[¦BcvSQ_Z ny#z\& Mh _TX2vLE4%ҩ)7pVjƃҦGDl"d_C]gA[sK&Ch"vSH}6񐵨e:mOL|dAT6?CjYo*~K~~28x`602WI*dǎV~d5gND v&UZmq#q߲\k^`Oѕ2 >uYTIC >'s5w&;,>J?fpC҃#=˰w( S,ٌnr0/8{> Pk\Ya&FnҼUNé%YyBzۮ|}~S֠ퟬVT1w/! 8wuŗ'tO5uqU}=J{kZIw94^s A5GTUTlͪW}I*҇˜gPk.W^y 䧩#FUtiy,ه13t( 3-dfu,'zICI"y1M#y/!)A9NiOß(5`!B7&P'QރͤCx?K?s({[x+Dv0Va0}AK{ v_UJo4 Q|zѼ:eWK4r(FIvJ!⺧VtTRRtC?(ɚ5+nmCd+Wn}czJn6K/cAb7J׃ Og Ȯ0㗋{<9`6N%Ƕ N<'@ sWM2cwC*Òs d%z0eJI -_ Q?vd0tA-GJ"hjڥ4e*]0GK\K9QxCHӋT#X}uGhDfBŞx=R-qc4(qP[x0-)m< 7;@a=ecQH#(ZKik)H>f@,4MT@ {sG&]6P@s TěLʴdѧD/ ɆQJN}SϭKYD"v$U&v 9L)W(fd9ᯍ*yK oTVЖ/XkKNEJMvE/!~1Y q 6 렻NЬ]g!p5Vrnhs Bm`G9)6#DQ1&/ĭ}E2%gͤi!DSfhEV\ czD٢9|C&̿l3{$%H9D(/*pfx᜷(hdh|gpn)K _:)j8vDYoq0V$(6|Yq],I(ũZc7V0_ndṒ{"BWc% a.U~it>-9CKO.tlIDwAΩn "( v!\}@_; *H+A풦?v,>|a;zOղ+2!MB+QA>vփ^;wƘ5^We~M7b›̗Z>VÏr`(zOW^mϤJ%8+Ay C=mqKIIDo -BX.;":ZHeYԽI8>Kv=2VϾa6jaC@-R9:;0aFCYs8/xװ>Sxꗔ:[u3!xX(Oc?G]y% xĄVB6E8!M0 Y;-#\RۧxmN,<=h]6F=W V8g@ebɥw:/wi\4IC"TLlN4UVKK\[/,ŷwd* MD3]Es}ޏRI~Z[A\D-.$܈*!#[Gsiu5Zm@J⨋g0tW4G&jFWTcH~& Tz00pt,k kt/ұfK*ǔ.,Kݯ6bQDYPZItVD[-1$t7 /xݵc')3+$D b bs>MlO:Q)5- P5Lj9+iv0}O)~Qm+P*^|{ J"|w0c\]?"¬z0gsuQ-1k){m?m*_?5^ =5ݠ;YGX;SfpT>UZad/Q+ή쒖cK gk^v.SCn<2@ (rh)8t.zr3Ɨ&=-GsXLuDx #қڹC<b:1} ĪDN8A@xy_20!U3u ZH#и;:_*S RX٨el[mX;,e ~d 2MxHHPm}ޡt4TUkć/A #ď DS-ZM03u< IT>aE>|:cHRV,R)B dΘC90 2 ꉠ@Ҕ"l.-M$ ])8V'!o3J)P:P|(œAFɐ "=2}9$2|4W˽/X/QҺIrs5n{//KS9RJ{= Xt+sWe\3SZ TLL%K&/'\[Izy"F/10&_!4[PfQ6q2-0q0m gNi9>v>Vjjs!IHh2cÐ 8r )݌\7UD3l^6:<}s j djlhʙ7XJjB~3`F7i (wZ3GQTb7_abc&9ӫ=&"$c~{Ia8ǒu1s'Jr"_ӻ<##4gʩ̙)pxzK~B<0 @5Sl"y7"D 1nG#jo=_w$b @$)i9:MH ȽNb!{@}48D<ÎwapQ5$xz7}%TGuNDZ_ Hmkwve'b֝Ц>+3=ul XT0yTV^d^ao9}"g)ol?") ہØcTSŔ+ F.t[١om- x1>`c݅`Z,Bȳ^98_ϵDEF?H6ws&~|4˻ HC} mVcwmu=v'^ >_j|f%v=hsn&[\Ow{SbTw[GV{bd֑8XyztEH!wֻ-nc?J0͓W-SMߒmJ ,]C N@1՞᠞k7>\vi3`U0HrN?h/U]ݭa"DȆH C IF+. >UBիJt#BT@Co!(+zzjds/z9.p튒J? ã)x2nSKeŜ/.|˄MYb~iiBX Tu0ΜE}.G$< n}QeYB~E4B$(M~XnI ~`mRY}7љCg1D2J%:4aZ~ܴi|ZD`v&u5܌hnE8җ F:lv0 w ١]&͢# ?L.vc`!v(K-sBI]Иg Dz; [qĚFߘUX(9cj$=:" P!&Sw I;)m@@=]Km!uxpڢ!*Ʃӣ S5յk=eZ[PXX,¦\$&b@&9j}UA_\BqF+<a&746 S}B~cEkb&W*P*iP p#\pDCHWD6ȗtgb'P;A>l Of]@3LRK,l 2G >`2Xm*]Yf2/󽇂 ё 1~UTl"\8_Hzu7@U3sxE۴Rw1gAc#LVU-|o-sktoIlNzJ#2qe#YCP- XͿ?8%^Q%vBD]X_|_,aτƵvi ?f9猐b':]fQ< 9ev͖fw@;&Qg$úL=(5)EttO,[%/;c2)اG>"8;Q$To(QE|#ukQ'ښdL*!FiKozugj%SP BA`ۗS'n'Ӵ-9'DH|l3q38S E{VQP7u= ^v\DV'U*cJˣ`O9vo+D]"gۭ&FJ$ȔүQ]$G>ƥj U7l?o tvjh'LޅUkW5țNMwc #MyV +J;lbrRܢ)oŎѓR)F5ge:iHohџ 09K(v%KJ6㻾jghN.fdpbpp*^#GVT]`HI'1_6@zUIKdi$]zcD3*0-0k%lGP\Ml`BFw^!&Fpqx-س <a5r#GMl\("H< nfV ex餞+*CtZNwr:Z1 kC`;b@o$Vl|J ŗ?t; _;)QF6SZQ3>1sb \tɘ%6?s! 1ǡ*ęə:ܺ*WmE?0Ohsgּ(MVKm W^}U5-t)ߔzTǞ<-AiE[쏽DRTh6ұ -pڨ< luK] s)3 V/Fyǜo1sMB[e.?Єk"Ҋb"6x(-Ma1ÆBQo%>0#P [JP#F,mS>&3t;9Yl 3n#Wm0nSǢ dR hR]<VRMQ}R`f/1Ff+{'E#)c7i3%4Q03~w>}YwmZ&/1;6-r/<->Z=ܚUK~qCCJ9vuKbGPdPA7-վbbu\G[nÙDFWdeՎծ[ ۆ@P]KX*,GGLlH2tjDL$u&H']-W\-9WZlMJ0 k k|1UV z + W ; g^ ) ]biK\m:Q%mUd|a um21eh~# (PVG4u z̝RŦ'*# K qa>c2CC`ze]{3֭51El{M'lJ~.AjQUx +\͆8_:I}nBx?cKDr43-g 26 k-XY6g,eliX=u1hjK3pc w!˱$nw%5ƕzb:ufڠT!A5Z$墠>|pZ9 J'Fs}/3SF85b>5=pG,')+ }2MYf"8͕΋)U0{d9*'o+ESgP-W~[TjW%ha5)3n w:B 46WlV,ucW`xd7SM/B_h xr6{G'iΟYȐ,('UW"^:SɁe]^F!D3Omӌr-GT؁HE3RՒ |EyyoݯF"ϑ0xfo!kUO~T'ÖDޕ BMxZPMg/d0<E,V|l}mX'd (*<凲tlWU^?33'+fC308˟1sC4ƒP 5,؋Ak"M,Pp>Y} U8**7oig*{/ƂXcJ*xBܠZ&s>7wmI_9|5OBChLNa8#5R+4θveX=|Ȥz2DjȢĂ䣷7P"% nvN?ᕛL(45}Dʵ?4lXv-V*j>ZFi'ZS sxǷ6~ GDv8/0b ?KR֕v.'Uַ ˅ͿgL!b)ӀyXwƳ|C䦙ȊW!z bV1/qAyq*:m)O_gfe)M+" NPDlC9ݬ;q&4)nt 9VeքDKj\J,(Qkh-4[tTVPnj&GIQ.E@rXl @E/#0u -t@jjZa^B:BVuӂ;&v?0.]AFȁۼhj6Y 90~^+$S*]| sKvD|*%P2.hi݂bD-y}}lIYKκ*L1ہD;[dUL]V%]4J-T07z|w$Rjٶn{܍ն+mʪIŲώݿXX Iaޘ̚]œ5qBwXb1ߴ1Kj I{X)TIw;W_BW#~1=cXPl 3{fb k H$=QoA菟Y8Jol{ U'!oǖz? :WW׳5X9qH]L%?AmӈV4޵/?tݨ Uÿ+I] ]зG}fk4q[fQ(KqV;̙LZXX9\i'p72$#\4Ff7b& sd: /-W82 ucUh۰ݭ92^AQwI/$59>0j"]Ģ@@nzYa爟::8jSW3b{na_a7f~n0#-J[΀_3Ublځ nB`Lܷ̉R!#f ڛ+aKK#Jȱ `ya\S{ĺ:lO`aj˳fϼڦRj{eJMԑX=q9uKQzQhm'KX6RO> K]AzQ^o3o-<r%Ure1?/k+GC%HKC44`)$uP8q~ Z4\~NS-cZ}=܃c@sQM-6;au0VVM~9YlC7 ڵ[v˼7o)Ăo@xmu E7#\KH MF7,Ȓvtʄ*,5JsqDc BvdxTݧUbkOJ>x X | 8]2Fٙg񑣗H+$6\K{!iKv pl.i!gwEf.}b\i )RO󰆍V #pc: p7 \ش}P4z?-ީ+^@_6OBr̄*csG ,SNB0`5yaKuloja%<Я ,- ]8)x{업)4ȍv+PqH3ѩ@^Y#X1Rwc gz&|i`?4p; ۰Q_Δݣ dvVH88Uc)diĵWhy)%<&/-5inwhBUd'dny ߏ2n:]Zϊyf x杔UEEQN*^41E&1uD{tb{CĞA9x >\[չ[w1'|hL ͚jL75R;2X-7SH _O2 TY?ޔD)2j׼o q 0HOe49v D=B0=Tz˛9_ѺWB]WII;3Wgz-.uߪV4ُM{\lZ=;iB)ˡ$)x쿜 aͧ6j$^ xحp7-e}]9_aK^ ip_4ְ myQsF)LN\$zQ-sɼl|AFͮD}; 7& kZ>s{Ddl_5I]2c]H1̧/O~oZt!JL7y3KHl,gp xvZ& G`g\9GLȍ<>GGgFTEp5n0 ײq8?0 [+_I h$U).'(`\ iv 6oڻ&ɿIFC5y=?RCY/~y8dҬp̘Lⱇwp luܚY;#(,GM S6 z~<9T$PGwzIW%QńYSe9RIRpUQy(rQ6GK.Z9Ql͋Y@!B0p43o(;u`p;rrpnf8o>d?, <[OG{ZMj=j| veLv}vvGl iD=r\K 4#j^ L#Cǂ0tpd,>F$?^.kT>aPsژ*K#_g`gQ.Q&yK;gBn;A{"è%z1-AyPSEW%x^vqO/84ańJ_SS 03M}-&./Wb ĵ^saT1t}:V|Q@(E:छn.\ĭ$x+O>aNK=dOh*E7ijZSTI˛XP7_ )$0J;l ~# Zv2ȭ>Z)] Je;dv0nط> )+Z&Y\4/Cs-!?i\ӝA*C쨏9IrPp ouRk޷8+b}3t#_T&%)x*:8n,ņ>ߣv ?:Cg&PEhM < F-$<=9xPܟx,x:]v 蔦fbe{WK͕TA=! BW?$u8.|;5t^Xy@CI{Tun/Uϓ*=1 hWW؞eTI%I Ro? ^JJ:!~C}g$/5r'12K`Ig=U5z7"bv@o ;+X݉[5H8X鸁c3AWp0$mF4E+ 30Hb&ƴiU.e,u|0-'mX ֦83EfYeh*S+?5Pt<f1} m Ҡ:nȵcy=|3cvc>.OI1}x&?IE ֝1 xu>@@ݭ|lTi"rG,Ҁ뗣ׂӽDk'շNIzs#z:4% Vr ls#}/X &c7ߐ!:_2a(gXSn!Kބ䏇\0?MW]9jLzٶk jk&b R߾`>9 &yN96lTj*7d=bgk= _*=8&D rfMA¨8DB~GnB7X ݄)pu>z@o7Yc@b5.h[VOŐdIEGˏ7cV^t[ʩ22 xń6SlܺD{7]"M}Ij lhwȚ`Ft)PʈQ F`nlRLXrj<@?F-\SB_a!0!~ּmH1\oLv}4Wnni`d:g-8C' Gm'rLG_ :muMeR"%|%+3AVaCϺ}I(tMTiD]< Rvva fsWU-?[s{m,E\LL$'^'mz tIe")6KvwnVƩ+۔KX!mYn;ul=Mq|~e0"L TLGluXBLoH#L/O *J.s5a8gcZ| m aE|A#9{7ɃMDzdDYDE>7z:@&d=Li%;7]ƽ1!uNI-lbUb=Yg~sz0N:c߾7xCґ{HEML^Buɨz v$vMjA6<1h{]|AԞ 2'}(FGG t87ј>m AAc:=KVU۠񁡟 M/^4= vMei-[9SiE!]p Jۃs/)Â:e@$a+WwɰڊzV7">zx/wwVѿeLKO CS;$y4FL[`Z'j:Zz')`0c\nX盦22ʞ+P׮'*%f(Khyry!.q`/ʜfK!M0S~y:˓Z}T =I"c'8\Oq|e@0618•]52k*$L G뇑V%Oۺ9~1u6S2(Eҍ8\$9^f ?d?gnCU;WBã6oޛM/ϖIq` c/2e'Ig'V7]`,6Pa< ꤦ/#p^u X2MNd!8Drz?Cl0?ir]Li(w(:vŤkbZUƤΩB,0qe:n@l5c>0F|0J:x\ <|:]t-^צN"AXD'YR! e W54lِ DؾK޷h7BX+ރؚCȗetkGd4\*k Z"+LcP!|wF7 y#CJmVf=۟qgN3|% /I0˘Lr<{3֡?|829yuH݃d^1CE]zଫ2Y4 OjPv" d+ʊ-'bR 5e c7.v2Z:{L_B SdפWiǣLQ;#-M @>0 O,\hYwzz'ŒYtLڗ[>㶬BBb~9/5w[xE,ª6r&Bo+<\9x4RS7H2FʧO'@ྚ]J͇ m5ZclͬAl|N6U\x>;%?ړWt)6"dH )6bSndV扢.82P,kWk2W5E Z{) U";/ SHQ2OaY꩐ +=C=Ltw\(f@g2? .9˓y#R1*Gczj"4|/V/=^$7Kv<:vbF ƢpW"d]S?vX -׶8:y[\T F]4yUz]+ 5ޝ,~HAAW8"~*tmy_`6;gGN/>7h" HkR6hshmS njq *3̖ ߼OD\"M1&nL a-=Z %n7WOZi~FԾGY0>:<: CeBr>㾮2lļ D?ݑ_(l=@F.Rͯmed+z0Kh΃1LF @EY&l`݁"҄#9Dɘ&Q@M+^aT(l.&G_^SziñŚqsFXu_e;CF5z~ %\Yt`b= u$C'#/vkL!r2 nrvgJ 6:/QAie2$ v8x2g9-Ⱦ?*A_ӹB'/@ j"G3J~ތi@Y*fdeiOO tIqęcP 3ī>+#_3 Op,ʎQbjZA*lz4EVx-55xт~~\bV+8SW Cz~z* 7υb)wrUWν*Uit?V7g^@z /.C׸"woEX̽bG.~ʖʑlp/ڬ#)"ź3LA>~~B>l|nra>44C..r0;v"YaF)I iٰǂfﹰ;k=\ʒ]\^E{~4eIȿ:,Lt ڬTd![[~g7Ɖe#zf jE{5 D=eǔu8 PR#\'o&Y&V'1.,M wg/Ty_b .Cg NЈxhִM2]K>!@#üu{ȣ n~{sc4%wqYi< 4sqcRŲu P]Z}mGL1Sy0(Hv_|-=Эsj1;D8Sm_;r[O3+|K{sU~Gs|<>l}Atp 54J3BȞ ӌ66^@$YR$__XN!e" _bٖe]쀫Dśވr|/Λ#/67H VAQ|Kg) 35&2pb>HEUm(GXɏT84 HkDk, ?LOK@2{h} D!|Яtn%,4W/^5!(> %;p!uJ|RqZp-I$\<8CI3uP|q:I j9I'ݱ7^h}39WXn/PyZHU`* E7i0;M,;i ݢA0qz? b``Iii{#㻞~wת*Ud8̋eV#[$`* }&lTI[pkW\cYkCu6"Z8n"DB2 P6/_*Aʎȇ+7Q? c/ 2S{1׬!S3^ZWJc.H pvKw,} x8P()v`"E0R)VXV&baX^/&jHYؠZyb(8*5sQfh g.ń m0z|62d2H&O%ӭgqoDNx3L.rTVo|z/8# (4s?ML}z0=XqU]hH fűWޜ6]" \Ixq!xoҁM>٫?jY 饔# 0ƊgvN {pInj0"`x)󛶾^f Ѡۇ20Ws  Y>oreis~c$ ( 0`) 1U76}r^mbﱴ</b/4 &@V0p5a>i8?L_eqSz`6d*w"hHYH'ɒVr(m} Wti)SŚPNZEANgF3%'> Yp Sa!=e 1RL=oVb>;.Si*mލW`k6b"%WfX)8m7~C3(ȏQW(#M[@C}XTqgW ܉jةx@)\sac=%mA˽m:rOx&㎋x.o4C&׶;xDRM[ N>x/H_9g^"Y1$6=?^rS9X=h8{/^0S,}EWm^ǩ! ڌe<_yynhgefVPcZlm1-C\hp]oUUi})~oDfױi9Gxm$#d͗?yX\z4F[|VJ-j؍-+2O8Q6OБxj9v +2h2,m{Z tgvѭ s zUiRÁ=" (L5i}NvpFzw&LI(F9NӨ #aE3a⦞uKUכ&A)`y Q=ҧ=ӭ $_p:B%1Қ-f:XǽV`VA;t"1,w\7ԙX qqKr\λqU6KmxšG@KeTT*8vk{dОl"pu:YX}jp5Cc4'>p-$w/WfxmjcLoL:-1bd$iׁw.I.Dl0Xӈq<."#|\Zs+Moף/ۖ1UoZj['Pnܨzavpui~Jt/f$V̵&bґ,+jXPݣScEJiLLT&.έ"C0C_{u Kb!K`TI=8`X1d[}՞22YIHV8WJT/&OSiSv wh`V{7tq4)/!RygF}u0N^ٕacχ=M8Աjm~N'up3]SZSݐ4+:yR]xZQճh|E$jbk7aRGPOD.\'VʼR&~0w`[P3P5/L_E ~LhTcrA̋@8~ z;]H1T6~:aO~h}]64 W6-M2@yW-b-YlhE!n֐θH!Vo9>v퐌vj_ro4RQ(?P zTٸ;6nJ"`L(Bu_*Gbqe p5[:ߨP0[P>൓_u~5ce\؅Pߒ⪟>H XD$kHVм1z#-ᓈ6$bX($J^̄M-GU j-4N_ͽ~=NzVе, CWDOoWp2H5AkɓX<OxBĝ;#OF=׉/ }G֫0ɇ&=QZ{,%U)qE+ `T8 ΐ||pєw!h`f)gSY`bs+.9ohG!PH0&p ̱&o`o-1=R.=䶜%ǐꡅZ6N66( DRH>x',Ai2QaƋJV>- _5&aVNX"HfI2TZ+>)Їl o e~'6dS+i!:TtO5y"'%nEw VMjbfFENbs`ywʺ/b~VbNx 0f N|`'#戏̅0{!!$+g @ a(K^̄KnL龇K^ԬXK '0<s].YQ4|{R.I_T"޴oR0-25Ƙ'Br8K?KQ]{pbVJ)(]mˌ#o_!e :m ŧO1/'p47 (ؚ0.]NjjEYdJ Q=LhE7nYX#wTFQP3t'S[T<^yen)sH=̧]9R1Œ^Sjf,lkWirƌw-}pL3:CX4;XQDh(,V&~VzڶGYy`Q>%+cwMڲx RC$dWhqVo>WU]mFx'ݎro>SlEFG͓/cUZpbnGVU8}c[W_{LoZbd058ÊŇ~N"# mMP6}qHfnT3G!oH您5VS÷ሤG[(`3#$ W{|ܕ*(o A})RpE#MW<8Ȋ̺.Z(ltC9c'4~"VEa\2܅^yM޴Go08%ϙrFy)!j>ۖAC>^PBm[lšd[G#QǐY%r2XG#IcCrPBJ3 3X(dkeN]dG1/w< _GL![ ѵ|XHL}A/j΁Ǖ83H6].#$ 1?Yثcb gTFI3>!ةܓ 5-&/F@E8hb*OK&+ #]Bj_wGC\zݢ>Z@ w*q}]G-k_UPcB'vZJjƕ|fPp*7ژ39 Xi됇,HÙ:km ?MʅsZiFn4[s`ݔ䠄g䛫/_Y"h&./vc,NPjE^.g\NiJ  " ϋz+<;4DԱt_nE!EZWb2Jp ʄ;ZKs1ʯsdz༸]Syx=;u\eWZo+o9$.,&_E eQ5xY)3M χpD31{жV  UO(:SY\/(OHPzʦЧ[aQ9,!]uAf}'kbifv˜zZ^rJl-%C$kQ@N| )7FER3.-Lͬ4Z #Hf ywpHs(3 n| >g4P .m!|Ho@t:H!oSg'QcF ++0*hf-檺//_ w@Y:'Dcms9:ed$#аPOcl7w|݇\P^]Q](Bqmf"Ehydj`n({WV K#t-D-iT&(I= P?-G) Hk퇿sҞݪo7dPe}+޸'U 01#ymϟCaSpQ(Pˏ%;bx = 9O`&Hא&_kO[b+vO'F,+=l(G"YM< }_aJ3 B ;9+e/C2G~b E,:t6^6,>H'Pw6+*(Ӄ=2Jqu?닡'Kzv{Bǐ:͓ !W.*$*=%κN]pT?'+EmXRasHj4gUɑ|EBv:aO,Q )Z Nj;ܨxxƗHYըEv? њo>8;6(f]T?q%=E.>8ɷ`w{\k\SbcM`\VrB@< dV0>T˂SF߻}"ԕgmD:uk1fraWJSl.tjd%KT%!4i y{S'f(-ͼ9YOl|^>% ّ#t&-mҋ}AqZho:cgђB}N`Y`w쓅.pוX&l gRp[BA>fwKRojTA>l} >d2HFXEtm- 5*Nc*xI8\fhqcts-$2>`ҭ+)XA097#$lY{R+ǡg 5-H4\1ْZ+Dg\2(T(iC=@͉N)EOFaT"cd~f4C`kkF];3Ghs&̟jΓ2@ĥ$12y .il&^|NS%YXjL5_:3.`粱UzmkWOHFm%)2lLjOH2aٱu8Pk'1o퍝?䭞_KÝ '@)jy!@t,1d8"p&2 Vg|tGdlX攊RGZX }~땼^ ~'IšeOzq%;.K˓-FJbc_r~wS H=@1{v8_YWc`!<ۛ{([9koez(2>օٛL' }ca"-PMi1.e$Rt*ZT m^ A8x ;Q|Pݍ J#!X]觎pI:ǔнh R2E+A{ZX>ý fWZw+?؂u((P'lEEVBh]_jX|Ys`Q G&5f ۝((o")n2~'\Z,zI15@}bUqu>싹ٓ8  ywZt 35#MY;yg'@V"RV@*c!mIԅj9˅j+j$y`ç?À{Va*Zd /{i9~XW^ +Y&юK{ܢ柟%ƈD%s 'cg+~)ԍpT E>v-c؅AřIx<"(PVfΫJq.ԣ] ;ʿfRC ;.r/n]} oN 4z` [R\i墛F#U.3z~&:{5{ vžC-G #Om ~eZNϦo rs=$B\~!Gr=IfvXrzqw!v7ɑ&OBQuEInwvf~RH V0V [.r0iХaaѓ]kY_mOfԹg>@_G@yHPt_>#mr`1Zs69JqvowB91~*֣Yt_;!Xm\Imj;'<7%y\b>sۉwQnHWLcdu)Bt|ڌV}PYCK #'IAOqdW V9~hLCu=}mkf,s@kM8K:~ky֘_~ݗޖ,%~WhL$ ij9ƣ6[7TWF=Q;Yunʎ\,녽!Yj6IAm1At8γQHЩ]sO~@eHn_6xo?Pa"KI1TP I=&E0oَ2عq<7c!)WwzA?D#B`Mǝϣ8^8msS y-Cbg{_c L!E/ΈEv~]u= JLȶq*A5 |Lb!,_ۡ9|r=by4AXuuA2ոHWEM^6 Xa󄓇l.Gbi); nHQt|"6qm4{R>2u|E]) BmuN]ͰդósVw{w,x$G6vz!Mn $a7ޕ),#0w@N\la"9A#o #˜ Aɧ+~ZGX`'r7YsSD߲Mްm}6Ǔ-uS\Ritd 5J[o .uWjQ]P7mϲ}o+ŕ5t7;l4 !aϾzBş5;ZpܑJi8֤+"YZds6 ڍ1M|yخ'/'YU9֘NZ'ea? qvl侄٫_Ъ4qgvy U2ݦȨ>Ōj2b7k8Um]⼂dΣ/6%n~Ju\SF3[i;=1d3zQiʩ5Ⱦs8_[ߚVV2c1[̊(\(G>,q҄Զ93j0>ϻ)S3JDՊ,$BBU{&Ğh<.f.q< ̾{tXry-i(1#I0I#mMmmk6֮h$ʏABz5٢I|ežp >EboN)_2LȾk ޏv}M5rɁ೨(L$9Ul}9F;S֞4v,kmn"V0ZFdԽf]X4\Ba Xa 1 ']8Œd|t A 6MIyD`n+(jKXڲ@gGkU|\Iț0lhQ&JrD4B1nt}zƼ=l$ASd?[ cRtLضPZS+ú"A)sS'L$MR~PV?}Y3oE5hRi$5n>O7 &u/^Pʅ ~p*Ξ6 v@u}U5^)&K oT1%+=Q#&[!bgqmWMKGÉJ'ߪYcYFb?XGz'<..$(vȕŠ`9LH!ySd4<ΰptL#x#U9vV q4p`肿%wTuI~)d='KOK!:Z6yl"NJ|jNYd(x"uQĽ&z9 tƕNccXnhdŶG<.G:ut UD|<|O{5\ @A$*wi):/ ѷ$|g80N$tw}$Zro YSj~rtT9eI@bEDŽKT@sGw /umD alZ^Gm]fk_;/Kaj, ԘIꙠIi T9i9 v7M* Ds~ܣt zÞBN5VWGJ]|yTjXΰwxNyZ zFKe}KT X-S! ;#G(?Ɋؽq[dSF3*񬖧,јd*eC f0erɮ q'˫ tE2P jZr> ^ _x}8,g7P' ݨaF6+ ,EaϿUQyifD'JU&9T>n|_-ʔi͉̒ W"@< \[*.ۢ$ߜF\J"]Zus=`;|}fߛ܄7L f͠D Hi` ͆U)(*zf93nՅrԒ4Xi= وhɎ @.NE~%nb4wpl w=6O[D0 #5P(,%;fnTb]p3g;UH_{P:ReiUU.gCV3FRO?l0UytFp|!۱U0^/@Be]Fd¾_o2')ə^Ƕ9VW{}#X9=H!k +q-% rV "ūՀft ?0x5YJQ<H`媴,%C<,|VY1_KsxP_X;O S(׻6hF![sAe>;"oO %>~Сk7NHM`U}FZI16A>/j$SVa@rߠ;Jh_?7 }ĉorѳbą'7pJ·h`ݙ(2-KH3z@Wf?sTL:Y}Q}:9"}k?2ZSU?ЁL=߄e@RW;krUzAsSӿ.P 0˵\nczKX((?h?-N#x ק7Jd-Ihmh vx<[`f;~rwBxI=(*]:Y @V jy8dRnQ9Me?EK@6DN)eqQׯu/% B!z%3A 4q,PK5X)ky)eQe&ZgJgƯDt@lB:&+FIZ6b71`?B:7ԟIxrWAR47!E  -F`nJly R#Z)KB@QpG_p-ˊޜũz:g vm)֋9x;gw&-:Cه% 66MFEz&FFPm;'Kexvuڭ&Szʹug}Q.,k\C{-ӫTA6 =%\!Smq*vET$;@6vl׸s+y;/WZ?u+{~8,;kx=15jW8{ʈm1 E4S6;-5v܌AʮxNdy8mJ{gW Wӧ,F^8;ו X4ͷA&qn~6sV\Bģ79]E걅"2#~S G/eĀ0psUg`W>| AǤ"3ҠĖ0k$\pgo&El~/+w5 i {й= B؇ G@ Y#RdQwTAɴV%;`РVP 8HnX &cwczlwo)|݅Lǻ6C_}$gq^g-*DZ1@ CYް)VC?+|'-1e(?2j:s#zɢ +MD^: 9VXP~*01^ԥN}oeJ 5]0[u5X "&W/1Y()z"H3{nm+<gxdjɇ!? g!Sƅ A&Q}OG9,Z5^! I.́`+NM?Ab%R{lbgn4dp EgIFV)&`;D_3LV̈́?y?TDY&( nǪj8mKX~Mڒ2*J䤞]u{<Ji9c+ xKګ덄ەE$3+ #?CZ亗Q.f;]ƊF7G|V]Es){/YkIN%a]!Qaحx1_6mK@ë, rq}Ry^-w?iGWNտwreifՅg+:JY-m;voU~tB$i8Bn$/㕧\RɆ3p*/&P+oG֓< rկaU^.gBr?%;px!VL}e iEOFA6,BDO;~LYA7=N_q>T:JQ2]x6wW>2 c59N>M gh;$Xte@s @g1J~2QeDi`OEۘBнO2pk0o1S[< o [q>OX\9ăX^RINknh2,g6/┽9Uoo#_ izNou\zͯ [Ӟ**Ƚ"w1ECBuDI^B='Om(ے =CAJH?s +v9oU\*<<Խl?]dr&i8ХjPqk|i4Eӱ~6Xo@8)M&FCR?*].rm)G3b2sO|\w֩839#^K?.m˾y-.n n՛$߃N쩜ҳ\eؕ;̴JS(N9@C]׌GcMPg[,3ɿn9? ^ Dba89 ҥ4q@aLF0 vqpS- M]mo!^V:L\&tSayp9y`/,0F2 þp"Ë)Q$WX`MC`nk%lUgݙt!cZ2'oɃ7FـSm"m1Ԯ4pcJ8Կ Q ]P\)f&ZmvJW`pcswkVEdb(a!^·S&:n, z,VuSo12veNmVe0d3?x++3B:4E Γrh v~ #*EOI{otoDB?n;.s0;KY\ٔ<Y \6up5"jZNؕfxZL/%CFr2jYB2Yϣ7,9Qr-qoo!'S6C((Hb!.5 {[I'՚v'd$$ qu)jڄNVHAeMw#Tu:N 㜁B&)ij_D7-gk?;XDG/b/7KD¼}2ŀz̥129"Fq*K\#.cwg 'y7T}mt s$o{3HGa:}fM9NDг *t:oMHmjbK̼oXZFⱺiT?N#2M)~M/8]g=Ygh݈WO6#=:Ul1JtG¾qנGLQby{ O&|Ga >UiU!}+!csE~Q$$Ùc$GRx4ɡ61.wp+{r ПOКCAB`KJaIY:SѳƝ fjIjxFP*˿vWE RW.FXñcv,KGD/w1S YW~MSaḱ<'t2shL׷MNqmnH #v %˱ŋթ =g?w$H\zՆ%"Bgoi^v!>)B62=mubUv]i/}lmʩU3N]s.zΔ2zGޖ@Z CWV ׼j;-': z ;Żm~xܛl5MļǬ!Ftp@n7T 0:8 [;n5/NPg1 v3],:_hzUB%T'm~$y|X]"]#}ćTB:R8sjlr\9̴H ٯ&vQ~g&ls0{]#f#nC\?sIb҂1/IX Zy[+*,hd f ɔ?Į97kA9a0-Id&BЇVӿ13Nu@"hN{p \DV2ߨ@/c~|Pm$:=_ï"߰^#~SMMCRifPTnD`CaQ4&Yj䑅<\#k=;zCtd d[LZ 4mtQ;1_YArɷ}n#Z%,BmMW-&vsq Z|kk *@7B; ѨX+ʼn:~,r|Fj&Ny 78]hhĎ#TE/i>F$)}xLyxp'wkzу؅hLb J io" 2V6+lRDm.*\w·'S6sIgU_}IL&'v"*!t8h.@/EQa2,j"Y}L^$g/3ҕeks$̒JerG`Dv2I7f.5ogٷaFywv@d]EV82=B<#x6R̵?M_w7׽ Z:&iLKn;nkbtbL]gDBp)?_5ȧqrhH#,}UNiM#* bW>( |kyvw#&p7Uo;D/"n)[Igz|f`binÿ, §fcW|*HT[xC"x5-Afw;N $4~z|4_e=*C zM$+Bg5R?𒀊AX>cBHM Aq ohA*Ԉ?ʤzCaYD ALJr{'@@b^vPEZNjFJ_ 1nINcmpй}9#䩁$nܮIQe0Mr[z:!Oذ'&Ig[| l|I8(!g5dXRU bD=gq娭A>3Fr, s!c1N^Nʹ6AZ}{h* -2*G$1H3ZWnv b`Nɳ>{F\]?-d?G$tQE+ kbDl:!̴*3J֍l\S0~񘥮ѕt`-ruC xbqԚ٠MVA͒@G ׾VDI_cr9+iREL7O0VfX[#$>4z&Lɘ:m֩AىQ7`"bu4ĊƎҹVN ?DR*LXA߫U" rcfF]b6F~1X$ጨ7ɃD)@Mj{rJ7l"OAQ$n¸VFrPẁxIT gjҳOcŠ Um^,w oX{9_ժgCj^D,4"WQٺ_D5Q+.`횥̲6Df#'bOLje}fe!-U⚖dE"P';;iIUwyTdo#֦/֌`:G!P2pޱY8p.}9uʃ|۽0AsS "Gz5!,Hr2Lq T!" oSfηv-]>a!F`ڂ2oIt%c $`AhISXz i-Z%v>`]`xΫ|;DnA+Ӟi$nU#961Jʩk`QeIJcBBHݐv=r!YC&{) .0 y3٧?Ca2yPI9TO'(BgK];5.VvI4Ό@i:"w;}TR&?ˡ ?V:ZI6 k4Gcp{ymNMwbjPEPǥ1f'~mX{L2u-Qb q ?eG5Vm^/ |aC`Ha|߁v ٓ2'Sz|Ƌi ;˲0ԱEk Rv7z^6GT!* ?}@vJyLHhНz?vſhzyU(}Hwx!k0[*?`,pPed-tv#(hSOH8'ٞ1"<\k@v48%LnܖwPDGg<~D7|ݵc19m[I[@\)G]Y lM~M݈'IҶп{iCV<$P+!2 Ҍ2'E%0:&0uj[1&T2}jOj޴da8E5r-Da=I`\_9&MFe-%T0/G(Ar P2J9.gR31^AXڨ׳xpLѻN-7ywa])T?6\/"k b0Eu3FyߡRgCrhY}\VXIuֽe=˭STY*oKV)(bK?Anp(U$<~o[&犿2&[OsCOo%F8W޾ =%)9#+PK`/ڝaU f}Xđ(lJ\$Wֲun(O$k;L]~qS<$'ȯ:Er/VE:4_,H+5ưW2׼dC4; dA!Cӿg>-4y )߁ 9SeVI+ޔ'yAbowHe IȵN mOgͅAֆ+i4LtY#pvK^kC{F/W:O#0n^̓%g1}H+零O=7SϤxwOw.PN?Do6]B$hkYYsG;?ZȎ9R:v@ wRdgD'K>[\f*25'MKLY\mI)ql-%3pMUޭ((4/;d2Z95sTMN/Ƿ JL CD,9 CV:H>]8< &ywYiqԤd" ʺNXȹ7ǍǴ[ . ΂*Yf"H*i{膯 U ql<')Vx9%VSQ$VZ4LYXXH-99g.WCZD?@VPz N5YdE&-'neSG|zKa a* J`B~.@;6 P djGsh':22LĪaȻ|? >)Y{7u<5ubnR1*'J66 \,F2LIЙ@Ƈĝ\_*lOz:' #rRS3n}C#4G7bTqz~^Ix[<(_z;o4괎W҂9ԾfpSBu/'xBarȰP:,a wu(̘4-͍Fi ub=fԒK +R<~ c=@_[/xPĠץ;!%IinUS{F޾$=>F\U?*)&SIz8YnDPD`N˺+X )G+ɩ{霠m$;8nv(:coi34HZJ =:=^ _;Pr/ԏgCˌZ|kBIo{^%kFKוi(5iJ`6Ya=H,E.4 ٟ$)=vݰ%By[~$Iqѵ_I|!cXJg*ξԛa=K8WH?z5-kEtu֤.Λ@nuXvYpGww]_"w"=6%nϮԣXXGsWrԙ> 穼J ]eFт fDXXt0۪r"=D,b끴n?Cp#!,@7wC<`~8l J`̈́V.ا*C8JD.MP#%_%+YӰ̴(v~P0?i̍&BoBU4)tJӼ7ݼvBe헗NnNGASpV/}~Әpa/.k,Բ*YfO&on9Fa>1BtnPO͉HT]n wa^W|@@4IbncrKM:h--إΥÌʼn'.v5.d7=H_3Y}yw%zz ^5e8A%i`#kGb2D] Ghg2sf<2:h+(KnWWLfib(M}>~0Ho{eV#B30Jow((v_|BлN:T=BR<{L,5wEذHJtONWӐNw%r>^#+e> 0%2S Vt%%T{5ӱJ } Wyڽmg1>Qp%L@#a*kx1mײM ,VD&*ղDz#f;d.ͥc# )$uX/.ZT2g] Y]iVJ~YW-Ql4V_."bQbzERjAyrJh/-Dfk1Hϵa¡MIpĶ5 76$eߏ{,sfݜK•ceTM?O˼gM` yE%`NWØU,̆f {l#h\L._RO`ۤ8ekf1CobRWmk3ÝK68ŗ ,dȹ ~Fc|=sF +E|VE]&;zdr%և?ˮ_t}5^_c?'{=i aF<X/{dS0h͞@<zŐH b($+CGO0ċqGk?hpZZA#]R dY5sf0nĈ?b&'1=~(vCzժĒōlri܉V/&|, b/^ Ќ誽Uy$DJfiXb͠&~qP(+=P-\)6!@tb2ց [X H͹RSnW T"|$ѯ116I_*`K; 14'WARnY A;oؒCS`WyyN#v_)hl],y>⁡9t,&P8~-ۈ8ߎP,-t}{1dbztaMWfWN1KvY3w$z^@lAziV:WA)cml]lHBV`"切z"Xޒ3kݩmXFtOe'u>9tU-!eR/hY9D߻EUO 6 x_"<98bRvY⎨RXX Ը}1kڒãy?v*L3SCwWLj7k\P2{eH"L .G"e-[jhmWdxNN|d&u&}Y:BR~q_9y Wkҍ}Rmeg)9ww$'aZu)U:4,ׯFSh.x1n+aJ7 ϪlPQ) zoAlTZY|h39vqZJI3ņUOG$\oLb9Tf ʇf){|#rx&I}^zьGҒg'>5dXbGQSPߏ~ѷB|WBw%tCxΏf};}fZRU%\ 9%›IDx< 3dZNꧣ@\2{P+0@k;[|%Gee١~}Vg)XaṮZ*j7{YE&(0r&2ʌׅ&dFTMSHw b|/%=_f7´i3_ԃָkG ZM[w=JpwRbu!%Z 3+ADZGER1?0ž?< $&#10=N|8!Kn0y~P}H9A{B|2 NZ8T !2-k Z( jUm}?:*P Au?2~WhM@029D?^mǩg NV{`ZՈ@ǡoڊQNKƃ1; "E h#XR’Sd|:2TKSy 5cy9}"?C gonޝ曥y]\ +}VFB"q?؛nxQ4XOǔfb")dw7G.!>Z~:vPHTTWe7^y_ δB} F:bíiWlT%L^(2TtICziV _85v;v(A;N:}|6DRb1k#>׬i3l+^8DVE!^]3 J?/+23$ J شCgA I{9Þ P뎈E]CTV&!H@@@s:>R%m2"*yœc8C:}Y}' C"8U ГȷT~(5A77hV%9w?3Fn[Ωx3rEKZgPũ/[Q{zicŻ (6ԱD 2x& d)joJļ 6'ĥKwF8Mx+nSQޛvǮ0wS0Dnɀ9GeW'|Doe֑hָ} ^~kCj}[L2CX#dyY3 J(o[2!jR~ЮVbZGpQa9ׁ/JwҐ9Ν9nL{X!fU*afrE|KnlzɴQiOYĤ|Z*HW$/NpUn?\],4K4RJA3M3NoI7woX`atiK">."~KFf_6-rr*~çրHH\?A9mq'ԏ5-K1_* hrwn\[":a2H;To@L{SjO 5`"__jZJdۣVk+aު2~: A{Z._\ wH ̃ʞXixŃ_%7KΪ"v4p:2ؾܙ 8{qUK]O$7В[$Y%VTm>k{vuηMH2qEZkO+A~(3C @;C஻ǪTTy#lz*[9l:`j1~5ר lhRF^z긲B !pUQ=/$.: eHjCy(ͪ܆LTctOb~) YN1r| m"aXY0Y3NmAQYy`xQZWruD<;4` nOG#}F.an__WD1~~XP ͔Y2 z(; ?6~6s+D0#(g[oT'<'1RԐ̏IMu8_r.䙜Qlq76dUî` ".@3?#c&Gn3fh>Ȇwㅰ(5 CL'rq(a0Qw!9HnMN苏 GW g.Y6/]RN-8Œ6ѯX Şʆ֋@lք2c*wn{Sn^b7BjZL3;5ةl/Knb wgN H;үNZĤaV왉_eek6(<"1ei՛Kw^V>, ۬?\qWH0U83xv(Mr: Is(zLMι\?@ nl?T%5} NOOSx#m.I1]KXQ0hHh`j',.? zmIV|3O_ҙr\<%/~6X 6iiЦ-#e7 ca{ш7|/y~)X[WӸhshJ#Cz-̤z%ٖ>[0ON#$ѴTYI 0>҅~meQOrcI)J~񣺽 >?Ȥn3SubJKvoNPZEڨoy57tgt0UQF<|Uښ%vA5Fn4*Z6nF@ M`8Qsϖel@lϐZ#cb .I@BpV IޠN(}[b1Y#:"wvIMǞl4D ,c`;#rdPѾW0GFq%*v@I;ʶ. _K1Jz@N{|yҁ.5k9u-Q]=:ʦFw)ݘ/Kf..JGo} % ^v%Ŧo.є U.IP?CYNj B1N?=I $'z!.@Y3iO`[mjA!IpA%u-=E ?q1ֺ25=:̧JVcz}A-Gsd|PEɌ:#gͿبJ<B}~x#!7y~!0a٠_LP$\,8 %N’6.g˶v`0!qorU$`ۓ{xhƴa {JehS>w@DN٠bf]*`ʬʍa3vQ~v+$7!*,V un6/苋<eۙTs{|˙%dsbHR#߼U(T Xq1An&l@TbeCP|~Sms~G*"a<`7gLE-C GlM9cAU2EBWW*E%z͈R??'{f-9@aEe9ŗ zQp䭥4RLgv8ڤSxyaᔗ~XڱMJXT)NpxmyFL\5|dZ_ґ,Sew%~N5KxtܒN"kO#c5y3Li.8Gz.,LU3dhkle?/f h31fhz߭GrZ^A9 zƾ"ŸHOwǹCJB./w>ٺ*=ԟ7[%I':-Wo:܇=إ=ۈ(򎌌_#0eݕ:Q5!Nvtnu<~geLO#Uĵq! ݈v%f=y." \َX,T8́=!oDkoRk t;6jDuSOk|±ۈL  ʴ&=EWNB"]V&nVUI,q6 I2gkIn3$Io¤H=!l6._;wݍ}po%2e"?bKIjo1MaP40pS]9ڞeDj)ҟ]s-tZ@$Z(ACRA1̭'?y\x藺$ \L=sx(7BeM(/FI aYPMgJZ>&Xm;g6b9u%Z ݔ?vۇ_p;ЄR% h)J;aՐH*DVv5{w/ݯC-bCq^_iv28 =%8X!*Bƛ^q1z8 ,{mqyq"OJ F71(`)4(OM%MGS&ۭuU^@ sbN/;\H֠2G+Lsb.'b%zE'sWQ$ MīPq( 61/gy xsk}D:q:k\Xg#@2&r4rey f%$VrA#Ouȫ/ -}w*e(-H!?̩YXkf7QBP^*I\x88؂&Q'Aٽi_&LF"\1$T%rw V.м@:l] JLG"tTœM*A >ž!=,łAKy|lQD3; >p$i.gf΋*}dhE21#=?KB[PIpG-BQ#iYŊ#)F|t#@3 3z/0YeV4`@ mך)Y*In!z*i[7]4e{Ap"v*;r-߄W'ٕ]SfV#$Q mg]xH_wΪ7;h"k-s'+ɶKʟ i_bݙR[KT ۔ C%y9|(4DV3!F垵b8D eEoNDhffk8Vg+Ă8mQ"a =& b&}!VdhkTi C8Bfթ24m=6nSAӣ'M [ƕfi`MP$ 9@muUNO Dv Թgl%u}q=9B^o{6yz2M)eLO`&Z k̥ʜx]N"u1j>e`bMޣ۶Z)l9 c.g*gCrOn4 +cX0sZtZ^OBL`1Pۛ0%Dnغ~E#㈎{EcKUtq:7Z9J\v,N^So'_Y"ED~HVڷB ׂM˜C3t*aXq{A=?9 XsIg%z|Az"EJkQcʇ f ”bW@9zH(.{-]2Ӣړϰ%^'齏vm 0K{Ltu\oAXrbi|Tؿ a!]&(XNwB-fTtmZt3_lMw5٤p[k-~!*G7*jOupK:f|D+5nŽSBmN>mc$pgS>Ԧg-sH/e,e|^}t_ yѥ=Rn&NͷA ^xHkI76vRm]l1=-L%qk m.-M !aP2D)@s&b8)+ fm$J~ Բ)7!Lɪ<@Hc`LALv])7? B(T(8#$5"|*hc䎢CH1''4*|ʆkBdVj;`+Lx%i]]|J!gN+$!;gd~.㣬Ao`MpP;"YQ'م3^M*LqkTnx߿̌l+O4#"c/n};4 &6 ?$1'Ŕ+̙iEqꤌQcSg=Z1˥X䠋z-'vHz¿޳N<,WaoirɭEd0CgBşm5$1glǹ]ƟNp?6ʷjdb>ב3QF&R臞+{.$vsi& 5u|fx!j0ws˘D&VyZ:XR ݦXynn"Sܔcb ~2*&lI/fL[V(iYP'\91u͛9qz֔q;IѰrJy!D>&m&|'2J=m_ B}' .ǻc `Mh4Eli=%ӪƚTz@=o)5DZ|d89E=2ps(@g1"/3-~Z&8*AȂ6_*cQ.TDuNq,QxrURK; h'P[Ъ*#3VMp^׾ُlCj}A/YTr!8ޘxfxrzX|vQC~7Dq`*޾ǺG2;'IvmGLXqʓ!t<awJحnw6)`nS0 P!_؂\rv+?jnu_7]ܨ!~@Qܤo~tpiIC` Ά)vP:fsT$M6w*`F) OrΚgrhd` |e߮;zBnS3OTqG<jrzҕ^$_AUHWzy0O5[wS@pR^<׭u.o#bE"ƴĂ3fhWBRb/i$*wt)Q;At&9;kdtʞQp*ʿ_ºMɺyx{`BidgkMׯ`h}u62%1yVU "?'pL $`&vee mlnD bsi{}*~uFFFz O;; X,UgZU9:Lb^@͊owGVoA0OJfG]Tk8XAs_|p P\H |IhK#'V )L)Qta.WJot7!KdB)0F>QΟ'8&:_ȈNe 'lᛠR砝.́Z:l^ً v`nQ"ZUh;W5@1w$:ɪz(ՁkPdUUBxsGPK PAO#bCPr5UR\6")u).фhdݛ~^7Mu<.hdBˇ?Ssċ h{b] +~%h"y^3(̽ UU {'F!0]W!x>IAUc3^ǃ:W:ξ? h`S lڲ]<F cv1GCWort8C'- ' d_J=twS|"#iV0h]0X9?"ظ\lx%DЩ6Shs/ 54dVr"&ߗUc rA#7SLrl8b~{W<~BǗ ~6OJ,flC/"?T3TFt'ь{+OЊ4.{i-)s-ϙsV֑*a(ܳɳǒǦBP/lOO'u3b liNwYhDs@ܪrh Y7Wv{M(s^%PV) a\͆%EELZr7001ciOł4>s~hƶ짆f2B"xDO^᧽&+dQBLԀ[xPy>ZYo8>ɝkcwʲ|DX]f6{n(ў5.pvkVX-ϵJye㖆TPH6Se h(퀚sD :L5AQ^ 0svsǾ| dX_h6g;j}@6Bw؉cT'N~%h61zJՄe\c ];RvEO[N]u~C2=֣"E@إ_  }ty;|u&]W$IFk޻D_GG4W^*@*h +*{nɤ6~ݖU-QPrJfZǯlR}Z=FשBD ILù,oZ1|Tl~KP.>(bHf.(Mk=>'z:͍TDHԗtp9wz,֯l#>)S~kƳ+!JA1{gI9,>I~(@ET4'KvMݦ8&B Tu() >rpI龧;༧iٱ@U{fR C7@n2zn$aO >5$HʾEv14q/Vܸ9Tp|I_9 f$V|#$}[+ԙu*US;;fW]n 8 rI#1U]lo R$4h^)W*fXRX5J XUeJYtE}ptIMkEl9Hr=1{qz5&EHKb'*,Kb|8rw˴L1qĞ,c/"l9-#cBK-F;K!qBYGʼnsaS޾9-ɗ.]M0 t@@g.*TAŔUG{>vȪ\g[j&x|ů4N!?iCh}L;?譧O0߰bo9wF9o?-%;=ҡیΫޝVw=dBI.j8dXTC $},pY"H/0;術 CCkWN6Ce'%0:-6-;_O6L췂iV{[.ɒ^La,2CajY3Q#,Sn46%qsuHTorD)e\F̛ b_P/uƱF378 IXԍ9e=Id┏b ŽI `ccX64=!QAcG Znz>k2h}'"yKIG}8_LjRXdE}F #x?wRhڎU^_+-7ŭ{ fDnvKz{r } m#E3r8wR@s&#N_p" *> j'0؄-gΆ2?߂R(pPfTQ4D5VcʂK9Q;r.ˉǝr9ŬjɴPQ7}`طG? љO4@~+Xod<Д |bT&Axu4V]vưޫWvsŘ1tqA\츿s; zQ?BS˻QW\福#{{F?BŮOp6XHu*Jp#Xۻݤ]mϥa|֊k,xN|uԙaa"zp>ηC $u i ௓ q1;~&s8]%nR:[;#[*mUN@: {q|-^Pxk- [t\$͙ݸBPĽ1+QX (k#BGP>6.R{@Eh0t[/"6$0̡ 7"u*#EMlL(/.rg2;||h^ 8DXq!簫]jy+^eOv9:әb_<'R_Rɷqҝ &/͐Cb҂'_ԶWTyW8T@=q1|Ms .SbV`|,|^j%%rn#pDk9ilF2ʳċ-'L΂ANI B^x4js;'xlNKC?".bmUIN~Od j!G)p"X>f|9 XCzMI6)b^,Lpi/lz >{ض k-{ͳp@Qz#`ͻSβacINsJhԐϚvߏRU>Ej>K LCu6ݙV`*vCOq*~߄G6V67{{3hl o@x3i^Dh:d3XcWwj%vB"Y7$ IÀc{PÒx5#IތF[H4UIZ m!P\`<H|櫬x hݭ߯DZXݛ_:w_yJ@;s0K \d8h5 Or4IȺ]?h6%'JS|s_UaNPLV+ f-Sfsi˿6$ښ{ ÙNYdhuPťn,I&H~/@c%DzN[BrB'5Mŭ_(4K.u,I0'>\?sA5 ~I_UDc@g F)1فu^a;yMqBfz9Ug 'wzu&хAtO!LzFW$iT݄U|FE4cV;0;35w;,kXPYz"El-(f wx3;/ΥzU7~;pH0-uP]kT]n d\ x߂9x3i38[bslȦ1湭4>)]uTHݯ$o\W(^A;Q4 )='cXRD\t-G4(*bɺ(8:ai?u! eZy+0;!vVD5W+ n~/)SdcBݞ(b<fJn2_>uCC`u4*1A.c2Xഌg$c.iuSH4J,7֊ٮΠϷU: r+l]1z8pZٸ!lfLɪ]cQfNiGԷ_i\NRC_R aCV-ވ9ae!$ 5d~vil+= y>߁-)k7 K(H5?3/-3u/o9+%x͡M ,6CۀV !c73`AC3ёH*@_\yt؝nw' vw".^kXIrHH7وJYfFualj 4UF/uBeS=mfIr 1v6&9qۿ:c ]>rq֬Q';ՙ}:ۮ$,N^V@0 ]Y0 bJ# <9h\'r.w߯/ą:s4R=I,F-WU\}b0H.H s\к@QLza ǀ*Z !j+A`MWu6]W&2pY_;䙒733'oC M*F%Q9peOX=L_t 4'jҁb@ʬ 4R78: *:jrMp{V ۿ7A8cj2:F2՗2V4 G^2 fn'o&fH=}T͢9imN`w֦Bte٬GY:d q.~'ol971ut#_:25uFt$/4#`Uj#A +> x@,u2o%#BpH =53&1.@"th@w0ަHkڗ=s:YN[$WEyQkH&_~5Y<7R"nNٳR0_Ĵ8ax]j$-kψ}Z~MeXTX$ov%|'#I 54ꕄ)'3\A`/"֢N1+$~*qON_ɐ<n'B[cSi6](b݁9I~28, x*WE{pZJV!uUiwc#2sGn=g>} btddV=l PQ0UKgOS:] .νv%v+$VDXasaSH/U#腢]e+r$Yi{׮}~Ǿ[k ӣV:kr*y^̷ Z;H/I*㸢~ې|Wd bUD<@u)JIrd^nGKk AvхzeQha(oɕE1z.*l2㶄jQ0*V 7H5vh.4P1e]b̈" NK;enmDU" ,y,fl :.?1Ŷ1%5' JrM/a6)P<~#3)sIDLշy$&31ВEx5rݹ<#Cj-TL=x՘phK eي|w˶ Q&۞,oXV%e_@6`٤1`墼6NٛM`HҶGŢ'x~Ѿ@r.ΒPC`PanCeiGxIyq,T_0^0ӃXP@?5Tzn--7",ȫ w)i5X: /׮E_⚪,AE4$pN?.{kg`2:(w*TIȈ܏B,8p诳(,v)R}a0.t(ER6R5q 3}&p$]"M_֫?@>B ySޙ?3(H—p ? c݂dnV+c3C)q۠K ׳O dT& s": 7IW2c֖ CG[PmB6 99woMO z>\ 6Jo~o t4HoRÉο]uzwNIAfei_|Cu׌ tinpF*:ibt'v6,+0͞yjl%tw% ?X&H2=X6& 61S0?ۥVLNcPFxLPWS+囗qZ}0Yy)6?<60aRabDƏNt IxA lȩv1#ڄNמ֏Lo Wgb搓_縋yBN`>z'zш2`# Cŗ]O,ժT[ܠ 8;˜R*kBkҚxaxŠ|9e_dž|uVk3T|Iŧ( ۝)Gw#qWdU4#߄|u  ?HS?a%e.nto|*2%f],o'12`mP}u!8Iloi^5P?Kw7(%{<`|Ic-2c 9{/Z)_Ny~~5P2@7}w#Ocʢ of叔c!wMpr2ۦnL(Qˉ6ZBKZ}qi4myևUnٳ:Q@5Y˂pdI8 K*;DE8g@,%q-a_4b~T>Ɂpmo">Y֒ECtyVk[lL]{dކyqڤ-kTl~C~}[{OD$I39V(+ȸ/(3@/CMQf{P=엳 ?γJr6%iJw\;o*g酫ʿ,1wDzp§>Uw:9:L8W1ىBpfݐCOm3e,r:2$~by?䵟Ubwd}nN@ | (4oiL1[rSB:s$U_ 0$';)U82 !ąrPEBݟ >*%:]h Z 4A8&gC˲FҸuۈC?Ҿ aZ}QlpPC:q_@5읡m5vPd 0~߅JAL.kDJUA7(( W(vh<3dXЎ|z2N ꍠ&xB)Ո/H]zBp~I9h0mɏٍ|('dɣEPuMwAmj[[~^w^* 2 ګȣZsBT9#T )vR+TI0 0{! /%M3en{8#RP Zسnkh&d1>]<›bx5}w Ws׬F%N|Ս촫 :o9v*0]({0 QM{fdާT+KZ$6f;pb5JsTum@ʊmLO/ȰT4l-TeD`,L1zM:0UyVub`D mK0ƴ Wo$ 5o&iĊَv/ّ ذ^?uPSEǮ8&u/>°nqhԦI*IU+]n Mp:]{o70}Oh}"sZ2P,ލuQ EpoNl4B qPK0F +vh׺9 `ppjS׿&pHk2G$owg6΍ #j r@c_UH;.Pj? aCbףb BI܈Hr9bLQq S}UwY5\&@=Q,"AUx:F_Ta}!EȚ2 RF)Gbi(OMLu u=ZqzW^Hx3b)ISPjةPd> = WsŪ:[!D:UPVwu&Ob-5F(;%0Z%s7_Yܱ(CS3($͠A0̆:}+8RaF96C:gؔ7@(%Pl~-;E5NO_X2utT`hT2!S;Bc"&|+A@MQ@A9 䆁r_kI+vSb^&|3ִG"P&}U) ) BN;B%k֑%.|/iqB=&7S1Thψԣvioin_wk M۔$`Z)bsu\v="LlP |nY}yGµG~8]uQ *zM(}.Sk(ծlCv49=Gh8J~`"^u5,DzEWt/q2p~)).s[}dJ;0ǁK/_|<6F,o"{N1*IϦDS۞Uf!#]Ң3#<aYtPӐmD}$}:4%kKXK(1BV.JN28fmBWi)YB:+ s4.;`żF UmxJ V= ߄NkU"%a96Lj7Kt J.<?U&}wG`!W&t 34L”64kgS+Mqvlpjѹ?fjxxq ğQu_R Љv6c [g5ڿܿyNݠeZԛ N@[qN.Xp ^KJ%4LmY"Mho?uyrm!]Hd_bzv'!5/,=Զ.^ -|*8枥`f߉JM K5H61*V;A逓IIG}f}"_'dzR!ٿȵ0g2uRLM0zV(T>$/VRBϟN,L)%w%BK)~vߥ)8u/@X|{::Њ ((r?_l0(-:]`PTEGçB\Gzy9:|#B3r SZDs)y8w=բL@zbaPE멩wOE]sR3AwRu[SgN?{`.,c_D ]JYN2k=r' FG~gKnu+MWԴ v ZcSC.З3K#N׹ ]ډa&j>d:gXըX&לA߹фP1`aM( DZ~&+.yD;"e1`>M ,))aJpYyq ;tcO٠f;>tq>H<)cA&\ е4I֢Gr BCyD%(eB\#v2)YH!>8ʉ:u@kwx5{.<{.Y<];߾tr+559Q3F|aq  ڷГH9W1FFu]ʤBtta+ą?]Ei UѼ;Y2WʼҕD l?. K2}V{m=41 䔺Rt}bp%7ʯIg` ,V]in@z{7*MoTQ.fs?IE>Wxg"uoŒ?. w]VNj[3+DL %Ooa9h$ p?IžEwa425 J!C&`Uۭ2{,&|C?+{"'Kрb Cq^=~|/Vu_kdGznoSCY,}o|0l١!jRtQ%:"ZFH^*-z]YsGF=Sؙ pBӎ/99z& @+;L0ōTRFi( UΥ_}s徶 J1OXsݮsƨ.ahU-OĜ@Y"[-\@T* 5@ߤŝj1|l2zjiI59-CPPz*k~A|IZIxBG6AR]})Hr594W8 яާBoҥCbGA_Cbt*-M7qH.%u?^j$|$H0>@Ý `;8[3u䤓j?FHQĸ,J,@1f_*4w6]U4bROs^"$e7vYϳ;C%CЈΆON&npL~caj4jhyUT8 ]_ 1.702d_]3_v?/`  &FW/sNa:~¢~aTTѾReӐsG{>b%wJ4oI\j98RTYPnB2V^4 )#v租?pO]w3jӯcˁԟu vZϩ6JV<|wkl}IN+6Π{j(tK|p.z, w4eԉh=.OXL=Xq=0lS=FK#Vo' [aFF Z˖R=ǃKW&{-|[X %0<±hfC7yL]sIDzYo+qZ" 0UwUwU[^4ҝ鴟a:*Y"MIwZp0 ba&3Sb3H-AWIe1=V{>pAE)tf̶4THϭ; ZPl(;M|.IЏᗵ^9`76~kʀofM钧l (Q '8M ֚i޿Gaf¹ +# >,LIđ=thHbHr_wE+K[~-7@!2/#GKS8H`8jg,-H+O)yoY&{@ 1lL` j{wI*9BPm4G|: -iyΐ:2"K؛ XNWk"kf[MF²TZ3jY{IdU >.Fd|3s͐eUOnH'|/Lp\m_NjHռBԄvj H[9ÝΩѴn%O.n_BI8K>mOT\. XW^+#")ܺVt$!&Vڄ, [Ou6VL{ Um@B}R3⿖0 &pJx\ O{P}KV~?͉(ح+HJ Po]jP1̈ut=6lnAl¾2?5'_ҩGlIy1a%f `PgտyTzcӺvMW4HNm47P`IPq8^PB}2@H⒚g|f{S%u f'*Jd>BXRLxWGl'g9solfxvn+ Ċom?C=e|G0gfRL)l'8Aid #dC8%|'X&0.l0 Oo?VoxPoLX|+V~bK$YP4ڎ2@$j;9oӯN(IU{##kړɽ`.{ֺd2]7SN+ ifH_xgS&K>0ѽt^VO&F}%ŧas %@%,(yN>skIQM C pim@0ӥۄk`/\rpx@ %SyNߢv3?\٢wn5o-S''@t(~Pz4k.)Q Jn!.vR*L\El `GS+.qem H#6(ƽTOǞQފ7Qlى]O[,K/^!Oڎxf1FU23RJt[W:;C9&.+s07B;6L/p]TDeåR|gD a%k6a{S B3UAf#N],'QL~L<׬/>HvϹMRr1!iG$+-VDi$;Մ-~IFQhd3]2!Κ6+ZA\uY~!x1#lD",?NՏH{&DL0kք\S/\p8T\Xf7-ZE8[s '!V̽clnWQ5?SfT 3' ̊+8[?6&Ȍ9iY\k~8[{UƯ&Tf,C@J"sJuJA</ĸ/Ty֛muiQ~t=w{Yǰ3>'wߜ%!UtMuH՝wqI_C>p*h0 :*⽾)#HdLpmy?Eէ3 Zu:9Gy:it>nמosZU8=0BTĻ@7&0{'P aH&]e,yS,O\p)/L*5r ^Zb.Kr;ިg))@>jL5)S2aә%G5I'6&Y1>!LӮͻDۗ}Bcm^O{~E댜Kk@Q8ÿ6g_5ԁ;-Q gf-0+&~ɦΕ7eW(&wbƝ)''Q 1b8G>U(9k$Mcu!BMxfQ_Dmwh2PRG5}ٽ]A&)mSP9H'MAgrYtomYE|Zz &+g&"([jB}0`WQDJ p͔Ǥ@! G 4>1Y8Wb?4>rEy@OezjpU$J!)=OLݙcU%҉F^{(bn'K6?5aeR7IFZe֒,}PmR-o&/ۮ&ڋFm?>WC^ ]W!vZ|n8Oќ~Lt*)5uuḃA[NgrM hk꾄 0?\->Qf@-h,m4kȁY 4[^` i=ȈV~*=~-M A ⤿B F7 \,@kKtB.B#i{F{y0t(T ﮟ+?7~I (c,t7G@s1O{3@NjrpT)~u~''bF4nwr O}M*W'K)z[mrr/NVչZyjxΫ7:e\S/2 'IJp;/< 9#tb( g kmDr㎇#JG\ڢI*=VU:ho*nr.( dک] t~i,u/udOH lp,kЈK!<ؤTE\2DVIp7Zh0+AzrC8̙*A_!T{}`_ Hm:ĝ/3LWJ Y9I3%UԱ8kEք95#~k՝K*^cIq$[\Y;3Zipʤ_{ 0 ;, 6xr '} Ko^~lJc5m ;.<6U|+8pj)í}g$RHsN: L7]/4'Tmb̌eӼ{ ^N$:ZȞ Mc@RKbQg i/82gDi4X^0QeYeE=Aw#@&T)"S;-A웆'@5qh)LYOmkʄK)^> "O*|zи0 pC`PCz#fpz}cJL|ǩM4X׫+BVoթS+u{CMUixyp$SH:fdr#=g_L74| x? 8Fb.^b,b{[8>*.yȶ'\}Nq劣Q=YUi Κܛ F( ބݣBe2>CeZl{x9NaSi4-m?e; +2ドjW5/K=n]ϑCNZo[8B/1Ҥ2R]80kkÔFd7_]H[}h sY#$~f:^e 7ND JFOey=%gVl>1e6 8@2$/?m=ٝ#d) ^RֳC^Wp4 Wp8T Z,gǏ7W_g4N/ =lt6?cFtR 9יGQ"зSi'u V9&tD`LclBM!^mZ3EXlU%5M27"qێX^,yh@NւF"C.'<-t.ÖM<"(O\p\ܲ@אY)p?>HL/څ7l Zj)z\#f$Nb8rJ+ m<|%"fu@+jƖ0 )'=4!{M"j~Ka !G_ٰeps$,pNJ+%,,z$+(07ۢ` 9&SIPt< t傡$#D4m)#U4Xln<;L)OĻTMg8OsG! u*'ڱ6f:#!]k]F rVyƤ.Hï$D2:XஆցV;CxVKulA̾n#t'iC!8B1BQ*'\x ֶ4 n˫6brtjbşߕcy[$z-[IJnSM+7XԖz7)⢲˧Hyoɫ>(@%D%T/FgymЂH[NCh|W<1b~x6+ "fИFٻz/gy'N 71 J[Pm!}EHAn=-51x°2xaFG9B5>Y N.B21'lóFWiu;b(tXc Wz?}}> yoW1Cɒ 1cDOBDR+ , G[7 =x,&Ji.+.nMeU $,*++WjZ{Gig g05rSj\կuG,VδYK g*pxB-"Bq%E;*8/)e?ŎY~@"tXOMI=膚0, nQddpy@ Nߊi) ꔬqn9Ax=E0cۂL l=Ia{ʯmqf H^8 6nD~xv<|&b3,'i6scT`}u Z:PI nXJ+WRWE&nH6L(lFJj6dٙ!Sc՚a ɋ2FzΰWh[6à_LxF E,߂[_EAL/13$k՟%$fbS" p4Ym߈A!+T9F TX[~ޱIklbmv+o:Z$H$\  qjv/.};wDOE7Am7mPtt0\MKmpmq7ˑ?3RKuķ跺$ JTMt_6,A3yG{X,"qC W`unpL q_h q;O90*TH1Pͫ*O6 ,"{n5V#*pcTM DeBoja p]ES0."?J.˱{GxjmٓfMS0ܐ&}5 0`^t_'T"<@W ES#jπ0=Gs\wTGa)2*D EwvGyӽJhy"얖99 ;1\Dt7Q=YKlAJ#S8ӞIM`>gmgh{SV+7[/~&}*+vrS-0̚UL,9Z_tFT;.^Gt#rk]_isiRf>@d^foK/I6E]z*nDuvSD Յ~w.|ffUP3·miEkaX܈-}Iv+9..&iL&νX UA}!q?1А:,6tEp'DQ΁@}mdZ\XN(APx֧APq'=Lelѽ7e2;vz;eIP2lAac\yBE)hԅqY'MlvE8kUJY: qޚ8A&%znOK͎B Kggp>]q BH+hvb4l@5&8*G4Py|q(:9PF Fxn@HO3pvS%z8]3?w;Iʾȷjl>U}K** ]=Hh'R@!bxiB*4owe.5w.V>;Dx])%ʧJ+C~@("Z1Vi"z6zqW׼GpKgK#X%u8# FԂX6khqq7ilFeP^#+B) j{C (Dն`ǜͭIj/ jwHmF$W =n>a#,Yύ6⟣y_.?neb5]FgF_>QrdoWLhDL$14Z3Oj(rsTrʿ[|gl!qULfblsU|i^;WR&Qd )·FiHV˕$@#v'tqH]i,b.2H!{U huR/2+ž9޳.Y>t |\1Jbp2UTKw_xG'ac!S~dnaJ:'<ލEcSPgNr!D+t CuJ$ўК; agpsO4aXb6^i[X\*O;L"#f]piIo @6Qstv h&:1VQH #Yr =^%gk=+HCFR{xX biQLNr-RmȈ] h$0{ޒTJ_:•P9%Ceo'%mVC#BsqFL]X`vym>3yh8yDž jl}3bУ5U3p&#ozj+o%~C[~zRX\EŌG%xLpK%@46fՂw 'WQ<%DS9g,7rJ )>L˰^!;͙u " bctsbK542ivbH;8>u T!̛޳=)cʨm `}-4 .=kT5&%E-#팧b;51c~ɬdl%YA=HQ6nY.)umQb#O#h}p&3ne+cS1+5ǵPo*i'OԖRYύ)bؓNXYW@Сbds? گt@`eZk@|L sq+\b'_RjCvbCX)eLյW_*E'!wt#>cr$it`\0Ms#'B4;',&PE* G3 9WP%w_1$O#h ;#5GTʜqI 7V@bc,Z4tHL:wRS":TRTɡ^6@zjP.Y;˳{fn&RZ=g[qxo>iP$}jJKCe7:q]-[t;6e:䨔iSۑn7b;u/vJT $Vx[n%kǎ e&⼉=k<5XhTe)$нhLnbp=1v}FarT;} *3fNc>%FG4?DxTg-=0lB0b$}+֓&j.;e,Zu$8m`y5~Kkc鮗0˙8BVoN4ђ}xL{Z]3lQ*!oI0ܐ(}T!Ho.%+okIHOi] f 9!:샘؋o_dl(i u_57=y;.bỮeN-߷b) (Vͯw>`DA';b|1ϘM|-D˧e]JRPbyoO$;;X^$ZxyAMYHo: m}s?J%)i=kؿ#a6 ً&~*'9Ȳ 06Z2`G:x9& .1I @4}"k4ӈ6zBĚ!jY 16r@n4Ny?=I~.ȉhйX-c~Q-)~A"b%Deugc=>D04r0^}=dp|o/ Ogcιsa4-+pG5aW(nlPmC80=6hGZLHkE.Nݹ%<ߎ}_H^:Qn#hhmT^UsMd`Eq1~MT/h&b,ݫ5-ѻ6w-4DVdall'䃎q8`C:R]Q5J(]__sጞoVYs Wg9HBվ8:'ƣRq?|C[/W- *JY7).pi<qȓVdE`I϶[Mn8f ]'~dwsFK%G+Ӻ&X/0֥'{x&Ă|4]SiaГc٭ v|w̾ueot]XKNx[srI];fHrSah(?sRsSoу@;䄎??zB +,4,!yѶx #(u8$ [=pQo302D< cC{g)b#)A0+?i?G4V cr:\+: k&ra[m4mԔo5>Tn(@'Vȫědf-"jbPH¬#x;]{W(>iypyu1r b!@ Hb,Ӄ% ՞ϲ436๪365b$%(LJag."ISr:PZQ ݯx/K^N%_[ݞd4}y8i"ƕ Y# !Iۮ]b& ,^+'>X89 3}D$!@_.ׇ42xv,0i3|{Dz`!LA3&d8QP*9v:*ܚtQRNBYcYt{G eɱ1<@N. GFQ1 ?ۚ ?{Ík=SzRX^9s]9beGcK׀xT'+n&aK߱mʺף ׼dE]E sB~cz^6A[d\aUC0}x (bSQ1AU? o“yM.8y˛y݃z$7k#XIjMH\l'oCYM8E;0n9{ anbreǓi`ѕT_۲h g$VݳȠo3@ շxxXg&U5B~E~4= #Ggߧ.a+bUl߯@ujb']b0JUh%[0^Rk|l% * m~9B)كsL6]d8 tKs51yBjObroVDdĕ}]0\::ɤv I$"]k9_db٤& h CRmu(@ 8Oe*~nXc56!al]H=ZNqB|T>H_y"=}ĉD4ug#d1RX!;`F[X}!0ͯJ’,f L5(xo ¯GS!3L&MR^ʀܸaDFޣo>p tޢ}p+\hj qv R/ϯz#lg=^  '}+ۄҢz^4h!)|I]<驭Hxr*Rx+&v=:x׸=#u瞩*F%˸%i;mE8i6fY!Pw>j ݵ)P|I#3ոNYAXabsj N Ț*lA&Z^k8QUZW='UN7F߃XWU?a$\X7ls Fc$3E{c $Ԯʠ3Z|~=POKkJOO_* ۪' iWY*6S5ٻ%Wua1氋pE̱7AE]:9Yэv+C`lR9ODㅀa8v3_$;Ԕ]@mKA8+w w1XCdy lևƢUty2yMO(fKo`q d*f+Nk_SPnIN⹜ ?TxRu2d04ʩ?C4l}2;BVq-5 h4=Jv/X/4Vs7Xp--n~, 8)7p39HprkPwfZ°\QAh9$/C+3ᔤc6ȴŶRqA A~pҝMP~} rsx+u\ʽ+J?|€\$=J@W[ZW<}/ cL)TmV-mk>y'^U 2)wD,.7CRxOIBA837{OPߓVcҬp#(UjA&-ߋcb~5pftl:\IWw bz䴅i9iЂ0/?RSk/e `FE RBd?2˭k%4 R{ 6=g짽 v{&sAsj1lLjhn)\w/x[]B&(#*kgƨǙogVFc=23 !tQm4aBȞ4fp"ߐ$Z~emؚK@lÌ^!bpST`1=hαcիX<):#˂"  - @ T'ьrhw'vcRDRW]9FHٹ7/cr?~9ФIfNN_WW lPזm_/˕8.Nf!UIGlؾw<[E"~4wÏP|L%-ӖQ+$]o44PB|sB4"BټK<%h<큭߿g#'헽Q2eBpnr&g+&"siUhX*n'uHKJM1map7m$'.>ĕ- g%)W RHI<[*J{A[n7dêwh=1+q`녔66%Q5xQ <-ZȘ[q鍡 o_$ ڏcOn 9 {cohA%%x*@rÛ-jd{pxq| 8 HlNrT,w؍ʜlG˚-?^G?o_25̭cHqi0+秤>I%of؂ +Lr|:6Uqy "VrlKZ`mzB %6[(cNpG)k>s\ϝϋ=kUGD(nYB=CRPCb ۩p|RbWlg`)3ös  :(NޤU{$aBȕ:RqV=3gGEh|!-$=\! V=gTn(pLHZpZF44E0ւ$ -+扅 IqWZ^{-:U2`fFXƴmSvC뛔?7DQGeQI_?E{%SÂI3+=q GEf)Dzn5Le]V55;v?rw&2{"xSE$?P[<_M~ (6\A(g\ 0-ٙ&4Zy`>aRu]WewO7 D2G8"<>wZ:{;+1_A6>!cDv<k׭Ŀ,$ hNӲѪ-9 ;neI`(̍IRZBCYNu+Ւp+;Cz}C]mr'Kc,0-SWMDu7'?1c,DZԹyFfE= )M,R#D<* &m.ͥ'c"ۉj/#dDhz$0WȋmlBF4S[$Qi 5f|v|t[UJC'grdVp31k'+d^hI!rA7RoTYw(߂!5,9g~r zt[6(=Tq]`eIT9{rJ6/6ggc]嵝)}p QO1RMK_? EOFNL>l\'.M`y,LW' {s;}V(!=(wOj4j( nįmEWK&{rW1"hgpOJ p5}J<(=\;"6g$W2%C0.nƝ×Fsa*|V/]O)~He1 =PL^ܗPI}w(4x_ΞFDu|ܹW0k=h!`s ƸUe%$K3F^.H ~%!PxYf m*yxvaWgߟ+eH'$HyV.cA@>:T] Mu6msӄqt9ij4It 5ɯnt2tDIp:35g;9EUybK?7[ǒZ2ED8=-WwN6Q0m@}b684w"6ByszP| n Ey_@џAԃR$2&ZOwG`rE^D`?3Mz{"H쩮S05S* yeV4ջR5esk,帻H |]<)of5+t6 /j3_squUm$ȉm wa*5 [){n:ݠ#;@V){7wu|nF|lTR^t8@&yTDJ jHSB<4h@TYDeĵzC鎱s5w:qFYfV'5>U*Eҳ9YzETC|a콝JUELuzFj|,t`2I֧ -d|J^U1h2A;פi_\i⅀M>BHݲ?&TӨ]|C*޹R=ڭ:$臶G*'k E оqms|o8=s@G_2dU?3U$=U2! HMĊYskA.,+9 z?*oOǑno"VzY 鐍O:C)+$ۘlc2 "ˌ哴K)D E4HdWo(E }zw]_AAe'ƻ >ڞ%IVT8B WAȦ0?C<[V[Ÿ<'x~S0>\;OrIk=k\D,}xI^V"0GΓ hv%T:ү0﹵;:C#T78S/X0ݭᠷ1mܯ.ʩaK>'N; Z61+E}-՛`ev()@B:7+d(ݥ>wQ*ͺpVwK& wĽ6Q}ٖR\Jڔ <Ǒ@9_$S"jK;Z.)i0BűYLƆE*(3[$W#a` pBaMZ}SCWo*6;L`[X|DG|x@V4C#~< ͊F0Yu6Xit9fq9‘w O 0;aX-ˣ@H.ghd9a߅Y5{#d5sҡ0VFCFrԒ40"16Et/%qnrTjZB"m3{3,&5;ߐWWVocQKXQ惼e7p+fЁ5Lyv!'8?=.Pn.,Xgc~OptڋoA`Kd*ahr~c v/=ΒڨeW_ r$C }Wt-lKp0esh-. 셱)RGmԭ8\ t# gJ ĩ (Ό*b%'kE"> 6v<רKF`9Z7$uTƳxԮz)R1f̼uuEBf|aΪDTA XCt<NBFs)fpƠ{MQHEp4ŊDn%v;qcIiX.;ߙZYbsn&tBPE H)^_ ʑcHdrQ)-8`n ?(cc e ͙rYl +Cf³SC ac|8@7⦃.FV7ר3P%ccl)$_Plw嶚}{81g+zChwS55ּ/n5Kg8 H||!rVMe`_RSF ׸x HPMt幊-b aDpU&E뜬9y4%8{9mrPNeǎrBߞ(b+aJ f^ ^)ݙDm.B7Kdz݊&bUҐS+~˖z6PxJ$ibߝiP@(ooЩ1MA!;8uȣlLks.#܉U tlZ+V)yP=6OfDI~(=G_7O3يl@@_EYTM/UT{#ѝ=M^ ? ,S+(]i7ɠh S Yijia uB1o(">_s1 rQxĿ BnIrjX'6vw?Iư vYYzT[KөGArD[3ιS7дR&fQ41~ڨ"qƂupq*NЀ֖Dࢼ)v(c>8*8tXWl;UåJ3Q4xqZ$ӹԗ\_KNZwz$Ww,=ڸ 0ѴF{R@<) >NXT¤^.&:?xS'B~κla]1u>kt@֗ȩ7q \5޻Ym?w(^͝$AaCXޣR( r3u23Gi7c[Aw_ {4Y:,V4OE.Q/)R3(SzUW` =ASz^2LNfRЍsrEC5*l6 ô!HϠLgzyBѳqˢj^ oρ~4JK\nWLlox| 6˹cr(<%T عHUxNev{?>rd5ж߅#|K'05OqtV+ U=7ˤ~wX6fr|ncGtw1h(yXrhQrE:h憛)g'G.ԚK N9,;z`{[;n0E M%PŦωCniܰy*J"oF~ =V_\?jv 5d>`Zcw~^Dʢ^mUQ%<[knӃAg)(N 8"ˋ{H*AeZVm[*N.[uzg'1#7./Ym Z'a`66'>',*l2Jh"U&'2[^Q~fP-,*NlO?t}--Ɵ"2s.i7XR>^U-P]Ť3v y[gx ע@ahէ:BZh: YZRrbz53 :֭,sRmkW*io8 [GQIK!r_lZ*9_\|_9a, ; aJUIŌUA Cz8W9gz2&Иgn_ SK~%8|c fPX[BmQ3C? 78uS+[ ml:tw%:p 6 y]&VM.j a kJ/a{rxA[-_^hKwҿFkIΜJӜ̝`BuS8X S HVK kCV:k6+/80 [1~j[ Po a'%:fw+JN SB;=>j_RctdZ`<Ƶ%ȵl4$d5k=|+jȰ-s/a~"F/կQ>Umb'CݕJ'1FѤT-dy1qy"}39apNJ "')oJblS-;w RIS K/"Y%anwBPslmOW@4Yu2TTMN1@ _wj_=ϪLj' L8DBH\ᱥRm'%!װ4|$w8Oۛl7 {iz^\?Hvr1Hvb%=(u,S,1JgSssڽin|9aQo r`~MEpI{I뇍3+c"dg#@D(F 7~KZ?pshB;Æ O ךL x Z/ϴ0~㡆v˛/ "a9؜V#~$8L U;GJ{HvǙI7o{ͽ@8v)#ĵlQ;U7W %nyl- Z:/ 7Զ2$X`7vgj Mi}',G P9eyF%OPycЁJ1\BqѼe8Ṕ?>'Nlu &z!wj 71ɳeb-\ ܻ踻ٍWW~i,% c6_ZgbETO5px.lT?k4H`WE?g7(|3ௌH}|>CvW4);ZG, c `yUHP&jيt (rFFGP&ϢBU\.0Z HvE\mX\Nz9ՊϩԳZ?6Sai]^Q ?bm w^c6HvljcdpDxx1I& FYiqNeZ[">?sTlS|ܟ/I"7a.t߃ݓ-"$WDPhTĠ}U_5oAxCOEbJož1pŕ} q)5k\cbk&jsnS|MLz"f.[ 4([ :/D ގbKyU7茧w7$4^Apٗ=l]{:}al"D,=>~=, j>miك&Ȼ Wz{TiPtEXat1Dbr @zڸs יW< ߧ}g4tՅIZ.OOMDz`zܕC8VP7ju&?$Bvm Y9D@@d) 5K䓯V8XOr;Ƨ۴` QP++Oθ4X OFhQLnM0.ͧ6vptq+dS%ȜrI?q@*7y:Iӏb1F*ʉ+I 'k4Ux>y}k|qlFAE99\{\B@=&\gv~aݐ\2J%8;s\YG\6wv\Q넳DJZl'ѭxUXuc٢O7ߕab[.-c.D(؅].kSY̔8sݧS,uvU9Q:l=!$ԳH7؉D8c$.RTUjHbmŪ"KBSbYJZiB:6KRMZɎ˜=÷;^ލ:SU-j4-:bW5]y|43j.&%vQ&w~b[9m,n;2<~.;,ڴof##wOro䊺D<S} D%8M,s葅ſƔ$UtΆ-KkC;{H8IHIj辪$vpU*3`U6Y#l^n~?D5fXGHdVFfE| wlXL;Vi6d!X/͠CȒqfKb;\ i Q˽%1|dM5dc+Sru+IWWE]MRk_Tc_KCBî!ęTӡn!e6H|]J`W,fTs#w5mp3޳ԿevJ?MZ?|Ɩ7k.r3DA0c i_jeNDAǮOSi4`-,gk+'CD`ԀVUNUiY"irìlm3"P <%'2 ;CNh.BEt^z4rr݃T\ \{^#V߇ʖv?k۩ >sh~?ۉLnՅyÀ0² vrA/LSRÉjl/?\ ^S]/  W2 S0-u\`.VÆ~!PX ܞ^}"Q6[/Ԥ$OL5=K{77Q5xD"rH NV&IkK?p|E14ϮMJܵ&kfQ1NQ) 8T|2UF;gkd c'DL-pLqpA?5\gJ}4W'Wp%=!;w=NG-~2=>~.Zj粡[4`!II6x;[~dU\\HetpkC`L3#Ӕ789)y\<&RwylO-@DֶZX쥵a2Y[拵 $]ޮC\8;9TΟd-[o}@l@/ F#S Cmw`u1nds4fskj/Nn#UH*Nܘ@v`مg?ELϫqFwRdEjEүWFZ$_T~P$hb,jf1VejGb8D%HW aΙpTs"Ojz @>-hA9D|YJ[[u1MM:@¸O0'{z8 'r!4!rYSxF.Z̙yrfͶRj q5LH\d  ~9[\ȦcM͂;KD+f g:GfVSt+Г2ࠛaXDe<0 < ZC&[w 6}5. p|W>eۉ)s)k&}9fK肍"0KоV\8bAĴ6ػ['67}KlTHC **ZF5Q/(TJZTZL0*ŃٱDT5}U͓.qÓ(cUaݲnHs,{І( 7OCSPGRŲWUwlN+<&[jKq|h74ڿ7I[aAN:,6hb*FVGj%{ @vw]YE]`>Χ-Ƭ:ELe/|nDqק͢ IG;0arnL/;;Qd(9eh?L'ݞ$xc]f !EmJk^-/fb"H)υo3U@>Fjdi=o qı N؊i{.2 2DJj,o }ظv59u'~x ]5|Nb(ai\a~SY>#p3 6_wo,7*kDKϱZpsY cv,hK\ )jx=ѝR/Tvx6VRRNcF<3/(J[~4V|pr Uyjyks/넰u~_zs7pD|g7zy|Łk,"uMM6`/ jX}ɭ(tܿ%V b1 4Ϗ 1#UJp<V}T˳mzN p98ޕP1]NM1EFj5~ Msȹ+ܕ:usX+玢^oޔy`v r(?P0)oJFj>Hj}d!@ -SF+)ojplR:1C͆7B4FNpn0$;ܼ.Ҷ))>7S齴;CetgP$:Ӱi-{0#|:AO@S86cO E|w [Z DSֿjP=h#_y+R&\PѤSFGѱk߰&޵2SG`r> <'}m1 HS$ {7UJϩ| I2N;-,>uіH[PJe7 c\ZKcdSlƦ;b(;;cWs($53kV#W"E0JO-sj%2Bp*”x>`# `H@;-4%vRMVS1&ooK]V17;)b&R Ef \ N'[BĿ '5uBXAH |XQ{-.?ғ!4͗Ra52Tȉ4+P*]ut=*k &-m]?J_86ӭEu. r 2cgn'uپT'.cphz,/"϶%H+JڙU3='˕kxbq6o;4oisQCfNǜ pzI ZX;B^YzH+bĹvd.^߄xr {g F8')4~d4U$K}+JN#GR2)o;s\AU]V["u˸يr@ pF,b;&!:=5J<}};qT)DD"󋅩\_OJHVE~}eR' tWmv;ͪ,/뭪jFB+5Cuc:šQv$ZR.֪6#H`4,ay0Nt*[8O>Jڝ.Cag1< #䘝ώŶߡ޹ʼ<*(0GB]l nܳv.ff)Žd0fZޡoĤB^/4Oj~<ӏ.>p|z =,U(_K7ЀK> Z=/ۻ9k{i7hn߶~PJo)'c1h:{t2=&<2@Kd@Cºaw+wtIr#yWIztW eҢ #\4/p#[0GË |m'jSzL^M,pIo7@$iM`;/ȏøk Tw\knQKfiUMhMEfM!K#: oI@'B- OۺX% Yew=Xy_nM.y!rfal4F/Ӛasv_z /᳙ۥ3w)ϛY2JA XS O(f[=!"I}"y?ؾ؞}^MHe< ]1lE~wW ̹-9MgQ"Z.?D֕g?jc-B *KXWk0jc/C'=J5D1t楤Rh1Sq_0|5$tܽ-d򙙜j- e|/2s*6Wv=Nsl?nz8PDkq,l覧" Mhs֎N ϧz NeUG6E߰ Ƙ/iՃ$x9 Nmヵ`᛬qGg嗹OKrg a%(EeB>|_{Io''x5HóLsPzk@L/;Vy#MV0_(,P)~ƣprðr"S( BowM}. u!SI6&JV2 DDgxI=5!3'=+{)٦D']\emXXV5>_޽=Yei3ʤk)~1=ւR'Vq=@?c]rhO+, |ƃ &K9!T\QGSXZ:;}!aBS9ev0 a؟'lP9YRS @_[kgʹLf%:dHDwD2R9:cAa ^2"vθԣC,jj| GT "e Zy0H2uN0ws}Ok @p*J%l4ί7gZPK]jļ}6bZs&b JK~YoOx=[.j@%ҎqnisH8ҧznLF˟Hy0E.&g[g\({KX~RE5kyӜ@rrοiH`Vr(tWJ2w|y??T+u#^}%yG^CX%bf ^MC<.|M sX>(p{sg*5I.R s2 M}4{(ơ~'-?[,w(7-_# z 7asy9\*Bm`|x>L5\ԧ8$#/<,S) ܝ@ &)aquR(X [a쇳E&DnfLN%ip vIep@1ҌrhnBwσ F̯A8DMPB۪WdNhϔT̜I%fʤz9O#B9kH,-d*Bp$Bن/~pD KT˖Xi<2G'fRCE͠8.ZIŕ@@\S\8PT}%Y\.c ʀ,l˿,m3 -r&RL FʼnrH vNy-.-2KK纓 vEpLl W`Tpi3{Ƽf0MR=*YbPXo+L!+w{[x%}g'O6y\!R{nI{ OgC9vnF؍@ }S /;);W=dyPtR?^K6UE l<uˢj6*i냧ʎM?Z.yWL@dBFҗ 2&UG۫Cxݧ$:"\ #񜛜+рRfoM{z`*nk'c,E;"e UenDv>^Bu! ڎ yeGx@jfAn7yVϊ_2!> /,bZ֌S#}ٌM'Dhį;XCb4]=3"oưD`xR\l/٦ì'q36{.W%hkI|'x,/VVtS~[Au"L@?+|xT4]TW6StH49WMm$חˣ1n'Q8V"1 ;j1N,ӪqAR(ATj2Rz]q*, 69"L/">rch^LGaΘDZ?N҇fhH8 lbF>SSgx'_b.t, jG2g`ѕ.G)@G|pe: jQPO^&̌#u,yuPv?ʲG: kهQ׻㋳mQ9 oגG0Uf%eyپHvHv=9i8in*.ͬ4Sm2ދd'!c$Jڅ=y"$pT4f Lk:jұCs F:UKWyYڀev[0Iz5# -J.B `3!,\|zƚja0=Sn'G:Pǹ N] Q 4!wGG<*ueJ`%3.@D\S";M!|zd%06O_,x0rM~z.tC!a:‘n:wc^=ݒ"1#lu9G!&KyGe萷C ٳ~}= 'mZ8u@lWN*Cy귅a"@V]p0m4-T*\_'3KSx0m,`HkHe _4: _} rKP&1:0xtC:6Jz] ?Y]{dY1ĝCy ߧ/|>)}R]eJ-kZțˮg-2Vw, |jR2 R% &Z9>5d\WH%b[mtr#,#s~ě (Ril"nr  ЧV0!q-Sx<(R{峖%s t-NԤaU7=m2iӾӦKg#xq䰆 Zk$|Be(ӓN;`>6˂iv3X /fڙ&"*=8zŽԇ 9m})1}x{Ů~˒(KBcG}ڷF@#n;~.'U;cJq@& #i7>`7ZǗ*$ÇAI 3iO [*Q~V}mG4ToWaZɭ8`ohp%U = WUIc EGءq>TJܷįx{AP; _2 b[>u,DL$`\w6;d#u֍6,gfNc wz)e;ē/#}9rc'+~G)pWzfhatreHrףaËK8=Vmky3mf|rµ7,i;M{ Xf }˵o |=XgY("x-`mGw-ta:cdD-Ï2cCQڛ Y2g W49{ 3c ]]F)4Mm&DG7{5*zr/גXhqB[iW9Ҍpa٣7w#@BVGPҧb56f茭sÀ k,漤n]$G$=Anhk@-(U˨nrG/sKl~(OcG*USu ! AM@ͭ*p@t.&WzbŃ. a4>;< mt{@F~Ŭ ֘ @b$dH({Q^]>)ea&Hi5^?@ <"3=F:& ]uDI[hH<+ҕ^IlT*{9s0 &UȶB`Y\ἰ[/Ϣ$j.%t#pr mHQjoS:i%m^l?U.m`Z"P:ǫ3\h[!|煆PuOM-~Ѹ:Nx'2JZaD/ d9\vnt.}6:k-0EO@F $1q?euvFn\6SvA˙)NIiہ֡n?7$9^Cj_%*: >2P{{EՕWu)֒J4>@ 'b.5-^\V2`)G,L…,C.^;o;p!U4jf4 C5ߺ8U)gE^n/'!A3kfFqSQ_+EG6|[PxA..ee"nXيoZ',--^ Wsݜ?r ͳjZtāE֚~> %W0_TsƓ|r%9j*?@"o(_7?GUo e: SQA\MY4n{TOۛuP ,4Oɤ*hz\MfIK `54C4{fDkʑͫ _m)h:/uebazZĽ1]k0n,|lEawvrLE#HMA,] mloTG ¿QSP2BzokgPÑ\qg@Rp|pn ֶ'|BQs|Jvh,Q\ivlu`mOe}kŋG3#5VtCmۓ+"MÚ1ܛ,,|ۥkX/rhRlZ)y[nf2["@JF#g,[`4@&b|3U3v(E?Iaxۤ7  )^zgNꇲ)Kq@󚝴اQM~! 9'@7- BDj:6FeY0gGrܞ3i=Q=ϐn܎}:TplE[tg T׺ AȨ#M3ILYkے4u4.w0CGd&"w^R(SN=NrLʦp8U~!,-~ض 3H%2v9 Lٰ\Nܿ\QppxYH%Q~W6@kɈ}cy@SmJ:czZ-w\+)Dn $kҀae EfzN."wͩ7DZ] Z1E\әyl^O2-s~E>zGɮkhãDZZZZz>]4!"&6Yz\d'eR0M aC+lkR)Z鿄Ԗl2OHyZxI*#?J4$6&Hٚ=n0pzTWj{\Hb0aC%[ 0d?mqz:?MoZKeX)⃤TvH<Ɗ]#Sgfɀ$V$#l=k誣g[J] 86 fe, #q Lj:ّD'88rl:VS(Q23z4OEf6\.pz[ɳ%vδkmj6pbxLDTR̈́y9[ -!ùDp  MLK+( ңPę[{Z)|u]>R5CW4mrhϬLcHZpЋmcʣ6Qf&@65P% 2"Cq8oڊzbRd#J(UȭZFm'Z /a";dR>x-+B]?f<WI8K#ikeG)`YiU̽JЈ3~Bm,ycxY2߃i7d/=1s0'QYfJVx[h8.?qͬ{d %Y9;\#BC0 ˔OM'vBׄ?_|<יG1c;h?چ)EjQ,g ɦ方C'/-tMs {?sƯ@?~ O$f¥m5%'F+VhY~cWV7<"֓xorvHœmbR[eLO#gJ|.#2A[y[_L6(<6l,ysc g>ikf܀?:OYv[ko3yAFn̵) (.ݛ%ٞYi)n/oy_?M1v ncJABՎN _CgǍrցpp9&1 /ViKhEn'4i :oaCΞ%I[oGbs)M7k=<ĜpM^ݰMF{bG1ä(|hbNN43.uAt f" syGu_ M>:'6zP_ Fɞʥʩ5['^ʦӲVvel9q*"g$`tlCN\$&QkX[o0s.>ȮK$X#%ޏ\J]mf?S#SV.ygoX/B/7-Uǥ[%魭+0ﶶ(&qd_v7f:?np} nzk]N:cqTM=w'ҙ!W@ s~Ы֚8 :s,xp(`/dٱL= Rgդ{6^nNNՔ;DP<0}6EnvdXg}nl;ü).qqQ#,%o ߕ}`$Q6b~FxAR]_5(upRkJ D:Fօƭ*=T\MӳDGG }a8xj,nkbwvZ{ϡ!t# ]}'ʭ~U)HxfIֲ"{;RSRٽIw$RK}4Rv ߾@>XT;3g)vg$4ZiOeoON9f헡߳+;dAob-0"Moo4H&H<p]pd8;>^3rCFbY݋;imI0 zP@mS} ̀Xhb4?L/W Jme2k2l Xc22Z8bsT绷| C t$ р!܊┄PQ|tO5,=Ug@pon[ulq1`|/!1ϳO$H3;;fLU;La3B%YUԄ)Y 0e߬hoIrEy[<0?ī&SGzВ&$."r C*{o+\XwxC 1R\rۗfO>cf^5NjL)ti ȢeO B2N@eK/3sXxN@I *ҘkX*| 52:bk j W xoeZ|C d=5%k071F/ܠp$?7ki%Y&]d#-.{3sAR[rْH)-e5*客sLrt"&aA{z YaS-[2Q-Tɓ`2O,rAWO56;5y|5;;,c @yHsƭ|H7hsRgΐWb}eNᙚde*f]rէam]6FYA,1-T]0)P'H's;֚ ',gDybd D\!ED2h?6?z䬙CE z4}#7ǣ/#SWki r 0$ϞvΤr(֕n_r,~#מ55m))%uKťv6i)I1VLB2 Uϰ ɐQ"v`ܑI&fIAOtOUu@E m P'm]_$`2_B>K @(wJgm& ~ʌT{/&o#"nUGa7-IKsrTOK㞄f_#](&Zԗ\1=c 735bcV=0TVwm<,O SVPC!ӣv=kwjcdt7)mWYs"†4]T}p"jǟcx#˓_C:,Gk=KG|l+m:4fr^,B&\u,6!Vc!+7tBPʹ`hGKG8:ğP۫_ 0s[wƝ"{4.<@4O_Ej$Q謽zwНe̮C]S V}ZK&1[ .D]37Y'W:+ jf՘(1Y "ӑW%;WQ<:it!ùRo#,3rҀ|#֕,ZsFzW\sGa~!.= UҥL(VbrF@V"iBc wkj7xd|l 4A$ևIO[ܶj+.Fq^ ࣲߤETW $*vkǩ2^ֆ؆:zؘ7#oa=ɀjT`ϋgqtY܊ŲOa4F  `,qM5&P1~a$ϻTPL {݂q S|8l[ )-BPw6T87å0ƿT Hxm|Xɲ?l?+0G'09L*.Cݮ6xl?}nh|ǺR~9zu;zP=C F ٬=deE?XH[׫]>L(Fsqn{34O ik)bZ1Ao;U@Gړ V@sDD觴)?P4Gx,`t(o2A,FaV%i4{1C9Ur{Sj7yXQV:{f7&6Q90 _6]J-)΄+SWe[i_R)o sz҂qyj܎ )?JmfΉfGQ0H {cAT8NK=c6=x}ѱbpldyjQvP?KkL]*]fPP|ef@.<3b NЁt2W:ܲی_PO&!"Y;@~\]RHv*U׍ԚU$ӝ lJb'R8fir;2,|Ud}VD}RWk K9\v+*hw:EwB3Q*+QL.SZ;ɕs2QagWugdkUHddJa@wrv9%!{zΞfѠ9X A*&oEd (frJ(DU,7!{cU77N)rݩbMF]טrGb*WVf_ C[ЃR&}Ml~dIQpmxZ8+yr2NdZPƳ_~^{ރj\ݨg9ۣ]Ų+>jkJfx;zYI9B]To. j5&Dzs9q;\ -d@enY[z "% n*TbOPe@754NK7wbUb.ή?tXb(kj<v۔{7Un/!?D,/0ryI OeM>X=sGcTdf:jQ7K7G㢊 ,b8c ޭnb="^ Ki0|ˇ5\Oa[fՑ/s_(B{ZG3wX -̂l:8/'™kdԨAuEdTͅKLrЯٖ- 2SR`s-Am9yjW_=s0Yί&%X73Ì aV^P\nv\!y\}ɒQ΄ aVn!kEqN"Lլ(U^"텄OO'6Ip[cA>t0RL(HoI+}Vx6ĀjՆJX^& wd"u0ۗ[cZ Ed!gɓ ږm)3G]56h|K:Gjca@̴^VFDà8 4A2?]Us/|b daW ˧7;m hq5߿7m\!᭓Ss$+3L~:T,!TLK`~p:f돭aFi)VWTsb5b%Ѳ"q.Iȫn5WfNhIuC7\U\ݼa鯞.`Gweu.%< tKoDN`,㍺/AFwo 3p o~Hs4%P*?yҩ0F*D0' }®[. vt~[ x[v> *OwVV鿑C֜KI<j?kIj8R@Umm*g'fZ8_d,[CqUY_ l~϶6'OOM\[L`D~C(/XC:U'eaɛ5?p G/>jP*rWws̅p;Ӭ^ ^k<4igɓw,xVЌJ R7~x_Н2A2lJˊ'""7Ww@>$zA1~WU<熝nN =]'i*W~ yjY9[˗7>nIze屚S6dKֳ f`V o=1~C;7&;O:i4y 0fw)W  ܥzNzsTÇޜw g3&FgqwlWZm =yi JSFYZlHYt4iv+h֪s/iV&QV̖M~Z:x{yEӮe?x/0=s<燾7CpS<P1쇍* 6[[lFCqx"7_ ^> K&E& \6p$5`7ANj{S"Ĥ KeSx쥗Gf~91Z4ZIWhGs'UUŝ|,3u3 jؗaϡUJN1o" y.cJ]3(=cd3RvaO2p܇%,J5+O O6 CC\CpiHQ 45m>>72ɍО580kyc&'*0Z[=B:ۿ|S "ɭ&eo NwtǜQVZIǙQx_J1/!/*@Y\@T;0j%YվxMiND5J}CJv K`ZV"hr+g a.ȑZ('yPf y* w"ozӆyS )W_s<=Wjnh7 j:[\̜P[pocl5DODZS3HA\佢ˡ2toϲAYM]ŬrC.1[^Ǎ2֫L9kS W׸IyN,0Hi38C%a('`$ *eNUY4@H,ͅՇ߲DI*i/t""),+<%U;OvMa ""4`}*CT}$kGG{FUף8`PE}LYJK5H\=1VK]skɌT=8ڕ4n9HS pzPFOh >㩬fI%t|= k\vDBViY ^/DNZ-0dX ?FV% E\| /_+g=3 h UEgTYf3АD-R?sd2 ;"򂤠O MAS*H٫>w&OSU>v{p|3VJ5dAI`zr ʿ$ÁTY(qIoU0/n_[e|RVF]^֗H]BeI\b|sTGA'Wnq1ZUO0Чx}; 2qִ„|A]v5\l~1+~)&t avCeDjto5P՛ӊjJo¢ }l |jG+G# _en&Avŵx/51 r8ˋl`Ni7~V%?9[*O 8-sfc{ 'L⯫G"K"`YLH ]ua ? .|e :Krx"`sR BB ʴ=4m='2 K==4c jzjQ?5IXib[-.pvw$[R|0nVK~b:81"KXauCÞT6ۉc W OM \GO*D["r~Dcz#ѷGnE$3>BVyZtr TߚξYDAم8mS8S;.J|/ 9si#gvBdv>~ 7dA͠r^B O[0yADAݦbgl*>)W  QcqX$^آC71OSd\`sG`R1+Sŕ#^o=ilsp`2޳~ӉЊ ضZh"SqU3' 4U2"poj.WLFK)WmoHQ2z3Hyr W@|8+;} T2?\:dX3{ڥFU'Z59/m]xqjem3^Rg@'.\;.4_Mx`V[+!pxy:BuVǺnUz$:x"(n 'И5?.J,k?\pyypF"uںGEW2"_))bL#C ;wqT.s'dx]Lq:6l >Slw8u c0" SRFRp0F1grW90k@&EfH0RN]?C4eKㇸZU4Iˎa D6<4Z`1U"`hMоE%N@L?836@!M8gni7 1(tcY)38TETލ4kc[ޙG)4M:=^n:?wbrzO8x5ϐI_I 9`(N">>R8=Ŀ& V4? nZgq .\M)$(kqǻ P]cT,ySړ=g_GvIթKeTrmݡOXG ufA#%g v^Z"DMHGtRڮ1?H|cYԧ͝׉۹9 SJgԭG)4;64Pv2Ż&R\+?YC|!2pB>K a5V85(?x @zeG~Q+>RKq* ~Qܙ졏Kb%DL{_dHhBVҦ IeF:0y7&E{ 5&΄CS P.y4Emgy'.7 'Mӥxg׬qHc5)AӨ#!g;宷XẕɫPQFmojX;;dsǥBc?w_뤚l/ʹdoV;ĐҩaqUj}UB3AߴAoP=^T'TqrE"f[hA3nL#1>UHia{S }PIRfwS2P|< 9AP/ LJP HlhN6λcϕc vfdN.t&Imтe JNCIh+wVx*-{*ZI;"ySϋ7uE鈜چNhgy{(,WO.B;]Ŗ,e7ks̷[K \kY{e>ղ,ٍ6/3]`2irz{_w˙u1EnN<[9v"iEG7Tp,` RVֈQ,<Ɲ~B_z2Vcu/o,€uL5#bA9U 'c"\Bc߮ Uԃ:u'gGnS qm+EY4Bk MXe=o[  v WPN_8 o$Nf|{]4_L3Ys$S\ @sOu {=~pc*[5v>Ęړb-i9`!&sWaӦuӂki}&V7p8(`UWF&1}1笔^py8P@sR?qa O>zʣyUǍc5J6\] w 1&GR/Z:r .BxN\idS%Gtz%U…"{Q g/:u W}N;G6q^WSmt# dYUX$3mpEA8 j,6gFףL51rϗ5$2 /D񓨖 3(%>Ņ%͞ұwPЬ;qhSyPM^KoQfLy W+  L h]32P%IcK7X]%TRM:d3M2}aؔJ,Vu~LƙwGFDZP뗴6|*өEWGa^q YrW;L}Q8sp_' G-Pstlibm<Ёu>8_B2#R &T$E.8ҁ|qf*)Ŏ7E UQ,fʌL8l[+{QWK unxL՘'%!!ZEU )MI>/2 lA^US>q"Dޣ?ʲ&'_/3T(Uk*tAdT\̠a`p D#ei!C?~ALѓɸYItug%RpP F碢"wxT ;MЭIC!pkHzgnS8b (,)ADA@dV26G Y[!e0`AnyQH6,<(7^ᛛY6Vk F|7SkV!V)m2V[s^k$ PUM`.CܾAF9ߏۀ4WZԈ\QtBƽh6(R%⡸tQm [)- ߸H?HJyjVOfA6GlGuR*$}˭sBAj= p ,t.ّIufQTPum#Ĺ@OhU NZ{uo-8rdi](5tZS>bӱ? 2d]ýIr}-aa9E~D&'**& n. ?hSr9@DKEŸneyzfX_`Hn7Iw^=]-?Uh;Z>q&;^6(ZfrF\g6,Xp xĘƢo/m?D/ZWHjba~m-76 㟎:TG>Z7Pr Lnmer[U0̥3f¢CD8`^(i`aPyƼ(5w[?%;&w:)e;e%U*T#Yi'yKHS\O%7-x-m匔.vhkCщn>6ĭ0Oj@j ,*.<~hV]+h~suQH9Ět$ xNPK5t4>- osƬsȩh*}Qb!_[`zXTZ%h`o 9 5'D 2a7D?.=S项.rܝ1 ?.` FH 2UPY wjޡJ 0|W5L!?@[m7[z?T\4|[X? NCJ~ۭ lbUv=wIHLmEXtQ fyN8h`p*n2TppŒGP~Pj`koJڀt.&f+ߠYh/jk§}g1diHuռɑa`e /:%5Qt4?AEyf̡@ +-bWK2{ob[>1H"k.25dKμ]ENKrDl! &b{YJ~t_g1Uxz;m`:Ġgz':fܪ * a'I.nRM pEи1ۢB5K F-eX3 I"4FG+(o& C:_0z[bme*?iŠDEe†#}9}GK"ۿy1T),F(<lmqQAeёc"Ah(nbeFy2ShMOB̄5{{c4ޔ so |,OtYxwtp\Q{mT=֋%c׼6.D>BnjA ka_eC.qkbY 7v2*+xSݸU,p9zI$UHWG1و>KAH(htpMd2o'Yg1S^52$]e9'K]2P(k&g<?ߔdf\y8iQu-- U Sgto|1pMN,r U #x<}opNy Ta:j<.&*Ab]K(1%\%ʿAc$WwM^Dמ94Hm- _6>\c*R^6S! F cKO5EwT%{gs;ϵF3 +Iݏin&˰RC'1gfU\ʈ  $ӨH@wgC.g8V__Zٳ>rWѮc_ LgjqdkEPQMgywz=oiGir|sRj+.ۦ a)R3j)acŚ*ce{W$r\Rd:0YInpCsU 췑ߓw+uoM(yc"!J-҃u9dFȮ?-J/fӈf |j'\,J􊟋:dc)n̾7Х ٗv"T*—ے#joPBx"& sjL^!΢S&vOm(seF8{jU5W\깚f`8Ҭg\1=u:]Ic7%s KV)2&HtE!^X)arꈘFiw0NSw4h0q6WAY8cIAv<\ȷ _m02SaFGԁe5tnnP1uqe'x' Xɞ?ZSk, &I>Zy~Y_m%u(ӬDx4B lΧ:uu7"y0A`2P!ᣲf(ƌxf{p3L@]|7,VfTlp^ɚq _tEI{. f87N5q9^Tdӓ0Ed@6yHrqٛx/t$>!΢]x%UtРA xh)d]ɳ91KZAP_+"HT[LeZ{!ZIR vt_Wvtkn<04NTF me{0e#*׌nrF>v:n|#]LzCO_%gk9֜U*qY0,W.,Ӽ.!VT72i\wє'+7qe=B"c%n tq2wiӾxZL,T}|ysޤH0bF.,֫FLSP)||f=y2KU` s^-ȰBc6Z`@PιVvO | O(EdU,W3t>ޤyaz\}kUk4'%DdCB!"Io oSL&iD'(^쾿'6tw÷դfwJ6WW4uLGs#KD4TxsUWL%%h~ڒ1u1& 7kQIxj.;|cd;*]D?~spL̢RȞٮ'ƞ=vZrg0I:T} ^(Yτ쒙 JSٜ74Wޅ8m]O|RЗi/IxaͩF'Wv7}_4!1OPqmdrnnR1X:; >1(}5J`P8L ^^:Dh`QgG:SYvqAxիp <+?خ3*r#*cx@rH?+kn(Hg3K$s.9 Pdgp7%Rh'D2};E( ]gC@p&vp)ġ`&J}D~/b]JĴ ]8R9$./t{rI{Ejp,E܍s^[4Z>ʮ7A573'hލa!>K` +@>qg*ĉAhҍ],7[]*GR+.7!**fe9UW4md 5 &p{tЄB[/JpA!̿n)ȸ3XL)賫wǁ ^f% Mb㋣g(&>.<]q~< I0$&|A>R݇1dWL'18eSk(i.ru3rڅ?`*@7\~#/]qsBeJz5On #'1 GywMT;h~`$LJHş' KLtumUŔ.>@3l?,)%j7:hۖ IE{%Qa?i'By8$I9 =^9|0x6 6GSI x_-fxڝt}%SSmDr#чjһK M W-R،: yEyV .Ze~+>o8e p2ITwq敠Nqj|+tJP~xFXf(ő_l鈄~F>Po UC"%e ʾO^!p~PAQ!BWBiAz#GNj$%Wd,!\}%.-BajdtWkaGA}YUL3a3oqJuTLuװ4k WEvliC Et:g8bhboUy ׆jgkWS8Y3QPhgG4l\.h!bU6$i]Hv[!HG !?z^T_!$^am =rɁL(݇0sL2&Q2Xs\KV%\Vh<4ۣi@4e #v-_,$Cn&WORfd?y_YUAD,!!T{4ìP؄pGJ#yFgv9.j".&$ߧ+Ia GiY[Y> ?#AbB91qSF^5x@YV?ЗT=+xA %?Dߧڷe./YAyd'sтu 녡P+L0sC>=Tj8 &Ki; VF,F7fEa7P/CO~%|š;QS}A}#||MtY MT$]WT7}wy ݑUҤ5-@[Z-df dçޞ U:j\63!Q1`.ͣʴX(* 5Yě/5L}&F(l͎:#9*S;Z1ܳDvӅk.`ppK/>N+I͇Gl7;ix ,1\SAx4 c=2(`)*؅"mHGƾ%8lA@吥Ǵ mYNDgzK@GEzjl [ۋ%rI;ΪJ`{ZyrkR{ &WiA笽{4ݐp^lSb'G Mo-޽YY4\GcdO.[ҪGO'IX 8Pn. ɩ,DekQ½ vYP(J ˕_ ;?ݻwn2z(RO+wAOyL7/\8U]ڏHEK/h!G]a{;IeT@%nYl|B'(+kpq1~c/vvnbAܹLr#<H#] C x]!cMJtT+:v*L&p*0pTLىE/ |8VÒKEo,R&tssQ,JjR7֪˸  ^N4M.:H } o8b痺ޔP@<+p*Oj>_& sU\iKeAVR! (7@~/ӽ @`M:]A:ݗؔQp"T ?}.jsV])pFnp>!wS#]܃!M@Nm-'3htjWx_S˻3[c7FD";y*[F)'V?IBF]ՠ`|H|AtO*= {ݧ`t?aM\l 5vZ٫E~1ʅOws%z@-`~adRf\@9' **sBP9ޥ鍃,^&Q'Ed3|zA7ZMߦSߠ&IbUm=<,&&u/j5p@{w9[j!g'2-;|Pf/lß&`5tq_jr8>@SkUN&e(u=j/CZØǴX^žGe68 gЛ-nұMXItZ&gPiE4a +{8$(2|1i_a1q3|Qfgo,!)zFZРoa%0J߸2SUp64* !-?tc?6i,nU<(GFnq>+G9g{sYCh}!r\_sHOڧw_mPˎq97d1@ I qDme.~/$)IM2Y7T/;?o0"R^ BXh5e$Hpƒ=X/wjߣցZiNw_c[$ Ke^H5Kyk*֫Wte%HQ]~jIDSeS->uM~N1%,.cG%ϩ4tDgUeI%zY3@JjkeqlN*ЬRe7}`oL")~Ys~; _&A޺t-$Ɖ-VyBVՌ 8D*&0 %}tZ29'>-+J%nniRlp%'Xli|)8OgkMGK2ˈ`Z=3TwUQeq!#sd#&\/ 8( /[N@ ?.ED 6@ϫ}8uĎڻS۷024P;yxy*ij|_ΊV8WaPV/f)cQ1>ƕخ ոZ3OKi^i3WDT*L.m 5@&&d!u kR_Yf8$]éMJ2R6+| o>㶦RS Oӹ>Grڷ9IҸvaK< K ʈ|T1!.~fc`d5=^@+L-8Fu;oQ9+ciz<#j,_'N3묏oih~Ao%ShKvj#7m,kZ}3b7y VZ0|U|AF|SqjgLn9ɗa"l!z݀h B7uƼ7=!:056xc;Z>R6]6⤜R |ݖ=#vPVTR5}XQ6D@-`tE(%7ЊƭiNGbhꍊR9c<෽mZ2,Q3$uDTfS~/q=18Ú v@[nY@_- 9JvWqdDKA8x@/&qz3UQa<NȽ)ebqs߰Tq4|s|#3$)6:\J4;y2|xT621%ULxBAbo$Iy>RT`Hjz4ƍ=Z&f׺d FDF.7?_u/TPoy3nϠR:y쪦ĴoaWZ]KWB"w^0$nUՌ6 VFT=F;+UV=dxTlLktW~GA,G۱%Wm(ml؛UewSu[=@0X9r-$=|2Y`76?# fO0dLӥdʋ ,7^D!=1EC lN:¡"px2Se;V6*^n\] 㛴~O\L|b^0~$SϷqCHPeMnfk;CY?$۩W4 !7IRV ;A35JZvy[c"?E۵Ö}K{7 Q0P6ᑴ,ڪEK9hH } 5ֶۑ f-)Ce:h/4Nsl}6a+㳮X9LqĴGZھ\kӪ ."oLRc#Y_^zD^AWpjrr8oEDMN;# rTz9 ;n)$៎!2G1RiM_fRKϦW!2d8hT {W{rƼ(wY2kR{'ۇ,JDŴi*0).0QS̷OXO%; z҅>́ 0={~;+85z|.+~]<^cЁt 9.E5)=5To}%k>_qI9; ~0 à^`lW !LCW48TKvgkrr':D`ڮ$3' zngײڰM`W=+0Hm7m#b$,"AMΆ 7{nk nES[wQ2mg+Zt#>鍇V^NRܭYEαdͪџ^& =@Gk#,(jEpXGEb`~tsô›9rȑ8*+qFHаyt(1w\&[׺ULps.3,{,|,d _` *Fo>jǣ`Ӝy6 u2`nM4[سt3Rh @X*AX"Q9.i̟Oy *b,r+irرy0'WKKUz`~ߧ_rgd9vt^۽j|fe@%$`d9/G½EQ{XX͍bYg' a~ݏwܿl#J&9Ui% j$j@%ng9 HJAPAź#n .eˎìkZpr:y -~/н[e6}'c7@?CmA6ck䞁;ǠpL*2v[K+ ЕHL  K .4 -;R[#1E]b?$HP grL!փ5~腍*J"W^ VT9enW9ih?[mL haape# ^Z|93z<B1^+? 63bzRtCKd\гuDJʸot~Zܕj̕k}Ö }6E|무'ȥ <%6Jec~it (QMdO<֦Yp.O3,pWZ[wLGZxiNR&"^F F"|cH&jˏc2̛IAjJ4%??J5o]Cb$3{Zӵes\ن.t%_"D(vd'E{Ug]3Z9h s+T# Alnſv\sKnQ3,w_;UA;lFkYL ױپhp~1Oy™e@#s.ς)uXAm ^0NrE m1e*0&i-/,p(>2[{O_ܩn{CwI!b)toId5A wGqQk Zz(5^2uEoEOrk3kfMiЕ"3P +hz>CӮwpH%)n2Uuq߻5H5XDa)P(gRqZT exp4SxddG~#O_% h ΤŊt3>YZ/f(3[]OJ.,7S(qf ׵C~'ʈV ¤+%qU~AȌ7LZgL(\@ȸx>53b͂,$&57>UydpQp5f|1QH.pX.³β06XS Z:M_q h  !(:4+$fATS ow6@x^e`W^U쫙ɯ tXj3yuj,q~?3(K@H ~+vR5EJ3ħG1+i{A#IJnC'͜yk%~4wgiZwm^¿p$SP%ʨ9vr3c)ޝD7+|R.ҫ%|(KRtc\RQy^WkT 7ksf"{P>j$Chj9$4 2ٻE@yPc;y3]%rqݻq^Qq{s\]r2b?d$ MLaiU_E8gbqV 2ym/ tp;ڮ(UA+.@h"mC.%Afblyo}WMwN{M7wMo.sQ{=lJU6T5C!$|Rs6> ު0p526 ;˨OgFM1IC',l'!ЧЋtd14<ܱ|xH! 2sWZY =O3.?Αı\>rmnkp"?`ߑ'lkecG;ڮ{QH{2B蔓:miTuZo3_ZF$"1CoOj_+98s%Bw #fBȰp/u&#..Ϭ;ȖYwf{^P" Խ 3j#F#U}$r,z̔5EDQSχ€QܚQ?v΋0^ӢoyDPD̓Hlp#UxL&[zµ)6)0+ci fgKiyknih B~ʵA9IJOB KJͷm|Hh#SΗq+Mͥr]MӇ݆>үuJR㞋hփRU Jg0pz֭3R2ѻt2OЧ&GLnefQ[F2}:}ҹ0Ar +:K9^r50wz=4ٴ;dѺ*hhezxE~CAz bwZ/d]jX$l~G -YRQ c/H\Ȳs &# rh(AkH?+eyF5QJRؿEpĤjJyD 9j\ӻfďٳ$6X QGm[7J8CBf6_CErHAz=\><~$.:[Qㄺߞ&=Jk =wŰV6`4xE}hH7v^mymq|*`pW*lH {Q/ Wݿʰk qB/Hd')nG/dn"_*,P4B_ftX;z87IYf̠?D{Pq+,Yh}:m ke3,Kyjs$扢)ĉ4A^hA}9\; )ْ \$'7Ɍ8buz@;M )ُ1T_cT}P& ;үwLZս(k(¾u~]OA֔=G#Wmk0*OH4[au3c$Ю(bzMb3'8˒ cTW߀!<ƹ|: 췫_Z uM•4Jn=QV}ZtXb[zv>#)fʂ8!yU ژLg(aˏa59vV%C =zŚR./Rkp@8k25q:or0y'-0֩NBe-ݵ\|W&b`W}Q/qs;nx} \; ǙZBYNnYLyÀ:%eŵT(q*/iG.i_0?}k$q{R(V|cy~fR%O9Aa{q +uCD_.ZV@<+SS|Ej{HIAd:,3a԰Jyg3+@7woU޾vpI1fG[?;sou^:ᚌν&vTY e{[^#_uN V'EN)4D# r!5R ôf&+x!-cu~ 4Cy:s)(߈a^CZ5O:FR~UX*!k,$S'yF tò-#? c ;4&82 DO賧}:<ߦ2c!HM)p$'$F=G= yt #XJ_7/`lA$:3a.ONI دa넩 >_TR/27T>ەs &ߞp dZ7o]==;SjŲϘpV=U20b0$+}x8R~oڶdjH9{[-$U Ch5Է>'p rst s|ZE2~{&7v&xFڽ@AN(P~9 UF$?4D؊Qu?*Sp,ӛ2؜~HЗ`54OSwq G%×Y|; #íO\i؎iqS%V(FhHyJΆ eoJZQ::g3<RJ_q еyٻQ4vU&ubUCW=]@(b\͐qׇ^q-1r8 N;Fc%\6m5HPl4C^eSP<]<^ p`]-2oBK5#z{!yDK,܆x2X)g[,!{`@Kwт{@ `ȂCt| [|N C$F uSk `2&[-T+Y2h3 bưX\EI=S.蓀:kg9o7qj[]F=lX h`EݖY_cmw;sB<vZh VwB LDz{uB-C(B?`y +Tvv~ӲPQL m:y  ١d˾JDT>Zb&9ONmr9?t6rԸXqr:݁u:Ew .R+y<Ѱ܂u16􇲺u鬧c]k_} +?Ge@,ROϾ{9xTU5eα)l*2:qm5B}~F2B/[|{\Z%MW@;:f8։<_QTA.mupzDLO)[\ONCQm8ƪ:@CM׼pZڽgI,L!FpĔpԌF%j ,RWr{T0 B iq(ߗR$P<[sXOCRJglQ2_ _4F..D爨nE*r+3gMje'yp8|4lKms? y>B3mP E)Ȩ`m2Q{ 5/Uܣ729gúDٕ{xg/9;I9 d}.H1_i+k*L~N}sQW!>(蔟mU /]+Xȶ"4,vҦɦv 6\!?S*A2@Mf xv4 %tKl`.(|C?,ӡǼS3}^.s~m౩Kjn9K/8c-azn_/mT=-S}oq*a>K,`ݱG $F-GћV$O- q@<4ԏc{W9> r5 Ftvpy^MM~u˒.vKQ~>F,AUNcz^{ qͱ#MUjl2"Yɿ˃]V6:$x]<(+Uh {q]S0qjE_21dV':\iE-{"Nm+:8l]z,dR[9ػ_7?BOM[mp8']E $uuyO> jGagn-߷Ù{sH<e7[{MNxmCN}Hۥl \}j$6OQReQ tC*fd_G {HY5x{:R{ '6xhj2, Aل߆ůޘ/[ I̬%YLkR0(RNp7O)?.5ݚo'^v@o#D ga?vD%6ܚTRE|=A>WƋg<5 Wc`c̅|^Ӡ̻GnB]-F |r!/*TCTf*4l}FZyB -f4Iם}P3ދ~I!8uNPߖZo H-㚲 In0YhHҤsY~0$[`ýNDs*TF 3HPMSZjc^BZ):qjczWҸ0"y.^:8߁TH)`c`{?WTzOQMY'Q)+9ĺKҋ뻞ҏYa~J;`*$8vi<ɾz²{`>t {?XԻ)˔ϪVcD|<1g`X7xAuRv@.N3{}E?Q{/h?{=]\+ |RZWK.9Mt* Y!J"ϴxty]:i8^L@9ƻ1fImߧL'=܀uwl@_[kco*߼K^~}BhF>^/c{nvo+g},/`H[#P&PM9*G/oK2.ArΟ~DdSKTloP 70g'2RV!QBy>}/N@ψԩ#)ғ*A:'wmp`qii~okE:?PgАeb E%0^- ({0Gt2ʕc&=)fTDr\ qX纞:i$"@ygI% !q$QOF񵩏2Q94媆De&fBWQH C\4~3,?q@эb؄Mwyd(YF}g ~'yP ! [$kUQH?==qKDjK@p\b6ޔb>Ts$*-! Mtȉ&Z]1PE슫N`+s*#YG@-guѦ/x{НA矂CM!k\wg϶N}nٯ `T cג}Dy>. "=1ͮl ՙΘЎPCow()f}D3];}kiGpJL\ǥHk7uUuu\i  fD}Wo&߁"{F#NhIÈGt7oM" b4+8?NCU^{DB @de:.\oTrUÑa@ueKԜݧ+(tN5r.gz5,.)Tϻ9EanlOUk]b[b1R*w]6P\wWPVjH+N [ARW;M &(n2\qP@~>{0;C!vzutxŠɅ峥,jz;C~n`^4DW,uSd-9y%u6 E_ f=~GD G@~U`Xv(vs$vO=wuN-_8pv, )Rx=c~^&Y<0VITJ2`p[~釙ePn%Wwϛ[eYxæJw F^B -|r3buj8*FK 1:RWLphU `H,&iv| j#JS5'%}աu_LF`չP{)-L:ƶSvK8LbH_A|'q)|rqo(P@cemh'/{nR}g ~9dE:s_^Rbq^%N۳z!(m> vل8%-zOg'v^WBo~*#GCqcɳѺӠp؏8 ȱǏb uMe ֯]_+NriA;ǟa ‘9dco5tLyjuޚHZ|mP uLWvDIx/8h{Z܊N|Tb.- n ZyG$#g'3kG[`k҆wU YW λ<++<{~C&mԢ8(Z j`狄!Y#FTx~GNnl[Q[T1QQY rg^ZGu$+yۭ'CKCV4CQ[D]'4;sVzyeQ' t_8 p-8yCT,,#ړz*BFNQ.L( VT̵Qd _O& <6aZ|x=-H <ߥE:DYSI?`[P' -E;4SNߦBB՜Q>VFO_؃G@H4bcT I2sˬ緘 N.i"7?kYzh0zH%iC6u@|a(:Zni+` Ûx;;g2tjJ]M}ZC/aXJxng,(v켉;ʰF uЄl:s$;EIwz$ʯ:H+O_F_#N1a -UpFy :ӯܟTy"~@ya8K//lj@\֠a앁4Eـ~C̸5=WF]Qo~ ;d7GKڙ%FMlݬrыص ?I3&F=3,}Aulv#Ђ \tgX5m&;د_X97VOo]=3%Q7vPBWθX:Ai`K pj=N#xRȕvy?ZAm߯5j*S\J/IS~xM$/7#!vF+h݃Y~koIZbrh Oo`[7 ~OA-˶9ADh3#ʼF[C0)0fM׳8ce<AԚO,U+݉Hx|D| c8[E1-9$(X׌?G+_#ydLÅ2$%FS J/\kS'ŏ}"E<E>|M!6C@6}]t'K[Mh[\iԓ'ᰨ3J(071?k =̨Y/XYjL F_mGIu|i!0}S~c> ᒨAqb02 >+ԻZ(aAu8sBj W0o}(.cEΕիo!ȼ` Շ2q y1Д&Tn5L_۸'` G eGd%tOp~(T%{k{0\~'+]Jtce%$8yĨp\[@ܻ-{*d! on`NBho >7&G\ٲgU~g-g6\wyS"DsD1&P#PAn{Kf#$p=gd# G-FhX10=a}6ptRXl$T͂Okҥ2eeǗŜ!;l7u/JRԨK-*{ 3?"LHbA R]ʘ܊,xjE#8S1XeKßoE4!V4uѥdغ|a7%' 3?/\Yɧ o-tvS|K=C>E?at|z MTrjjdfe #|31 9Xc04H\( 60yhx4 bS{bnc- \َ)`veƶcM:U-?)[f+4}eB-)ɮmxoK5FIZ34[5&P1[(6)NZ%~qY$g'[:VќGJl|`vZ\ݝӣ&k:\47(ꤜY88Ka^ƒ;|((jr7F =@s~|o)5ap fTi'ZD"..d>zoZMc'z6ipH2p}1AQuC3%H6;,o)؜Kᗑt;RનLG Oc_!-GVG_ipt`CrR> cc{>RayA/KHw-2qp1У7 )uy=č6C'Ajɓ~5:H K*perLh:{ :h?jrU5ZoO@nOkQI  %.q+|2~J`cX.t' Ѹi7Ԃ&a 8wWf xxGobsRk{ Պy뮳bGT!pʵD{}}0$흶)Y{'5's=Ǜ)ipztah48uxs2I4nLNsIA9-S"׉iLWR8ȇ SiT>0艗p&-JSրog s߾I G^46t/\ū8y:09L`|p#RX?fk3i2${K>֨bcĿ}oة)`WLđΌU;9H=w/Sc<^޷OZH<`R>xR##/vcH5h̰uN_ROൊ5uuBLx1h?P`0ݚ":BQ}qa֟RA20⾺>yFDvGw6wt{|P+!oUݓ ЃTLR5SQ)tgóyAqS@.9F*1F=SOEf`Gѝr!Q(}?da^iX[w$z:00i=莢6O8``/s/Gd,\2d.lo ܒ ~+cm'%F&Md;86:C^w* eT6KLPrmENAΆ#8m~Un<ʴPaeެ'ɓE`C=} RݸxH4bxUDN-KYsmV4NX_:`Mv.XX6pz]ِ5C21YDT>{V3D*YXVPf;!jHvf*~75 o~S#%ؑVpg)FуӢ(@t$RN@%^|rhf,]*]K4M mp_ <ƛb&1iceA7y(fߍ#"$[J¨nI9:.a NOdZYL+V_d&霄k1iӬ9q?jUZϾ8l,A~0'1PuuD4PL ,Ej&YsosGT ]qI)(b&[e3;Z~DQr/& ןT37Ó - 8vYkt&SN~nX_<)6OwHQ `cyXؓ,@:*qjY0 #qX*лJzݷf$1 $JU!}u#}ƶGHi.IvONr׼`됣qi ɶ21m^ԒmXr!؝iZۥM]q k c/r1VtBUFk WPFY=ލmΣ}m[ߔL.-3(T4:܄.UJ08U7@Rf\d|bŸq>|dQZ!Kze215Eb2\[H%YY#[ĈKKe4MAV0Pe A8#/LX<-zvH ti8+cknX6zr=KQd8 UO ԙG[ߒ.edk^48y:: Qq58ض0$uh}|FQ35h…Bsi.2Tz  /~ڧ' !NFo|{;`+UDs~pN[Nlp~Qn))fs*yU kx0% >s/}ĴmVV RLbxW9pIOܻ *:_gjaǽ yY۠0ҞU5|wZCMNr:dHԋQjA 84/.@7لG ~X|ԯ Z ^R7D%V2UDbg.fPs2\vĩd-;Һ! ;wDd'`ܶmb(} 'd])CJL[_#)2Єx䲔D~~MGo8C3Ѯl ."ﮆ@Mҍ[/՛OO]ES9t`:>-~w;43Av.gj8Rh&VcRZˊ3/L@:f˞3)r>@> 9-߻z.9uNo=Uew3[O6f=@ 歐tXmZjKiA>ةB״dǎw4h,ǠpO'٤=jTjx^܂q,W50i+0Э#WL^|M<\QzZ| w!k!ЙlNݱ96sRE¤5Cs`x܌XmD`$3-7Pp=5}2[aԫ;hA5s^Cu ':$65ƟoOx:N"pA?<O-hJk ط;loot֦jGm7̀P:r+mgf+kTnL65,]Ov6MHQ 7TZ]cmk(<)nJCɐ\jœ*ǼWY ǶmX:*WWkz#C[`/K41=7aA#5.izxG쌸Z?&KX"X^oP^裙꡴G{;YbZP0f!ǧۦFf@u4At'U0=cq@*_ ~5C %gIOeYGQ<}2ɮįoQ`T;-XW'4 ;I9%i$`J/]}Uu0"Z+Zɡ[V*GwP51tz[Rjs T\%\}2i66o@Jpt:8ϛ_D=?'G]ț݄t8F=47[I@H$4w?c[!K)g jd{38@1V~?y5sj6i\DIv#^C8uKs+ڎ x:r["ҧcͩF$Qy²<&׮Ǔ</HF*U4w:#X02aʶ5QYY7 p 8 FɭY0^szwsʽ.)? ~wR'xUXk2;f v)KXMҡnlxL'&ovzu|W;K.oʌG2l@2nsIl$nf\-f"T 55/-@L~;ބ%-LɦNJ:ٝB>d}>+;bL&i&SA<$p9uC]9Y 1'34p|"44IB䲼Ӆ~"D'nak#%Gˣb8_-#n]ZL:xR9%PIڳDuӣ&'Ȱy~e.?hsjI )|9]HW73 0Ӆ|3`3dyShC2O]Ōl;GZ>ȗ5F|~$p]e!+\֛[%4t6/=|Z`U/UNl'`|6㝣M eAEҸpA} 9N !8b7*o9ҭdPA|z|^I*ObpU 2C PcVRFBf;ْJ4MӇ9:>-Mr>1j\R p>V[$ŽTUO8z.KkCZr Qq y%#3ӴAj4cElF>^ dDpy92AQ, 2·hz^5ɓY 6p-QM?CCs9$L{=n%| R:gTNe@) K.g.k~qݷwRCwfճQ0fQQR56^/oVCҖ8r}Rzl/%XKԌmՏC}|9=TxMxmHq$,ETU7wzz_k~uPRAe":uDbjVG=I/uz! 87-f <CHCnWٲ,'=݊NwM ÷p@`'Td@9U6IY" ѹ6הd"V4!ufxK2pW[,L76]4,lޜе}B',Ϲpq8≼se3p] @"NuP"&qL}yʡIHQl wOkKk``~g@XHZ,Lu Kl]p&$tM@g+`NexXЙg'DD b$\["`qjnǎj"_5߉u|svB3( I"t[arNœAKd}_A(Sm?S1;s=x~س C@(VY79ZUtrU 2 ׻Q:wQڐ618^b,J_8MV~V}.fjVJͯFXdW錒f󭛴Ģ +8&谛\)viQ. CM&❅|P@ {#p\qvh@$@` (<юO #wps}@O GV5ezFO*FqZ-XSN8Qk7WIgsYB"~XĜve,嬨Y#\\J >❍]I2*v]D@$ "aĦzd9zfV4ȵ VDO|{U?Crs;ߛ.I!6E.W^_iYi瑙 P(M9܅q qjG=[Fh*^!0H] ؠ%|$oHi'|⇊6ӅEE|ӰX\m_kag«s8Lَt*%>.:X^azE$OOOřq +сtNO{^Q8mSuDNo@ d+"C3;Jx0{D"X]LgBy7z櫍n -u;OuCyWXA* kngADN^!kP~OKKoVT]P| eԂuE, 9ףmK!F'Yi7?fOPܯa:2,;:d gspY٧q]jl.JԠ e{IHUi: A|*=[yξ`>izL$T'mW҃/yrTρS:'jsl_ xNzSkt qsHqrNr` l_x Z(؍1etBG.j UՂF} nD< ɐJU =#}mFT#Gax J=DF7)58o[ݿ_: =391jb9֟8W>cLs+&ZpSCu Maϣӳ-T*vXv|z?02$HF1,r>ػJ:Es_"YfP ZP7VmʄPcj9Mf.#}zbwTfl `2ujv#ֶNa^/:؄=^taNuBsY;Ӈ\4IsxY*ppd*TU޻@^l5z/K*ժAA774wFc n(7'ZRр0H^Z1$h2d*[?x=ke04$kDPddJdpo&3=róPϖUJ2O]gV&GzV]%JEg iW7JISfKV^i3F [rǶ;EVLbY *ZV|IN `cfCŔP~ꡕ۶Cw4QW_;U薠PԬ>K]QF?vM_$̃$ŷxm}Ci?VL_L0/<ҁ$ Zkk*E׳6i^<DD ʚ{e(5-p9RRDSz$"#r35 3q5·|#FEi33fbUiC lEofj_M>Pc7oSe!òTJfn M:C]2wgX$3K!a/}IV8R.nM(F1f ;v㨶ꛡ&_T6jd0w(&6Ew7-!5P*bڌV.!(]>PF5sSj@W<" :$ AMV>Cq2y A>"87@|u U!ZV!e5qj8P=оKJ47|!_x_@2F|0tjjKxua@8dbX,zDg.8pȑ`Yp 3V#u<}3#P4Ӏ|41[VFvbeEE%=2T dzjL7MjkWe]饺|u4 XFCU/6VשQ?\WH2]q?hu.)k7|f= !Ya'Qvcx(fI qݥxu2]9Qa@JW 7dq [ۣ5Pl@!@ՐB5<ӨtpDCz)ڔeܦ*6=dMHs΢ cG<÷y}M3αyeKO'B4J~~) `'E$BO`L"@YaX0Z݄}=z H%" ,'a8U _J71O'i+='<^U2.iE"LtՔh$)wt|u`Ϟ8t1`h}B2†Y#/W2i:9pP Aȫ\^t̲Ngwg14197lj,I:} kw)m 4qX<;CބxO7AF~Z#0_J:nQ=:FBWːhwS47bm}= =i6 LOD Yq1 ]xn6_%Me;cA1|3ysP \M7Epּ欬pL~jj97ʶXO!ûBj5@{-j}fп%_}&T0Na1pqGHf+3ƪh$٩HA+,ov#-uӵVaːut'$e>OرROC*hl,L\>)U L;(H}1mc#|h.u:H6!CFyEU[N:k@#4i(L>3ulɃ*0IsK {y^ےiY|splp#wMyo)~ 8qEx.MvM:!qd]Eqخ$|K6gMT;S33+.2ַ(!{|H\ [ g+J4v'55yO_x/Z/_lB(3pT;PxWP_G~Ԏ3A7+ܥ ͪ 3E_gk\A3ӕb5o+*Oj 0ܹQ .&6/u3$ڈz! '5M&ƴPHCj|./Nu7 zSաFA0^F>KڲU%:즩r Fk߻|)b!8X(ɅqۡKODޘ80ktPn.FhX}l>W;5rr¥OEwZI˄B_Hyʼn9ߛIG^ $ؗ- Cخ`o`6h]ęw(4 KO *R9+X!nd(o=}:@,ilRf4mjNz< Ȗ:\^7'ξa{D(xi17y4vRS3 W9s :`5@t=o ^0eFwY2R3 s8KAo8EX \vfفRw;R⾟{LRVZupKA 3/ڋ%J`;ؚ*_IMP2YGqJH*ޤnFp J2qjeOPa: W dƎbĈl_h%. ٦]5q )VlsdDX}@kRIS^٤?=0 Kh65h7Ô9< 1 DRPGPɼ]@la'FZ-׆4ư}(&RR×ԑ{hނm&AȇI<A}P CbbVebāGaD:xtk?4z߸>V4z@fQ]&|IZ*9tom?+ƏEB}zW[NY? )TF` m%B4 )3BWN:*fANU3peNu9{8^^Yt@݀d#%skyyeԖCNc"GjV8%^TuxB22`Zڍ,ζF#*lu߲c^oA=8T3 !tf{zR: LNXYf kЕ>vPL~f8nm8'֛ޏ؟(3|y|o\33:xFW#ZS|?LA1 ^7-ey/~zj_n?ϖiL6.6b7mP`gfv3<-/rOW`4CM4c:*CZun*&0p"Kn-Z[ךȹѣ 6pS݄UY~`՞<.2e+)s3횀XM$B4#L>?Й<JR560o T}blʭ'ER5ϗ`C66ƕȷ<F=lBxBr } oT?*\m͙ %s ]{lRUoQL!z?#W$9c2/Le1`,BQ9h)&48?^{{_G^OGm/H+ zC_Y Q?9옣n>u޸Ynڭc(q +@$%%t0m}jvB N.EIǮǡ_q3p'`7]?:ެ/!#ʑ-{~؝(4'p e$Rc*7#Z~!_ik,܉%>RgAzK%Yjiv ۦzǚ?ן+Vω\>YF!*;BQ@>MhdBҰ@ l%Rl74lՁJmIu:`jR[sMK{bMVP|Yf@3P|Q#𽚫.u[M&07_E%/%UmpuC`r:I!xTW*u+mC7J>Sr/S' 4 Q A 6\5M|Lѽ w{LD;)AI#xRWksatmRvT-S7p;Zf&6ZebP${ iD tOFHy@Eʰl;U"2GP|+[*Wӌkn6v>EPýelA⁲LJv^OD*R-%Uu'!WHG4J,HZm,G[y]&h6ڃ/ ӹ#:Ț]ZeQ. LYg}K*yۇRr "JR8as;~c}t:B#[d40eU .3:Kjl| mo1֮;Z=xoA~=." &|oX0LsN1LZ[ЈOL_ RȂas> wǺ!/a 6\uᎩNg5&#RF}QFx}k) yPMڽ?o0;fGf;rΞ+;vq:~.裿|WxF 詤Ax'bDhtfTWgm`  {}jjpv뼔uUHPka_y HG ,!)&;צ-H-. egf/{dInZ~k2|bru46x6[囊90U2vk4әm K+3!0SRw}D dL_Ҡ2 k_Gq$GS'Љ -/S;1 ETFk؊*V_cr!F93 띃jbkl1UbN,E1TٔYuS+N9?('Cnύo q\}92 jLku2ƱuG "Nf<]{M5lvFrPՕc %9O{~@FG xj^l겉9~bx#rOP:ars%_f ؇MsvY3W (2JiR}CF$m4? 0mut"YM˥{,gop T*J)k{ O>IQLBC t8G{bj<)A)9m,6D,:k$X$`wm44+sRAq'8_0HU;@Pv(a4åM8"g$9OxAIH~T] ƧmzG^BɈsq`l`M ^rǓŇcH'@TWiq:D3Z}{k88Og}*dq)DR~pc}pPeWÐ3kiN?DS F4kN|6I 잜 ތE<6!|gSkdU&p_K \? D~t)ʶ0W)ۄA}64=Y(eik?rS`Fj54$E\>znb,f$pq ?3^PGPƲpo!' 4|@ 14ޔ ^*"0uRxT.VDP7l6J3gnuR#J&y<[HaG>9-!5Dc1b9* dKs/&0yKKRO|"5_7DTq,2~ЋsyO#^Bf)`IXnwS8ҥ|zgYqX b/%?PȥiC/!_Ii5V RL9=8PW3Iw^@ PO`DC@)VYJ?`Ƃ-@qF^\=7QD1v_){ZWy G>D `Zx.7 ]/s^Ql,Vm~ҘOB .|15unjJk9Ϛ,V!ثnq@d2l#Dw1n%2 :|QF kӒHF9 j'-i ٕV\5^6@]CfYxl94uR( Д+/>#GwWcb4ugH{FFDG'}6ֺ*>X s3 MkfXcb6]Mvv'~B;ǣW(GΔFaTDsb)V\Z8$Nd"3-&,w4㼴@,KA s׼]l0u"-š)XLϧ8r4aqqа[z|IŊlmCpqǯncO55F-DY6W% O>7qSYq;1P費鉜6NμrwV&cM]fL;R xT:W @_}Ԫ;u!E*5^J dw"Daŵ-6qpBS'j(@45<Xm`$)+iLPR uNE8Se$=o Z\D-4#vn܋B?U$L2BL6ϐ&/' +X]Б(҉BN Pw\w"uo':Sq;PHqysk4VahMw~.ى55;ihlQRBd{BX@O~Ą Oi5ZI6Ԇ>_ϐJ.#{=0L-%UBr]ut;H4z~UX}cD 4 Rɮ-zwP|p+ ]/Zː Ig2?N8w:&UñΆLjK7NWVP "E8P+A*Tn5Ѝʗf6!Ql5 {7 }5kT࿭Y>4AʮaPDyZ"'WCf_Sڪ㝴p_H8\{ƴvIM-?FSra{;7b"8 ?tj轷þKJ>mvU.9t<kȪSZkE5 J$sf0-N#lt%K G8"+ڣ6oj F`zZ=Ú3ѿ%' RqH8:}$`dMī4ѣ4 j5<#VZ2 U'#:ZWZwrGEǧ")Ɨ/q& SCP*h{؂dm ;ӷB PMfFm##c m^#UW21$K! W>g{YX70)YNp刜r؃;RtQ]I IU*QR~\%m@D]+ʏ* 2_/8ߡQd)={C]93"*%u$Ttȑ$V̈ωlmվKT,\;N0;~+KF hRmTPmC0B)_adX=f~b?tIƏ`_iJfB1Һ¹ `_8=`BMV})΁X2AQctZ?vY4,CZBȒ ;/Ҿd4TNi:<Gwt0CaT(K)}s'mD $:_ Cf~\.XMn},3bؿC6 CvCߌ`ZZLlyz6hĄWrg=!j5$#K%h[F73n"]"OTE2i 朽SYuN,So"2]ԟÇ^-Uͩ Bx|m߅`#hĩz\|sS?;pkȮ;c%yichAԣ/S<ē'4hlǞ#B{٬N2Eď3tMBiЀP&2}[SчJHbu" "U=3=dߎשv#^OlX7T`ilZsR@p,ZLl8k԰]7$y+Y %%9u;󱺺p/XT D,>&o_$I#+e選WHus9U {8=€B{eQ{/B۷ƄJ{ŒY-~:VD65VTd4 w[K=#6 /:}Pթؽi1GgB7c*4bzin c>}T Na,7*Wdyմ lăO~ئ Akuo`+F;)SOɾ٩Q%K@ y;buRpHӕN^kړN | >3T*|!?˂uK31r[y(02T Д՛" D.I[dQI5}@JLlft eKe 2f)O?I=C86{) z7Nz/År>4P ĤƲg5IL"axv' PG| e{L$7Ku.&\laP#\yD37`7 !X}c58`g68 h!|-B8n)7i*/n*[hK~1O 5,6ŝH=?k]XY' }:"mGdx0>9Z}›`oA,)GpzI?N%j7%Dy;rscpi!shizk941 Y u'̠HƵM,xťJ#׿_qB藑V#XH .0 6ҟqtUX Ј?%Cm! W $uD)zi,wZlg~PZ/uI jѱjZ}qlS^<kx i&Ǿn.VF;2pʶ#HZXX A1ɨ9EܻbarR5aCwpajHaڧ],:=b@uivɾ2 ,"Oc|uaD^bKauIP-|?FA]Y^ ;O`i[P$Ğh%wg#֮ka"PHQμz,/qdԗOy4Zr@xĤV[n'tE[78b x֊)7:e%X2Xϫ#0Iaof])u/Lve7yGRhPݨ\MciFH﹞G},w_jew_[dH>6uvDҡv(0wkἛ<.a$WЁ(]ӸL ㇈nf$Rk-< Yf&V\L ְ\G`kZ&u̱J0 c.}1eV1oE4bg Uy{wKw7^V.o̍{(} ]Nf} JׁZ*I.@;F$@_]{ŋ5Ni9|pv4D!l{X"o;?$%|`S~UMoN0y f-#De0$4ҨI`t1WWuGLYw A*ecSKJcY&)A≪e/~"_$usaI}82 gB_չ{}rNM΋6K@x[rEs\Q}oyI 'cu:#}84Np] kIE`[.5mH?~{ȉ*R 4*HҭL[9w8è? îk?/1CQS˃CcJ6mp.stA}E0WԪ6nHѝN"/-MB:<] uuW)N¤<"sM#9 &u(ɗD8 pmjc7Qw (^E[}(%Ff]Y^ߊ=8s"ZHszYC_MAc,Ft F6=u%,ymE Y˝;Ӱq%AsEzPf\L{7q#R   j9֪) l#{5X 69'w4P$ Ja@?Hä VR{gzNQX%7ݰD%:o$$Q ),M>g z:w B%8{)3Uo|F~zy!`;YMXF >o]\(cC T"J8"9D]Ob*Fx 58`E_%Z/Ʈ8L-5sC1Z=j#c)v^vU yYdE >]3l1u/Șm&2MH4nTY4|?l,d:EBE )2׳L6;LWeJLpfd962/* 2|?8(0៕r:pUwlO# Ч-) RxU'fexLO8=m[Hn*z)֧~ fX'X#sVܠ?X./@Sqqi%fF+䶜s1YiåVvYF)]I}]b^`\1 ΢\ۘ>3FU$DY ':hn|Z/?KL{-F?HAڀ^dh} ]}el6vKؗF=! "q1s?{6lw8!i&egcݕ>g㡾+K7FZf2P|ScCpwؙ.ël_L7f48{$Ry4!VFj:$8 8߻{SSP,Yv; _}=aw=&Tdy`# G^*C郁U0$9<\n"0տf| % fPu1E92' @eQe)5d9Xԣ6$^,Fl5J$eC(_kזlK bFڒkhm\o yZ7 3.GfzmD;q@܃115/,9FT#@¢61;pp9G9gսl"ƌd>ҹ@;q+W/ H+e8Dw}~i$3/*4Lߎ+Iuٞ#׮D$.LS$i4[krOŰO7 ץ(=BXYF׊uǔ|RܓOZMB肋سNOA٣צW4߃>H}Y!܁E|yӷgĥه6?EGeGR9l5%D˹g2a;=M,ZHf{MnAAq(|}a!F>}W1cJhGT n [ߪ3X̹twn^`y!l|c >@5Re#dĨR<֣.D//rzgO;G|0P!?qI[4ebeJ CԔar"d|">f]7lv) LNsG\YJzDil!bkB8m~K7//@0_NB1!u$L3jB;[dƚ/!-{_“eu%5{QsLTv$3[]sYc0)l Zg:%EV0 s9Jz~ ӿ+NskJ #av 90uQ$Y'aCzJ$ Z鬂DS+3C0jxeaN4-E#/RgO%xn}ws-&e^|V?(yL*2aTMѿ֩6'LH[I;5ƽJk{l!/`sE<:{6 %}i`oHpRa/z/CV/>z;kcXKQq +ܑ Y<9H:0=_M{MD)UH&㕓mTլC013]W7Vo$acn[.bihi܄*`:dl„\wZ⣥)8'PJk Z[qqvX<M\-)c!Ͼ}'G>e͐ͫ S NL1Ɨp]h¤ح!՛UB-[ By;+j_r9) FacCnv; p67|<^*=pKcOu@p,k\x(¾}'VsF`iMPQ,6V?ϡ ePnTI}1  8l_Lb$Iㄓ$vm~;*^#wR"{4w9 7ϸfMT7V5Fؔ B=LUQBe6Ϋ=#,Rkѓ*WnGK}1Ek󎮋`mU/O)knkb3{_Lk)ډ OZ%‘µukǯBx=czto^3`e"&n8f%u ' Fىgg]jJ9_+OBEVDxЛqa|bndx2,4:߈gwMP s/fe{B˰hxؿŤ|ϛnڮ샺7B)e+|"V7a?SB_{lČO7 V\^ , 5RFf@Cwt @EږsX4^Zœ<ŠɁg3"{aԮXn53uk\ƛ]@+U2$q[ pշ*3rxTgM ˲/}#k9rj3u *aCA[^e-ecN@Q4Pm4׬<:5@6 />cѣW]w@$ڟQIpTĝؑ0`D݀AVM ꭱ]h8!bn$q *–f8U!zQ+˨͝]Ұak 'A&)sIs)dFqg~&uF8=l )`K|~s>r u]" )7sph UxŭiZ i^F_^]>9~LNAYeH0;mfm%il) uR?Dr9sSYGvn[c)$i}暋+kr>Eg<I|$1T[X[p[-^69i 19/"ܶW.Pq:IlXהBON Zz7a+cD,|p:rcީ{ LlS"wRDYN@ *+c[Otwqic}PCں- j Y]2 s?$tͣ$>nMW Z~u'o^w @חiYOhu\Aid{]üp)/$_)Y8qP;*K@3|G |2 " ]*\`zb׮e5APYYP[n-Ee,mS>qg fk)̆sOم䔆z-KGas,FVI=tޡ@3&*l[T)J!t3j;Un0{/׆ R fѸ&ԴW/ ʇo]x1J"DŽ#eИ9<{R_2'Mc#*/WlhJ> &;Se'TX9:_HKaA| RXSUrJ%q@,}$?؅2@p>]#>5~-Vώs;u5wɇD ,]?Ft&gW-&];B%ȗ3ixʼn]d]K,H=ۤ.>C(Vz^˳[E6U0)8HJR?Cqqtb~)./\M>W@q>gd;[N&̍af~RFq)IA:n!x8{^ƴRܳ0,k?=~ T7 ฺgt2R4e" siyX5^5+D&aCm !ŹKxPVG<'z o.pڌ ]][&T!γ~밙5XDvJV/(]q(xX^@#ͭIT@ێcmp Bu=8NEUJAQZ1' Gx]KKw U0_1qVcZ0/2nF|Rq%k:Y8Uf ,YYω^rhpM(z+aSeA.6l~!{2A 8g[D̝l 0 )"lZ KKL0?Ja6Ĝf z*֎DR% rdv?3P d$Q͹- hWN,]oz3dEg[%Vc7#V4Gn` ĭ($wg#5d%F-}YZǼ>QB_HEqqxZaZC|$a[K,%UeE :ٲTw~f(0;b&YZh"_g:!.NeKxt@)tec޿FE ;%w2wE]nwNz2E.8Tyq[o~[w8!&]& >]^Π5O? 'IX<*Aܛ`މ9jO$|[&hUvsJEN*j.Asc $MEb]1 ]~~LDh9T޺;+Ы&=RTZC^BH0yB>$V_b& )aTi^rzwX^n4vqu SS\NhQ~|=Ү^c fwE4(]R7EΠg a\T| { _EEufdm"[Uerv2͍[T |]IrYSͿ9?4Dl`1_9ѕ+NK،*U!|ӖmxN4HBRɶ#9 Z?"iثe+!۹aAVppJ15}b.-гϻ!D;m&0 M\g`8I]u@yUGŽ![dQfg( 7E(x.ֈ꼨簇 :~`sk|)m](~akvZy^AJsrE#1q`8{L#X4t@P6RX58T3MDK;6z#Bh,!aē?A)e gq [!@Thjɴ_#둚6;8>݈dD6;jg1VJ$9T7S$fm1AdSoXlx;߮f <9g|viqs8Ĕ',V*,lg8eڂ;ksM9v6>BwZ(@SsVh6(ݦ;-!9ZH獔0l'Mҏ2UjAA<$'@_ GH+5.E~BKKdnt>ƿ[% zs 1 N/Y\$O\iX"n&I?X"HMrce"uzuj ljgXFŖs^ _I7i…_dkm8ԡo YsR)GΌtZโ} ~zY-Y g6ZsOp,DP&}/tua|P[7U͠Dd'{ 73Lғ0 D}d* ϯgFjz⠓UKn a>@H꫆vL..ClE-+=z(Q\(/ߋ.qR?HRpiR_R*ƒ6Lu>r+ 'Eͷ=,ZA Tm*Ŭ"%@5&M=ou/Xkɼ"SFsєwSQpdB?q|7}j:ԇ OxZi+{fFf%TEӚݡG>aKf@ 'ndhx=\ 7˂BX *|%|e;Y :Fڣ:EA`& -Z'3 S"p~B9w(e ҎI2m,8v)3 JNZ8us"?'O4T!XOG0MvfF!dZRT|gBBڞg/ר 'MW=kf~֓~ZWXcS[#k5UjESvVW6,O>&%9t`6UHr2v-Q|u @qJs,% 0'>a;J -cXF|ȦGfQ/0xbK%K2=UQF I٣άؗyRW?L>ؤ>4GQuy݊T:`q.7ekI pǩD&/z MsD3uW}9ICA8"/Av", 8 EX.xO|s77|Iƨ-YM,HQ,6ٙTeFlz@>*Ft5\I:}Ut)<(AvzmEw>jᔠ z-oe*6sȮeוx~j>{`TnU(%4m(5'lh7i1!܀`?0&Ou ܾ7ؿ!IJf͟0fENlmܣF~X͛ChN&>(jG^ҘK^΂DTXG-[隬ONi@X+ {iюx_|{B@pq/mv0'5Y:+fXpKPR@ i9RCkvu͆>41Go `4 EwjQmÒdەSYv {Con$[ZR'&^͜+[%^<̈́*mk;dכ,1'kXER4ʠT.ka%)MbSzTpmou{98wd{@6q\cSzΎEz1gJEpɠdyL+IVqSZ(7"qLJ]l߬wK /kk`6SI?*ґLr[}ܿxj/ 1a$ ,XMRIW|o?x0<4t'AVV.5x88}_\zĩ+GQ#q#$ֻ-G_QĂKⷎhz`C9@GU37_JC%@γD?V0^7,[o{S`C>,Ap-ͣ{Ѣ:1z%k ,W[;@ηؓ4T&qs[JF~_#;¡-ni"_1 }Y?it+Nfc^F@=vºWv+L`±3+`ڱ;[zdCTrKoLleWpgU{M_=T^6zk88׏{TJݘm:UZLe5/V$܊y.S[,^\S#xj_)pU.T̞ڧGnpQ>omc㹯5n"Z E7 /\4|կ"&]WRVKK2'D*Ӵ/.ThXxV}=%$$_uɞ-T>asC.!ˬ`PYP iqP>!6Se3 Qzqb277LZbÖ+v!!TGdmq(hjR.iyM_]Vr:tN 'z2o0MqBQ)iLgj!Taa$ l=$a <ݍǂG3MEOV 1Kuc`FV?эO/)m!sד+!ǍؑW ۪Șcei .TF?=>"$yi[O :S[Jrw|Ϲ!֍6ѸƲxnjB ĉ4S-$͈O!i wJ:EY8 RnaUܔn{ x_v:MQBw!E/gTU/IzNgg n&e@ZLF R/x]B&db\wcXC;2>'=j ٛüPK{"hu£9_`NL}5M^QI_M=-'MPzRN^qMW W}X}}܀̫俢ЙH|[&pxRaj85U E\Y~e[T:pb6$juK^t/Ɨ4V^vR*HiME:1ݳE͔;`_ReV6DގmQJQ~@ݹ lebG~$Jh0U8B WVJd=7gpK?k`Pt:tF$b_kaS˸8j 9jdH/TA/7E`>,1=H+0e`mz`,n! {2]]8&vNOަacT nŐv#u&פMàB'IQo@"#YB6А2>ڜguDOBpaov6u#}D/!z/hd p/f@}:/z@@p78h+愖3+.uWSϥ 4YJ\{;#ܿߨ~TOrf7`}k0Oq]¯)F>ԉm' %kx"&dX"o.{]X1 -f% G}cJi?w ʜɼኁg$xVff>AߋuJn̹RWu&%䢀A cM>k4FDs׮ GS}@Pփ3fpAV~\5u_MqbpVFF~Hb>;vg!g28>7-͔q2\vsB.G6岯  E"QU<5.#ˮ`HTu !/oo3 bms'tLi+̂:]U7'S^<.-^P0gG$MWdy,8zaA1d4߉6XE3n-H>"2{NZOnQnW'G+_([`C1~uHEڿC;1n}tǧڄH$hb 8穕G/D?Ϛ5yBe|#J)3@Qh|rߦ/'4=4VZ-*P! a0ԇUE*;[w8@xT>%TɕMV,.mj4JMw KO~k(f@ţr+ű= tddPn} ۹> tBmJU`˷<2e-b?sie }L\=/DhX?ZmM/鶥r $(_>*bX`+IK>{NÊ C$ҎL ' C b^; 35$#4an->j#.waJт8[[܂7oZsCHwZϽJp!In'7{M(dϹX7脾]fM̓cmlQkv+X9. -eA%_H@69/[iAE˅769WHo(o-u޷cm id_nGs/ ogMk1'DISS<rn.ƕj6wt.Kchm2]ӎ&a&N8D7V֒!7PV*o%-ѭX۲hӒk" ]gISCUjǖQ}!a81}Y¸5G_^ CMvJN1}C";ܖV^ )D-о+P1*ފu7}i c^;Q DE?vPU>VyE4ae1ȕ IDџu'o!&%I{<&ޮFfx2vV= a" Mb0Jo1pgy]sA"* 8zXr2!IM! }.^8?0&^惴jI5k[wᴁFK{_b.7# ':f,m3.;/3xu=:M`bOPJiu?o<2te2HOII3LTǷg>R H*޿*@V Cz^>j͛P\A>/RO,kwjŊ}]MChR=5HQ&dzE;يynSLJ6d!BV]b1}C m=Rf)WstW0t_ Xu^ۥn DI\"VYB r ,ݜ.z_fA41X 51 #؈ňǕ<1r0( ǿ#öŲtˠeuQabw`;PD]ߺ0RvK`ѯlElҝJdQnjT͆fqimt*!(f=vpPi;WKo<;N_)Ŀ^BjdY7ӛ@wVvA#hS 0v3Mug Yz<0u{Hd 2y[XhB]as9||9>paa-X L$qpsҦZy>"Q\.M*YS3kdjaB.k&so zCoR'B3a?_a3}qv(ݧ VWPF~͖Lca \\@0r&nKe* w+_^|Mp&'Cz}5V]̆-1Mp# ꀚ1GtY gL.8R$wﹰE 8K ;y0;jX}K|tq]ۭrfKARDqO~KPL\vƘ#'rAJgZRZY O$ }LŶ }QJ{<|ǻV]"zGPsWNג al:(>S8dPRFI %wh^(( ŋy(YɒB虌 3%Al̨k3mymǑԯooyoq=}/,mvݵ@. E])&3#_El`쑶`xp)r#sfk./>'FTa9F X`Ո^")3v|kT71E +UV!L<32|z}ɑZAՊ/Z574p~&hN?Ll6lQ~SJT^a!;G*3m4c.(x 0Yz8,n!ІB@>bTg:lu<ଋz@|{}=1[H|dծ4^BY'hJ'|X 8(! ~k FNMpM!l1p0Y4ws Us1R/ߕEZu3]Po7#xۈ~2 ю6F;}'GWCuIg;c T"K-yNi#$Bs V࠺QO{<mw?\7DZH 1ΚDJ052z X0]j6ؒc&") CjxF\".G)p %;_fjS)9N=' |x樦#b+x|2*Zwe]n ~P\ yw}/଒GkRᄞ M(=Sh[5RP--B]?B n5igfu#Wi\/'R优 1mTTX1GsPٽ${HeEQ65(M ,_= _6"LY}3a2b`ҿ[T-@ٌ56~D+.'\_5ʽlzm arW34ؼDHV1LG7UQ_aHƵNM~}eZ$Om e5üR%T*l\ҙo."`;/l&7U{wmI +<^(D9f\??K5*8@C&%nb#{0W`Z_LfꁟA v!kK:zSAWbr/$Alh3.hYÊ~R{4S/̠͊ !w\LdOܮeY.j,j!L]7a} 5UD6kK hY`@ .{'kd- e5Nwc%U2ucTfg>(sGYORxF&l~\54cs;lXq.eβ`Y:.T%D¬IP@tMCFڃ\X7$qP3C 8g8`mӶ!`tXC*G_XYf -.FG'lږYʴ_eۈC/. >ш#[QV[F u|JS([ F=ޡo'jҽ e͕56-a3:oߢ=LT@TJo…axcbsiݐlPEĈ=b"CЪAϋU^17N%֔b(Y)jؼ2HyodWt'`3#^"<,RmR{{YߩݯԽ&%\P CZ+ 5;:=ENV9)&F.GX&ނ)B w#jʄlJ

FTН:e}X-Ze婿'G|i)"CA-AGkayLLKT&]Sf"ӟZ#Kf*kB@y[I iϊʫLǜmFhdU5_)OJI\ y|ԽA<6#GLOsN-\kBb C]T 1=0έi8h*N٣G4x7CϾ%(GZ :5fK$aYNc<|P%|jjgbUØ޳LOD 5ԫ0 Ǵ>/;}wB0l,'!I["WHDѿ)"Q ?y,s{<<&S:cM%rx6oOIn;&ZI"er=&!kiv0;0Q Ve\@d¥fd"oJd%7?39UmZ`2$$F );ޝV`-#Z-ȟƳhoFBβ~"ki N7Fx9mX)vOx0q#!QRSկ3N:3`aUf ?;q}7t(;G9@{}Sɛn5Rv6!~mbiZ\FBLFOK X J ބ+4xCQqg׺݂l`Y}ƷX \dTaߖ^ύA2*>@ -A`ˡ)^I erq@2ڗ?Jnѧ8fh74`Tq3(w2Ϙˍ1\8p@aj u$0&Ts(;;W801_ 9HpڥgM&;~PxwRqV:߉u-M-E.? kd2]ތvX!iZ UTupanIUc}1 L3z(|ط]>o. K;u{T66\|eF" bSMP]tR֛ TNdR:x$(/x ʺti?s}5%1ׯ$((Y0v<晆ӈy)ʍ[QDll4vSB1X, 豕k{;$>r?{}.OEq2kS,!tYRڊf_bhs*l O!a`^9u5jez[>ڷ=g;FhN`?ȧA{bwEM:7\(eR ,y{58 G/Y:" ox:YM. T[˻6Y&d5*62~oS.ekIhꅒtfyP'%@)Tf:|Zt] {lWwaדќMqjwEcjit']~{>KZǃڍ!CWW;J mU(}:ם]/ fZ-)6oVNyчNΙsaؗ{75\-5ID *R1nw4;~.7ѿrFt+97KΤΗyYLJZj{O7[4ẩ{HZCwk!8j}lT[NxuG~v*z{Q:Qb -XIV갬cO뒳څ;NœX'#7嶋 onF%/'Ne=gB5$=G<γ*FB^6HHAߊ.5ȧPk(}Y"'j̷β]JAbPM;bJ6MCλ#Ggt7JW1ޗ;&`ޯҔp.Z^#M!#Ea8 )"0lC}E Dn86~֯S-#LE}RUa#.&Zyp^tdIMې9tSZGHXK+t^e\$d7׸;U0R)'UNJa8=(Ywp?< nlZ<k^T_q|ILh1*nJw#%0r9Y༎qY4!<vՇɕ8)kK.z&^>t~v*ja~;b1b)۰IӢ*RȢS]>/u~5l/!7u:d:e㾝5`-ntwh nߖgE9e)Hp%%ǖb +Bи ׺a,Z$dvNK4OG5 'R"k.q\&n :N$T˪|R VIDni{ڷS;lzd;DjWLz,4O,ϭsڂﰆ,1U?\zWUy嘇5#d𖈅` Ce>  a[|4;6Z%#JG2me~)l􈃃!20[Н&;u$hJ{IF ̨NBM^`V3q_* yD0hu\O m5s(yUJ)Aq 'OѤDp~YRCU>67Mhдܮ9Һ&IFxo?z [Y:@1D^'-xPZys=K˱3քL6U=iH5ܘ`vM(Th3{NEv1TO NǍCuHiJ^_ِ 贈 ܃hpN; }HNN# [oc{Y8s9! sb]*f'z=M攸okC>%nO؅@WY}"Nsf90> ? L$[mn}RWv98*X^[ ĝ܏ÊootؚGӯ"`I\TFGՖ[vԔST͎6'n|2+*I[b`2_f󀘭IkPm0U)`}~Oaq1#%]Sᴎ&Oc~ѐ'EEbc LȏZxI6sn,:A*'ɩdM 5 >0 l%;Woyk(ABGZMwybؠީsM4jb,[ _d8k3M8ɫ!_qd`dg+ Oc\ʙޠ*KMM6Ӓ!rw_ U3]Dj yBՐ~z1 s8$ϿzEVal ;/ ښ4Cūi!QxCF醞Q.;㳞-ZGa#?`fE,IWk)}8ʥ_E?9v⧍F6gK4I |lrZNS|Ox:`TYIf7ț^%7a6>Jt+X䬏0U M! T~(K;%;@K&>5pt`E-scC@4e*D>jE+"n֛T\.? 4&[EЭ ,'CVh%5اhvSG9iٱ& Ⱥ"xe#eKf>x"Y0܃G$9V#H`#vu!D4f!Q]T*ڔ̮?P.8bv֌rrohUIg,=:H82`YWþY")ZMF5PQ",0Y1 ~'"2ߗ U=wCJه ZNʤDRݒF(w>$bc X\H0"~T. ٽ(n?fsdv }'2cZސ"" ?h3 bSo)Rq-ۋR 10yU.DH}Z Hш? 8$!+M/(ÌxUӷ_:,|Ѐ(?P`2<тg|='~c)BTYfB?&C>w^&?Qb*H]Cw$AHu矾n?1KI n!jmG H+֧XN1=Қ/qc^Qo٪\'8{B@Rsl4pK+qM݋zހTf;dJt rFM8NqӺ+SQ4憇_U،3MDKXІ].QL>>Yj (E$&ydjy`Cc;m2Ώ"#`ģ}Nt7+6T'(m}(/#WDk\h !"Bujn6*_8F.^Z,g|Ƨ94OF7rSsTɋ \%OrN-8t0fkEU,jùzGd lmx˱r;Fx.Ca kAƲ&RX՝a_/6y~ur[Ḁi&Ư޹i~F3? {ev;xt +wٞ^4oݷdL ȸ?`\4}k4TUqZ*~yZi>LT`X~0o6Wͯ\H \/)|3NcdJ M:ʹIQ7x_' (k%CT4ۚ FEg;#X9v8VRІפ/ImOf(L;ВBO>ՕmF.}(QY+Ri;]]}2).UK[4 k-L>-|%¸f-au.R >x?5YM@0ݎ7|0Q=s=`'bt/Ӈp\ A5qm5'/z6á"k-~cF $v4  'Edf\>$~hdrzũ Nx3 Ϛk Lu) `8K 偺&wodED+OG26Nꝁ1 ,DM@Ox O>BPQ!LA1樃Pӕb_Xȃ/"~2DEaÿ7b*5`u3/i 6o!3#Cw\ 6luW ȁ3?f%WX J֢a=D|؆XrxF%%'EͤjQd.|&Jzʴ، 囇+ u.b ^jvo"T,U:cU9I~XTjwv5&H5w&]୫՝eNh>ydOtV>4lF6ԁ6ٍF.,H e*kQP/۔\B4?Sʚ0s񬻕u:?WĈ_w37NtГj}p8";&nHY|ބ5ƗC?$\>ޘ[AaK.>[/Hv~Cb4Ho!2Kz}Sɬq %Hܣ*D>@"3]ϷgToYKIդ;8 pmIfcT9NbV $7Uv)XHLWa;gm_ФQ E#|sшT[V9v}ĆP@r7-f▏ +N>)N,(ǬqWpE_B#\l Ɵ|puU*Ţ}Ukjnw!6 wx?0h-6ƙ9P2Ƽw'iZS4ގQIUc5qg|QJb3C~TK%R%־}rכ\&nB-J_CHD4( z6IormǫDQ m)f_՘v=\[kmmG9 rVTQ:Q,<ĉB ORO 0rruҝ8.w\6֢69pNE5op,Q#}E:,plpzfjD: 94 f(W*N[Q;mzeq̱/ګ=}39X-,mCDw2qb2Hâ[%JG8dS'y"3rmMl, #iGHr˹Lbƿ` hLyz{{ #>1挚E̕`Z/FG> E$tWwħBV;Eq2]"dh%&lHPNL:HB-.8S˂ф$(0gd EQ!:ƛHBZE[LvUlO.E>[Lz#+\ynYEl̛J:IPz5/u[az^NfrpXu&pfl9F. ̒eFԲR +Xӭ0_M&]Xw!NvD\[[6ntx}z@~>M\Mwt½) Ncb[nf X"̵ ڮjo |ϕ\{e`ϛ]1,S땮AR imPgb1S ?d+#g ;PYg`Ta4hw /f: )+ʆpuDq'a]f\ƞ;\R@SW+#K %eL ;vw k%_T5WIK8ANsMcjj&Z&:WLA8!F RV d|ϴmz,ƊRo}[Mo;ҋpvn=u( OdP ]3!|xC0v6 V9I~uI4{c  6x4tॽ3$_{v3L/v^-Ddz[г^/DEq/тcK yT+HÐCXGMnÏhcOdܛ"%$tTŽ*>/YWLс|CNyܟL`N9sEw>Ғe!6 Q__X] жʂ/;ZbLύxi.í|:j.ON )92T2< d6߻ڿ'f1^[$Vuf`7ק\ol| 8 .wF]l ɩS؉ByU@6zxrcJ@6emC,*hZܷTki\)) P!7~5%qOy1>(Q,+*%/ϔOa.<8CJ'MaAֵbh-ųm \e"CsȆ0a݋pR!>/{EM,uB>RF'w1]Glvu NٚVN ^:c0zpjª?o[r*8X v#K@jrZAs==J{[k|VOl]#"d߅Γ: c%'kYQ@[UnNYoǹ[fb9+ԶרIV@3XOz E06  4UKX_IN C~pa'Ջݳj֫ut@Q ێ|n4tI&ꭅKyp/ݽuK*. B +iޱ!tɅx]a[lS#}2k^Cĉ'@܉Y>H=2ƮƼt. _n0#B3;i|M\ΝI7!2 #q%`*c Kce< 'kGT9' IZXړ>ӺÔ΢dM!^.@H#k1{+څ]"~U/Z[/. n1 'SEv2%DVxԌ(bɏ"͈do~U"xP i-CiDXg6zGiɼujM^U fVmX`[>+=}31:=cw8iz*HD%M)c.QMe&'2{GƔt8Q&f[D8M'G$^VuY U7Ī(rE:8G13_ZdĢ!+H'PkIDŽY//`WզxE #V5Ѡ=݄ԓcߠ m "*Z6Wf3ǠeRw9R P!_WUo,qR/cCuAonH1:8OZS@ьo}/%}sEV|/Žs;ToLE 1Tb,e^4ђVf;HO@JA4KؙlCt~'":1PAZuV̈aSItr"_xyG+ej@3=(Kd|^±JxQ&|aD#\Z{iB%_FbXٓw9Q^'_dIS x[,ȉ;b6xp!Ez:Z>^\T3 jHmdl_K}'oj5v뎸P"Os%/,[$Q=ױxdG"l}>ܥjo28X溦F%P߲S4myKTfڌbb@GbBNAybDo38CTVDV$W߷6b[ 硰a ګC8(~ĩo ԧ~2[21n aZz\Bc~yM]9cQdI3 L]npɻ0z7SBl]JSCW| tM$A pO6K* ^w1 E4;)Љce]xOu^h* ( ~jx~sʉxDSo"LTߕ.ǬO)ZȌfDzB%C 92C=P)r8It%|@l2RuSjK/n3^ z>Ǒ1_ *"_W?5=fq5$<1sŠxi('p5D;gO&CUt7?i^آ.v+&>Pf?l>=Z3G4'a dA(ףJ"cʜ{oh5휊@#v*FKj@~WHay8S~/U*lsI* eli58?$l55IJ)6*i /iW2|{O?u;ńYL7񖸅~(bxڮBImNIV-'l8y2+9zZx2ӭ> {=v*_Э% jqHN-LoOK}cCn_% &]Q(H,,n!-Kf$}pk%vx4 Yf2 .3)O;0#BFWPj9ud69F'KN(2z'XOX>A67,ND܌?&r)2ny [Xӱ~R5\{k_fG7&2W~6&#xb={!QB@d M3shט=Sua؍M={Z#t5›c}W2 *Y%ٱ s"VWiDllOmL.H93:l]K+tJ~::sBdGkݭ+"5&Ed ˖06ڏC갫6PyALA]^tYA ?؁1Xbyj, 47$'v(;Q]㴎a>4T1"K`i~xeW7) z~X\? S ?%wR5ׄpmB>{'KLNRhC!)6R7Ip/aZUڑi\:cxNͬ2_?{\N-*FkҨK|KM˾-f~^xjI'fԾ9>}WڃKL[:ɅqG=!2 C&ĂLj*U\2^q:-I:zʐM8:nkR?e݂M:*@ ϜgH(טi ?9sL.yq79Z {D0jl`bz:$"*g3JdݠgDcO%ud1 \S`1͆O[mc©LI vڋȯH;;rr_ &ZHC?PH% |pc Ktज-_4%a.h8.~ 惫vV*&^O aSO%|9|۪6VWX韩*ۆmC.wef6?0rbzXD!h-I l WS BPv]$y當Cmz3ˍ5u0h تISÁ]d} 8p#mV?v^d ݇ب~%hB sM頩ZWP\>q,vR^ٙhbm ,y(<@!`]{?4 RΘ,uE ;+[W{'`%6LS;\*+{?}*$k6!.uڅ%#-y.4LgJ=M}tKDv˻s049IT3g؀=`(ipJekqgQ,|Tyۆo 6f7Z2ԧv:`{JZgRynߏ uvCYAMah fB Bgk]S!epM(WN(5OOH)s] ƫ/Xy۲ϋGi²a'3ew11Z*:ɾpl7[a|^jD$T 7 QX$> zDx)|BxꈔfkۥΦ\Py*L 8G6O?C"bt~ַ°9yt]u\«_OAf+ӂ"EwS?v;'x?Ysn:"LbĜ73ٜtBsx h vHMdq̶4x16 F˚ u(GO" RIeyQ*L0^g;O(K8A3&I5N΢oReJ*<_C~aj_Ut6=w(U;1RaӋ>݁iȏelSe.t{9D˱։M '>Ȃyy@0?Si/usUSƄx3qk l˛,>O5n87OnnkI0%BJ-+r@ۯ؍QXexS"gEy/i;>ޞ&[_ˀNȰ{c^UQљ{d!aHɲ 59U{"8QWk6d65WADȏHJMfN!#:/ n+1kϏתٯENM~ :FCX gn^ЉLNIx/,^U4sOFRϡmʢe~ѥG&vQ$Y\G2Չd9bubiF1i?l Yфp\g*R1oV0t"lH#UA TQm $`coMtdٱ?ܱ6$&q1s]q[bnij.H+ 4Ϋ9l B2Jas"Z bM3#{A3~YF-[o =m,5EH*ب.rtT-vsGz_U{eNl̷gr]V!zqҍ{Tw. dg+l y%,cF31%fo8h8x56B]K{<8qr^˄g_*#<傘WyMtkE\ݑ8dwnM }ƀ?y7W͟|'$((ڪS*< jczKt8v ; ]lk7k2[:!XvC0n`H'xbMq$jSGb@QR;%ј?&ZHojŤ<HM9BDyvC&1DnėE>@%'J0]h%"/_ }YS "12^ZT]Av*xy:qJ\ myO{H(w4*f 3FXނ 6e[͹ Xq[uDMЖ~! 71\?E;ZΈ5]~8 M,VYkAiS>yGnXRW?WqLᣭuv~%tCZQyViFP԰1ݡ$%x,nڙ<Dd1+{o` B( raΎk[q%V-nW'S^-iage]Ďu{Z{+ͮtɋL'}S8Ycf:*iT[:D۩ X@|܊KTW8ڋοOnBTp)rx-yJ+rm4֮R -a"f"ᕸ #m[Dng~;ָt9X%˖eg5s8-dkERŝ [s&9ygJ\ 9Xg/>$cw2Pε @} Rh{𙮎4[`dNG y)nG81؅ ru߈*xbPNS:o9OL}YlPW3'D)o7X5 <#P&se%M܍©\ʗ33T\j_>8{Y^=ɼ=@MgWobK"39fj)JpyUױOdafanYOF\PJΧ9,8±WȘnsg%'_N:a+N8IbOMCҪ̢ ?cyA68lm0%}Zu>XxOaq3w.s@ R0OEwǑEF~:jtZ.T O 3eϫG C߭ 2L~Hn K"'}s߅v*3'I( :BO^1ܪn X{KThuo}ϓ+M!AnK;dnvဆ?#MclHSg dõZRRE.7Oܹ?ц@CvִurnZCa]Wc00I@qmͷ{@LCx?5r. ;-.TF{HmNO@&bSR }Z,|sZ_D[gXLy֟whBSun{2~ȇYYlʥ: o[3wS.MJ0 ĵm_0$.8")+''0)ևSp;edJKEͫN?.U<+aFba1lrqaчsb:Z~ [ْN2Gr]zt2*.hہٱG3WhRB{N4)rz6AAzaI \J6M ԸCzႧj$;oVfG ޠ "P8o5Gd´oWoV(MJ;MbQ.31%^[ 6 XF_\Hu. rÔ5}gvQ*^sـ÷mW_/$ ;#2OmTik8<{q|&1|m8n>b9ʪPKiys2FZ,%T5G@KW1iSYe~[aMLKoh "ߌ.4nICmK4ev8͵-caT5X8Ԛ aϝ@\}^bGN 0mBi HLQE <|&tZ uWȝA'~nB ?yo֥E}Ʒk'GXQG0ܟEo]{0cT@ˆlK7C2|fJd<#0"dAIKT~\9+冷2/Ǟ=1B%%k,r"7O} >jllrj_BpW'Mtl!6̮W +:ڧM'K%b۝q!h.mİ`֕!>Ga1gv{?`M.@dJ2%Mx4 p5ٺׁìh(Ú*ac3"v!+ xEeX{Xg2/t93 2+e/Ynb]|ߞ DZɓ/վ|{vk3Y>R30Bm TӆQ̏AQo5!Шj{p;! alߔo-`Z䞃fLhqhT86^:GV\b~|5ypAW@cҐ`;G axQHeޱTI7zߗGO/R\XDJHj-Y %}1R*@j7~–H/CػK'** Y2%#O\ B vXV3"$X0bj9 x LM WwD/wi9%v#ZءO'S_[Զ! NHBmo̿YRk8LO=`ŔOvyas(i͌ j7*[͏&q+=EK% p4e<.mZQ,cJaHx#yG$7Mbپ+ PykغS]ۭdN9)=N(/R~& A@&I{?V_;PXBSIPTj6K(d%>GLKxjK t7@sJ DW gᝦ491\l5O#_(=XLsM}iOX]6 ̳$ǚz2uTAY*SˋZj>bH 䤑2qcj+uC@,$nn O4ʓA/n)\]\n5Z )cug; @x#pVKJix#9A hL(z9|ک,0Fi+:5'C#Ҭb;D _tջo]kRsc^M'2GUasA0/:wPmnƽ{mk:"_sֈ&Kśek]T  4o.JR,\ۻh:IEr3( xw2H/׿-&Ƹl=Yv2wc A9ay-\>Tu8’y91JD Un^$xE)2K@ 1S F,DjS&^V+t{h 린La9=ԒC :i*ϒA]abma4LRy, *!4+E-Vq `գ7unѺ`u"䓶{v~1J_ & bF[}τv@f Xy3"f%'kjf@׺rX`Q:j/F5QH>b3f"Eu@U'|~k&SyHC"&h?G/M}Ɏ2Zd۠4uUi}"ѥ&]"6:|ʙ ;i+W/ZU8acJo"(8I+Û>;ir.ء{ \L5yv8;amĉgZzU?:"2Hqhkx|/w?0+ 1RВu+(=m4}  6UHj5ǃh:ji9sfyݑ=zۨ3 ;% cU0* c++4g:\-=ɐ%T2SgxI9\&RsZ&4},kʚ mL| 7XpCS &~{Yh A_3蠺0wB%#)^\M °䱾)3Y9Y5)RՕI]V?@i.<4uڧ*d+)ݐ\;PQtm}F Nû6pVQOK~(ˑ j)?r_S=UeY*;%Ն9G; ]}+(Vq;a2QڷRE-"p? zEs%O>6U ;"J6x!أMBTІT-oFRL,|o]e<-/@9n5=( x|,iS j̓7[ݚL\}rZX IU:@ }%Zy |{14% ; Ru\;sjǒ^0:mEǢ=@v=ȧz1ZTlea9%Idѷ("Wi$-2\YPWzExH&96{tb'/EdN(Ĺg%aM{ghpSdxolv}t?4^=[^A?I]WiCI7CZ+'o'ޭ?uv ߜkQձA"bOXA0 # [ӤY)ej&mCtUyZa/e^4NKם~^dPDU^JgjH|@?4im;5]ǐS"?75uZj U F_CSlأxMZ v?9 fn(H PWu0L<B=2عV~ZB",i@4'duv uYgIE>jKd[% kh(x!2v|97VməS#b-?:}{!i6{Nf-OH:74,δX g>*GA;["q2u }fpڣ1̀@,4M5Tu%w.)bOۦ굫zA`]E}l|mن+y%ȘcM"l(Gɘ̑(M>yܱG+G3)Ca@&B{s ?$>7)@(%{hu01Lܶі)3͒ 2HV2z,8ޗ@ C(r^j~u4S޽a -h-Sѵ:+] ҝvid9\ݥZe9wM$h =>z\!i |pG#&^ﯓUVɻf\k K_풽jcnF2V -='4g $V$5&<0Pk\rk h4w[4#abF-^Xy7MYI"~U%F2z;e P^@5(=uyǛniy-ǥ!Ό,@Ak(Dž׀XdG4)C¢.Urci PPpؙq 쥷ND8K=\(:.뜎\' @};ľ0ǶG)Vf?y•S_If" k?883/f N Uaž1+ff{csؘ}h`LA"w)b*GOCǪ&Oᙦqj35wQD0d\;w*ta4-h@5s a%b4Qp,:oyqqֈu.jZw]\6)ti}I"nLFX?RB555.9z&W RZ "S.A<|Hv,#&cK\Gҿ 6קݷ8&zs(| R% 4FӇ1ȫ0W߽.b͏twt`{r?['1k-P{Sb}&ElwdAs_w? VtW5{ٵ^L. ƒ 9ɠkapu=v  &ex):U-{SƑW]LһȢ;w;V='ut(]xL1׶g\U2q(9ȧZȖF 1}Vƌި(θMhWi~mmn}AsqA7Pu[,F~xVz|H8fg@bK6~,h bJ%.0B"+fZurs1T=6gV%lD/N*5K[c /[R"U6Y22fD簾U 1p!5>[* -&gk6l'IӤ[W VV̴\O|ş`N/4wvI ź^])=ǎUՋ'f{ܱxG;Yvq U}xk`p9:ZKho4 iQmݡ[IH!n1dJx'J(O,tVKXӥ, ǫv'T}g{i$ުҁx<0#TrC=g63_ &$h^xjߡg)ݬ1 Fοzv ┊ZRxw(! E? uʻ 8c1Qʜ :*G2_:cg).j$ӆZYT19f}ۛ2 ?g9n@KRk#Wv/9 ~}9h>>`Yw⥽n!6a1зj~}H?.cuݐZ7*i:W%t`p0GM5r1Hj*tP#RdW1WofT˺F}x7qA@BT68 MԊt+\<qcirSE4UPSO%z&+v iބz%`d:V{Wa,`-Sš<0oLפ"ɮƁxS4_C]` m~FOX ^F6,7)9F90|<+Q >#{ouQ\^..f9 LkJunqP2Iٕ` g^K\4@Ip͆]!Ga䰫#mWן(*!'?jT&8w9E&7K~nTqM~quk;YC*/0勷,Q|닃'HAR n@J`QV MSV m/0,JХ_MBގq}_d: ӰKzx$5v!M|,}Wѥa~lОPR=EBO&*zƩ7eЉym_(j Fo 5IU03Bu[A_+ԟS^U>񽑐:g_'M)Le~ce9 'Z UuOqrZkY`}- dSa~30`0+ki, B\b_AXcH8: F| 2^9#^gGC6Cmjqa29;2)q/s@%Ch\Ha@Z1{`CHd| mDE2#ٷ.0@({zvz0E?wQ~.ϒܱhE̬Y 8glV[p K밖F\yXڲC+5we+[VCU%aZBZ3ca N {Kz\_|ND0zlvid(\ pg5 p5 ֢"Au _1En(0)B Fӈ*;;+ yƛC."H8z|@e? NֶxJ/^;AX`is9tx9"( t&N/TTbIFU) S AIvϯ Գ]J +Xf1I\ŧU^iG, =M/@< q8STyl2*Mz9uhoSзA,{Ψ纺0CSО[цPk< $XN1|H͡.YjHZ;t?q41yaHC?kf6o ; p[}6 ׊a`#zV 25w P$M,?b1F}Ni^T_^BJ n f*@iޢH$\sc;N;( !yOFvOY95oz~|$@"8nGɚ,?nLq,F eY+1X)G$۽(Aiͤ4RE=d] ҿ{J |r8C'i\g/ps-3JsU}TZSV< :qf8Y9cCV[&;+~; TqטtwT, Lj( EIns8'ʶ >N8A0wvf.@?e}.3ΤԿ\RZZI%ʈ#"Xh=9/NY=~<2fS*e[ND^㩀y &2ՏZ;:SUe"O8PjlyU~N| _69&B[۴PTQASWfMw\q4л$^ljs+w~'b~V.pg N..lbC+Xz q(u!=)u)Ӷdj|˿㨓wOE̟J(2$VjNNP>3˼7T 3j91zsO(i~ ]VtWg^Z&A]kr\ ŦZVIW TKo$HZBk!F <o)4Рjx73{O*ͻfLB9E+,˿ϼ*1M6/bi S|Glad龈ioLeig-K!Ks<(#>}bAZÞ֗5ܖnk17ft>_xڨOAMK (8uzO1KZau>,/,-<Tk]'0b--JiϘWqW7MC&і5qVUR8"(gfForQ,2EwQ1|8h3/U7m%&`&m>FdS6*tTﵔ 'Uz\} r;M/Rzv=1 N_eͽ(l@Dz֏j lˁ;AeuH2ߦ~θʈ ;z% re4>\t>pj3N5D$!rku#k&9gɗ3M0jD FAKN%@2,gl*>P̰BrB?*݄`\t*¡AF4taw49iN?| S,,AT Sx3?T2&Dz#\QL(V[z 3}x+H]&`^ "}FC5v}o,ȿ Rep U"HptG~-:6AU {AT!]gFbݵxsYcM| d3|aIh]%LfW-ؒ \mAIVŀHun=!|C]Nm$?`] CPrej0ZGg 5bG|r4:*-\ T7G8Ecf0·Ge 7\V| -43$'IbԺ[J#2SvQz_""_ԆY9l^X#mnE VQN:T5CD9L?!\!JTS,t,lǘ_O8Qy?dIS@vg̓7-UD>.ͳ.8uKh(1ȈS $)Dvz:xez"K7N^^ E{Zf^M~TaZ/]헖r޳mP=i:v3;}uW9)fb2zTLqUqPgpv\U}MD߄; ˮ@7s U h{M4[_ RTmJgӎ͋?'2n,B# ʆš%Iv&U""f{Ch8l9|V_U E7S¤j/u.#QT6Pt ,-wQHo͔/n|0ށB%G `F]J҃7<1OG`۲K"Hi D.e$ÏH qxVVS(@vUP(ct^/\lhJ@<\sjVFBraA UtQzvFE@v& R9 w2BH.` 1YۚS /V yη4YÀnqzЪЛl2}tOB{PdN9" # tئΥ_*siHIo-n />x4ۂ 7+X.ɖhim.Ż}gkp$3I%]Ⱥ+JeF\0GIl/v&` L'%#9L=y+p!-f꺉ˍoJt=zAI{ |"B9GvUn~:x n+Ŕ]߮z\K#8XPODDFX\h1iCL~ɛ,;rWB_4ocҺ_ZH^4bjLXo;v݁tډXwXV|{2̻)쟊z:U(8[/*+4DNβ85,iq QIx6b7V+ ]||u7MyVp4ddmtdU]>dƭZf< ,;Nԝ ː5RRJiuי +IWQPUd~Ӥ.oo&luCST P_u' ZWy$B%g 3ߤi!2APuvoD6)}:"-ɇD+-ٹG M%ΆS[n߄E X-^s8JJ=jlVQ=Ƶg oY; %9fHliSlM.N2 /wr 1/֜ n ts[J;s٣GQ\ׁ.>\ 9(w(; :~3B"g`Q޵"bs ka:K .؄u|9S&t'phFo[ӹ'~߲TCf'k{3c 4'90g+[ |`ti[)N4*M,VƔ|rY;J,^A@Atrݨ*7e|/v68ö>:Yyd ~\ydV;:qǙw/՛%AAb]&UF}`fܤ8 PU 2㢲= G-˲;&*[61A4N&vպ kL5>" &!~|P :Dm+WphKҪ1X{F4Ū(}BC`y+ ηZvpi#`kC1 Fd4U6&4c.ukN!j4==Pꔺ@dpuձ)A5 tS!A#4<)BjsS`u~}f6j܊A [v-ne }QQi)ԧMmp*_s-/lTC6)Gnfœ` SeЎHK-Hzlh4rg`{hY3)@Wo*X9@v1y=@*,D%EQ\W}؟8nmݎ]dEyޏ) v;O`}?f|cFA=\K0y /Hb (6L<2},Kԓ[:Yb:|@]SA^0~KJUBf_Ҳ|efOt+ lB7:4n`$=O29eJͱ*ҝLEK)oMbQupIP<'o25'tP&b== =i+"^MU|OKYrfO;$#EMQ˃g1#1eUgUݣUz5*#,\G}Ge7m2(=K|L+M,%pB'w۱b8EsJ!˽ɱ!@o("np'ܶeSJ#\}QO&:3-?~5Tsfk>G mNG'4 'kgt F ;]Q{y1?Шqݝ쿝7K2syu5BΟtQÚ0[d+K#~u\) ۛisc"ٱUmIc}w0y]X1)`3dEg֊IC\]zy"HT^pXlYx2XaB7325C\Y9rhKO ~DQW,)vo}ޜwKVڶ|@e;V>PGωAh+jFHE x? /0@i@dz9-oEi"Ë>0RD [ *1=Vtèά,<гyn1GL0|wj'U-i5T[ aec%^B_xhvn,=@LR^젡 mėጸIE/e?f*9HĺMS51<362)q/]CVjj*04?G``؁Dޫ96 S!^xMT»)ߊO }nzڬ,l[~T_%t<gL?xAGKRR 7''KxEl+~4\ECyDι}=֡G,S^d8f8mx3n~CCT%9PW_ДK1bkUgIOwp-M[~&rSLXF 80& $L%Q:|O]+Phr7W 1HNջczVP7v#AƔZ&'=FQu"튼}>=p,2#,_/Zc[#lL$6fF́G9frOE|s.7^*{ė6cVl4~Я=ᗪPŸ̈^ARIpVEB;;/nKtCq|*05 OymXdNﳥzvZO:2+NRA*/#܁FNЊPdx+LK-*}e3@d {z0!anDL렼P%M$,Cf5zS(I[hC - m>pjQowÌd Ԍ'N@gHFG=].&n*Bj1&%A3K-p}3ڒWW*K3 /1_JԾ\ bf2u*(Cn4{"ni#0 >_@ Rp'w%:tn*+b?ˈ %I9"-ߙ~Ҳx8ʩhGh 8=Yh_@b l,8sݝΚoDq]$u7 =I13olP=ҜA՞rk?MѧU̘A籫Ǩг\׀Tw*4*H/APBm,51WL"v2 K\/[᝛:0RS"j4h/LcIL&G޸CY O&z'؉aK4)e}~z |(+*he;ō y _J61$ff8B/Mpd_y\o+^'9RTi[s4ٻ@we,hԉ=n70Zf,H|茠PggƜ-ܸl)2SЗUb_$/N'uYUXoFwPcy$5 rx숵 M }8H %فNGFmvEJY2_<9߼-_N05r :8*"՞.:L m 菱X۶S,+`@F@)K E ~X0ob-+DdWj\yBg;g)u=`X8:}@Cx7#uB'vkFT شxO` ROANG,X QI*;#AlU"}NC)Vp^l|'oy?1u?2..a%AփDfРjʉDn3y7W~%s)Gd]-X RbF_|7 Cg3Zg"K:0ԋ AK-CzK=Qb %HW(\K'o=*^͐۱!NS7JMlM=ȱ*N&),etb1gI=} klܗ37kUslj&g闁 (˰ʌ{P(hYQ73EX ՊWYtgp.X/[ [YUI/Y#,Rɣ88-wv*/iuTMy]dz2捍ޭbr夿G_x}"Uuz#|U:Rc1إI?w̍YU?Hpk1Yg'1*!+{;'&5^#~ٯ fSϜ?&}5n[(,E||KbPD a!5@}NhjED$2|X#`!dT-FI]Z4XϣdCt9xe|ؘd]O4{-~饘e5wMWQw)TmEJTzNEtljkCz3\̄ %n=1ŐEG;d忴ŁP=zgjJ:ЊjO#TH8o۷DTR3&q,zHA_lx:b   R`4Vʉx A+#/W{#oMB{xAHt$Fi$]vfqFUMP{ǟ0`e\/Aa_%+;aP,F]zQKy\&v`' 7J*-!9krt(-2wQꥁʁ|Okџ(dVGɾwrәm/|iʾqj䅂#=(\q͌MU[lƹQ?& 3B-^ >ިA_R>yNV32j0FH !̟>#cv >3Dg s F+@̔MTa &O_{IAB5 'Hز\8]) G&@?2xC)a]s#u¹ ĢԫoL3/=l@0>#qZe ;uCnd'VӃPPU}e<5R6WR+*]@ R=J r1h"SyVI{g~~wx΅|atu}T̡V@M#^CK~y g# pF7 '1a'8eNVpP 7 F -@h/=PO㗌d7>F.|͠TO==kA}LV8(9h  IZЫ_+ ak ]6YG[}[Fv?3Ё0D xM\t/Į%6ջ!/rƲ$ Y ~vQU+)$wy vsx;hu yK݇MOT?G '&"*G+Y6qxcU7"&-L̬ *ٌИc4t*C-t@&[f'JzObCeI6FL"Hh3DZ{LCM̥nyn};[eaŎ$7򕕩Xihv(]A$D0a`Qq93`+ `).L|pfXݘhndMuZ*"#tڊnҌnJ ݈FmZṼ79 (VD*t^)rۭe `^6"Pp:e1%[-CtmǸᇔ ZHނ:~Wm*8`ĝJ9)Qx]*뷈F O܍9|ID7기ʮBw^hƧw:vj+i;:粬Opnaa[jTe/:`ha 9mf 8(5xUQ* ?bхR4􄆈g?bJFNڿ` ">{%4BeN.D &Ȯ]+` ! s^@OV(y9 v.#ZǛx mUJW4)q}&e'gP}V.im'*S 2n59 s!IÞNfe`0Y{ClzZyfD ۾'!fDy:$d ?+CB7MH'dYЅI=~1 K6 FRM8uެVuL9.D ZA3y[ŚMQ-v}Ha jϳp7;&9';~RL)@ u8yզA!9?Nv)>-<sYp-)jڵ^e,eնL|MY89x]T9v6ygJƤL:Os !CCq\w츃6΃Gq? !]@RpԛQP n BR *;mIg4aU{GV!t#YŢƊ fo.igfe",<R ;+$-d]JR<$G#iA~Jql'd.9NԱzUH}' &AaDcL1p^Ӈ (ce )0s,QLz5׵H찚R8lS hiM: V,0U߻V՜|yO%[!PwNmC!3TEJ^g3`ww1 >W.ͻPww#PN%8+ %ځ s"4. .Ɉ/;+w^n2(CUo6oǀ8? (DrȻP=2.GDJûn5d&Nv;[lyQa`Mo!3$Tخ_W׼D45rsl p)t%1E?'XR%iךZpf, ihj 89?QQd{bOƻ1 ɮ; 7)2neR&<nj,+Nzs1ñl^FP9^)^:!'Z)9?X~Kbgqa)D 1b-uya?E׭k,L/%IqE,GPvTc rn-dTVRF.@QIcQ;{F kf.L ¹T,CQ̃}G Csɿ#־įRAjq#;RL 0ttJF ixbYXɹپ2X70XEqN ҳ!%TƊH ޕ>,֒ TOgcT|jIS=݊ﲮ΢rݣ@}lh[^(՘,*4gv=#*vU[JD f319(siɴx8@0X]-YZ$E9˒C%ѹ#m3am.ou+<U-4u/M5CSDDGZ5۪?õ;!ej[waKsSS r<_BWIu-Ͻݠ0S5s}Vm!7:'y @A >.Vy.k,LTZp砮Dm)2ۉK;mBD3lgyꂟbiAXAl~*J`zs6X&,7\? m`sTDUpէ3zoϜ| *y)qmtbYg_UyiOu{= º6Npa6Ģ {oþȦՍE#\0$1|w1yɀfEZ[8/z"`{DhrHGcKg88!&r&32^_uӍ1,Ȋ؍MKm1`jeo?Y; { $vF|vI<|mA910\s`Mð{0e'CMwɚObha Eb2ૣ:ZqʋR4ھ>DvřT |,/aQ2. tb|Cub_/fhF0Mbo9vVe&Gwj8q.KAKQXRN38%YUXtΠKHXK$^h_2V ryB"IM/rc `_uuM#'RN:5Ǎ.vY9cCmӓcIAzHV\(-y s==HWiY ,^ati ҄t8 ̜t x[RB5_xs:z6k˷3a<$I9$GA[ hl{OUM'^(^Xvmiʣ vtO&x4B;NvVk] q!?}t%Yv/SLײ2VGø-uFP&m̗(ϐ@xh~&TNr<)ukREٖז.h&.[&bKCsqsd;*^\\H,WhKqüSRS θLBjC_a_@tXrs<#*j-<4 Qlp󿜙>e^x!`SL[ϣ[@g%,nU-\'Q},?flΑ50*)<k̬oP:Yܙ&ߜhE咩 ! oTi]pbHAzMcF,60Qn(m ~XQ +M2594e¹fkphn{bj"5ɤl8CWҚ^-Nfƀ96Qfhq'uZ[U7^>mf}--;#fLXA&eh^5"[?F@1S`"=xԨ|/M l*}+t]wKzLSRu{s džENƸo8ƌN}>X{{1CådJBwUܕc %Zw#dZ]o)J,NW^1GAj^ q)S䪄A%OkVzX~ދ:6F37.$ƃ Y57IE$d_]uay`ă)U Q-jHI)*>>iHYbCKkWvq85ݳ`q%Cz!~Lɧ/;܉e0w5N=uVӏ#l6z#K~&(7 ᱑YNmf]w17f% ;8WUS,:!k}Dal [>-/Jܾf_bNj FUCP߫{yhCIxr[-GYݗMkރr}d<'u֚l.O<>^x]aTz?rx0as׀,Rɒi::]8Qˢ/-:8"? B̿RV:Y :m#k0//~8¿@f[Vى2.铄kY!MXqӏ(Dr ;,m}F4uWMB>z`SO޲?A#WL}U W *&S4YSI*ӌ$׾;R.΍m*ORk4tX8liD/ȂvjJ}eL `H6 ) cmN/3Y?3*'##1ttUP@SHV[snOw6>=C< Ȁ wOj+ "Ɲ-đL tkFe\f9MO*ֽEd-%ZսϿxq8=3E+v ݸte|9gdQ.?$?Ou[&xz夺 J3"VyLETpipެ@ĥ!U 4(EJYk |/@qqĝ6%P!ǑLl\y |2I^:Ʋ}Xw$ҬxRiaZ!$.< S9&/b5i9K"0boBWϥdPݿk-a?W85?}1dlIqa]z|i e#SjU|G١`a`n*,cNM =-ˬzƝT*VTdZ$UCl2x4bzA:?8sw 6zXC׃YɩeCu[Zp<'`m[.M"]jQu3I˧Le>p}0Nzז3(7G[F ptv,< 3N|.eb!F‹ɐ;n},m (W`ޕw 18\'9>X&B.eD2?t|"][5.%j%4Ut //׏ynbNIJL߫moUM$Xr"tdsE˴':X^n !e|v8Sg31Q\au $j?;,e-N-,9Sq: bx@0V51ɣ^ibt1&'D34k{"76d+jr9mHiK{f\uH}l<UP*P/0h ?Ə=@+8M^$s{a.:v-)nR hwU ]0AblKН,߬q)Q HAr 䵯]XфH*^\,t /@ɍĸf!bgRUƃx"h$N] sKܟը^ҤJ04}ʘBOc|1N)X-eUϛi/EUrlGYZ L1CBg\?ܔMʹbr$LA|T n7-a3[7nn븆,nvшf$$:GX~ѪSpwnut#kHVܮ!'̳gKyRv 1Ui`-Mr?M *G0wN>x~6B]3\ׄ v1JO!ދ,S}UkGS gM `a8jv4S˫<K &v`P@3iKO7'Ag;{$l‡1'ĐC@>;}PäJXJC&n݅ܳNMg (TM/VsV~ifY0_zF[8{/pc,ե0@,RZC}mqxܚ빼~ |Fqb"V<%#f6{œPbw_&HAO ڔ W= AA&͓^0хں2ڹ^t}4jO[OWfͺN2d8Νi7kNo!>c'FbhC@rGBxO&D֞~DEUMOO/f435Uɸ>IΊ ;)CP5wl2Uu84b&t!nf@ic ](9,#Vt@ :f !#oQx\Z&PS)~mO#3nq-&]QEJ>/ASU0eHH. Iؖ0d6fv@uC1n:tv xpUUHwؙ䂑"Lc0 gȷ.ҰġdI I; 8U@<Ɍ0\Z҃Y0 K.2 $(rM iЮ&'x 1m(~XHWb/=%T'LPʔb4 4{<Ţ9&Iaտ(\OhhAJljWw4y[/{Pסkbt霻3@fe7'9RjsÅTeOF@B͕eL'~GFF)ѓD071 7xet hS>!l+W4{',7ۿ p%Yyd&}L'a76:bwQ^]:pOO13wB- QIZGOC]`XT[zb:fa Z >B#Xo0\f6Myʕ|E. W94&@X`KcFc;<]//Ö$Wy#_}A7v;2=|[3>s<U*Ԣw $غ~A--`.:ʢ?Jtn4p&T٫kS(ަ\=TY1UdГQQ5fFqӯwcj}^2t;p>>(yk=\거HQm˻2䇆U_kJ~/' vV:^<ʚL6[Kۛg)kĕ$$M&_RVnd ۊ.H6KXf}z@% $ܮ;)HOS@z*Um[3#وDv_*QMDz`짒`5BegI~Fi lR{v\_[ 4W /RhUȔMjY'xEn#xi2̝\^{k Rj]l ,ǒvpK| y֎ƞ&$U/%ɹzJ=DQ 1DHZ#6obf,gEI0ד Qq2!2q~&^,{  I7-l0@/"\bTGc`}aH}]YsrlʀgtbqIQ7-AclHC 5U>d1o|(o\Ɂ~(RAP)Ɛ lm')?.ƌiPWeh~ MY;.J7V8\)PAeW%"zci c+E VaS"Qjj ˃s׿AFC("xl?/zxAtTE#NO\q%ͺ!*JoǍ*aC@~D}!\bAɦ&i& au%!M7LOKn6H٢nw @`_| ,أC`ւNh.U%u%̖;<\2O˟֯Y0 P_8\^o ]QxأP*G.F߀F,4jWV$^'Mύ^Wڌכ(j,\Q(yyPqؕ!ץ!P_:(_iTQ o6pEY ZX/P!ÄF@D|.쩗;U ofhV~o~7.fagt}fZ+И eŌv@1,>mtu H(7d,ۼ>[ N%&_-uaw>t|L3 -|yPOK ~Xe=H[sW?]a|8BEhp" OǢ{cQqLR>y@5.UGl#{Al( @AELpqr9@9+nEԠ|$iZVzߍLS1:]m~00➸ Ƞ a?QB~*3|B#zNPXd6`~.09i ?B-%p0!ZlSqVH-g3Vϡj e3?B Nm\cCuen -\PfEnaԋ ck> 4FfIeR]5^f }EZUƾs1s40_)ԟ2l}H2#Lcl ,9"#򱀯ZvIzEERr 4`GXEc2>a:S7kT8gP.+yvQy!ϊ(2 K̚)hnhMG`"+SC'6ZTI1}' 3AbJI+N<_!` hȪ[zFOkW- g3t&w<iZ3NP1A]F!s%HRv x,׮WK5m0˾`{*q!GU\2p"Cb-ѺHYoTpbN,\ũ <^+PIe n.By>c4w2)Cc'z5i%S Š*IYE!|ᄈEh-YeKxE9`cRG-n|EY81F")mU5`ɹۜ@ o#xW15'ޛ"Y}Jo.FH# 4O_tB $ljJ"i^rqz4Cʺ&%KEME<-6ҚU hb$_@$5<-' Ŧ]SٸbgTf On1 ;"zgxY ).VcoxDldŜMlC+4#獖quK=i9*KMunw4甊cdET> TkH [DabUnE!ʫXnZznko;vyΰ߈B25OUOxNʀC1oaS{M}nB.}3_Dޓ 5MBdlDm>VP`s[ImAPv4 =\sv$0rO>nw x'E^VIP CٲG;emVIb>')*Ӡ;8G'[F\-(ɷ3#9Mt9Խ9[UD7CWgT]iR@2YRA%އ^.7okďIxy8W*l GL;8:B֧h%ywbˍk:=hpis|RՔN;NzI̜_*`wMx找Û;˛{l#LdMCщ 2bBV;Oo¾fU B씃%xp꽭k{S%&9& #;?vP'XYVz+(]L3x?Ubm7?QQD)յ/9u!P?na JA)Dƒz]莚s|O b:ԅ ^dnɗDyA\4A=*} Scoo#]$oO,~Ӱsw_+5BXj\0!,t?0ЍK :}LŸ~6 lӬK1`vYK`U7 -$W%пbHv'jy4LB:i)D{[q;|ku$pQdS~cFy Q=viPArJ ۺiу9[~ЌH`n,jBC9eY ><θ 0ԦVl=f κVp.E}sȘT;L Ji 00B۾ߗL}<jĢTqyң8xO%~Yj" *ɜLjLpFLKi Dq#x+^dOS8ē| Fw-FvwZPvQN WJËQz?NNrz#_~񔭳* ~ms߱zxM 1Ձx>pTaՅW\iE/uD6@iZ&7jsn{yV-ܐ-7wFvŧ985dlN3I?.%^dk&"mRf]pA*R=3Vdbxכ aיډkQLxejL 5FAśTrѯgL?z=wXc;+gXĠ D^ClޱK~|]L dg{ӛ\߈:sIέ%b$K\8vQexKl/EPDQrYu4vͮO"P]1VA>F#E;fwOl4wȐR{Qynek#w5 OVp[NGy.Tvf^S(AIؒFĶsOKHI5khqQƊ>*J$]zW<ДԿ$qy*Un$etpxyZSo J\c Kt#odXz%x'@9=%. K98E۩V',v}wS$0e넗@Mۦ)qQ9f#u_VImmyy7CjG"MX#v-JC Vml SY2@JN ]|#a |g q]/,{wfB]e CyAdD;c$EF9k7,ZȱӔ}r ]|}5ܖH2\2Șj۟M~T.!GrJ 89](OoWwcV(K'|o &U|B⶷{*RFlgW:Cl)SXIX9v S % lW>hL_r6ɴV4"Ub+Ypk$q渞bd`: `|dDg{닳_fZ%H|ۢq*+y2$ 9p8̟yλY;l[aO_/4~1H9e9Ki. h>D*."Hc&vG3TdTAW1+k( 9- uQ}_0$6_v^0۔z3tt֡wٲar}7ݨ>df>#!ertۚNq~ːҵo&DlgzVT$D*Ra> WXى+3G0`p? N/R)귙= MJ.] ӯyuG5D$Y/7 (Oµ$z=)Du7bnp.+ _%Mnb g0LƐE [eDҋfl zdN9:o4su(\*& >Uy ,mX sC[n Y w"U n&zpY{E{Y)w"^/hHnlfGgP 9zR'ڠ_JܲMDE@PeQ$1eLPVZP<`k?y{IDQ0dY'*'L[_+6 x|s*4 |':Kn0%[\HEYEBLjTS S&qk>@ rBB@ `oļeT[0by\)a%j7IM2Ϩ=>ɶ]x7H4ng=BbA-t:kN,M`T1{-V!gvt49$InBX%9Os{ e&Mop\2Ɇɴ`Z\rDzL[ep,έl7v޾K]G @&Ю 쌃'Y+/&j5PbHV)ZX\C@v91Dm&Ђh~+DV^|{Бud{v@"&t9<0!sۑ ;)}3[ g|=zS" M7yר^T~|D9e5ɵM2J=dVX!6ˍi(7l HA 7&gKXcf1Nn2 UI/ݒa͝$EYyn쩍s84n*1]A'oJqC=Xo5{цo ;B3 ]{BRVV CӄhBf+Z#LΧ?^ܙ=Q)Eߎ3$EVA{vpkS/Ԕ.2#& 8z!!*-j58 ƛU iW@Skx09F[)\A!iJ,&`I foh g"n_F5BU/؊[9h43$'H3h:PkDmVQ:a@3a闲HTpr6=Dej~OӸǖ[sRe@B !gxBƯWH$iY!׎P{Ņg-Mw?;C[8>Knw4bʾ_C`-z[g6;5󞍻m>90xtWί ?*zYa Ei1ŹhO؋!i:\3L@U2+MM#lх,yRs 9McE f 0=?(:̭uPPF3;BB)x(Hœ<\z/ qPO#-ԁK^E KfQY*f<1u+n':D ?:I 6o *xK[+Iɘ=E=^hMu} 1Xa,9;0j[pOP:R[$uiߙm 5n8 8.Ŋ7zksOwåf"8!>G)R^Kiz^ \/jNo*'BѐTa 3[q Czi."&rLOƎmj^fK; jO-!; G]%ua+gl4tdṠpp"U*)Z{7֖\;t64FSrQX9ʞ"YL9?A Zt]蕚L&"ofȮ 4-3 i)w )gfnaTv[hun8 ;GQ̄2ldœC-@J .YAja+uf:YC A@SOY`[]UHp`XwnGyIp6[ i،=ᑶ}F5B5DdO򴂛vo>j8?{LB9Z&\4?1Lۦ6%3Y~R~Db+msNmг!b=/?݃1MB3O!7&J>t_8z2:dNc9WrPpu)4aBAL ہcYԯs2Q ^?4PPuJk^_^]] `[qx?-V)CCՔ\3ɡwNO˧R׼ (5虏-Pn(]cb>+"*!IPPt nيY #M1;Yph|@p4sdpsw0%Hާמ|}Ln"K˚|GZX ~8 vb5mV&j;9:\X!kܰ9&@.!,/p6#'ꪰ43j1g- ˵F@](|ʔq\N5-S{+qW9eS&q; `nVt|ݓMJ,8JV˘Ic=a:*P pq\fo V9zVSYP4!dY#%>KA}]|^pմYg & ڛ!w049CqҴw?$eOsř&NV'qUK 9n.}"hv}7兡_x 88ۍwomx Qq(ĊJյ ).\D `]Z,71LO.my 1&prNRm:oVH&n;l1؀Wԩ#GA9js8$P)`R48#cQfσqǷXZ=<>ܫ\ˀvTj#_NX"*7KHsPS֜^;TL6%BcjtW?m/*?ϱǂw&슥$pdQfuf xh-bWRgCu,X9jm^9u%JCmyhrjw%78+Ro暱AG"B>Ia⟎-¼wd\Vt9C;(9H QĺLOX7#}#rG_rKmj'pXPG9?vΘ>⾰2 ߖ۾Fz8v١0'>A)w4OZIDh؂p rZ0_ Dp椪VTMnnɪ ;44[`Ʒjubd3@IXT=,[ɬNVYP ªX͗}tz<$cpͿ}pY< !/N1~Y죯Wfs|—ܮjtL@qȉ!A9N^L~氕ޔ/=46J7F"$$ ?[VJM*( Au=[ԱnqH\ߦ뜫x|}S! ŷ$J,<޺ ˸>7jsAqifJ?tgJa9ЇM=ݝ!.Ke$QM6G>uwv%;;IMpJy-tr2ݽ?gXT^ Z2lWx)M8ⓚ>wI"Y8f۩Kxݢ zkU*'?8OL'`J77-:;*g=HB44eQWY ǽ#MO:~wv $?g)? LӥWݩK/y+Ub0$YN.J_~7~S$Ĵ" s=A`>h`la3$>}= ۋȵ xXl r6Fv̶%!A|`M~*nV2&^#L 3,˥U4aAܾ#4mEF?%3񉱐opհ xKV Y',HF64Rv7NJcmU|lʮFҼ%ZJT"'Ήo4)AK8wf(LuZ>fʞbdՍDK 8b!XךelZ})!|xGnr.Zl01\XmGuu%]s${b(|:BdPϟ^У+t' |%#ɼjfˆgwu$˱KraTR]_, H{y B)빦ZW{ \g*Fyͥ(a۴j=n6!߀3'q}f8*ږ9.ݎG&b](#D)~0: vl|hd@{rc5' bbӏ2eg}ōH%KNGA~qAtY2'QT׈*ukz`ң_PRSfJYQ:meHڸcGIq5!_Du:Hly-CTmt> QU#ؗ*<5톲,/|L!9AKThML9+rrʈc!0V2=).ʨ%*6pCƞÄ퍎 `LTƌ(5k, RV*i=0y,f'őta|^BZeMnC6:}m BY1F#gd*cA*5fKBbFUmעbWPnk>\ߥp`yW27OÙrkZiqg7-7 #W0v2 y9Oo~n}v_H[puYo# ӼE ,HlO + f /e[khLdG S [ȄD~79!j˾*5@ ,vgċ:غn+ЄO帰 K*+@Pp.fW(|Be']% @} +\vut($\T{vleص"KC11$oBq^>(M4S /9~kagDφUj7_+:ydcE|&%!PPYm]Xo٭MBV] fPӆzL<8w{h 7?V8d |*?[~+5P75Sc@G>lo_أ"ep}2>lX/Wi quȈz.ݖM!m0ؗ~&.& g a$Euٜ9bL|ɱ7^ߎmnq;,"]z;e>&2T2]Q]Fۜ&cnav1sStvwDJ*KI\K0͇p~LmuV4B7{8^6Qm4>Pt_ӹx]6O\{Cv7҄Ee!w`ŘIY2G MI:\o|g=ZkƉ2&v_&z ;v,W_e+Y~l:---ebehө,ѝǼJܽ_|n2 y:Qo%}ȗ>ճmWf,ܲD0xHFx*,IfW+ēQyht!3sPnc ?;ߤC(.M}Hس+&.",9tיe<ش#G$P:Gc;GDYu#<4J6y귒?X!$辞J3If !ص[Hނxz~l}~y{ TI9bF  7 G1!GGp"/qFǦ*cAz_[T|Xy85+<MZA_7^KƑMv%ve#3;ѓE]|23)Usu=J^?zUY`_{CJY.z wިռ)Jk=?5?pfNO1fhgq4tT~܌Vte^si?(6Rrv:XR>C/ L/K.x3mGs([{|g^sz= CT4|K']o|d 4遽ޣ KҝA&Es>/|**v:,q{E[cW7Eɺ r[y=HJG q\X⾸E,p(ito_ .}DܧTO2NSޠNN;Y k1vÉ *W١CNBX~.}\ ܆ 'uQ~L2t2 %1KiS=1¾} m<\ROLLQqD_$)(op]8qRRv3uRKYk |U58uAI#\Q-@C@(kvqGP^fY~@fVh+ognVr:E!0[7kƸ!;̼t#$5"nljf`].+6Cz^V&q^RyU*0`hҦ:)iWۯ~P'@4ݤMר&0|C浙\DEH+mÕy S>#PVxVLZ۵lECeF{M=o-ww{$bMl'kSՋct/FMn3{X!V""e*@ @EZ2:wMpI Y/a(뤝sFK~>r#7& θ^#]E L{z83$٭ ͞wxC l&s| MWQvYOa*V^XK N_ޒ}ctu7״vS{75Id]gt^qUrګiaٶ4C ۋ\Df̣څN %g-M'͢"͉C ] Xr/C\5tL6bYc7ѲQcЈ;gG 9rx c"i /,땘P782FcU*s}D$9nvX>Zl):PfsKjnO#PIoÎ/O {Ǘ;vk H-Kѯ~k ",3ΜsC2E[I=Tĥ[MsNcߓ{KZլ/^V%J;ve05e_Ge؜JRPX$_MaR+l aV^{xm3sԠ`.P@α:Z{Y \R^l&J[IliϦ~֦ས2투zp:ZLح(xUtD{rhQi9JKQaEnc 1l\k YZA /h¤ܛiWMNjG RAW8גz5]S G0hD`h iDԪC|Jh5QIS %wEPb0mkNbґ*brV-zǘh%qCD<T_h_Q=,ʨyC2 U} ^WMeyҜU&lDYxvMFjY{] U/: 󋰠 X2e1ͭ|XdڀSŒHɄ[7։}Ռl0zO$6x9[jXj(ZB^"o8jKoxJ.EE^ LYiLaNM)hH$LZGt}ezxl,'z_sL؜K Afs+irN*x7p\=5o3][)o/SnA"MFרɆ16Oc yE߽bLw@c& :}*j`fBhEQ*FDFS7Vf(S-\:Q,0%8Tcmc AX],8F"=7M2QP V ~e&ZKKIC](ʓu/\ w$Ssz'IDlhIC.oհ95S=5$1l$p濢"`GNw8\("4#X4Z|"( DŽdi7>QI IɄIд24z>r\ɒI~UOL*1 LtrO[^휸p+"K{|胣vil Pf_f1Ibz+wontYgݖbhd4f*] \UV7JÒigJ}slpI@]`^7"8%op^W*x>Y鈊l7d̠OȁSqE9*0:)`@ 'Z٦ ($ LN<3Z&jZυ8$x"MVUBST-,޽߹[e}̞K% R?U@wd\ё>~.d"qshS}4EH3RҎ²[Kܦ `aNcZ" [-k#+モpm:Ն 銊UŊűb"KT-0(Z|.rգ *`{/$B>e$z<)!^q,*Ւb88Rls 9NV)[,2S)gp's\={MkZEa̐%SXaض\R1Kݕ#Bx5k>9Gjs}@\^)W%Sو$b\(D,{++,dE(`SOKMNҤ*7?yU4xm$͖HY_ OgAvutXKyN`̛1a7"7!2&EfjuZc#CL{Z W˳ {PUE@,g2Kw>@bm,ͥ1N0߃z9-#1!jvx^v0.ұa~e/#\6yK0BP2{nog,=371]\H:-ΥW; Y*.gL!ƴЉ\NP/wަj@ǹ$॔Qy]3!4Į ?ucWkLrkLj'K6/AQTk^S5Sw7/^ɦ5*N^sDbHvO8"Jj%[XrAHv#:&4&/OBe^FL2 YZHnLޤ޳b$ 댺}:;ʌKm28V " 3U,`I25Um#HMNn UO\B7|8qȴ sZ)ѐk7Y~QWQGeDK:kt'STjOy<{6tXm3eIK>{Beûܨshk7v`R7hǾ#&C?AO>לָ[D5^pt) UXp֗;MV9S(q>KqxK@آ n>s\Ү:)m͕$Sԙ&xb&ؠ B]dp{VC5ǀ 9\m\i+)ϖEbٜ&sQ|¡={#,a1O^ VfaNS7xkB=%R6^* O(0|ibaX|X 'qJ9ǕwC.(noP8cץ z[xx囖֡p$Jc,MI"ޥF>q?\ص Qius;ևKaP[Y)KnJINdL>7EƆ]g}4ז^-VN=̋PcX\:4=k85IP3 4*>VC'oCJ&v-V3/F(".(pb3Uy~x28sC2sЯ/OPȫ O㶄3ݐ:Dq& nNihl9q3X߃T SaEMl(M}أ8t B;>1^)O$|]x$zEF]ťJDgTL4MY]zc5=uT)Mv$CQdqElY\.~83֐{#eW9&_Pj`HڳHzs{ޢHCx I gfZ^#A&DhHOs+*`(M͑s 2.;mSZhdsA(0y뚠z7c|!jI->^ўR] xN8^ Bȕ?HlVW&M:>U@C~_:#9RD `FC]z\l0 `0=*44aG"!O{)R(F #퀬DqpA zGS&&aD++ZOH"C064,c^,VF/z{/eҏ1tc2l f1H\y_On jY2JVm7b T-2sZ]|,p\"@""ZTpoJL'AB9bM]>eOj.jhÐ  O]1l(`&>TImCz.( ~'"Ool̾ p7G֡.Jo, .%"^uԝ~S_ҍIv9S.BO/1f^Ş0-9y3S$i%԰?z!&NOf` Nɴ` >ܕV f]6"#~y={z?Ĝr_2> 9W ouUpnƁ!Z"\z"pdL={}͖bz/W` 8}uSKz}iXU oiPjg`p2Hj)~`o+tX9PS1hW}N\K/ۍ`\/k^xl}^2RY?%w_~k\kn͙.k\kq@rg/= jJǶtvdv^ X8٦$A9ўLW9cUE9bR]űY8uՈBESh-yFg/o/.vdw +Fmk~>;(h3`f5,,@]mvz&\zNj_b/caJ ZRK ;n̉ÉmHJqUv͂ $ՍU[4wKVAg]'j NaWLqKRO+X5s+V{k߼tO#94z)*B aU\VKXW/񽴙.y} EqPPFk%ML%CQ-u/٨JL6ㅪJ ZP~5Ѥ,xa)Z~՞F^l]،ԺtōU?9|h!E4dJTA9'iH~ͻ."0ȁ^>j#R&uK*Kb g7b5˓J3^Y~ 0v8XmH=zj%KkT74D?DLPJ (=rĂ:kL5/cmHR[i{B^OH Vť]U1K RO`qW8#ݩ'P4_/ }K2222U@MQzQe}*Eq/o A+ i_:V68{@<ŕr>}^Lig󅬨|M~E-pGLl%>n/̫< 4wZ GFlKu 4={z&gtp, q ,l`lRůPAlu`8'Y)^}_VTۃʥ/1uߛvcF*"] DVmclBѩZTpcQA+YB"_L6S]j*ok=XykD7_[yX}6ĕ~b-TD I3_P J 쀉]u޻LKx=]&(&g£aQfxA0*r\QWs2Cue?2G RЉ*g$ }twѭHNNQU1JNXq+kP51cV.+9BX!,X&R"MvQ1W5ʼn "xcG`[ UX.(@b%65QzL6aiJ~FȢHOv`oJ`&#^&m>庶ˌZy[A7ڪ:Mc2_yJ,6;;/ +14.=L<P{ʉ\52F-OFbԽLU.1YiUze0T6Ṵl+ɍ>8:3[6SFi `6j3Tai;&N7Kl&>1I;-eHFj|5)9*miI6bKC&'^M `wU;frdA v--i ̘fNkk;{!m)砃1l|K :W}gca\2(4ՇOk!ı{i61_*p {@m@j XWYƥFbɭ.x2o,7-HLƞ\USIFj< ׫%boTyֻw10KvO툇Įr,&+7ɹ>&M+]/!a͊ꤕ!nҒ !/tm``rwt_~L#?> ]q+R@_ %2P\>]=ϝLT6 1{ ·MAUb/ @~[U(>:Ȉ( N}v5̽]e.tu,ŗr^PC.|m|;iARVZo'h;3u5fYF|ۡ'oc뒠Ge񜿓P}4R)lSLCCKoο('0qm_/‘Y*,<$InEmh " B!]M,ib>Ozv0qLx؍'HghyOGvTi dPnWIXV5[4hTrwNzLu,Yc$ @{(KJu^6["i'^qmN}u޾#αM+͜cȵ`[wr=Zk2V]XFU`H=J) >àe4 ᭵'_ǾaZA˴ƻ <3Z<F{Tb2:`-˻fF K /E  @ ŦB= v (c6GMah09K&ǹU|K҇B GXFlcf |i ~W~rnFӡ\Վb~FM g,tҼm^Is$XfbwC0%_G3K_>E\BމnS"N(&T|â2D9b\đüjpaM{⪤|+h~ {]{*&8ɛC/Jto: HMqQEO$12'$)j,/TpwyLO'c \)QuGi}8h`68`]nS\#^K:y#aKmo_J'62U-'iAWosdm_CW5F%fe%vꢹdz?$#s3>%@~I=?7.`f b4B~xE]X{!FVVwL#n^fd#m 0K9@q>ffGm>NC|ğtN !xŮ+߸)"FN|__i+p-iGoMJVB"ȭ2ྲϡ޽Pu`m |:((-~wmDUr$ߑ-`I8-vw.4Vtn3 MSR#|xM`zWǯ-m6Y3PQ ˼zbFFIjQW;Dn(0q~vRrhv.~T91c͸6%UxɚǬ4[- qöI f0䌉<;N>6X{+D;<\})TT1ԆW3/!n`^a*Oƒډ4˗ v$)p/5K|:A[bVdWQ^qf? ӽsżH})CP"#OQ43֑7u1/A'xMӚ6BǾǺ"1-W}"MlZ3H+;BpR؜hYX 6F: ;jCO td,t2w+6'FJmq t %x TuXؾF$~q+X6=krS8 _ϱ?ٰ5&K} EznwSz)‘2ǜs]|v7!< \;y7Z VQ{!&?+V+@śE=S"`怞#Q-c@Ra 8eƯ_3ygK;0Z;>XQ ʠ_aj3)}41-pN"JdƓPgsEY Y`, Lo皚n@&gdjtoqݪzwkAN:"ba^j@ 2$%]YU2Ғx`Yjcnzd]#.#?Ia8j76(*Ŝtɲ@lZvi9OJv|5wDZXİ<'*ug 6k~< >j;#ɐC&\R/R/$y8p?2 l-9;5eנDM]n@7`|tӏAOD;ᙆd ݼb%κk^0Ri%soAާT%JD͓#B'g3:cMÙWā _Q^9*O,gno:6eKGrWh3*VR,,H $7?GVYJrgq!>3&O8#9:po2y(@-exϳc5wޢܑ۸ Hj (u8ݸ-\Ył\SI6_tZ2|'8$H؀?yp;֤MЦ@`#K,+ݖPR13a||%%Hz[}[yk80uWtA9sb-.]r.I}B؛r*sIإY[dާ {/{D.+X~tV-6>|> Y+M-̦s%G J>38#PoW,!c[js>}/ n5IIrq#yX͞ΪxX3:H<y^RFl ̑j0D3k_䄄) @T+0XwC5@޳~IxxE2O,UHpǽ$ W ;E"ozh¦});&oRk!-<[cT)7@vqks?] TE5cO#)ģjFeNx\:T 4Q̸(jҀ*}xMoɇJe]RɐԵЀۏ";0Wx/f𗞔'4Z*=1Zߦ 1 iUTn)Y[oUDi}3$w?-5|5σ{.60\gh5ټ{8SVmʴYTMnt "{90Pjsx}-辷o P+dkYӮ,mw'Xh2MXx?jSyһXC ]QK+@OT`x IShM%j y^([ K6,Cݐ kAˣ@Aމ<,W!Bg)TtBNPK7XZ_X~~ ea&ɖ0QX A7φBryPD=Sf[WF߅ln"ku}.goŏ"UGr3LʌD<%)Ⓞ }L[wvj47%l͔ewӷ.zD@:)¥|Ql"x+jSjW Ǜ)M5Xh`c)4W6Z0v 9x=f_C2>jO&w7)H"5 a u;XO2gT ج`7c 1gZg @l`ȈE3p*rue*;˺=8"v8 .IDpI]mbw.(-ٻk~sdGqײAăQcSB!".+u}3T1#enY|O*$os#{/s?2:[44u'b|aenA۱qk9Zsn:(^|s;, v@K1:ù(@]:~x¬e hIfT{)+8,,TNj."ΦIKihLӳAr 3Vc$NQ5 CTtM`;=F>>5-&UJn2XGF`_bXa 5_rO_ӥ (i#,[25iU -[`%y6JWa[̓t#@ ^h֚n,J̥}ޮBs_ !{]i;uyOx܈l2Nl+eǪzϻmx瞷WΝtZno>'0ϝ0U5lB_fŤᢙ9ױeZFfC^aN4H很sn@Gw.@?טy돣Ԫ5yXGɆx_VC(46"U6cl/*D ϥ"sOgnc M6x= "ӣBdn`:@ Pof΄MT\’;Enua3'o#d$́l"}[VUC."jÈ;(wt$AژrvYetؠ{O6&QOc>1ui>QغT> Ӂ`i~(@Ef%T;!AЪn@81ucR8 B?!42j>҉ tX9 19ǎBg^ߜ1c24@kpLKRłl!Yg~8n*Yk+N@p+zK_Taȵg|} $V%-x!"垧 {{̒)Ci~Xg*\o31yaݭ<ܰTXr%׳B~uPxh[0i1ot1k9y#6U-E@S"Mz>_.Zꄏ=(fUc Id.bg y9WN8?H 2#A=ϯQDsx, : 5Q-tյ #0&m0 AKЛCj/IϷ2XLْPxWf`Gu}D8qh:)mk 8 h 18B;\9PoM;}kj x9@p5gؘv!~D$q)30f|9.}ȱd0i*j2 &gҜAԊ 9Rg"·N[2-Od%4ǮG7]+cJo/Uj2C*GYĮ`"Q1yH\PR GÈ|]~ M&h3nm񥩁_<} BHf3epG]wo1wΕ*L7v5-WkD݃L \#^@ݒҕz4"散r=fr"<0j+hrSƬ9H>:\!s\ҁ<]vʎMD/S Q!*l\/w{0m& #8ՠ0Eò.%%%SB>}$b&r9DYR6;^!iF91Z<P3ﲬpGV]ˮHXRkM? ('i;ֿb+QV68b>M ~-uy^7KE+C sCQ^ˇy4lNɭ<*?ʖ -ݕG|*}G7o{`4G ^mNjib=W&E~Mt ?2l1`;'11tF1-xOSH]^v3hwDwψJz{岜0<3`Xb9aoF* /Bg =c仞Oobt6dKہ}Ks=8E4]V)3#+p}8J6~Q׳NGydB (,1 9X.e{8I9'ý,V$vG2y^"h_'>Փ=CGLXN#*gس8F1͕qkTl; x)5MwuipmD~05w^%H }n{8wq 86)W_X *q2J9={;բ-:y$u _[T͊g`x`H>t%w7o"VA*&p @6"h!e& w1ޢ,nH1RbLhx{ȴaY3^Zi(c& oMㆧy.yl >) dN_[%݋S~QoAd9?i# NPG5Tj#%Ga#N=FC(WAV5VʬY[ k2Q@10v.Ă̴s\~`j~Rx (z99zDI6L~97!\9ލ92z78Nl^ \AFGF-1ޏφo*&%VLDu7C-PDhe';*zLjm<@e/k'* p*?439-;INAH9O_Kܝ<C/nB A"!mhI} ?_ԈU 됊B/$nD'/YLF"]i G-_~]qe,-a 51M,=Z͚jD%ĉ[G&%*/K%NqiB ̻nbX868QG֓ zU}ڴGV^B{L.LjVVu6bOZ;rSC Xzg2} IFJ)f@NJٓ&|s/>BSD,p: . &ʲ|ʹo߆@/BW1 ~;`VaVDj=+IVCuy_O]c`g!6f f[L`GQ1eG0~oRׄ_/t-.u-Ԃ!%35QQ]'%k/@-UnEm\V]5gǖQ $O1Ʊ`TAcO낝̀=` K[U"_5"vczlIŠ&*gY"Kwh MLÐX#!n2^=ҝo!(7ROHCʭe۹l#5alI"x%![9b b,yJj2^6T^BdN a)qZ2s^aȬ@f 0 կ+@xf %iTU(p4, 2!65Nvn4Eyr{׏.uP*T᧱jB)ڟH_N"*?@ %m;W*T_J$q6(M$zi2o2:^"+\8'24qH{&@'yYZ<(+=5;:-oVzJL?\OA@xvW< J=9R*A@V~'.~O'-4߫]I8e4n=雋+"LA_8r͆$p?y6ɢ${I+mK!t:j?A-qn@\vtnX)c^FT0_5A+Ù f#9{ˀc7۽V^:+Iu6ȅ]gkgk~ XlR D O8-Aϑ)Ka934'T^ivz,=b ^R~nzTe %ĭ]j<΁B~c4%Z|T75dB]]s۪B >J 1ߓ~^҈l"ACKHEԂx&lp_tplhV3b◥³I"U+Yd%94m]by_ZJkBcsy7$5~!Jr|KX-@vj rN蘻n|tZPe)C/\FimM?Bȍ۟^Gxub1 D)}N#V[E=#q"c7aI_Oׯ FP7QA%&#y?u38S*'ASKaVb{? `W[NbuEnK"q1Kw]tZw68e0 \B -Lusu"olvqF^@*TmkDOmz+A- ˫ 3 ђO8٦V'սk]be:Cs?e<* /a{iΚQy`*ٝW"[CT .iZ0 *ƒul@+1/`ʄ#S \̳"4~FSX&=gczJj'}p ,^,DM+7j,]~A7wD͜> ƴGOjȵ$Իe΋79U\WxI%|1kRXi/}E*;$8we'viKg8p[iD32W>S0-(s3bo `K (4<6Z"Oa1g)#6XCԏpF*&ir6JΗwetoce[M0e#.UPՄxxĭKgIPm@s't fF/o_CgYe hMxeIU֞JN5Vj!ӌ흏ڟM²qXN: L >YOLsꀱz )v1lvL~j? dlYU@O525N>Sg/Vi{x">Mfz4i|#NHzx&Io{bB\pKKQKg 98i}ځŚ7O05*H,.:[ !E@ބkmindƶ,2;Ǫ6.uaJ =y =ϫ`tŀVP%vc^q0۝Ftn>\ƞ'^cIEQ4$T>&+lW]:X{N7VϲODp捍|d˓%Up`.v.HazB`4Tgw E }0`un=oVqY vOX2yx.D؍GQlqBJܧ{?$omk'P$ҦlKUz|I\NYArGܳFB3nCs^qcLw;x<_Hln 8j]-j3^<'eBd$$rd6 .$zVՎ| z;IPɾlW6ϓURJ %9k|]!P0]?Ij*}'yJB5LqU*XX]1mi LTQ160zx8t@de_{݁Ćf' ~MMWaxЌs9XH6UղY$JY@dh{j9\8u*/66dS?IÕ xu͆oe R#iT?''GVx]7Ӏ,ltg>!1 4[ϰ{q];S&sx(, !\T@c\Ujd\ۘ\3O/%dj=Hf /9m(=e8yX^g04[Z 1_e=[[܋"[ d5l4>j?s|dO.8 wYd]z0;C E0A֘uU>W9TGؚx!ئuZod't2 棽bFX@>rڢ""E6w 3:߆4 J;MPfbP%b%b/y]l4xɬ0Y0bC ]m]A9&ef7~2$w6:vDz!PDB:+hC4Ƭ}~˗JKWZW1u1qcO՞-_s %xD^/%˵ei$TQ18/0`_yfv7dҢ#T"7CyL;-<42#*8썠@k"# \;\-asWܿMJDk&,Y>%:B*4]X\Ж ֖ըPJν37yc@a_>7"D"Xƺŵf&6N>[jHUqzVI|*jL(H͔JoN;ꇋ,\o#+P,B!Re"F! Rl?W7ysHD]1D[Cѧ{43뀾:-W+8Ks=tdE0v, T i! Yi?XhǴ[iAtwd'E &/O {^Wqc{] K@(D t6)36d/>YYDXH; @jiE2N9L"у.nx^az 11xgH[k^PZ`GTr<\)/0م5r4L{V PqT(gK`"PEVo!ʁ6Me3u+廩Q𕫣宩$TNϢZW@9jΠ%Xn[bu3+>쇩Y>̉.W:XE"Ԯ|r"ĺ|#AA WdUǜ(Ɔ[#Ӿ#_b('ݳVEe2-eB`~z#Qc9n_7zԲ:DKcܟz:^il|:㭞.Q!}\Ga>vUV]u|kQA wЏh`|r#{~b }@)I$4ʁb[!5{`)ɠw>,l!ACĠXYL\I~=ʣx:O Vnoޘ*19D#Ԙ ?SѮ?5,Fx@Ӟ_,NK>KB|^^xnY&Ienw4c ]e zG|#` J0ZHstuޛpPY]r PKvK*/N01s 8,'`𝶒3b$Jujڷ`wsoSr&udX Hk"3Y-#i <$'UHQ*a+횲ŒՂܙC$%D eCZ/΁G]=Hdߕ 6, km0"{'iVqcpT.&sv iҭ= }>!l;4ir¥FxE ʦPU1PgV̰[P$dxFQEz.]<혁I`,WHڔ^_H'p{^4K`>qlϨ 3Xl_t3>ʊ-+#) qVY|ܛICb&Ӧ'~.VH߅Y4W@Qe*bK;#t¢KMAQ?u$5Fũ<| r,) !1gqˏ˚R}w=hxVȥ rUNC!(DZ+pB-ӏeH_f9f^68<*L){ )U=!d=B}N)!&)~ vm>K#E/ ԚL8Jejz:ag(V|vHmAE "} SzW;>܀aˁבAXxuUpf* ܜvmNR T\}J}A"$/e AVa#uK YIQwLhc ܩP/ C44MR $"_#rEVځʍ+?ġûY F|rsBI*ʘzvg≋'t(yf{ Ͽx\+騗Vd"ǘ mR=.HL}bNAU_hN졳_r(^ӛfy TNzΠ܇=)h-Pò=`܊H> WQMPA`ix[Yeo3R A)C%rk!%$̼`*fzHX>:4 B,< :;d5B2~ggPazbй͐&$X VK6>}%ƽQ&x MB=luh}Lp*ӵ-t ^ 3Z(V+d\MHuT5zqQla?qc$*%eq b_,{*!siOk{l 9B~#"/~_g _WW0-2ʣ*o(.?e)`vs-VWUl`%ձVy]h~0$ӓGfR}7i5"]6 2@IDsUUp fӮ8C?FE(Nϭ}27{4dzP[- z'$j?8o~zk:1+/D-'&4&*8#/:;v}QM`4=+3{4w2fC>X1Ls'IJ\xOkmvܲh53Q-'$-Ďd*7zY*蠴80эʹE{GW$Gc!giغsd[47+V C޾K ]6,aZUkp4,B؇hma=sVOѭ`Ag9 h )9psLu1mqWWB˪oVi{nd69loqqY?7ƺ wᘧ>1&O?*i%(#C~J3/vj3$ g#d,[ x;F܍KPVsoP }܀XVf<,q\s;U~sT'+䖥 ?{ &)s{i WD)Y\yB\G w(+6kfw4WC%PYYOAu-_6"wOQyԳ6N 2'雎BM3 `%)>J"DplG rA2_}C-‘P8Os~^=+o{Nt$e"`ǁ"/a{ՔqUtrSh<ԅWoE2)S'0֭P_B ѧճm/MA;ӔG:pEyޯkQc̴=6ĦcaU3_;p5*EmY+2װ]JVqdeJ&ɗm9?Ͽ3^xz磖3qq-¦gԏ4;L tX(,. 20N+%moئ|C]BͮSߥ.}7񼦇,䎰T-3>bJPeJv D66k*>NjL9=␚+Ł)9EٲH%|j /@զK|_n}ZDЦrVcƋH qUP]ڗhF`ZΆKm<j4J7i+yٌQi0W;>JGTE)䷑/)݋hp# 6J~otHM0!z{C5ԉh*?ZdI\tbf+w B x_9@cG}>9./&-vo5 RsYzXxkL eS5BndhL3l6pqS (I=H塦]S'Xz/ˤFi@CU[!ۣFlY1X?HH~l+%b&K U^jLU6D*}]33 jT"b[,L2*g#*+L(:At$g Njؕlhnu4R+: kݓB<)҇짧Tk"eB'h&Ybޓjyνl6ryf|!'ʋ`й%pED3!Z~д`ccDt W7}/fVf+-^ ,\P*v?d {iUkw,V_K@ǁWL!ܤNK8d2(U;UsxEZ4 k_FQվUJC%tf|zI7#DT>wa"t,\ɦX9QDȗEo91B JO,9OB^I)e'nu3aqr[$FȂrG]? lAXZ5vT~ZXD8|>J'Vݐ e/ T\-V`6V=;Tt4Ϧ},+H67Ň`en1<{M7J;Lg,18 NM2a?I3lv{H/͛h2'֠^I"Nj @.7)4R<poGGW Rmy]_`!/rl Ӂ%f F.AsExol83՛mylf7q 1dVB`QhmIi(k+XiUa~h[+uOukGP =V"3NY Q쫖;Eym$qqY3qhCo'_LC-k( Jg/(<.QE$$OYֲ>EU-!Rm0מJ3&:Ic&Lg6Ȕ:NiN ݮY!a.$\GO[MxbwOVHJ{ ?`wcQ`F=󹸺*v 8H).iɬCrTQv}hwȪaobۮ.c\nֿ;:W;7!)zN=a6`y(*.?VIk(mp`)y>&ʟ^mog[ ]gbΒަWTս:߬[uK`#LR YV8ᇽGGqRM[U)t`< G`' vVi&pu7'y uq m=ynא.SBq8'9ӂD$@ P{"EQcB#mG!@ة:Oڷ;XqOET?[zE'4WQ @' s/t P-a!Ia'Q)r>ps]i 3MDa4 aʂL9"yX0Wt:Ϛ @fbxo^2#(}rTyjIңGzgjifYB:,}WWMt1/&lh"wqu2+ 4ix?s3)}Vq8HJ&B(֛UP|"|շN1{tƗDn})B&L Qg,tLaUvJ=U3~f=[H2Y'auC"tl~ҿ:ڛX#.۶WO_Z€ҁ%@~1NeKBvnN d!(,cJX', bXOCfn*{tv5gwg /KIm* )W aLګׄLu4%8ڃfǿS-yPTV4I c$ p1veu7d *//(n3He@|+na~*E7B"^Je@YcghGuBPSpNMTܖF,@b9Cuw/*r7j0Gcфa?A^&Y(&8傄8w|m3(I/-ǙR8]p6^Q\U*% f E~hNFdX"- CمΝms*}=IGhlAfo%¬T̃V6>@ꁫxZ:I %YYie5?y_ۊřM?dic41y]GdD.k >*dR?cgAry?,Nȥ pϊ@ʇ` xҔZZze-ǻFԾ1$՝Rug+Q={BSQлDHT[i2;qլ;r[uk=}wd1/EΕ´ K\@JS#DWVlbJISpy|q;.2Cڲ:1&jLSK+5u O?Y)l#@13BЙz@$זR{"m<B)nj'zWCg ՘NIMEHO}=h53^a!c1o}UH*]bIʀ{M` PַʤwM^`cI+;/6tׄ\0Աѧ%ʠ#-Ҵc粱Eq03BZpH[ȁf>FKogyѤa.sYw,c0Q %bf*I{Mv;fJ#*XX]8~#)dW⪨139_E{hRCgv' aL% ?bktJ_BlQ|8#~.tP,S c3u.^7zބѾ թ<~/ s-)g׏pv }J6C5JJNE&pW@.:m+㐼)eZ&Ug{Dn!uIҽ%Szܢr`WV]\U-u^X\+ـ5Ṋwu1+hRy9^U"1ߐ#lbWX6ޮ^:dV A`Tey(vMŽ/ ?̿~EZ9W0ЅqkkC(`@vԙweoʖ7d5?{ DIֿo@Q@`7" X<ߜCcorJ^^%_ե0b/& !_ʸ#$Qbɔ vgNf>YVT&xbӞǷ=V8DU)@U V#Q}! 1æf$fOz ggjCd\,d /w0"]X|A: fn ͦBnQ F/t_pR̓҈ ,onIn\G*!P!Qa #˪%2pz/Nտt/Rr.|Z(ރ,nPo3.aϐI(ߚx@V9܂OMq 7U[n2,.VI,9 !{'kIc7oFkv1 'g;t'fCl+prX qEZφʚeCm #M X}/Im^ !b8$/q p)=@\1XJW~Idptk8{_V΋yRqp *pCwx^-ɩ'!⾁'+ulK<.kq \ɪ=N{8(; Z_QB$0-xqs ~\; ܢp=@ 3~mrr{v$cto}]$F6V$qO \S`c8„k U㠜jFH/;^&e"tr8#5QbU ڮ-CBd_5P(T\jsL(t+m{۾.2"u{fS_J|P=zϚ4lk(aZ?-=`8.h_z^26?\~>yjxZL~+=Z`6Ҕ%G&ff>ďH 9rf/i l˝gF棴4y^8l% 8c9O{rdwGZa;ɞZbz9ۡWYwϮxiڸ*71x'D4MĉWsqnik%‘>mk!uƇA_PězsC[csC Va+ rfRnɈ(0dKMmǡE$HYds!ʼn X' %كD`0b3XLH}\ѻ{ ru4czQ ^iJ7L{#90~W$ҩ/\>9J9p ~k*U6'eS ,/+-+,D1 ߜD9%mPx}2| >aw*t? VՒ4 8XaV*"Xwf́C'LL`N݊9lD o+ \*ٖR$2>;l^1vi?INYV _CS=B]Κ %" 1u:aAG+9`R+oSpFWwGeKzu@tە%^F&k+ 3h˾cx>@0ɇck#{2CX) ᭳|/8F{ڕ"Su$OMz7s_PUˆk;TZl0)1>y/341 nitNIp9GqۺVYvVDVI}bU[_n32#5p 't'hRX8#W$5?\Xq^D*ٽ/3M7ו /zP&%85,նJjTC>V*ҥw _IAd Y=:/yp ١9xR|P_]1}@K7&6E 4è6OU ҭ-ݖEV,LEɠ(0WCΠ)#gܯ\Aj2)OIV!Н1vXǰYDXFy0M @Xr+z8f[>nN'){WplZkKpi1瀉F]UEk? F:_1 },BNR+RF1[wx7^Q+_J&m}~4yMߓV)M$#Spg~*ӱɉp4ZHP7R8ڀ >xԙabniW: JѴ1U^h'+БkP ~`ͪYfT@ f IfPy. []oKlh`XCrq޸XP}E ļ)"Si4jnW $9YZ x /<̆U- "#93K{?{SQ٢^Mq1}AudRXЩAhp("QPSq!@3BRpʹs{cC2G+3qlm3lp|i}%DV#C'[I"QEEj c=9x+NsA-$Dz]VIy -W=h:3ŝGTQ3qDs6o.N@RXvS G覱s\KU-0uKy"d98NwYH| ·HOC:}YHqܨ5ufD[~6C"=OLJז a:z$3Y^ Kl%AB(GXsbkai˪X#L?jko7"VH9G NMKX5)Mc֌{WUOK9+<ΐclBal ՠ)UF e59)졆Boԓ+7HEtL\)i95P=S7j>w&a>)G:\/9w \J))58x^i *#"Y%dpu:^Q_T6+TxR59,?nz3c5 YLLv!'M숉=-"wt82S3{jefPoh-Wx6H y[ qZgn=vC`JYjfn`xņ{zUGrHR1>~0Ҋ}ZcʕZ"kk*fzoPC Hbagǧ,!+C 〒Ԗk_n+ZiJx\UZۉ'ה 9ƥ&$S@U )4r/NL%r:]]`?}7niKȀ$ MĦuE6PWqh팍<]s0h瓨:.[*wP C~Vi q6 e357VϘAilYUCA8R#LmPN.3g" ߆&r O$cr EJsy/z4>lRP vŲޭ[!,*EF!WBbR~]A7:IX; uDڒ WrCL/c`fphfq׫.+5dy+?JNGdL?\(N %?yRSkiDqe'셿3:U$tz'y7+ .IM^7{sL $/p& U=YP8ęMvz9j2lT Z_j^xton. -tj2|ڀt5 <SJڏ֯Uq<4.ߣztXV;Ӻ2e0>hs&3G'/G)/hB^1=pu{P2@m,͗3'oJ4WJ)rzLJw]STLaaɤ9vMAW0tl^yc`xx ڮY*L?,s \hw޽sDZ4)-H1wWkztzpXh99fO)ՎCv&+g.XMo'3.Y'>;SZJqxM:|+rj=dΨ:Ďbw^_x:dX\+Dx+뵉Z ^$2N;3l<j`/(5~bUs3x|Vn ضe1{ pgK"dv>;7̂D ?%P}f1.I:L*eGK+BݨTLo2N] a*[)@,HB!cU!@Dmb*C! :Qt~Yc/ y %ײߏ%CUr~cUvClfϔYfz`krTxAR9L7Q!pn#AƁCgOf7*.r8R` mX j/8!p\vS79)҇/w6uBmA8=CGD!h-[.]m8]7iϴ'$I&NVI Ur+P N+vh+rjgģz}t~=2<{/g#ŧUVeH,-Ln}QõJ XsqEϗoj w֓Z 6\ɶdNX/"@+G厁DLhS1W\F+҄-ʅ &7d jNdd*=Fo rv:+Q}[&Rlu+RNg,ArRCD^LC GI`{r^%_'ck3דx^cQ2HS|} f3ry%t @fő Xd3B֯z+dk.]+KlY-Kq\cuXP BژkU:PA.1-2Ѥ~?W ZrdZi ?U = ܽfЕƪ3dN5鑏FFr '|p?^׃e~Ġ$ƛGl4eH&ąIms Y04MR;W2=\Kݖ4N?'̃o U1u#u=L] x1 9;pw$-ꌆ?WV#n^ꯣ?|CՉJ aGQ0"!'i#sF#|87.&(܌gi;_k L?yal ")-QO -QFwIZ!ƫ,41emH!.T8)1hwx)<ԖѺUbt;rdӀgm+r\?y 3xh4_eI"od Gp],0jġ!a:?c񎬤%ecFPG99<~+>΀-ݠ"dI<*-YjW }+ eW-]K陫LJtVy ͅac[TEB M8r_nKK+&?)ڊT҃Cs,CJ ڐdڈhEQ;@Ts6l> sڑ:$03R sၡVF)ԅ7SZG[IenLW&6wɨĖ>\6g™)~uMegd U'@WqnV; d<1|ܨ~}ky,W0~JsHL+g/8ZvHsw.:4F|+Q\b8h#>(y>g?S͸aKI/q$ԑgzޏxgVK Z,#[Ĺrɫkl}e 6yуV¸RWc\~[.Q]^1O_O=1?KC6enڏ檥rY!p@la|ODSD1%Xca#iVB` mH I 8 D!ᕔ= @M>~AΨk5Bt$e亅< 7x H aRЦY6@Hgo>v`”әiа>َ+U ^~Nrgla t#$oBuJ.#*v\k 7;96՛.9iఱ@=+ y0@M ]>eS{K b=;o˸eyVeLoٹn Xv4\]fvZ޵/&7]0&RANY~Z巭(VW\7!7>Wٶl";`n#<"G]uhF[5f6 މʦ(X8-KGiKr_GϢ"ggvDv?V|f;9Ǥ:.v=-mA,5ad$ܫS7t9-vs%vqr&ڳt!X k33Ww3W{R4I)ƒvICě¥Y);ءl>BӒ2uM2VME ^QU /%]xMfC%9τX:B u !63'`^9dN2&: 7!#IE0VLͣN8v_utxx_bačP"xb>#E_5]So&NQ(Hy>,+$o9t<9(` ]]Z:*LP(]e=йmauTYgB9k&mVG!"k&Ҏp"˕8%U(XS;@zjO' RTʺhPɋ%Nmlټ<g9OS4 AO(eC&x;HU$_yEpdC4pzx9O)@H )Fwoϰ #yj>Z8|1]-3*;9I㞆8 .F1}/,MՊo/I3s(7 ҘB~r{Yoػ"(yvC$l.j 6ZodRA3t]{Sz<ȕvlxLO %p9q=<܆J& :m& Oӌ4zu/sM XӲr mOkJR8"I[zd$!큍}[638{ 0a Ю |3aevnMc ` \¯*M ۽h!`'0.gbRc$Uv!E\=xOMzwY!."3ipʇ1-6SEP7QCRRXQ# bt T>: EEs)̒.md:.y_cÌp$Go8kש`*Cj 8ЌɋKbLVO2̾ҭTwr\:G P})輼(W߬mA 5XEt!MBt av$fO"x/K0s ](j5-Tem{\.ʆƴ!UpG*]j"gz3&u-hd(/>Qj#ؾ{SpjX=xɛf"s첾 ՜Nb)} X-"k ]j+:~#?CN$Η3opm'BVz dsKC=U-vDG"A'7G5C81-^"RaY[䅑r€n#$z;M*AIi8R,b ~}D*0f[~孋胮Zel ?Mt]AUD*~ǩ@^nxdćT3V*LJ.A25q?(S) yc'8Q CiNw`1P|x^R 6yAas8|0K Db >F %+I(0Ec-;cʅ)G*;_d`LՁq*)Ӓs幑$I7]% O`]t @waiPNf:ZlC`D[uz$ɫ~.5OXʠl~|ߒfJ  %Qi.+Yϲ\$ݱp7\-<})YQ|+NtÂ0c âlz&ߒ|%G7l 蒰#M"! <ۻN2D!ZGΔ`G=qT-HISc9~mHJfqť7/hzSnQ;7'2u~B}%@0=u:Xផ,!D6;&hv<Ӡ0n.NcjNGߛ}5G> -CjF7U&Z9SIŽK]tutم q;F8G.}% e ^w?p&[0Eßez*~sF),ӄY3ɯ4S%Kob +ym/:"_( bB0^cٳVdpT'yb"].y[ǜY6X;15C$pT239^J% sl݂6X܆_bUĸT}$'ێi'\ 71o`lW{?5l}xk{J^h+ Mx>bd> &ʶD U6iBuU^ ڭ7:?AMb̴ R16-3Y,TsaeR1#k]E78{`l*L 6zk4Wo5#7r(Ԅ5`:Yۯ1B\ZMn|Pwڴ][) 8:r+W~SW) $ f@$^j7xk8`Mb!@$ aeYeRaCb 6?Ul\)jW\* !FF}DWn" 2=} |Wfv$-?EE|V|@-wlh ِ] "N)B 7E#}a4&u%+׳X9c436d2͚[ƭ9I_]+2h3nAPg҂Zv=6Iİ*HC+ )P}!˦>vC9pPl?91E/_iLSBbH K_ >ׇ*n |_9π LuN=c&U㒨Xh |'Bqx/[:7t!QC@LG/ssݛ8Ӿe;((O]~ÉE#&6yt5TSqv9*ql-9boϽ)3!6]_p-+׮6t֔W8O~&EOl˥z&#(&#gHԡ5QS1\LUӨХ]5(iIşK ['#d' >a=YH8ld{aKx _E*t&Fm t.c2򈎽ƫls9&IӪ f-R1%JSyk{ j ]߮fhQ.:[F @J .ikbV 5L%3l"Ҳwx t-T}g^l09l5Q]l$TGN()j1! bLKvDD6G]폸 )GʗtA·]!ZIAcIՏSߤqPNňڝ7d%у82n86*$m"(W 2ݔ>M.`788CWgA܌H,"~9+gbd].TQ\;ȦfGJz- GQ;S wKGZ#BC2: Q[E`# V]^CW ^܇17XJ.h*[74gB>G9)kӁcb` o$X!ٷApTh2sʅ\Si, v $gf/GN2~^`%gmg:eNi FTjʃ쁉B˿z޲ĵrׁRӗeK+=mc`Z8.1ݛšI ?,rf -+`ߞUk#gxaKVଠ,Q3MJNuMbg?7Fq#^* Ô+2(ٖs{?>,N3wZ6OŘ)3/šDQφ.v@7酗@Z HlڛtG^=}!AF))h_?JH裁<‚ISZ7̘ V&z= \b7g(`g˪\ksZel-'2hKAŹ-RGow{u32tM} 0WфCbKq5-/x `z^']Nnzر\uz1lʴIARl"Gs0I2Xz@v , (6 oٰIK6a k^92ǛmDUY/0Ap57Xԓ.T.R:ijgѠ#<,W[Bx7,g1t.+s}@Hvߔ*IxV2}7M 4R=VΨYe=_lU-:p l%p1Q>R0zWҨ@KWT eN (j~]@d,ds-fOK8٫_@lP77BM<>(2Ÿ*uzF`j`tveU^)ռy|O c*7,QhǨ}Ku $ 5*a[CFj$3I;lAF ڬwQ`z7{CD9><+~;%([)瞑 d lZ84[As~ z~v753 !=gSy`fӉ\/6j.wm՝^'º%Zv=5p\VncY.θy#d}'|:$;-m KrWHQLLar6Lj9}>"%1%l(m!d]. -yso2:wppT|@Ș oCUnAfFH^L]dtMx2B83Yj!ǒBTR~Eaèo-3]#Z[l~bYҹ0}r|-jd7D/7D6ok$CX taJ%|ӣG'A ^6Ni S]ex22RW}qV)'Ќ?oK>i*1*FP*Z:H/)ю6kF[?dhଃz>tNц̕ 8J%Zw']Qؒ'H즖8nLqMiX'UrB,S*xv Co7Ka&wjbVV,')WA|~io BC(vt1A웬kLsV3-] i^ خ,dìkĐYu!fw*yCs݌6ҸKJySn'A:BwQF \gD2 fHEW/ƟHv3+&("n|BةװH`%wF˜5ٮ0Ͳq"هdZ(>L~:Ga& f)vE&gmaƲ\X5F;ȸ)qUcO%SwT5ˠ!.ed1T#{)CilJb,E\e&uUxN_VE "_ŭ1C#ұqniQ~dgEI{,GFn:zTZLe\VdJ%/rVi%˕VL8̫P$§ ',JqO:/c{FBb_s"r\ni4[5G ,[ْaB oz{{\d5Dco)Бv1%jM/zRXF{ rs. %O>H`P_sX6PԬ q<C: ŊТVC0otUi֭@!zC{~5|pD1|*JPSݿ(wFR,w |#!%zuF*ĊPsz~J6.h}5wR+]+=|+!m7@`6NGpT*pm6i2 :@DX^L:UXSϥay_a\v POISk aQpZC+*{E+-Y{>;nCsv+r $zaG=! +BpͿvx37cO;e3jL{ⲲxLDۿc-5ѝU ߎQj(-P_U gTxSWoȕMh,?TtmE(!Ŗqkc2ྫྷ=䁬=h`hCsړ5a7-K"{ڬ;elQt? d2| \K[+*sK Ud*xI΅BnH% +%a*󳓈3 9^!mQtAd׌6&qFuo%Ed0{=] {6E'>“cNL1iI&ls8a#a‰^A`Hh'pZXe֥-BgmHnB'К%?`UGJϟyU-9c P $=NHގ{?$Lm@NBj 赤iiK6Sjr>"İtx/ ,`Z 6(̐iH~xoɯ*ʗ$JS8/ޒ&.u# @FbhמV$71h],ig#p`w4V = ,_Kd<4q+^TߌêntQ2ג(hWܯ? ſC_ }>H?iwvvw(}k(XziW_|JFh<䚜FDYU(9JB7p[soa:ힴ?@wSMgj$ !INj`F~) &KV6! &0rh{cb7|$)X֍ױNy" 59W \H f_ 05E,]1sL/hS|%c%sMCQ!TtX5j?:Scޤu,Cx>ƯayGo v9Dv'uP댖 N.Ud'gpB-$ZM;UQ! bN̊5bcu|S2OH-{~PB,vG/K[8Fづͽq_-lw0L5巯K(8pW}BnU4<%y ki+lmKIu¸;?`#%@ĝԓ-&ԸJƲs3kq\Zu)"4] m}R-rA˚^rڲ?Gҧ# r2 Å}~y˸J.)f,Q=cM>brdCa`Ecj@UQ*lZ//MGITǒ:Om&׶]ͭQ$ǀn8/xlM+L)F0%1L-_Qꦉ҂U+DE?WB_\h8SF,m?PJc=aSoc`j,møIštFa*ρ+|,_paOՀ]c\nЯ_|^iȀΡlVHB,Xs%aˇAV @ƨp3e#hm?$YӹY%޳ПcBy|LdRlMUM/&i |8:-ocRwl驍p1~mCv>W''ltր^F:@`aծE6<[: jfվ6X w3xAsj!2vj*7B!.kuęT*"+#+xĔ|jcms qzoNbvw]KmE730o8̫ǣMBA݄Ү1'u_Qꕆ([ڂqq­Dep$Y?J"9K;5Fv) ?E29-,\F9=5V 33^W`dQ*hP"H9sRYAg{"O3$S׉5 m }ٟԶ^6s"4 Mƨ@7r hr`&L,yPI>ЊM 6blnϡzX5f0KT^`F!.g MU_\+l0)|B5*Dp\ƀhoJ<4n>d XeFg7,LAP I\5JnDS ,2`H%cpBbt(`"HZ,ZQUm]ذKXoZ,i57ߢc [#6~0Ǖ9K=2>CԡLRV:h00| ٱj}{| *U"uu(X%Ba׊ȶ5x՞c#g͐b."UOod$1PiYKS54)82LS&y``b}KUSC<Z>Wm(Dk [!Xvخ>-u&|+N3pD]/VLԂӵ~xO[.% .fk.sћr4e"Q6gIEњd0=r[OQ7_e3Qw# % e y[tLcAM"uir|rSc{Ӯяz^,˗`$p(OӚQS擶skM U7 WB=NǨp)!Gi?N 5HK Y}h=&XnXXwӇ ޸Ht~yRh=.ʮc%Pg, 8\(a9v{֓m*[cl:ݞ;X{ep"OEh˱}e HZx4j{De^oF%J%`UӮ{B\j@\)$;%ћa"\[Jq-=d mu$S1W+R fٯ;kY^&ri#7t)laAP#Kz3fWL}/+ss)WG|/|1 w/sMk%cw!4箶eü 1,O%+KP9&@ikm-h>RD%?|l>I%L==:4VCǹ, &;G2->r%֨rwpY#3G [6bْc{7wz:;FSuMH|ta5Tv_:EuDqQ,mN<zWƤ)ے~ZHMK=zqsgnfi9xJI)c!<`um*$gobD/p5KL50qkߨNI{#B>(\/o}ϛMz\r [ʿL QHTLɨ7.<ݢ!`TY"ML*'@eև{0F!_JꊡME_vd|Z'H({`lci!j4'R x1La(f3 /"t3R ;)〔f:&J pu⽙iqN{&noF9&3?f%d=o] -3/#r?KC!*%.&1Q!x/0 Ke5(᣿?!کuy+m{qX,i"Dwl'#ENdVLoR?5ą;u8ٙ4(E_U$[s p z`Oeo#8x0@?읢BSiUe$-tTcWEшR(*&L$h,F4>$1>z`-c8؏φK9R Ësv5./B7nqE A"I˂<<\Gj0,^ad5jㄭK,͵EV6 ChݥT7Pg/PH{ vHiBSQ4nvh*oWA0i;&*p4FPV29FީKNJSsa>Ta6`,@{w_\ jA.DǪ RNvi)[5VqMSʔGIF\O*q6S~jCL gT"^'= PP5"5=%_'2 MfFfy9{޹+!:m˾EX70e>4inXb$~Zz;}\=qEYEdw89JTaz(m[.u XE E50S%k +X2ڻ Qt\£[iÇ &=ųG%sm?7+6!7Pc&{r/ZD d;Rg(uW 98Aנ_Z/KgO$}bNVE sёYzd*Ris#bU’R?lod>>b OetADҩg6>`' ևT$X 'kޗ=_ \p%kcərr9Z1Iti{L,?a2~b#aƋ,B"$`c>z态{iIJyhƏ91}}@!jU-W{Tz6W$keR}HI d P"iߩ z]$'_YOnOtY3`mJvc0WpK Z4-es}>+&A?:#\qGLb( &^RU @iF,[1G߶MҍED%*ۊZƹe %T(5<,2yQa/S|ݯ1EPA}(hi%qA,3iaeqC«a/3'#;ULq'jp{ ܿ~. s-*:lzhw?K%7D*gp-7HLs4 FrB5d4'0ޢ׮W;ۤbPUSrG x*p.{;KUJ;r:bo?u)- ϱoOaSҹ*yh!),O{+t'`#3Oe klQyvA3uh<~;_yL"C͟hP|#ӧ~L:#Pl cH9W)JBzpfy8ᅽ}kV=)NdZ_3," kcd_n?otdUJ$+dȣhb_Zї~}uٯȡF>XL¦(࿇a*$W(9fY 2IJ H?S_q7A _+SL};9l%7O &}rA`3Ƶ9rm ah@uwbf^;l&ExǙ'zV$Ă =i Ig$c*at1YW' UCLshw\ײU, # H5"$g8IB,|}%Zl 몮'{R|POI1ΨQC[3}EAwF='YPgy<½\b"YOHR*oAxB6eMIO,z?G+,Z?aL&§K ؘ5Q T7EMKLoURzNVxZ0 c"͊Me;M;Y *Y.5)ȡw#VnYo6uA Ֆ2:w%K:hlZg៹b &5}aӑef ޠQJPvϠ~}آfiByܓ!o\~#*PGHGj60#'/y$0^܈%eЅ͎T03Дܥ;8Zτx[ԦU3zoz%ɬ%#pԥӱI':E>GrK?lK5?k={jы,HĐR?ޫFsɛKDd4)3lJn1mWDeÄ?vWo@-\:i=vݧgE9" C"ݮ6CK&B5 g7Mށ]neFq{ے܊VvNV+37NZR JX1l ~ zQ},wZ ~vVĐclH<S5x,3I.Et{=faT& d-m:_{x{H ^(_/ C<Ǐ4z*;9_"Or'/Fai$k"cb 2}u@;qWk`Vڬ2t{Kfoo_( (G+1nؠ5s[zR{amZm6iiH=ҁK0 a5 ߷flQC2-h@zVf+z{X*Ԋ+ԁ+ $杇xǫfnwM޴S%ݬe"(m]\'7R_ FՕe}E6?idnCF釸k#FՑ]V +?$&w({V!2sS2Sg  AvYO1o#)s'L &\RUx)f}\/Uty/VNF9h4 ?'ä%nܥc~VCILGq| IDPYHF[>ME sWp3?dq֑<,kE2n.8ۅ_ħ\ 5jLs;[AZv15Fp7p>l\^/e0&ߛ 쥻nƧq6FaG^0p-~jS5[MjUQ ™>_E1gvD-Y\~ ԠL [-MGvڌޞq*~1QKN74# >)CXٗK|j 0R"ĤJGa~ޔQ1BΗL .PNՔfolWzSxe"@FJƹ h}oTФ nƚ~QUIuKE@鰵맄EY:Kj q4OwN!S$@%, >\;W%Y|p` 94e,2L٘@VhVOxl=_~fn8g0=ay7Zo X~}|vI<6Hn>KZ[̐%iu !xOH$KDPڊC;jI (Obq`]LPA/a$KB?-Xus5jZ D[$k;I41n ͫ 3`ZwFO"C`vYQ,<̶[J"F^.,ri$QMI!aԳ_|Eeak:̏Vv_rv!F@ȣ]zvd, )1ͬKŰig7]9?+8M6awIx~# ))En^)"َ'y`#gojQz2^UMBpv/% İc"/ C!,ӚtG֫ ӗ3vN- UΫ ¿ġ[j>q-ZfBDFԥ =YoɺA&)>lt4~.z)G '\o f"Y14Z-5$n7c۽)}\21ɩǨcU{P(owec>TdfArI.5?,pk0J=W:@ 5Թ#JkxZx6<ܲrbq)Ih*ahma%S2֠~;`-ݞ(SED8JhgJ7'j31|]鞽߼7ՑWLYP{X=ͅAQ0OhZAp9gj% Y'QL}l~C8cuף{^GgW=AC rk5F|C@zZF}b&DG/ ,n| (c3qw&l\}㾐$WA붼UY-fdo)U @YmN WZ@%E畃 a. *Ə6(lܾ;`QFTN.e{[n'_Rt8a]jnA} 4jVMGRΜy^zOUt+tdQOl~}bZw92"\;Ңq:oJq*gގM-#_W„wc(Bs]Pд X헖pz"i0 &᳽@gdy ~fyI-0${i4@siN֟ .7e#v묈K<hGFo;KF~&7H]eN Gx~/iyВbqNn:y}nbѡ[_HGrgQFCǣw@_ x6:`c{QT(o6^I` N"y26I/|:6rӢ}<[V߯ʕB搡{MI9AK%^IqVN]ˤIKC$Sif(|p'jSds\}_1*Y)D"dU|.m 7>787qM 0U]ԄEߟo-?Ƭ^S=/B.uH`}dބލu{n S^SV1&nD.OcRWgZa6BoCB hQ9֜1{a&\$Y|Y/Yx2Kʌu'ߕARzu?8mx:b]<|SgPDH+d6/\*l AOwhM5VՕGnկ6'==$ jN>-yM`Obg`JA<$kEC. e7CCZ/]yg:w2J(-{~GV "xf%%M AK(ڴ bY y=lXoU#= n!4:qpEY|_2t`,S#A]Db={w ,Q7ao/5p*oՆ|8[+w:'~"+X5(fa:(Z<͉#WLMu.l*QZ09E+DD#:AI0]xt,_N-- |_UVA]wDPV ImtZ/C[F] 7,$C߇Қ}{3Ҩ+B跜אw"@"g&wϷ,/cG[l]'aOR8wzHٟ7s8+ȻgE`d]/]+kJƣ-7mg%:R FXRyZϰ\=(Fׁ֮eu"- YZ6c yvNf? h4-@KԵ0ʆA^4q%pch*6ͩ|ėcW (ts? h)KA,J>+B9D1tId0Y=k^DBXpm0J3j&Z;KܘyueҵK xV?@Nh8ӊ!cLS~#aMLLuE8_+a hG󡆺hwYK :h${X1vJ!Y)mJ6-sKؠQ ٢Deu(ݡIl:# sb CUZt܄94(`ŎC%bAD>NäTȊN̖V7>f!ED Ng(g6<ܬt7nMlگ?t>Uo@,:U=mIyBJ8m׋6pfA_Tu@vd,oO1ċx( 5xYOa+ X[Rei H ;YdYYo@Xay`8ʨפcSXksVBanÙuJIB{ܾVMj,<÷Ze.c/cI9% Õc/D K&b>@ 6)~ɧ(5&SG+eEw>2sln]~1S9D*c fsAK!TO64oEn~zE\$/e7ͲP^ϡiR0 isLG )lqQWBڟ̐-;ut|[I@Vz $#$EŌa7di:wvȔלv~nYB3}C>I:6qX,jTk_V5z0$C0B.½A2+bkD$geb5f ~ױF3h5I̫3: )(mG"{purXLsC1[P~u撱Vo}#U;8VJ*HEHT?:݅ƀ5ԳO(lNh.n5ica`2lpV j#/=㠶#wO}jE)^G`989̈́oÄ%vu18Z.v?tmղ(U6NW6I|2N^věc=Lg 9ޒܺk6I H?G<|h &bnW>\muS}Ud)/jPyKF$͕o|숋Y!|+f[ a9!"/TPݸq!|&lNbPW)s.Gd(j($G(sISGeMx7G?zVf; [/IR( [xI.wdEȔj%= rHvڷhjm vt\Q_ v?W˱N9ڸ=ĉlEmm(9`l/u7 pi7E- B$!~]H*vwl}bs~J0#!V]wQtU~x>kHm)|N*rH/5Po|Qgr3Ee \108< d晟msa z:b-J#e~5K:x D(̴GID++8J&Q i掫٦AT9-@`Nخ.k<%"Tm\t<>#ۼ+Oh:,Gurҭ(eDzI0kt{q6 D=F;_g\+:r8y3;)'K@@SNB#lX2bzy 1MyU@zkbz=A *&񷭢3'&YiINk^A;z{41GS sSھp ڧ>+oJGҝZۡ$(~?,9FgRb-Ig 3oE۲0;hRoOMtÞT^+"LvQib۸Q gi8g>W o TM)KMd/.!D 3h¦,ݙm12dNvL@\0N81'!8W'}AS[ vWԚiP5BSYZDq<=)Q7W=h*sx3(R`|ϚP9CtYɷh޻Qļ '^p5k2sL3\ط^dKn;Ӳ@Q1i{('z:| ?u9lMCmt(Z (e(-T'eUw] I[|Id5M6Ak$$\Ӎ^2L˪Gm!]4sAzS_>WMuE?Zo@m|:-B-P|}/ >J!7v*Qj&Þ_x"F+xō܄4ȚR̂2Bt0Z <9jTĵh60tC)+_Ug[?.uҳ|Zxoӯ1Z兎L jP i0%(/q?At>֑(0f~n卌eYԩC-%DRPdQUD)z_x+TCFmѵ8Yj8EfX7'ז˯:|lhyRWԴ ,Of. o@'ع/qY.$hKa!=qRԠ%TC;Wzqڿ_n0yl‘aqjeA7K.rhR0]zh$ 32.^OTBR'>\e‹V"D ˬ-0Zb]ĔE|I'Ľo9tw1  Ց5U{!\DS–&Q2H@*Bneq ٰ+HC"ՠazAj:`{?P_L%So^*n`Z&"El >J|꾌FС'}>I42Æm2ҟ %d=je[D*TC,|4KY74!8kIP2"[;ƚTeARue0@q +*.z>M&5)D볆 Z=]U  0xv0x$ F#TB⡨&MV DTErQʀBv29%=_lRxX'k?mVEFpkwvE\GxJo|7*ZbBh;:&ƬKխϜY P/ܴ/= R{)8D. xudf _*ߔ-~XܴcB@I[P5IO{whL}WIŘ>z߂ T4{2 xI!qi9xϻPǸ,@ ,ބ,[swrhrEe.$6;? u[Hm.('̓"WZm9<_* ,gBͨc4~+")MEAF)+V۟T|8:J, QP 0E#Řvt1 <>!'I^=M]&noJ]jzxS͈UM[JaI[Ѐ[ʙ6kÑa0D0v.S)MK VJNr}|!_5p ӡ"ƦUtܖa&L;D{mWx&qYpͷQ#R#bp`{E=zdZڿ{spUF YeesoYd޴HDHjaF ](c}A1}tORG>CE! v@*z6)hj>WX-ZW/}G(ef;4ڞbCU#?d =@/; }8F$7졠vՍz^T> Xo O'/(G-T@5fZ e"z|XݕvFZi [se1B!^тqNeO >zoC#CqjG1WLBoF;Y7Yz5!_,;i+O͒-wY"'0L";aaV' HMug)VjX(v <jfb)ʢ5C[i=O ' _f@Ȃ0"QKy3v})AKj"0H[6q|HC"H~֭d=0٥ "mc7 6̛L zZ8㸝q{7;Ss(sD_M|{[Ge[ W`Kc82FKHLMuI`J%l4*k"Xg23 ~ nnws ß613.("2kί1rDB*ms `w4p϶tF=t;w#aJV-H~ uōV;,n'@w~ C"w!{z 0+cqxak֍lJ+.ˠ:ado/& =?0eZ.%%3]?4K旍`FN@`]7p^f^wes ߾d;jIMJ.0 m(3 Ok|P7E e/,a} zQ9GũF JH|(.[>O٪/PF*e4ܗ /f0tgv8`bF/sKj>R?vyfNW 8A7^[yLJ֜f%$)2zV"r_l ɍ.Kb8kwC(0y_FS;Vˢ !X:/_mWa,cdfE^.Xh - gNM/댝@Ǻ4QkI7P4ڨx|.'L  [~fJ[C/йF4Dt誂u|]1Rfyb`O>cD6Vr`Ldzчt y} =1v'Ki~PIxP|.Q P{h"C(Nv%zjJ,̳aʂk\C{PQ{YC Yrl~5<~ `z"=6 SxQˎ?컪d 35+$4?kLJ'@H4WHq8d+& ޫ\޵筁7zchmLbx8ϽegN$z~YnL5#2X8XmdH֍LZELIe˛ fC0N"#|{ZdjIQ~>*8P6,J5m7HRLKoGƎ^N~TdPn- S>zBLm/s@p92Hf6I9{^h;dKd VxAԊwfHq-BO=` WRD,JfP6cTfcۄ0Qej$ZEֻt!^wl"9_m%dҕ+i OY@v7FWxa\vLf9 P$䖎.PhXH`LsRDBl.Ӣ;hp b72vJ=}Q8ya$!PkzPcy5 <̊ =|lE~ȨlԊgWi6 Ĭ vCCR" 2 Z8*dQ*-Jx꒎)]ꆠЎZ(ko=Ȍ^Ƨ+SvdF]ӞdLI<>ϥXh@8y:xagpm$ . s)&X 81C\aէJ [ 2逯ǂɸ]9%C)3SLpS]lwqtU&EiVzzpl0[Q}pa+5и[eq""/k(o_S12Y%y7 {r# g73J!VdXT_}_ 'toFE.'r\uU1,o0ke2ln7It׊Ir>5EM雼{"XoECqUm-c뛙j)bY/GnS3tpIt6kESLDJVgP4LgD2*UBNd>:`_JPKƚ 3 DcŬPަ4O*~W% ͻ ;c; 8` <ءof!I/#"^v79$A (odEp7ApW(._UZ:,Mp<㝁Gcۅo7RS / y(.|.+S=@wHh1Zܑ{^x:iҊj/H ZԿrCB;6s|낰NI݇v ):%2tVi2##i.Da< I;v^OC;1IKDU5/}|C/ͭN1`2ZzrӼXXbhqFƱ.E<ҍ}Dimr*4'Rb]dtN&ј^؍xUȥN1yAa"zvW"Ab1țhDx{"]IXO>yq`6Q/&@A6ON.ȥ듸W~q;S->u񸁍^ 7IHf0ผJMDgOmQ2ܠW!xΫ v)qp# eEg@ҔrP>"Rx ,\J呲:rի`C2{6 G x Z!֭P͈ *,EVL(1Ʃ/Vݑw<}2yQ*!kq9UE__ EO5%TwL%%u27ϐ^㣹1~ieY[êDSYnY^ :*#Ef\ECA/)ƺ}2,ǷZÎ{ݘUcGu u%CW;}0J^: Dopp1.'SQK}cZ= ҁOhEJZ5 w2()Pryߴ*Ч[uwQh$PoMjmW>| <+yN*iFݵ](lZ+09HSyvTW(k(5=D'raKF&*w"1 M^YOrUPBއwx*7׺d,((yYMp%dLrRpP^VzLcd{عGBS6bRY^UNz%C[ MIj5qǂ7rT8DDm2{9.Er.WkaWE;Xb-\d5_iH|~I q?2eXxziЦD;z!7_4hMb)ѝ#dvTb9-kFy\uR4ZiLK{Kr`dW% Hp{ʍ 葾ƞlbY2ud8Eo_ҝ$ %Y%KbY@=@ Xb?e $l~x~}MGio~n8G!딻쎚g*(3~-o;:`aM)sHZnnqP0nHQrxZ:WTKL?%>95R"wiR @ ˳FO@k( 'JN)cbϜc}3[#։9){>J%FJgcSܗB|fJGY-ok[cRu4hF2&#؜yw>vo w6rNqU D ȑ%1t(vM;gyLn[ y7ij.fk[& &qG?YAT, OIٶtC/lK&x.)cx>]bD,0ؙ^&JdO/ ?=Mֹkօ޼e?cM(&Zlݚ%[SYj&VIx8_) <)V" M nx֞o'}cڪ;}neǦqLOj =2=w h }m`ZDIb\Ft'r> 1aM۸-6SRQkQFާhM8aeGX$Nk._~ CϤj,NpwI{3Yv@sGvLQ*?242?vNE;[\7|e![Eᔸlw< ~A)MgMGGnLԗ>ຊ$Iڗs C|Yi=T^ǦA',U؅7gN+-v= –ۏ(r '5vȩs༦kFE͛Vd|87wzt:+T.˙lk0w{m&S~&zXZ SZ<ȍ}OIr)AM(DG]Mܕvb<4(K䆱޽!G@}*fQW$Zxe)\͵`9;Uz )idF!240t9hpy'RdwYLj^ zQc֪n =~$;؆Qdjy]M8N3;d^v86' $`8>`̨-+OJH|\?@r(;g/H!E\dͺ\23gsv{5knTRj$〇ǤbkLJtab>_WY}Fs-@#QȽrP>'dc r+K*>gí {%_KE&:,p#Փm}#.ӧĕaiD~5%wF{OI5;dmosiѿV7s*ugQ^ƺYSd;WjB%5׊`=my&]i߫jT?UT?!.~NްhC%d,FpVPH2MQ6VS#킏Kf]6Q<>& HwdWس.B(W&"̱^B̗(JLS k&JmD^3n "9 5ey*_:s&M㌞2FI&1rSm[O ,h9izWo^$ LH$Qĉ.V@7v; I2j.<'._ݰ"P2 ;¸7M78d\_.0R <'){s|R>EkVAGIaY 8 g> o6m>^#I݊!#:\oh!Y2zuGvˈ| Ĕ0k]戒zrt({V&\!j˧d1 *dO%iE ZCEoZ{F{G2Kvʈ w]u\C„z&?@ W>4 t](7<3 {0xՕ<0w:NCeי k1pԼnRXϾ)Ή~5_yc'4M_)<0; 8-}>!ERUtެPw;ΰ~*mo 5`9y.~bn,ӹ7|aRRG093f{N;m{nFlK2?Q3 N +$%rU/ht7Z"FE߈vyeR÷~ 1"=˲{*mlF؋q;VT7$hPXMtp8p)ـ?|gw_yFׅ:,pjH.:S-5k+-AN =--9K&H{P20-&/4|p Cjvb%io u>k~S{GQòU7x@KF#ٶ?yB׮I_pCQ$(@n$UtTi9_w3@N[(`Ez^(zͯ<tJHlL8sM_.cHz0ˤ ꋬrUgt[w6\~,H8mIQ34Lq2&gymQmU34ſ nHf:kγȏ#BPԄ 0ݸ,.`0;2\"zJXFHh %ː)W)Yh(,`3*'ҙ~yGݶۿ] -An)q)wњvΜ[$9ZUI:c4RϤL%n%9C9jU. Qe+l*4"yX?( *dABH7Wvidr}2;‚]3 4H7NvO8RYډjsDũczo(%y)`ҵ^İhLL}*>4 g19q/h /<=Ca+FH^{_GgW6GfnrC ,G߾/}-0sqqylh4#6_+3zi'&YԢa̺UYۀ35YNvWg(dĶ=f{?hpx} ZXmeO8 ,:"'{C~ Z$9 KwbHA/Æ ACB<5uJ_mZ7ˣOtsLnjk]g޴U/ PTn_(u{B]ԕo+ ^ߣ\典J6|!_cwe~!عY23*jzl>a5)Y AXCc]=ğj+zIVˉ Etƴ==]S9/h\h+jC"u@ 9]/Zthľ WEo&|E '˲ -_,ċ!sMl!ERG3ΐg%l<@זn`.7WU)AbO)yqm[Vt$ÊԈ<ѐo`Ek o]`aI_LsS2K@c !J `GtF=ܮyQϼDTs0F8P| w5tӻL /pAwǺUWbpQπs\o ^~ "?̺$2T)%p[9Dד'+i_^,侗5.,ڷ-`Юb˒I4!CoR>|rx'1cO8@ϏnUC}Xc-j3o-p*B2潲7Vd-I1>7gAP$Wg* nϿʴsz6ʀnn' 58]v'Z@X=srb$ri3פ?(àh#hʼnDnK_4 Ht5m,ln{/G5 KJcX; bRPun689-4l05M4 "#IHh&ϽqA$` :L:Xw*H؁UZyŤqfOAGB`?F2 $q@Ḇ],',ߠ!69ȸ%h_+yF(Tdzʏ^vˣpp/ sŬyع)IP㺦-W:O'M aڕb Ǽi9xA>iiﴎR~*g鍭\1(|bf [fTgE]bMS3a]ED8'vS`hɻbY=eAK8IWALԅ!Mygf|HMҁ!4уt ڐD_tdJ ;p1^- Q;Ihe^J:bueUvWaMkEB"ȡ"h#.f{QEpi {`HH?)g4ИֿTOh% >D|S A[)~\]c4r&D9H1X?pj[C^tԀȢ Wf6Dv|~퓢grn8QJM`+@қtJݡtFg-XoylmR^ڻR`4+I1ag-a7wQ\9άѰu(JPsMفs+NeɼVtw{70r~WΠbCψoH7ESbMk9W "U=QL|T+}M!`QbPWB$:V*IGجj!ˆ DɋO `րlA ǥ i8lנz ;x5ɛΩjaR5ZZJҤwy 1l,XHV6TruKgV/G/s}?Dۅ`(8֤ I`xsT>r] PE )h0A6Dpsc\-!j-8dD975Toz;W8Z1}{ZېRW/iq|M=r:s0t.Jho}} - 2r QHjhG HS8P/[KRt=٪õYxeǽϠ`31z Fu8/̡;6]74Zql.:S,KYVu){S=Vk&q] LA=t ރ,YQfIڋeBۅp"&q][/Ee;Ѕjx 'KeEp+'aVZrL*J_?nݗ"܇zAdx8.igie=+#UרeyQzyɕ6<ӑJ+6e'&ΟefN ?ѐ}ҲvqS?;SdۮQm@}1Eң鶐D&3lΙvD dM8E t;yuq[E%]{湞7kP|El{2I?Jy2K]62ov:QNX/'8 5d$?t-~M`Yٽn ,4,eJ27_IsҬoX$Ӹۼ\hSFz@vK[=0M ~yVpJ=GNP"mb@"2W",AVz0*:CieѰs!tGG5T[,^}Vd/Dzz;ߢpG$\[a&?Upa.v]4)3Nf5?-)Lg'FabtK]|-Vl[Ƿ`!!Tp5Xu*Hٖ:ۢ=-.aOғ3ߺPi)/EYH*5=E#Fz1!'9Jjճ:iFLO_@L{]6~"jW~].&1 S축X G[-cn`|(儿ܒ=zcq 믯ڸ0ߌ;GvS茫,B ~dy0:_!xm;t GY] ,uܔ.ht) &#VSM,1ζPzV,d$FfB0)nɝmW>Sl9 QmSBs&M4CjǶKZvWK`y,4w)V|H[$VN$xr G)?1Z>dZ0~cz|Ofil,ZH_fV)3?ɸ@r&>/Y[-/(]y} ί(v8{~ =ۋ\ByiU=-xM;v7E YBrf':-(27 I#ѐl1ec'<X3svKin`l=Ir=`8.gRawHsƢ+(|<>4p^nphJWb:!4…ήO2(N6#)S# "%?18SK XRKmH%DlJB\\urn3_%!.[!kqGیo[zƑ`;/Au[GDD20ҋ R&hF޻T9/JO9#5(:lROb0OLliJd*q@bXhtpLa!^!i-[$1by1wM˾ n P'Ȕ!H:c5au3T1 Aԥ*Tpx}w `B>ϣt"u4l<]K+ \{s tqH$170v5f{Ξi@{ U@ˆt2ab7!_#aߩvpl6Tk`"IT HU%]nC].v92Qjq2;%:֤,O?g vH:8!e>B|?)q?MYE3*8 '~#{3&ے XH沊匔'=WX_S,@R?ĩpt# w#'"opa̐5;kO/:KX?7cbeRT[:IMD?0ȡX21|l- 9ɑwC]mkÝh9qKL=':Ojr,N<9@`jw/㻗=EAM\0Yu\}J#_5Mj>X-fjr D3nb%GBDc?b3轫;:uYaRo }e sCd 9;Q$b<-)I_rD j#oķtƳyP'ǐ=j5JCU[p@OlK,\| R9sWLR P2@Bv)؋;i퓻ޙ:1 uHibD>FOdiɛ!4m=|$PӦ- hXa[Z? K䟕Omz`W:P B"yzi|,30Tjˋ21 d21I.J>) I_A5 u]B-Z{ x6y!H@B }CnݧGIs+D?j\ %n-Cq w BIunmV4ž\waR|_*P9s}FT0i)/Pۋ3Oylf$;=>E-:xyRMAbRfd =C6R8IٙwX:,uQRÃƧX^*ZLI}n;\xOMCDcP6HHiw|S5*.@ońt?N\)CDgGuɍ|+n dEܬU' 9Xg!vҡq8tn U(4fߩ1#=[OD{[5~p% fEn3$#$ɖҠG`n@N0] hsXJ<"o ƻ7g{Q? aai(xkC.=¶`g]PÎoH/);AY{{#zG*Yv6ũnNnca%hAT_,/ "+m=&s8NbNf|nf8BYluWд`uB?-(Mc;BlhԬT9^%.Rh!`"+oHTF#ul5*MKDLLV)oIbk!VHzwlU vLtOu(Tup$B 0aaϟ܍v.NK$=/fۛ3uݙ |+E xuI]՛{hE<<0"xНʡV8Q ۱,W>e{|]*ڗDyE//ri<`Y^*H[Tױy_bNϩˑqnlL XKD&3]ru2 741sRY-(@F²7Ւ$, A82Ps[ }e W<>kR3-篚!?8zB0$e`ֻbQ p5R4o[ ?[-}Z=fz6Y$N޶R)gKj͕S&n)k9HBص&R΄e=kݎp_9gH*6u⤳Ut`F@ET [/yhӾaMX5+IpBÑ7 ({XwlBU ~ 6>'>mUu:Љ+s O0]k+_:vU-r|%,8?Atlhd ;*e`er<.v)HgfJD32iؙ@Qŭ.BԪ2%%G05 '*o1` q mՉ@-)]S$u3 fj4zODW>qSn׬Ue6v CuFAvӚ>6K܈(Ǯ|y9*Ed4JXe2XskN1S:c t><8g$g+qmԒ )q*!*m|_kps~bx+[-62?\\i姽U1pp =pofU@5<;ucfsjd},%oYS0C2b"_i3XV= {dvt zfC~'Lz tqMn&)١@^M|eK҉ej~Jܘzy[DRdR3XIx^Ԍ (nɼHӛ+gñ?.7p4G) &RC/JЫ4>E Pn1ͽ TDJxM\oz2Ya^<XgAL; #*f1`GqOĕ3brigtMmı 8z2{|n'Z`ՠވPxcȒiݿh33ɹlxeBۅo#zvls~?"j#1VCZdv'=uNϫh6FSָnS$fzaP$@C3'8tY)Hv,zY (^n PQeQdAY7gRr#e+NЅE|[ `ʞ!"gL~ i[\%{Έζ΍ӭ9F/2'L>XTI3=OMv½ ˁ} _ê Ǩ(cӌ A,ʪt;]hQ 6 eT9V 9$\{،/ѹ9[Ju Zt7pbS^ O*OÅҘɁ>Y 0-Hթ^A@:dbѓo  Y)HA:~?ps8hrV9]ະѭetQXw$3!f,nP" :꫅0 ە.^=WaBHg4o&ioQc^3u1d X_ S|n]=wAf4;-?5;r20s꼈$ݷ&r)ҧtS} ^:' O'ndr|8K|]j+\̀&ף{{Oj+P0E0oJ:Lu[k6ADGSR%>v*I]Nv?a_?׏Zd8xs08\~l;' `'/SR?xFDukk@O ^:C9{̭:MA}l8݉ 9]: uM 'jeWeny G6N&̌Z)?02 QhB{hߴgWͿk4d2n;}m}D^2w~D"hEmڕO~\hK3;Sѭ߅9y0%U3M <[, %V UF:}z`q@ [ QC4*p0{sZQ6v ,罓*S.u `OcVjmoO  CF<6#i#1cZD?,CSZ tJ{P}(; ZvJ/,-sHi{AvWׯYg.Psg;7;X|G/5RX/VHa V )ղu՜Z0CDlS9pOᕋ2$i&$2Bع9Xd=Y%A IoB"* ZDGVEIdGMjKe@ZhQ ܭ-b-O4TOޏkY-PZVu0Jx{,-zhx!o_Wف'@DڰB;nƋ<~V$8w,$k9 K!h%c;=-0?>t.#fN\a{V=烵Kuwh?ҙ,fy}H"}[ B9]`HH~94-G%(9nwVӷ4R ~97?y@s R2p+6g&vڠS|r} ZmFh$1-wԱIPYtBWQDD+궳~gEQW6Tf!^ m5gd c#XI"4 kfTÖ2|'d˲> RK{#-xt"rwճJnvt y(Fei-Pz (&msA?q[bz(ٮ U'ܤBc[|!4tR#4o@dV_gYscsbt*ഉ 5r6|VNS)Y/L,bqbs&@w\ML (2O zO-%nw4*Aٷrc熂m{r%쐖RZj I\=C2FU(Amadؕ3Bal94Ahވ"io#wsraM $3ud{;FKL+>Iɱ ""bC}t5^5LQ~ RC,,0y>qK]x 3m9vs7%,]2FɰH4־I<4De;=n)rkW='/"=ߒu%&< \俋as|rVZBS8YO VM%`ݙVgP ̵2#Ͻ^{9C_@/ @ W?hahMr-'>Ĭ8 _GPVyI,O@ 8|="=j5 5J ۿeq*W:R͉C1*~!$&f\ƚ-K9Í @mzJdGeWa=)1#ydIj"2j:C^=<= e DAVX=m!!4RFٱ5`k-n[c870t^'ҐvӨz|Fw;;!Q1S*m_+#6&6^\>ɥZ5eLޓ[ jC&oqZm &Nq4JT|m}8ӮabPFEΗ8w*5H+ "ȀkcqY p YY)&B]F\hR^5_؏VrZc$WB;w Rǯ՞us̓CőZm3M0GD%î%?)j?ͳ$"\tyT, #Hq蓷%ib2n^Q5 icUu^^̆ݨk]hzmiAt틆Ϛ%=TP V\σ'Y i廦\@?+yzoj&)T%_+"\W? -5әB4Mw$<͟C՛ANJZ5xio ho^w%?Љn,feh^ɮ~ߌLVcSF4R_9:hW?I.F꤆"Pq"}ZH~6Vz o7$O ^PE#d,v#oUM+sd| \?BTd粀y"WKp[4u( @L+M0C-{?l0!A]}9nM Ad:!܎ã 7*P9 G:c ߶Eo N ͍CpǵI80FySٜ2D;D@."uy4GV@QɸJY\hp0<KjvStۼݗPG:>-軃H8BK~`an} $8T: AU}'88F)fYWh{loGR飚Ow:{v}n02;6c6\=[R}TcB^R50bm.;d&m/Z}X* uQQG\ɝ @II͌"<#i9D{>^Jh,W) 58Ȇ+g"9,~mK&( 2a-CPτkܯ\OI圂+9]=-\8<>qק7cBXg W4Lڢc`Htd#[#S1NB5oܶ:bMKi%,' ':EYļcz%K?`{}iY$[@eI`]_LuJn$ġS$X{ӨW] 7 +L9j;U:n4Ӣ?_BH[Kԑj(Qcy*2dBVٝƋʂ1r2ݒ[DkqNW}vt/^lQ }eWs%y5UD]#2Ǡ0^kطJ޷?+qN dGے9Mx@Wt0~'m栨6끹+b?t-5럐)5bN|cyG{j_7y"mä!{3J*j82o#dvu!gռ-ԀE^98Wæ@3+E씸pI^T!d͠'G ؁5LxFպ̠mp# [ߴrS]8[[GǬ M'_ɤT'"(ۄ)%e \&湜&9[KpOD9l+nr^;ZL11ה}hf>Mŋ`'8.k̴<·+R5P23Z߳[UX#K$._G.o 3.$dR}mtR.b=/ vpuz[VQEz`% }Vr#D, ËYOing65XirnIÛa$Ml0@c p/lMs'>BL%CҀ6wB2`CwZo:,2'?F*Ú$\-i'mZh#ѰkQ"*f+4?2$n|Bbȣ(&-J->-׋+Re|d@Bc#*$ k#+KP3nf<*'ASǽ5JD+/(!%`sMZߵqS U{M3Pdt\;ak-AsAaWvpkz,;jVP F;`Bc"Gm؅:?_S 1y菊ैvVxieDms pb}w08 ^Wxn*g\(S>;RUfa5}KZxC|d tv >afq~ PSC둩rGD7iL\t~fEyDg=fVo$}lYcd[+"^a__ M:ů$/~g5k (A7rOGǥhQ8|ǦW!sb,V7HzB"9ZbRlǀ\{c4$7ES5%|18Zx>ҩ3H%]t~>LB٭H4^JzE20İ|T2NO#,鯡1.@';?a<%CȌ $G=SJROH9ٔu/@R%s N@x/\w}'"p*4ABYkj=E#5އ!:a߲'|cen(kME +.OL!e :odtś?MDo7 ,37$$ss0=+J"̂b/i/}F^g5=YL2+> {g qӌJko}X%2 ,8x9RqDTƻaǸch/DQmV B򃚊V++V:^3(@YOU[9"a[ªkkHEni~u8u9y7JDҒSD)Hg뾊)I|IdB6 S.?o LF[ʺO3Qd>W·P47 7+=)5e?Y m^.I $B.P*=^6}œZ n0g}|`ّUJzЕN݌En|Vg%gAr~3؋H((wqyZ9{"*}ZP˂( ƍb . fFhF+-zvQyC&- h(E凉*@i^q>Xg2t:CTnj_R!OB'GgW Ư==M? {to9͑_E{'0q)xH~]W/HH|tǷ|TY.ߴXV^h} |"Le= Tv{C; _[A4ThjM_9kq{5D7П|O*\u痒r,40 AԎC/hYύ6Nw%POv4D6n7jpt]dXKԹ+CةX"I_#o$2TIS]4Sἐ*I\P>4%J='a;L\r:#W{" `Pr|<n=j;e#DO#~$#oe5{g=&4(yE=cyrۥH?3? EqA儋ָ(o3TI͝VZ ZߏODk%誧4*fx:ʮ;cvu;&CcmXgZ\s&:8uP 6\Olp`G\xOu\0,Bd&-^Lmp Y,F+C&gVz 2?<' ӺkP,`ɂc.a KtuR:\wֳy)eI@<#e3 rb +ѡx.+nE7zgLi:c-Q["~54Ot>N \Kk50*Qvad Cub7W> X(=tڭw BC{Ofg 4$* X% bG`b9;8}ꇣ;!X| *>drN]R:iJْ&#Bz24v_C4 2"D`,9ej@z}W&Rad}q5^LUH;O8QCv9g- b*{"^7tY=SѬ l#VlT@5b[H&@IH͈Qޣ7ϚAgr3WH!k^j C1/!6Ğ&'T2KCr&FiC[*- ϕ9Iҝ >ߎsj ,f&ƞ^X͉GsgfNY+S0EB8.FeUKlA7nN{/ O8Zg~v CE1İ, {g{ep -{x*Vnކsmzx]WSawNGUU&a)dB4D$E^͇)u\{z'w^Ty}EY+Ar?!uk& WRx)Aj"^le`@aV)lh6xL'x@Tdg4pĝ,Ԓhc- j^`ttI~rX'|(9{a45[|#b}=v"8>]k-Bq5~_3z܊2 ax:f.=+=Tʦ'9mL PR<ЄdbuP\JJTK \5P}&b[56,;,{CsFVzÜV 30C ac{O7DLcSVšM2:5*r;J{!ie)qgEr$*r=8dȟ ꩓:hCMHPi"DŽgY?eLC II>w NeG`/4K/#;-i(FA NSkPG1m)O`DKߜ0k#7=:<62nXڎ[i$kgm\P@ho[ m@JSY 'X KF26JՏ ,ǸД(y-BMZmhc~<\8~KL͌H90 ٸmymChkځ\QKpMCL+o9onwZO!lP-<^ן8]K%tpfRօmtћHJ A^VIn| g,!Ii9F5ܛdyV$ʲD ̻ADzU^A4\75L{He <\Ig (b8O/uA6P䴫,.إr%CNaUyD}aܩ4,)1c> HAXZ(-Qa0A3菶痦8&:UeؕFFo%ĹLlx$%kmuJMkm=g~-*]CS9"j2ӛ ͷ'`gl !,ȢuN&0LRq_%oߪ"Օ:EQj% F{'mBbgODS8EiRQA^TL 4dvgpPpGxaB 52u:)blnqf L5v9^dEUge àTj#BR^"{i Y$6N'8ѻ3/+2FtTQ z:dkpCr>WSLXC/VvN8bo,vuWcLӘ> G4.)4gghУ~'0;I_[YN"qz8d}E R疯/׮rX9-AvbsQ I %Җɤc_JQIޞ~]I#P %mk1bg XЏKR@3~p$PWqmQܝ".@tIA3l̉?fw7 ^xExsx7uJI72B;6|:źmL3|k_܃r/IZizf"T&gP'!r:<=)A:"X:GS8 $߾~UƛAai͝ QcSG\n=+7 ?\Wor"^L:%6. h*귣y~0pspg:tt(Œ)kn C0HE\9We=Ɂ4{bi=xD%j\=CNFF#C;9}[v4 +Sou_Kh4r?IcR![:r8 J.%΄c>8(\31#[n7f _dhۿXO@_nu/&v&%Z;8{g}*1 6)O)k[Q u9އ.LIlL_O B5]MȒK})1f@ܽ+!B>`3t)qw{Hͯy0֋;YNt+ q_W(~c!goc4kitݚP~eEkэUwNSbIݟ,8`Ϋ5W=Jסgg*pIiS_ƲJ6P0y78X50p>зM*؜ֱeARD97֛{0:]4w3 Py/ķІ7VC*P#9+NFj=I41d'+݀!~$((L"e*+8rJP݃@5!.gncxl%/l@wݺ#7pH%lNZrm:e @'_M܍aR˴O:yX2)(28'[?>=k}-Dbש04_5Li'L!|BgՠtDpeM\ֿ^u9dma!u//(Iz#!ғ/vb:ozJ"kt5K@If82D6xUXv,&G--kofZͯïĊU>rrՆ *2R+mC^Yo摉ܽ"B1!GSnUà#\(]|VYԠĦD7Ȉ~E!YP$"Pm J4R Jd]ui}zB-xmK0@U!'uƓ!ք#/ %Q7T'!L968 8dgT9j #ÇO^.?nxc1T`{؊VOGjYœ9tj76uqw=wXU.!pbAsE,v_:}a%84b29UGjiķ PyȯȡHåN֚`!r+7C'[M;@D3K c4+؊_OO\FkC4.1헝%qx皰?IQN@J8Qd' `l^Y QkӭZno%!SڼZ~Rc2-\d%UC0G?[YkCG ןȈ4$Rg'*z*=FeiF3_2{^^U*@Ύ`!K[W-5,lE }5z =!=<" QW붍Q|ox8_ 1iQY@lp`CmFW~?,q=mT Lu89AHak:Uc5:>MCK.:mn^7llZW$<,VPO ] j^_@ 2Brdy@$jւp`K G*NFȾ9{ E%v5k|iUq\Ҿ|?TnS0m5{0aS?]0J*F|<_瞈44/ێSB#`/4`|FԴl[=@ADzTlqNז6 RCymer-lb^՜{ӏ<)Q1vt"Wb0֤v5tB^9 4#RJWh0̝(*YU21Ý:,8Ԇ̭4吏WJkWCWp|B:^McfD>.@4 1KW- 9ͣ|e% _SfNӞ#bA6MXv]$Qm4/jK׼CODe&eF3-y5ȀDjS|2 0 H:V͏+9)RaB ;+fh6[S\zَ!l͌ *8Ѷ'YƢm)~zEHGk&Gd`7etm_~xjA7ońO^,jKҕEzܖ;@tiR`kǗ6H2zB3@{Q}O(A5u ŠpkdqI+lt}U 'Cu\]Cs߲6)_:y[鷴< JQba,["NڼlVh%L#5nJ0%?su%\>RldNBb@b-`1-3\m]YB@x:MۂJ=E3GM3 rL>~3^;kC,BJDŽdI9휥h p+}i1#;|XAB3cإsBv#`I4Hx&)ދB| GBDvèi%M@dB_+bݾU Q]o,L5~ uFg4xJG5SY񀋉iY ~` @)|sA(*|pd BeHǚs5<~dO\N!- ^n-O/V3ͅL m?j >$KL@̿>|3A[7kw!߅ӳ2aj* Q〥CB Ϡ-@CH{-c/rE w2uKKߋo,bLa"Bf h9ONeSF܉ N<IAʱÎ]%'3VFPKR4ZUl\)UN;%Hvx)+D闆e4QgjZ6dzfΨ1BrS/5ZCJθCLPܦܰǖ]ӨՔr٨zϼ +C]RSԗ2۴YPt X:mӼxKv):4?S+Ra6KĒ; uqC I٣)/Qݯ2izѨu?et[(SRЕvz-kr`p%/=/yOB] W*:}\.CSs3Em T{|rmh4t@=hr{gfRCǥS/s{G\9x338CQXDa$Q)I*\`ƖpPG~J^ii uD <67cT?jN>-XVogsͯ6ox ޣSsMWfKPǹ Gwf7sa 8oLj Qv-R'?=PV Iok% >^ )99+8ЀD"Nq 'KrбEĘfQdt(5.%'ae@,e323:f0J"ys1dkO .jN@yd?cӏ(Uqîuy_d p+Іn.!H5$?UY)-,̠fbseWl#BYDF4 tE'HP|G4kLglѽM i o+\x&*%#M_IKڮFIa$6PtS,%29_4k;(χN@76`0֯8CoL1aɴ0/ JGߗ{6G_-JiEw'GO$^}V pP ,oK/"+E2%ѽ 5XouY]UfMGXrϻ^V;\a OB}f٪xDLoN2}*sQ>8|/&c!'@*pM ]|Pma߶H|jFDA66&EB;ߘp_ O&8~`04ߘA)yLs:R1geޠ AgY Y`coBi$ m? C |5ϦO|h>0=5$W"@q<qq\h@|J~_ZGVLVzG 9â8"9PzKƵwۖArDG>f{K#x5 cfi)FT/}p g(ef`IsU0=GN[۽Ԣ Lmh%vz* m~&t>#`ꪸ ˳B/9j<"gYs,N&;wfho܇5'2iB[mr'K܂[Wwŀpw7O*):I0әsPZRG]&EG %]/1|M9f7K* Է[9LVףF\\t洸XNG~>[| 1BBYCj\te!?.qn?RWXc=RMwu:rߪr{6TP~ߧ_Fppό^gik>?S~`ZTVTל~ 2-؝o"LD6.(ї=v˴ ..E'y};|h?d<Jiُ onS{Œ)FAY`]R^4\`Ĵ0mL P]^ihUR)1!ٶA4iGt%jvHޖ$%w}f -T'S?& Je 1A 7a5ydԸ:NTq >e¹#'J JRx(~jXS.9l9Tډ ^{<5&ПVuj,v3eO4:XnH'yUQwJR?Úgoc/Vom F7xÅu@B"$q龇Ddp*$8_T;A^&Ɉs7XS`9#>A}n ш''c%\V;z(L?a *|䆮H a )ڳI[&Tuq!at&#C #tL 2EӿR+(N>lrxCm|,Z¾'4j ~A1Fcgޤk"?r8csnNA@dO,(OxQN{RՐߤO<L|dilx0r Mebj\O$~gYSbށ-mS.n""A BaT%M:uC^@m9jo*葢}BQy\;a$ 6v,B}juE Kz/6g̵Ȃe A"K鈳91k[o8d ώ2H.*E7Z6XX(}RB4O-c;$&X&3ӣ*@C2CD>:O3Rv .tE$'xco'3@ >ߝ'ߞ IXoao$h9G8Wzep/-;؛K UGLŬZ^a;>eFhP/k,\~bvXr&C/9E~-=uGK~g|>J;||t'*=H7 (3';9Puq㦳j]WU VNS,n E.o3+M q N.&)D3aLMVķDkēߥCh0{>]Azjҗ*1yXYf;Σ}(LjsJLL U)LٽJT8ĭ|6O ߕfbwiCwUGlKFl0[cM~KPhhg3zgQuP2I< edˣ*.87C բ}VBR{rtUWP5@5N3?kcr`2j0-{‹y2a<,GP]UJ_h\\}ǽCIk6+rX2%:ŧqpnGlb7:wav1l z%wCam9Q>yԄ(cҋ'(8cMd0h0 UNEjF=_EvH?}Ch>buOEzz7X]px˱چqxX9M67r_'Z <{ͧ@&e{W' ^YL3q6(S0E񸍯dTGp{,lI>SCnS_hA~k(Zi.mf ;R5?rQ˽Rrn`Tc.;А\nUb8㮞 kBlFG?du#]\V|n-ZvA\XgXE %">4ZA%epz *tYS<8opvhÓD#aiFH`Z&n3?STf` i)[n[KY ʣ_rX|)p-PԖ +ffCdI=#VL`t4g>Њٹ x5PA@Mнގ {Nj~0 ]E-n%w;yꟷ:bx1Y5$B=SQ9ƚHecUYİ|cmZxu/6&8 B\mg3'pvťxMnĨ+P~ ޶i^k;;)pknh.(26!Jt2 ZJp6#kF ?i^dɧzG0q5J BnL4JxQ9`Ta٬T0_7i# T*_éRi/+Wn[4Lb⧲t7 7ǢnC;]WB˾L/̋ f:hRC 3߀&ߑw3+L3EON%*&hb%o;:_&cW֪ HA ۙO`n(MUofCc)EЏ1{]cxۑ"Rs 3:47qj]wOJio'_Q""uxmWrMy Mvmɵ0/-qXA@[>nʜd1][&rběL,ZMs2`4?en@ L)f8|C*qxTrQ}(#LThUh<,#"|A\9ƯN*PcvTN'JV7J[M!r<095ބI'A<8`S`fڃwKL*^,e.#*'Ay8+o(źCINJƀEш!Hòkd %Ou^@Q,5 -]a8b>9fYO RWzd:IP;o. :!4迥.BTߗ+s5fUnA|l6LHRʼnl"'{1_,N<`;$G†fpHnBTD+`˱ԯţKI^sr㞑~XW` 3dOȋ &'ʫYJFi\8l(si/.ߩ%JOSn#pNf:6^a$@{3*:~C*,ںxL,e!|?` bnIlleH6P4>z[?KWUnbvax LHذl$UFޕ '3Rmn2vvTjCV9O`7%PU-U\4u 85>Ԃ=9~&@>&AjWU>tqdM`بwT5ƞE%mZՎ=d"iU,3o- L[u\%V]_)~j~ZaSNpCDy9AU/?#mDd"ܢq6vh\3U=%9Z #jK0\@C.c0Q]qh费:`jsg3rZWSƫ #m@1դ<ǃB'EB!8 b"Ϗ;K&$}" 3P}U=%'=M;Ad=_(495 r2C#r6ԹeVY1DGcFW"%P*1ɏ=7 s^`_ez\F<q*9mut47 7Y" S P `Uz[pp]x!o 8l$r ]Ύ'262"Q9;efh9)ɨ܎Z=cU>~ϛBqN .4 H]P#(&xNUA"\؂/zivcbQ( n6 R,F86:q5nrT2)\ j-74 ?pJ.Dwun O4%wjm*6Xu\'S.M8_uN=֝=W4 #(pAdoS>u F٭T |⬹e}jS[n|iC \WӁ5bܠm/*WHgLඋm}]H`-#@.3Գ߯nt>rW#i&[k}8nw{ QE< Jh6KJnʛ6#ZrN(FD&dJ=]My]FW6<\!/-DodAJsQWsO{kJ3*y?ߖ"#q!']tP]zRSX(]A#(sɳB27e3-Q=Np Ll'e#>x4dhInKXZֻa,A^{_Vg >+>}J"vڍ Pۊc?suM |.߽Z4|#fE6\N'?wշmDB, , 2#sj0[*B}oYvպMmPȗ6ڹ`?XOޱV }+틢LRH\ No;vz*rY^Nf{QtS&NwQq)93sǕ _[k} $K}$!iߑ\?n3n `2rLJȔ13S/`xg܇ǐ"+yؐ-Dovg^isǹߗ@D(ȥ tLr&t<5;t3]j;=K(3 ?)̴~`O  +'WA5as䏴\BUF'zm ?[sC1S_JD܅F60 MƦ^BzZaq[xrÕKD|$Pi j`@1eɅ*Q?@*)C:bjNlt&ms~zm gZhp"D7+$i/O,g~n/oȲ߁؄u:5. 0t, T6j J|';Zhػ(VEmX 4wo w@34ưtĎZS YC>N>,П($(ufH~q ǎO@3 }GR| Ñ$L1:?ZzDK@cQGm)mڙd1,;7^NS~Wf<  X{T3q#SZ<<@jNyDz֠xCa:UϥeHT2/]pSbyڒ*m~e[a0v5:Ѥ@b2~K#5oùPC3P g2TXQۑvאᄳ7[8+Ld"I#XIo̴($<~'HI~?cjdFb"Ǒ*| ,-0Y24IbрNB# D XGL4Nis'֔MV}]j)˖q$tWP3#8^W{@QFU!oxEZnjY~ \UmR#؋yДgUU3֯ӊg!6ʞ{1KKӓy\|a鎿z9;!r> lR_S݉1$Bnhpܭo^- 貚/hKm"SaFfJ(倰fe*ro=w >JhLҠ@)Æ PN}B}Ŏċ>@ ʂt?5V?2xj*q׽?6\ѴXKrڱoo u3l6ɁLOWLLQP!]PX v'&^FM \T* Q&`ز'tByNjD3U72 '_)!KKzȱ-`]JFa(\'4>B/joh YI9.͹T7-7F^$ZsզpNr<`[m@(Pz K(S` ;=G=p9% ۊH0 #XRÀThaUJm_qBw 0o_ C)G53J!+AjT;p!xgfwfhC4^Y͘.-'CP\7eIUmJ<kEnZ{FZ "a!0&v] Y8/Isñٸpx3ZB i*s[XY˽$LWb2B#^y5nP|RvB K/ Y≩2A.;oU"|k";S1 ~ډR+ F{N," eFF44.E8E}ʴD wN;DEV?HVvϑ$i#;c'e}hF@hd`^gLk xy\W6cg![GaGd"ItNHB <;%.=.p6l!ȓM.j|4 h*#a!~:UҌ7 ^;W#&e W7>kmvHPc#K5^ǵC nU}{9~dM_LAY3k\TpIx[PBN75uֻJ/i^lJlؚP˴{;{9C}VL5wkr4H}_#iͻSj֍Yܢ&f_Fmڬ3fH6t˜/.`=`yWJJD?n"Ɓ l Px WK9hN7`#=NS@HheѻG,>vhX [Q4#sky4wkq*޷StkBo5sޗ+wD_\~no1o<@2D>U3((BC|yԄ|-a߻ٷ>my,Eev+q/0LB(Ddj]Utc7{$|n5PSS 1xK ~Ҥ$PrxuZ_, 5ZDNZ:î6iª *ӛ߯ } J:ːV)`xQxtN&;fF \ު껯7IQkؘy6J *Q մO!qxkW6Z㾈ke+,Et 9ej*u2']駦NV'i]Yb5exSI_EJz3UpNK(< G?nyLaPӯoH<;7iU$(U=@*¯ /$_0#NqHΡlnf)*O8j CIlBL#b27vDy46 2Kk}$Jfc_l]Tne`)hWsv4m=\o{'N0)Tb}Z=2]\7^+>ڢ~k!۱Tb̓^ 3]Ery sѹ4!;6L}W[4dzZm<@*7 ehVvNJPƠxe/x՗TQ! pg\ y{5f<̝8#PT]A`ygiNA&7\jqO3Ҭ=f|k)8* Jl."`"K^`,"iJༀ5J`z+ ~ߙM//7cji(g,d̰|s_}ʅE񐄙Zl~)m=*aʸ!ѹssG>5чu<>2{B ɲJYy M Zźl DZb c(*bke (V5`^o;|z's. ։uƏE#J-@f& ֶݜiZ@,W)mqܮH# m2Azgy:gS\rrrmڛs5{qpp8C*l*;,aR]@o!+qsoqp̉Z;3{h >F_tSX(3Hم ۸2ÑCzŭگ(O JDF rBKgZCGJ5nE٧O:!_rc[Mةnn|52L/\K6BuM 6gc&"#ɹ!ܦN ں]PHb.Sj)<3lQ&g 8N(խ[GwUV/T)—Z=paC«!~//K by+>ДmưS?-d6ڢIKኧ ]斞1>y;K^TD0bikqXV/܆.EOV1leswkv`<[0w +2'Aؽjm?àz> 9p>2)A %OZ\,qz L9'KW۬a'ao|3# {/iȕr W{Xd7k%t>W@TQ4^nz13"}u㐜Kf4b\-5 ڶ|/ko_*"VyOՖ 7*|HDN>.+ w ߙB3=)jUT$~A7ÿoFEMFJK><+B|>-`Y et<Ĉ`_M~>`tLZr0DPH<2-Xb˛JW4j}YvS WƮ32Q#fyҊ`՛c߅H #biGVRS|ܗ]"[2 'Jo^Z*5͖+(l)4<_m흙ȩPWe$k/O^|H6 A8I0bt'̄lAF2bkŻjC1ndǏbUt\>ti3Ivu5'F8O5@A I]'X E@Aי?Km+ Eh/@Ѳj!S iF.>*3]XSZht੕{UW& GDT鵢-h;N>âHFȊ!C0HyV AzU 1ӞL}OtzSQy!Qz.bا}5WAf5~lu]@#`h_zw8˕ϻ&j 4T+ -d]@QHK?i,B͠L}\̂UR%mIohSIqbKb1 ':ChNh4^#b8Ie H{VƮ&Z7GЁˢ+gGh;Be μSFJct$TYc$J(+t|l֪愁"X=2>ZՖA!ѕȮx \^B0 Dܯʆnr . NJJWj}hYt,=deRn|Nĝ>pu <=iDQ=FǍ5YkL)G0I2j XvUX^L@0͠Ph]<=aE;C|ZHxa,lVxR"kCny΄m2 ஒ,؄I8'V쥠?#$ЬqFﺻ Q_1ue4۰8&/̳3) ~#Y_ 7üÓ~b]XVK`&*br;jJ<Tqκ Ykӭ&k"Ϛ)< Q>.8-Dw#? BC_h8:F| ^y%SkNn>]19%g-EpGvQee,H!煁Mc>~wZјvMMK/WL-Gi`EWP5[Q.v !IdmFA5W-|XB %NyR~m ?1륅5j&NLS X[ IY(k77YCrwFdo`QN1ctCz 0h4>1yrT^!,0:C}Þ D<ܐ6Py!c8Z9Van3aDsR0زS/X->aJ#Sڈx tց_>nɝA`ܪefGTzVFo8%$٠ӏsj%?ncOZqO.Yh V6A1[E8Gce"gOabL#QV!-"b Fln+ L,%ub[M'й H1r ˺jj_ Pv ڭS@&"԰"XCލݢvm0}?Ք ٨Y; -i8\`; 3*&sIl^Y-[|Xq|&. Q+uʩal~ 'a#Nyc/d4;}2+((G_wXi!8G lQ]v%«LG u/=lZ}!SiҦ~" uiS˶՛9G`S!Q5Ih<!"Gd@vy ,V?L|(B4,v )f{S,U0JR7 6&`5G_nh$!1%$Y5_CDb/䲸G^OY@;) o0>=ðǃ]>꧳T46k?ӗ7M%0uU@~O۵(=jd& n}t*mp_#Z!͆8 $"a<4/ʮCu} Eƞ(OPւY2vؤk`,09=K&鹲>g#y^Du%:ے6!WY@|rmIz󺇁6\/%q+o-Jr2 }IͲRHr3.#ٞqr/xvjCsQw/9eDN,s`+1+)ޏ9[uǴx>QL ɂ_TTe4H_ c$xEW)X`>O(GH%7\_9lj-]PCxW/r{=Ѐ4^$1Z1ݻT@뉊ʛ*__F]C%g@΁|jAuvެh2La1;a*ogkRJ1㍗鍾{sW ۺl:Byk*2>6k ҕ^=ۙ x%/Ew2_$1!͒ ZFoJ%DH&%n5L]r}f=2Ѿ̓^d1՛[»(0Xhĩ (4[ ~뚥o*O#jHu!ȿwºeo`"n8+8bjO;˗{u m,f_Xe^{*T4l3ԬG*vd !+Tl,ؗ磖aw!w _R z92^e) @+RcE{rt.P{H\`;ye 4L4jm _E ) _T+P[qC6l(Ru#pC[ 1G`^,!-2_ 8MXtx{ @R[!ogQB299As 6k~ %Mu =v6BnP5? ]kbq_Y%x9m.})Pz>ӛn¦.b(6mbLC'H ɝ}i5 MS&UD{>u&k_BwzEidhy̗~T%Ŋ!8'B@ @nƢvTe]>at)J.q[;un¶ =0w¶G@fG#]9,bc͂S>"r[T1 '֭ʛ=?Y7Mɉ .;+&K\^ cK;lE55ܦoDq-x 8 u?{q [JQjNq(J2.ckmM,H<'x,R*u? oaD/A00s~3mwٝ9oW|2Dmz3V~ZˏɋZ&yٔ%QN,rV큳/LL! ΁2~WMʟ` ǁ؋ jAD rݶ:>Z ^g& :(#T+j;M"4.I'IўUDV"/H"29לp>b5MnkpLǚ dy|~yyWROYfCK!Eg=5p+ ha*f7:>A*sՃ d&krX0(> W^k`켾C -[?6PkۗH!5V8ZuXC6THM1jZS 3CFZ.sRc9zwbϯlxZJ+/w1m$kCJ!E/+Mv* -b)V&ANXS^t m1ٰrRq<i= Q A׺hx*+zѣv^s;ϫzyZ`{Ok 1^weЃdW$]}Y ƻd~rn h;8V%?<Ǎ_]&bΆ>,UVIqr=3KZ,񷧝z[W"nG5խ#~Xȝ]ÂG.(C&ĺzDh3=贔G0  RcŢ~8]{kdYn p`FRCNO({7\bC1Ajez J;1>abhF]ĿG1a~lZ[=ĘR1wnł݌r@skp}= шs ;,L>4̎dW OpYp:v8jHbb>@b'c>7 ف/L8K_9#ڶHCx銽?$\* V̐|$wYqt$:? ϼ~'~t n5-=T;KD\/St1R UHG!DID?'A,6m҂`"ʸ}F|^Nj#[xO&҅j@brEݸ;! \MiwΛx0t tuqNj%oM4jFo/yˋY?ANccB0LeG?ɳOC622Ub TY4wl륾}m:0xR̀V(IƘ0a. h GԖ>*B`v᳠[ZoFy&2RkD-h勗 /41\&j!Þˤ0:-fB^~=WMشQ.$u'%q|pqvjۖCJv%"3jkk[7R398s~xH3~5PIriL ڭW.G]tm:xhwn& /gX/@C#}l>8EN5Cgr'95yB`s j 41b b{KA24 w]cyeu(_8XhB;#}U fI+_YYlQK+ f$䄇{Ѱ]뀶AgiY-ި*A.Q̨N U)رۻ6mQQ#J'2*+@v6Nb6B ic kT98(Q2,m!4ӌ "1_7УUZ-zikQ+)쑛y*7RN2Wx{ QΫaHS?X|/|w c9VbK-jNA .뱐 ^ciZ3o tŕj3)BT<Lpy=C-JQkk5B~h .U >Hfqh**S'Q9 ^to) !(w?Iw}Si2]0E $M}!z}3jQʩ? Y/h_=:Ij%o:JbݛE{az6,^Mz Y7چ8U2Q~ ŒT}`}#tEh)u# >Nǻ@PI0;tCEaʙP"D1( FfQ@1ݚN=HDM]h N;庶a/qؽ묢}R58%x O!}C}sCgn?!Zjb#IBdZ̢'3ZmxJdCniֺhj$ԮЛ "yw!l.OG|):_P6Qƕ ʺ9]j0p ʏF -R5aT[&%2\Ptٓ9ruE]s(ivr?(ߵgD^o$LץZD<*"ڹ#W,iWmyLBX.ZCnhB_o * o73+/vYIwnO" Zka{aC$(b"9H 8ɫЕBl| Xhu G6,_!Od`WD-&ׇSQZ^@L~+v2A?Dj0c Z,/k%WL@)fDJ5F6ژ2f[(1wO2/u}i %EIB;7=:ᦴ7&h|=yvZ3IG9?hҤ+^3m~%LUyS0H"W-WIiQgqہlzqiŧ?kc'd\ KyZq_n 3K3jKk3n8WYgj2ORUAR9̙"r-"pF& Pwh47JcWm|[2XAkgE^& trWkIA$ *>O/cUچzß6O/Ɋ0ؘ[TFIͮ46kV zj6sf 6oJ߮'T&*űw~n$ںk>ɳ}[-?2Bt8#f~AuL~,PқGZjv dKGOtH5^^"!u&4'dS~b5tzp}O9;.}z^ z @f?iF J>l ?&h6Lө7FPԤi '5XJyc=z;SrE,-ݝY9[J>Mxd]O :+S| nυ|*i*A5-׷ɰLB'zI&xMf:V|sO;NF-XW*qe8DɈ7,(?q"hc*5TX I7aini/򮵫 î(8M Rvg*DǜOZ}B0 g/u>/:b;cҎ#C]VD9JYX 0ٰIGVax0uto^EXtvS+"BHL.Zŏ,BZFȀ8h#jn(Y8.8O \*ka-c]R3MSU ˩ {xr@~?H!pk&`R nUm5|+']_| |,sq u7g4C<Ǣ٫%hγNM۔"|u`C56ׇYpqvOk)$w*i:aE!]nkTnʘAnQ7t]M3*M W3;=Pꛛ pO-{MHzٸnqw v:_Ѿ4"S#xEmJFZ$8CWWϑyPWrJ y@*+aps@w%l^ϹYfKz! ~}V/c"A{hRf{_V69Y-G&Jl/B'>frlXNE=B'>CB\ H -߃qm)³պmi2,B2uM? So;;Aet4yImg%d97F;1H=YSQ.`;Dup+;"f&0@Y>SxxKSAE%-86U)1A  'IUux2\ >~c1A>!f9DL!l{T+Ⱥ(c'Mx]0X)+BY zDjq;]F}缛VjOnJx4K=" Bqo$tڽWӻc 4Q[~~ ', )Eֺ&;^H7Ò~f%Ӊ=>!4F[˴yVT[2RN]=P#+DW^^|>iqJ别sÅ Jtm)u[|Ȃ95_\Jof$ݑ4z&7nDF;%g-gqiO2]s5Ɠ)֣4PcVTϜ m\[I5OuJfx.2[S{WA}hfaLI*:"̠ЭGde3ҡeNsMa u9owscu~ k%ltD@1v5~X6 Ǔc&0_rE>P9aJ/pT-Nˬ¥|T[U"ԋmS FgOXwO](3־wE@`m]0[hIiTU3?}CoQHwd&IA {oQ~sBQL?2WA߂;}Ho}_! >/6T9fA)a7å }f~4}L, %yiIx_# >\MX$TD,/ L̇j03Ug&bp*"ӧgv S<˛Ρ51/9kT/a|f^NUQƾ(g;%-~x=6&TC8Kg1vLp<Fn FJN^*Z HUaf3LͦF {l# ?,ϟn֯ANSu]e,3qw5T`y/C7#L˷ A4Cr ܎YҦGq,}69eTfB0e%slO iFrNti:f=Ř,3íf 9OpKsL1 ol~&koj.l}KҖJT<$<}îWXANȪFKcÁ>b n%%P)0.O ME0HZ"x"wU)UCdw* b}^7{(;=s]]so27$⼑G̷Iqn6&"oUw`ܙm*;1DeZ8Mv -|GN EDQď4dRrW_}lROk Q銇˿:tFJ]Fp4}8ד Ux3qho`sF \XGN,i.]|x,Rw09!AE:4)&$'4QkD&2U"&aD'!@Q4#G224}MKs!Y]^am~hsn fQ4Hxl.:㙉y'̱| ;2ͣEG{b ۨ'2ZSq-x|]#ĵJu#UOWk@HNu&;Gt?BT'ɓhȲ6!n@ҧmF6)FuvOKZGW*`Lፘ+ m JCm9@jZ{Ť56QV_5I~$I$ab'#%䌤p+m'؞#|`߸ɨ^imW8+'1HGaB(K1owoq}YzİflxP -~߂O bC7{.U)x/\7x+kMBDRȵ>rR(Wtln~{#s\~Ity5<*I~(pGINȳZJpFNa)lZT.}$ؙ6n46 YB`\tQϧ"~Jlx(n' pes^uU=iehOṇ\4i0уLX iMH{UKobwar-r_{^qIH QU=VBpw(e0-KMeR;ܙJ6 iܳL}Oj:v:nmj;9U4V3b/_@o~MeWsC`R LC8z'#=@շ|bRNo?Y}Hq*=S=`jvlqxbc$Xud0`zi5N(*}i4B#>[q6n:.$lC~'arT{m xv#"`:o<4P5( (k-j LpuOX0wM^EkF; $qq)$ tYNW/h?+kB|Fu-NC4,2܅$%mfz~6GwK1CE1h31EVЙ=;t:Uʐ&18%e.mmPuDޅdծ dˈdՉ)FFDX5mo彁ma{(e`^Fy\&GC;KgvCyl}VLjU`O0o =Jh|̗I$޵xlA47m o7߁D(*I:V0;a~N]1+BuE /Pe{0>Kr|,*m*s'Pn?Է8ʒ8Ɂ@@7E4ﻣWLJo3xdxm$C:ij4HNQ?&~oS@Z@ wͿڂ5봧FLq_%c)yX0&ޠ.}Ѧ,Qi,fCS:˞.hRߎ°w/dl(@_3݉Cg s @37'|{`m!MmSKK4\Kzd`(~HWXEQa'8?ճ{N@VBh6oB]qhFdizu9\I`emmZ?cx_t`W9|v|@'2bVGMSbEc J i SK 6YQC3qZdh *z "2 5 =0=|d ]o׃RR<:X"ylO Nr[d\`xch!F:7s[1 V)׹jNUnVf (8(4> dVs&7jtOQZh&c5--Yd7mq!%f&"^ wJj,ep@c] PTW1`cC@*zd; S\ SRcdWT}(#vw@66hj K(\%w+ B-0mը\]kS4).7>1FXhgȥIhkX0G3&%>cDn߄ZkUPYg_D@|3ANmdeo~BfoƜsi DsPrՏ>Й0_>I]eOzho2W qj:.Vajijl!L}V-"n {Ccla=w:(&!HZ`Yb#kߏʜA;zEvGW;qPEt5y)] )~%&N*"q|=mMqcDl+?hw6ܢ U[SLZ#nB>'Y.ok>G2_ފ@ZC|g3c)k4_ХpؑYnERK+:dv0|ϑ>E`! 6#yӋ_VNIVGKw>^b6:qq$aJLbRs΅A2ש LqUZ9;国BX/@~~~4%Ss#M^.Ԭ>dnqx]lxJ$ 5@5] X|FZ>CYAsŽBTZ!rWHFz#;j3C3H(7y5ɞ_I0<ᓚ׍8)oW5ۚ(aȫSvg;jy/r7XZ* &iM *MQ1W%n=A@13}Ua&@Z(\O_&EaK)ۆXTx(&̿&n,yWCfJ\@ha06Lem `mXb5?rN[wѝ;}N*B̾]`ȳ:e5 /1wl1m=n Axc( /LRv-$sي[I0N ǡ`(3 Wg3q>a}MLqO7C{#r u)4 oנr+%c(i&A-/E6ssL$Kp͑մJ} ZPשщUC+mgg][Mv *mG-c]}啡rT$Cz`24yz)UwUjr 4-I=**vgL ㍳WgcmW`*;kNyo:ͨiy\VH$1J pZJMQ$J^e|b~8~g[GB,E1=$n UZIs]EUY4K h MK-GD@yo/(RSAjF$#C+O9m_c-9ܿy $d}1G– *A5 $-#I~=FHg$Nyf'*$ura{oZ[c9}my_ʑ"Qz *4StЍbGtXq\1tm<&I=.ic,3Ӂrh]TTͨ j*^N AT#U[0WHRcwLa-"QpvfX>iPWg/ edu U-K!*":4`\?p :V=CgϫN X: i#U'@|A) lU$H ZTiHf&2^僺RXV2Gy[e(> $@"t>xj@H`% /ɩ*?Q֯H;jx~%޸A#܎55nliJßɵMD[!x.S Hbzibg_YJOĉ:(^"f WȂ)~=؛%BmLu)6IrFX9m(a(1nYv7ziyF[*OQ*LL% `l=2vkyAc|gTpk>$$[#Z=wNjgìxVzYBg4D'&zPs$;f ;"{`ixTGBTXX3rԗ-{9ϵ{dQڽ瑫di"+~֬ [0#6 "kF۟+.Gmɿ`UvӉ,{H/ZƔHm"̹59ߍOADAh#:b@FCM{`5; zY:}swR4ZTOrWEܿ) _>Z#}}&l 3؉@hg$|v'dB9vGc(@?bPĈj61HQ`tRz:=ݶЮal`VYi%$8ȄJI /̏b04ESUL}釒~$=vxOdn UqҢmx߁ y4a~' HMՏcb?mJ89JjD4XBsI.}z8C!QPH6Q\*v}<{x1)+WBT3?=U݆rυ7ͺq=Ee"G94 x{Zf7ʭ)!]ϯ y1n5/d o9Yla*B[+XApZ$jLĮ+WlL\om(:fUw r4f 䰦-᥮=5^ H.JY΅$Q=:ƴi̎^>J&ImW A?cvhǖsс;/2SS`୍@2#/J"%4 D6~AMьa_9';Uqe重bЫxh/(+xAЋ1t.&mq(hmDs+P}MPfiĀS `)K,xY)dQs0 qFg f >fe/p(oyR3tS巎i;-Y/ç<6B 1ٌ)9{Nc7m~B*Ba/ԙ%w]KXPeZGEaY@5@Rlk~OaU"% -CFF;0=8 @_8[ ;Z+xJBӅ1IshƠuٵ. 6OʑYGVC@YՀi$ io 6<9~a`qq<)>U l٪Q AW~A" |:Htn+lzK[&-U(f>p&0kVV7SdK$e  v?1'Ix۰m9~,ë#5FBMpϤA[sÙ'Ŷݑ( Fo0pPJEd0JK"!吙-1o?t>ٶOCB`YE@r.~C,vu;e0qL1*/?&MR'jD;L2R!)Z^%p$E.2!JhIE0Eߔ 74>,8-],C%+LI"/U4OfLLa`DA"N?]ubЇ~ aӚP%PL)R-gxlm"ať;ʦ 1Qn<"ѹXb(>l̥F+fZuY Rp2m|H2鷝ګ&"t{X 鯿h4|0'V8 ޗn,&KZ ;`9Oۢq94XEƥhʅsڟ=CYi]"%v Y\=;TJZ.'7Kip1Hvlo)sMzMߓs\)+f)B+Ljsֲ!TD7gY"[BRQLvpO B6^>(ϐyEj߭1͎Bk)Ak6(H5)g ,kR1L?19gɄ'h}?2iy:(ςfmTts}mi6/A g oI' vC: . y.RGVx6% [jHCQV:>79h 5g/:##7tx^Xixkqb;kj4eIv ~^O#u wQPkjvU+T8#]tf,Kŗ}zm`(65?!Z]VCah1LWZߪܶW#N갶&_x_ D-}-HOdwZtp 6$}Mu}"涵'ǟ`?WXۯ70aJ]@ $lG}Z bi"77\ u.ɒ0󇲱G(22U$$vH?bz^\yy\=Qs,ړExFޚc@e֡59E+^jis9=?$bPrВ!\ajI;7&, 2 kMBI:_6D:$A5]}@2 3ΩhO>bsOӋ|y#YKϕs{b?wAH tg3H9Ҵ+e"*# -tygtHz/J4F)K" h -u)R+zJ; uf.Ffc|lY ֑(k BgpLxS8˼qFx{a"ЬN\6W4z( ZOS5kfx䬿YƫbսZ\kSaEh/T q$^aeXxsNN6W>sn G Z,Be?72 d౨ m#t4Aoq~$@QVZ(؏鐸\4/ƲPTklPj`we#(،n|Ut$%n<ԭ^ l>Ah&(q0 y'ap %1^̄VJ%usῆs\8M=N3 W&|@oL]wdo{xCS]<\mg]=-X,i{5nȈdgxS'z^~-܇n_ 5LCcsw#EJv$Y2S G8G5lu=l#+kRM*PaT Hs!^늨|zB/}0%i đZN[@O ݥ-/@)@qJkݻA=]G?#t<Z Z'f&Ǝ u Nua7픜QHaaA Ν{E?06[: sf1aó<^ukX.0~z-!Vil.x\AU KU19¡o7_FKGFN~&s6u*GxT+=qwz52ɲ i!g5/}JDt,P5&Ef Tts3<6s9]GszM$eσv|*RjWvjTC 5E61GnxDBƿ2م4_F3/cWg'LEX8Fwb9A.fXh#rf#UI`e'+7AV[XX\" +2WR]۝Ɇ8c^yᮢU$rr_;OF2JB50p:Vq>-%1 n{*=O #cػ9߁9Li:IO7eP?y<,%6pb1/0ۗ񄴁7vinNd7Kv7.2:1$-S# @!+1}e; -5BG*oC-h 0عwN̆YOuGR!Y|:9̵#o:RjiC`=%)jˋ"u~itRue(&ca4k1mIp=~Cd^ȿ1h'Ƭ[M8s^dD_i2tcw!ۂ)όڛ*9dFw_f܃V#tf#[ty&i +@:OA {m[;K<}!Ow'1H?3fyƲw HXƉن3 o68˂!?TmY= ĘI y\ aJ2Zs;-0lT[V-ZF>s^ܾ3zBџ 6y\;mǤeH/T2P{pː3f4f-r: DCK.$`kE0W#2YFM^Ee7؈|y\d|jcÔ8nZ s:˸:UJjH Pg1@#/`98CS7F^0?Ε4}-$3@᠆^0/g)1$Ԅpg"ӎ7 =8%+I20[AϚv'ũ8̣YU$!<6:҃xkl<-Ea\n:ZQª!fpvgO!2Nǁ(1l(YQ[yCAi[avvzkO&e()t 'qO'jMꩾ}@U I~VVzYü.Lږ#lH@+v$yO%*UD@u(x:`J7o 2Hm!v*Yt@ X`)6;;vfŭ,`8%-dh5 +7*](^hW$2pr!>CyH}zlyr@d )nnS~9˗:g~,vz̷ nǾ^p{եAs2`I"#\m4H;e)фŵ]xh]X@w<apW{NHI:M:šYi\_q[ļϓb: 5/q?9LBnO=8s>;!H}yJ(AґGI, ,PX'+ZIȬ۬3gCO|r}MsW?l&Jmx 6iٗ~cwI-:{H81ʌ~\w(:ǶQ Aۄ@|Ӥ3P[YWl|kRYb@Wh'y۬"!|èDl~e +5QUb|∩_j#0ffRּ^k֐_3 dh?c5%`źaq "]e®Ę(&Iy2b-fEaG1@AXv֪e1<^);u yEWX㩴[K|r5Hޜ xF<8G,*g;lӖ Q .ܾAűYdV{&}5b+SmRjl4B.:1Ro0=S)V$wi"DNStq[{ :lEFZ5D;,0-ND#^N`=a$M_X"v rD6[>(Ge ⯦m0CZ {F}“ -2 .l~10OC]j9~1=ŠSʰ٫\v T,wֶּighgm;c[zoyKh-?XgE49'v53d@`fRN8;]EҙJ\o@=^R7\lr1t rrdG{ą|O0:pu[ +=:b1+W(Tq>.DО]W]9(]5B>' AL0fmRS0ycpbƄM=:  /7hɝKq(ä1x|(>mƼGM ~$! S≵|.'*G.jySQ O1A٫X3nnD?MkEs7.  *ypeH7`oIgm"+)s%zDmO6C0.ݧA .؞!_+a&$>P_0PXJD:EҶBIvC&> Rpׇ`Rn:([+:tsuKW?~7Jʇut@uC _bb7&0Sx }4ts+MviuAz@Йs<GAS{..d ^֩tbƕ0 )uZ) 6s/PöieLV-Qvqh:/xYl]%:KkJW}1Svx/TF:!Ifճ! ;8_R a!?v"&v{M_z{3WMloH | J%;[:afC:d@atK+`QE22g=%{o(H1MyJ8bQɝl E} 9j3wHrMWJM0\%EAoUzH.Oə|*wồG+l;ӇMB {<鱬S˄CB~۽%׆s3v;iTuE^ϯ?@IP oHM%5=x[t^rJ%# b /ZTc%>}4;ap&ɛC ,"fѰT&.%O<Z9΃n1Q|@*NiW QtVl%e0 JTqm_֝4+w(>΀45R  &T7+|qv `<|5#j˪ie}i8&5$rQi{4AYcnQqlPz\_ q8g,Rw>C=UvYmlPQglzaQo>{>sI%-xy/YAHݮ::6e>zVF !bĩ;i$Lk{Y`ſ)ˠ~>4tɗ8D%ʈŶ.:Tyc*Ymw E!u|ӑa]Ÿ̋,#;chm(jZӳ,kYs-O؀?YI" f$?sN55j)[#=?Ζe&D,!D~#!l>j8BKI l'+*@xoIT -xWRqj?0 |ҘtD8#+nyN9t #zٮAj^?[j5W3hm/6{^ǖG}_ kWKT؄exARe`"YjG :H*{L">ʉiˆ0dyVkIܨMզ>d$+ӵ)w|J x/`Ru#]8O07"{$נJ})ۙNؔ-B"|8,{➃!mGoEZ2젙PM1=z`$E ʋ3Ѓh]z9̃s> ,K348D+4QVp}>}>/?II3TU kYl/i@o"s5WRuYc\Z|67vw3p_4P`0;\7WdžPc$A;88ѩ>YXj/*frZRN+,6{%q!@bW@6 E\r_^dFu}S܅1fL-{EWpr<=t؆΄ա.2 AY8F\&<B.,^ӉbN[b<"&.ӥg?B*K 9y7$zmr5bH}q1fӶxAK g=:׍_Iu.SƃsT{-IGJ>@No+QtqAl7ZKi c&K&dx sI=gGdyJ^rgi=kJuZ3QT[dc+ļRxҟ%~d\P_k"<ҟ>L,yԢ\&=8U*V^Yk[i|6F o%]AS)Uު)J~\7HFV80^)*ÌQrb~j_.#šg=ĒIVWI[ٛf#pf;ƛ%7 1azg#GSzmw ,V̸9QqvWG~9/Sl0_j7 { RVZY&( f/~6KMڋ<4a0>YJ1(̔-bޝwYSH~q?<FE*:~S 1E*3ӗͬK# X|)D6'6z ƥu@DfnMǑ!L_/k;[i0Mfe!q@b ~=[F=4DG )lvO*i me8TW wC~r%U&S[[MYt'źԱ+dZ(t=`7&.dLV2 |ؚsC\P/x+*tyGr(.z+PjAM 3zm6{zwEE q+\y1DZr4iK?8Ÿ:9lq\naF5:QGX6дώ-< +T6Aaل&t{EGwCͪ/- >R0t0Lw8V=-^U@9S&7V{fÀg;` S@H{po0p\ԕb%͕oPڠ3h~+UO&}ELã1eP!-3V-aZXZy󕚟>z  u R/ؔ a3 bL ?4 ԗKX }AX/F )_->&L6G?Ox5Ur&Nn8ŷCgX+jP^~R:tfIPtOӌ0 ΍(oT1mTo|L cԼ؈XS4٪DZixH6䘢\b& Ll(J_9N\!(ZAKɅ*Hڀ9ڈ{2X6^o uIf)Zp&p+ğNRwϥH^WPu Jq1-Ł!}RZY=|Ҵ@󓃄k]Aj*}IDLp,jBHFW2̓Dm|ð% 4'6H. bXU*5'B7Or^kzRt<NB-9'GL1gu.h[_ @U~;g۝a)BC ]~LO22'i=E~|ybPF֟OK]-XcOTe 9eӁp=ʯ8,Ojn^$oT>_V<Ț7d=DeңacY粋X+OՍ%ʳ|f9h L%kOL1vW/52r³1G) }* 57 }b\E7Y2<3}r\P{})|ÞovhPK{2X{e8X*1~F-aNޝvֹ&gOmHn3`LsDN6fi+xlPC8JyػrҌsV)Rb/bOPɎz}VjteS*aa~o_@CcI">tU4Q2*'[n5t9FȔI1-@ *>7cy ւcqW_=_of Z`ި lMqQ氊P:˕K=1-*Zh&r:/5کESȽ޹~^'3e-P+HpEc2Bz`O Dv˥m٨9E$ceysD*P?VԷ#K/0vۅWq1Se!AMC3h1ПY#o]kh%-TD#w-Rob!L\<ȫqXP_1G LTү9e}p>ʽx,2¤î 9ldrFV5e3X&KzC:450c$L.5v]d̫֫ e>U2PMWIf倫HwI7F-rJ Ag9Q^~v?5nW8SEC}dP}PQl&]-lȶzFPf[[}d!vڿpkTqsIx4I/{#c"Sm$'T<~X۪,~j5LQhS,H yzkX`8t6% {wr>[5O/cx)RT}dyaxD`FbqFD#jm% jB0jx'w[&N3K@7|~o`ecY.3/wè3bs궞M_8vH28&ht4XAiK֖n'N] I'ne[ބwl ;~;A );^ƃ̝'6/Y(SMN @x^X"F>H"ڻtfzbhJo Fn+Yhelw .W66D E\]5L2u򅨯 HtD=⤚.{č[BsQ'l 97_:1Pw%(s@, 00-20g~|ᶝ/wEKMo=*cku}%'&_CGY:u;jv+r ?F <­ $Iv;Ĩ%DYGHN~r& mpN|L&?ÿw·h Aǫ۬v$t`WNHy<1,p>UԗIC.^q[Q@N\*t+$T[(0,5x?SkA&g_b\=#}Qy,a۞h'X57a^;*wz^#/yNMM-6 G.? (j+ANk=L*Ը @rxgGm`k ̋=/HdpcR Ɲ wE"Es+:ĴS J(o4,4,:Q:|Tzd]M,5U4ɺeYq(jDaK/K.6b8BG$p FuWh7sS*N}A웥mQ9Tj!xQ8 ;)>fd)9dDK.]:Y 'P9S4jؽl4d1F*w3jܩ*7-y,.e`9U~fJ"~`7ѝbf6́ Qkwܫ}(_|qc4*<2h+xhwB{Ž:S`\΄b͆#K)C{{Ҭ%4԰&6NNVfO`a˫ZʇXRrfnP!ko5swoOd{25aId-kOg#t2{If´JWqiQ-9b\)c@J^R4$evum,?n 08%195갮//_ѝb5Nsf%\"#҈w׮rñscho6"d!Manpdܧ I>6a)_j`I'G1zeA0z;|Vsb8O"ejˡښ>r}Z{ DY4o/1>Zuv_!l O5ňmBŃQ̃pLb.8psBp:1 M^'A@Z蓅:Q^/|zRϖrx?>BZ!dd@|6^š$!Lf52`} %C^KÎ42v!~oY)V aQ'`kp ?HZw[_/'1eB9I׼;WT M-j2oUMZbnGqXa7YEG%6xJidbKR;/=nGc*P /РT5SpMO8/TXU\e3?/۷] R̽сÇRCS:~K6ڦzaktqK;~Ԯ5r@qyVМ>\F^R3\8G'qgb˂`\:xc'.&@dϨ}`g.A.alY$O’c&aD>pD9!񈰓zL2O- GFZg`2y@+꿧xx>!TrM;22Yͺ@'OcCjL,rmka"$*yDѸRqBeHY 5jEM:=sGqk`5.#V*vtք^lLo^H(.ZamR{$`(x)n×Q$+uB) bfg}h3ֱ3Q>y/~nDH iz) \'iX2#^ ~A_zImµ@!젒@/s:op(eAh*nB)G?I7`@ͣΪnBQ>Xo|q\&?J7CIUZ\A_YGá!9;msyoTNțN  ;wA}* ?(z UAk*D)b2U>9ۼ$slҁ|L jSF tǎ!yU魠i(`{*5Zf r靫rz/M2OAtQޯAɰ=STUh2vu"5ĖR|{3(N\7-:(pOvrI/г#UO\hֆˀqV*~  >'3uÓk,D6QIZh*@`fSn`İmr,ZrZy|/ty2! qC ND@/V{^JǪ%_=r1<4jC4%mCPck>"t 9t.#»;(}&|~J{35#p.ӰPS:='S &`E aq0^>X7~D&]f>BuX`}h=?_vQ.dWZ*jC{oZZ"tM+7{)i{zRó9 p* o0;y5#QY-fk:߲gH(|^R(6ރ 9C $w]k)$f 5$DόP@%F䟇ij2 (sT+`p{L"E =ߟGsܦ7 H"3Z,Tԗ!;{(XHh*n\Qkӳ Wܿ֕vȨ;T9OcH^vc=[n57O"V`V.jeI$6dz-K{xqnv or:1 L,hեSH̥I@+pZ*oI^ypzAv;Vg$EִqZp)򁔉=5ByHsPOuDGf&z}5}P W5V7R}R N;B?uүɺT8uWP(aQ$f_&o$JA3dj6,&DMr}ʴQAD¼B+[7&s}/.{{+VAF<.!3 ۔]h$:}G5yx~tۺ Zk&hsFt,E[J[txMR Lbhv| U|MYmJ-DS2P{6U ݦ] f|C:~tm]s*3\JSZAHyg D4? X7Cn1:QWh22fRy.Iqh\4Y(KtO4–}&-5,+ߞ'n"&9|@OE_H+bfK Gat>+sMDű"#Ɉ Aan\oF ݸ\M˻8Ha4JTVF?b,JOf0*ݓ\Ύ8g. `)3v-<1lla)nQH& (\'Ӡhwϛ-ZS~ǫ=y6( /?ܹ%jGHpwoǗwɸSîK"hFNy*P~ͨ<ޠC6a;GXM \ǿ-AVaj. 1,b|K +JP dR+~DwܲY~ -T8&ʻoH=/'j*)8wl Syf}"o}k֗L[ftzŠsv߮_h] 2s3o"ȰXu;];TR:>'W?C7YǛYq+X|vW{V@%4\W:,6vO`X15Th֬@Ō,mkajQGtc2h^9AC['$=wyu'uXɦӍث G x"osy5D{ PvgC\ѽka$쇚-K (ͼ'wJ2d>\6AB4Y>j/+Ƕ66U %R8*S\5q۰֪tO")/Ϩ5Zkl{ˍ.FhU̸zU+^QqLC- |71o" rѡGKv & )ǿ Kjnbo1C);cs.K7DnbXA;adh*dȐ9#)] ?EKڨ aO[Smq!)> ~slx?%ܘ+k!zCC|u@#.E@pr\:8T{ m!x:ow AhVEUYcT\5@%-g]e?AP}+zU-һH%Qѐruُ)$xhoM! Xj$(λ 1w4D&,?KO Yd%[dH"'IQK T+JI՝(g~_MP=3p Q뉸t1Pw{&aDnaC'b*h\ &}"T#f@2sh SS2T"ّP2OeY0\_/Hrџ"l|+|7X Ax)L7TZC"|m~\V1;)yVJUKS ~q<f,hDF )PߩׄE)5yx5~Aʆ*b?ZƓdV˓qkBqo5LǴOT&WDqK`c` {Gc<>êO$kb\_JVt!3,lMnzX qpl# l,ji憏Qx;.^;9j! S¥j\^2R{:3?rLYo&S^_˫ge _^Wګ*t[Qq<={LكHe) kWFfX.O1Ŭa(΢+5kw33`c9t`͎!e1k MPs/:'q/ ,ݐG$iI3q)c#{ZG"F"{O0$Q:*+ȑWNö |T8F;ckvPV./J+E{ ԉGh<{__ް O6?h\'L}et!>pYUZG͍Dz:QAnB:FXb_EouĩC.$3@FjSU>ls\I6P#\72ŌE('B kKBy n+m,YJoc*4/Rw [ujYM0@N" ЊIas[rW=8YNFiHD,A|8IМݬs̟v-5/DD}!^*2. {_I:Q{2b12@$_m) ri'J!ɓ0hrDW\k8PVkg9 HOy*r w jF$8…Q$Io`=.RK|_p.a <r3Kм)~[C"J<a>/,_z=T,敮KJG&O8|Í՞ƘLkX.)I)^ŖײYj n鶳ޛ5 $->,]TAF?Dy ˶Gy⧨ta 6Ht\_ʝ9+X8i4890n&T4:wa Y[T V#/Y[H}X͋Jc<V )K_dv[[b-/50cPq_ /䉟˩xL86ݥH%17j"Y 3'9|%UmPؐ؜7 %_ӣW ޻K`jŴ闂Qjb'$$|oc}X4+P}ൌ!.Re%SUCMCD6AV9qu(>gJOaTJЭj#*sL yrCim-Wۻ |Rt)<^E1;H9 Veiv=Zz06LޣG'3z@*򗊱"Bػsxj #+-3hjP'F}UnimgF+0u+yaw~]x)Ipv5ׇD*koD\ӒcJ4˭?V;M@~Cu2R5iav8ENt Ka>ۜwoZ]/H~m=٫v#s@չ4ykF?LDAX % {k=!]Ü t> IUCRWbQC%yM]lonC_WmܹV\õ_Q|`khAN'5wIniHۥJ PՈIrtGhT(n>I&,u`V{RaK%ars Tw!w"wvZ%9 T1qvd,>D&A>VlnZ/WЭk+_+J;Sw&wѳ}Ahx|@8.=P9h(*F_uA[V"Yk1|21vIOH x"YJx\9NapyV@S8PV3_a(]UѼJjV <=ZZBa2vcC"SAaՙEXxE+yZ {y`Zy&xL=t|2k ci> H Vts,H8&Bb L"Ӿ:EJ>vK!A۸m>7׀ U c$U,Ł%qܵGxknZTA?Á{=|:TS+$wIâq',]k "rʙ\WF$0G$fV ⓹8ɴ0l镆kzB%(CľOQ-CS~ҹ,s^[a'^Mz簛>E&M2zv{V]!;zFa_.IV4u q!D.'{~:s]@x.66B #CXh2<`Q8p[*p~e&MUjb'0efbyF