From 11134e6678817de6648b55c61b2092f14575121d Mon Sep 17 00:00:00 2001 From: Mariia Date: Thu, 4 Jul 2024 17:30:55 +0200 Subject: [PATCH 1/9] Attempt to implement a custom function to update the constant from the ui --- README.md | 4 +- TODOS.md | 6 ++ custom_backend/README.md | 7 ++ custom_backend/custom_backend.py | 104 +++++++++++++++++++ custom_backend/test_custom_backend.py | 83 +++++++++++++++ custom_backend/test_set_constant_encoding.lp | 5 + custom_backend/test_set_constant_ui.lp | 64 ++++++++++++ 7 files changed, 271 insertions(+), 2 deletions(-) create mode 100644 custom_backend/README.md create mode 100644 custom_backend/custom_backend.py create mode 100644 custom_backend/test_custom_backend.py create mode 100644 custom_backend/test_set_constant_encoding.lp create mode 100644 custom_backend/test_set_constant_ui.lp diff --git a/README.md b/README.md index a32af75..0b777be 100644 --- a/README.md +++ b/README.md @@ -7,11 +7,11 @@ Clinguin UI for Study regulations ``` clinguin client-server --domain-files new/instance/cogsys.lp new/encoding.lp --ui-files new/ui.lp -c n=4 ``` -#### cscbsc.lp: +#### cscbsc.lp (many solutions): ``` clinguin client-server --domain-files new/instance/cscbsc.lp new/encoding.lp --ui-files new/ui.lp -c n=4 ``` -#### cscmsc.lp: +#### cscmsc.lp (many solutions): ``` clinguin client-server --domain-files new/instance/cscmsc.lp new/encoding.lp --ui-files new/ui.lp -c n=4 ``` diff --git a/TODOS.md b/TODOS.md index e69de29..c4b50b1 100644 --- a/TODOS.md +++ b/TODOS.md @@ -0,0 +1,6 @@ +# ToDo List +- [ ] create a `set_constant()` in a `custom_backend` that would allow user to update the constant dynamically from the ui (for example to set the number of semesters) + - [x] all tests passed for the custom_backend + - [ ] does set_constant work in the ui? + +# Ideas \ No newline at end of file diff --git a/custom_backend/README.md b/custom_backend/README.md new file mode 100644 index 0000000..b558e90 --- /dev/null +++ b/custom_backend/README.md @@ -0,0 +1,7 @@ +### To run the test ui: + +```clinguin client-server --domain-files test_set_constant_encoding.lp --ui-files test_set_constant_ui.lp --custom-classes custom_backend.py -c n=4``` + + +### To run pytest: +```pytest test_custom_backend.py``` \ No newline at end of file diff --git a/custom_backend/custom_backend.py b/custom_backend/custom_backend.py new file mode 100644 index 0000000..7f5ee41 --- /dev/null +++ b/custom_backend/custom_backend.py @@ -0,0 +1,104 @@ +from clinguin.server.application.backends import ClingoBackend +import clingo +from clingo.script import enable_python +from typing import Dict, Tuple, Any + +# Enable Python scripting in clingo +enable_python() + +class CustomBackend(ClingoBackend): + """ + A custom backend that extends ClingoBackend to handle dynamic constant updates. + """ + + def __init__(self, args: Any): + """ + Initialize the CustomBackend. + + Args: + args: Command-line arguments passed to the backend. + """ + super().__init__(args) + self.current_constants = self._parse_command_line_constants() + self._add_domain_state_constructor("_generate_constant_facts") + + def _parse_command_line_constants(self) -> Dict[str, int]: + """ + Parse initial constants from command-line arguments. + + Returns: + A dictionary of constant names and their integer values. + """ + return { + name: int(value) + for const in self.args.const + for name, value in [const.split("=")] + } + + def update_constant(self, name: str, value: Any) -> Tuple[bool, str]: + """ + Update a constant value and refresh the backend if necessary. This method handles input from UI as string + and also allows direct integer updates. + + Args: + name: The name of the constant to update. + value: The new value for the constant, either as an integer or string. + + Returns: + A tuple containing a boolean indicating success and a message string. + """ + try: + new_value = int(value) + if name not in self.current_constants or self.current_constants[name] != new_value: + self.current_constants[name] = new_value + self._refresh_constant_arguments() + self._outdate() + self._init_ctl() + self._ground() + return True, f"Constant {name} updated successfully to {new_value}" + except ValueError: + return False, f"Invalid input: constant {name} must be an integer" + + def _refresh_constant_arguments(self) -> None: + """ + Refresh the internal representation of constants for Clingo arguments. + """ + self._constants = [f"-c {name}={value}" for name, value in self.current_constants.items()] + + def _init_ctl(self) -> None: + """ + Initialize the clingo Control object with updated constants. + """ + self._ctl = clingo.Control(["0"] + self._constants) + super()._init_ctl() + + @property + def _generate_constant_facts(self) -> str: + """ + Generate Prolog facts representing current constants for the domain state. + + Returns: + A string containing Prolog facts for each constant. + """ + return "\n".join(f"current_constant({name},{value})." + for name, value in self.current_constants.items()) + "\n" + + def get_current_constants(self) -> Dict[str, int]: + """ + Get the current values of all constants. + + Returns: + A dictionary of current constant names and their values. + """ + return self.current_constants + + + + def test_clear_atoms(self): + """ + A test method adapted from clear_atoms to see if method calling works in the UI. + """ + self._outdate() + self._atoms = set() + self._init_ctl() + self._ground() diff --git a/custom_backend/test_custom_backend.py b/custom_backend/test_custom_backend.py new file mode 100644 index 0000000..a4df382 --- /dev/null +++ b/custom_backend/test_custom_backend.py @@ -0,0 +1,83 @@ +import pytest +from unittest.mock import MagicMock, patch +from custom_backend import CustomBackend + +class TestCustomBackendSingleConstant: + + @pytest.fixture + def mock_args(self): + args = MagicMock() + args.const = ["n=4"] + args.log_args = {"name": "test_logger"} + return args + + @pytest.fixture + def backend(self, mock_args): + with patch('custom_backend.ClingoBackend._init_ctl'), \ + patch('custom_backend.ClingoBackend._ground'), \ + patch('clingo.Control'): + return CustomBackend(mock_args) + + def test_initialization(self, backend): + """ + Test if the backend initializes with the correct value for constant n. + """ + assert backend.current_constants == {"n": 4} + + def test_update_constant(self, backend): + """ + Test if update_constant method updates the constant 'n' and triggers necessary updates. + """ + with patch.object(backend, '_refresh_constant_arguments') as mock_refresh, \ + patch.object(backend, '_outdate') as mock_outdate, \ + patch.object(backend, '_init_ctl') as mock_init_ctl, \ + patch.object(backend, '_ground') as mock_ground: + success, message = backend.update_constant("n", 5) + assert backend.current_constants["n"] == 5 + mock_refresh.assert_called_once() + mock_outdate.assert_called_once() + mock_init_ctl.assert_called_once() + mock_ground.assert_called_once() + assert success + assert "updated successfully" in message + + def test_no_change_on_same_value(self, backend): + """ + Ensure that no methods are triggered if the constant 'n' is updated to its existing value. + """ + with patch.object(backend, '_refresh_constant_arguments') as mock_refresh, \ + patch.object(backend, '_outdate') as mock_outdate, \ + patch.object(backend, '_init_ctl') as mock_init_ctl, \ + patch.object(backend, '_ground') as mock_ground: + success, message = backend.update_constant("n", 4) + mock_refresh.assert_not_called() + mock_outdate.assert_not_called() + mock_init_ctl.assert_not_called() + mock_ground.assert_not_called() + assert success + assert "updated successfully" in message + + def test_update_constant_from_ui(self, backend): + """ + Test if update_constant method successfully updates a constant from UI input. + """ + with patch.object(backend, '_refresh_constant_arguments') as mock_refresh, \ + patch.object(backend, '_outdate') as mock_outdate, \ + patch.object(backend, '_init_ctl') as mock_init_ctl, \ + patch.object(backend, '_ground') as mock_ground: + success, message = backend.update_constant("n", "5") + assert backend.current_constants["n"] == 5 + mock_refresh.assert_called_once() + mock_outdate.assert_called_once() + mock_init_ctl.assert_called_once() + mock_ground.assert_called_once() + assert success + assert "updated successfully" in message + + def test_update_constant_from_ui_invalid_input(self, backend): + """ + Test handling of invalid input via the UI for constant 'n'. + """ + success, message = backend.update_constant("n", "not_a_number") + assert not success + assert "Invalid input" in message diff --git a/custom_backend/test_set_constant_encoding.lp b/custom_backend/test_set_constant_encoding.lp new file mode 100644 index 0000000..70de78c --- /dev/null +++ b/custom_backend/test_set_constant_encoding.lp @@ -0,0 +1,5 @@ +% Generate labels based on n. +labels(1..n). +current_constant(n, n). +#show labels/1. +#show current_constant/2. diff --git a/custom_backend/test_set_constant_ui.lp b/custom_backend/test_set_constant_ui.lp new file mode 100644 index 0000000..2da5922 --- /dev/null +++ b/custom_backend/test_set_constant_ui.lp @@ -0,0 +1,64 @@ +% Define the main window +elem(w, window, root). +attr(w, title, "Label Display"). + +elem(n_display, label, w). +attr(n_display, order, 1). +attr(n_display, label, @concat("Current n: ", N)) :- current_n(N). + +% Generate label elements +elem(label(X), label, w) :- labels(X). +attr(label(X), order, 4) :- labels(X). +attr(label(X), label, @concat("Label ", X)) :- labels(X). + + +%Add a button to update n +elem(update_button, button, w). +attr(update_button, order, 3). +attr(update_button, label, "Update n"). + +% Define the action for the button +when(update_button, click, call, update_constant_from_ui("n", _context_value(new_n_value))). + + +% Add a text field for input +elem(input_field, textfield, w). +attr(input_field, order, 2). +attr(input_field, placeholder, "Enter a new value for n"). + +% Update context when input changes +when(input_field, input, context, (new_n_value, _value)).% Define the main window +elem(w, window, root). +attr(w, title, "Label Display"). + +elem(n_display, label, w). +attr(n_display, order, 1). +attr(n_display, label, @concat("Current n: ", N)) :- current_constant(n, N). + +% Generate label elements +elem(label(X), label, w) :- labels(X). +attr(label(X), order, 4) :- labels(X). +attr(label(X), label, @concat("Label ", X)) :- labels(X). + +% Add a button to update n +elem(update_button, button, w). +attr(update_button, order, 3). +attr(update_button, label, "Update n"). + +% Define the action for the button +when(update_button, click, call, update_constant_from_ui("n", _context_value(new_n_value))). + +% Add a text field for input +elem(input_field, textfield, w). +attr(input_field, order, 2). +attr(input_field, placeholder, "Enter a new value for n"). + +% Update context when input changes +when(input_field, input, context, (new_n_value, _value)). + + + +% Define a button to call test_clear_atoms +elem(clear_button, button, w). +attr(clear_button, label, "Test Clear Atoms"). +when(clear_button, click, call, test_clear_atoms). From 87afb5f36762def9c9eb958e3b02ae2e31d457cd Mon Sep 17 00:00:00 2001 From: Mariia Date: Thu, 4 Jul 2024 19:31:07 +0200 Subject: [PATCH 2/9] Fixed the update_constant in custom_backend to dynamically update the constant from the ui --- custom_backend/README.md | 6 +- custom_backend/custom_backend.py | 120 ++++++------------- custom_backend/test_custom_backend.py | 83 ------------- custom_backend/test_set_constant_encoding.lp | 4 +- custom_backend/test_set_constant_ui.lp | 38 +----- 5 files changed, 42 insertions(+), 209 deletions(-) delete mode 100644 custom_backend/test_custom_backend.py diff --git a/custom_backend/README.md b/custom_backend/README.md index b558e90..56a3a1b 100644 --- a/custom_backend/README.md +++ b/custom_backend/README.md @@ -1,7 +1,3 @@ ### To run the test ui: -```clinguin client-server --domain-files test_set_constant_encoding.lp --ui-files test_set_constant_ui.lp --custom-classes custom_backend.py -c n=4``` - - -### To run pytest: -```pytest test_custom_backend.py``` \ No newline at end of file +```clinguin client-server --domain-files test_set_constant_encoding.lp --ui-files test_set_constant_ui.lp --custom-classes custom_backend.py --backend CustomBackend -c n=6``` diff --git a/custom_backend/custom_backend.py b/custom_backend/custom_backend.py index 7f5ee41..2135b60 100644 --- a/custom_backend/custom_backend.py +++ b/custom_backend/custom_backend.py @@ -1,104 +1,58 @@ from clinguin.server.application.backends import ClingoBackend -import clingo -from clingo.script import enable_python +from clingo import Control from typing import Dict, Tuple, Any -# Enable Python scripting in clingo -enable_python() - class CustomBackend(ClingoBackend): - """ - A custom backend that extends ClingoBackend to handle dynamic constant updates. - """ - def __init__(self, args: Any): - """ - Initialize the CustomBackend. - - Args: - args: Command-line arguments passed to the backend. - """ + # Parse and store command-line constants + self.current_constants = { + name: value + for const in (args.const or []) + for name, value in [const.split("=")] + } super().__init__(args) - self.current_constants = self._parse_command_line_constants() + # Add a method to generate constant facts for the domain state self._add_domain_state_constructor("_generate_constant_facts") - def _parse_command_line_constants(self) -> Dict[str, int]: - """ - Parse initial constants from command-line arguments. - - Returns: - A dictionary of constant names and their integer values. - """ - return { - name: int(value) - for const in self.args.const - for name, value in [const.split("=")] - } + def _init_ctl(self): + """Initialize the Clingo control object with current constants and domain files.""" + try: + # Create constant definitions and initialize Control + const_defs = [f"-c {name}={value}" for name, value in self.current_constants.items()] + self._ctl = Control(["0"] + const_defs) + + # Load domain files and add atoms + for f in self._domain_files: + self._ctl.load(str(f)) + for atom in self._atoms: + self._ctl.add("base", [], str(atom) + ".") + + # Ground the program + self._ctl.ground([("base", [])]) + except Exception as e: + self._logger.error(f"Error initializing clingo.Control: {e}") + raise def update_constant(self, name: str, value: Any) -> Tuple[bool, str]: - """ - Update a constant value and refresh the backend if necessary. This method handles input from UI as string - and also allows direct integer updates. - - Args: - name: The name of the constant to update. - value: The new value for the constant, either as an integer or string. - - Returns: - A tuple containing a boolean indicating success and a message string. - """ + """Update a constant value and reinitialize the control if necessary.""" try: - new_value = int(value) - if name not in self.current_constants or self.current_constants[name] != new_value: + name = name.strip('"') + new_value = str(value).strip('"') + + if self.current_constants.get(name) != new_value: self.current_constants[name] = new_value - self._refresh_constant_arguments() self._outdate() self._init_ctl() - self._ground() return True, f"Constant {name} updated successfully to {new_value}" - except ValueError: - return False, f"Invalid input: constant {name} must be an integer" - - def _refresh_constant_arguments(self) -> None: - """ - Refresh the internal representation of constants for Clingo arguments. - """ - self._constants = [f"-c {name}={value}" for name, value in self.current_constants.items()] - - def _init_ctl(self) -> None: - """ - Initialize the clingo Control object with updated constants. - """ - self._ctl = clingo.Control(["0"] + self._constants) - super()._init_ctl() + except Exception as e: + return False, f"Error updating constant {name}: {str(e)}" @property def _generate_constant_facts(self) -> str: - """ - Generate Prolog facts representing current constants for the domain state. - - Returns: - A string containing Prolog facts for each constant. - """ + """Generate Prolog facts for current constants.""" return "\n".join(f"current_constant({name},{value})." for name, value in self.current_constants.items()) + "\n" - def get_current_constants(self) -> Dict[str, int]: - """ - Get the current values of all constants. - - Returns: - A dictionary of current constant names and their values. - """ - return self.current_constants - - - - def test_clear_atoms(self): - """ - A test method adapted from clear_atoms to see if method calling works in the UI. - """ - self._outdate() - self._atoms = set() - self._init_ctl() - self._ground() + def get_current_constants(self) -> Dict[str, str]: + """Return the current constants.""" + return self.current_constants.copy() \ No newline at end of file diff --git a/custom_backend/test_custom_backend.py b/custom_backend/test_custom_backend.py deleted file mode 100644 index a4df382..0000000 --- a/custom_backend/test_custom_backend.py +++ /dev/null @@ -1,83 +0,0 @@ -import pytest -from unittest.mock import MagicMock, patch -from custom_backend import CustomBackend - -class TestCustomBackendSingleConstant: - - @pytest.fixture - def mock_args(self): - args = MagicMock() - args.const = ["n=4"] - args.log_args = {"name": "test_logger"} - return args - - @pytest.fixture - def backend(self, mock_args): - with patch('custom_backend.ClingoBackend._init_ctl'), \ - patch('custom_backend.ClingoBackend._ground'), \ - patch('clingo.Control'): - return CustomBackend(mock_args) - - def test_initialization(self, backend): - """ - Test if the backend initializes with the correct value for constant n. - """ - assert backend.current_constants == {"n": 4} - - def test_update_constant(self, backend): - """ - Test if update_constant method updates the constant 'n' and triggers necessary updates. - """ - with patch.object(backend, '_refresh_constant_arguments') as mock_refresh, \ - patch.object(backend, '_outdate') as mock_outdate, \ - patch.object(backend, '_init_ctl') as mock_init_ctl, \ - patch.object(backend, '_ground') as mock_ground: - success, message = backend.update_constant("n", 5) - assert backend.current_constants["n"] == 5 - mock_refresh.assert_called_once() - mock_outdate.assert_called_once() - mock_init_ctl.assert_called_once() - mock_ground.assert_called_once() - assert success - assert "updated successfully" in message - - def test_no_change_on_same_value(self, backend): - """ - Ensure that no methods are triggered if the constant 'n' is updated to its existing value. - """ - with patch.object(backend, '_refresh_constant_arguments') as mock_refresh, \ - patch.object(backend, '_outdate') as mock_outdate, \ - patch.object(backend, '_init_ctl') as mock_init_ctl, \ - patch.object(backend, '_ground') as mock_ground: - success, message = backend.update_constant("n", 4) - mock_refresh.assert_not_called() - mock_outdate.assert_not_called() - mock_init_ctl.assert_not_called() - mock_ground.assert_not_called() - assert success - assert "updated successfully" in message - - def test_update_constant_from_ui(self, backend): - """ - Test if update_constant method successfully updates a constant from UI input. - """ - with patch.object(backend, '_refresh_constant_arguments') as mock_refresh, \ - patch.object(backend, '_outdate') as mock_outdate, \ - patch.object(backend, '_init_ctl') as mock_init_ctl, \ - patch.object(backend, '_ground') as mock_ground: - success, message = backend.update_constant("n", "5") - assert backend.current_constants["n"] == 5 - mock_refresh.assert_called_once() - mock_outdate.assert_called_once() - mock_init_ctl.assert_called_once() - mock_ground.assert_called_once() - assert success - assert "updated successfully" in message - - def test_update_constant_from_ui_invalid_input(self, backend): - """ - Test handling of invalid input via the UI for constant 'n'. - """ - success, message = backend.update_constant("n", "not_a_number") - assert not success - assert "Invalid input" in message diff --git a/custom_backend/test_set_constant_encoding.lp b/custom_backend/test_set_constant_encoding.lp index 70de78c..58418de 100644 --- a/custom_backend/test_set_constant_encoding.lp +++ b/custom_backend/test_set_constant_encoding.lp @@ -1,5 +1,5 @@ % Generate labels based on n. labels(1..n). -current_constant(n, n). +current_n(n). #show labels/1. -#show current_constant/2. +#show current_n/1. \ No newline at end of file diff --git a/custom_backend/test_set_constant_ui.lp b/custom_backend/test_set_constant_ui.lp index 2da5922..4ff16f1 100644 --- a/custom_backend/test_set_constant_ui.lp +++ b/custom_backend/test_set_constant_ui.lp @@ -18,7 +18,7 @@ attr(update_button, order, 3). attr(update_button, label, "Update n"). % Define the action for the button -when(update_button, click, call, update_constant_from_ui("n", _context_value(new_n_value))). +when(update_button, click, call, update_constant("n", _context_value(new_n_value))). % Add a text field for input @@ -27,38 +27,4 @@ attr(input_field, order, 2). attr(input_field, placeholder, "Enter a new value for n"). % Update context when input changes -when(input_field, input, context, (new_n_value, _value)).% Define the main window -elem(w, window, root). -attr(w, title, "Label Display"). - -elem(n_display, label, w). -attr(n_display, order, 1). -attr(n_display, label, @concat("Current n: ", N)) :- current_constant(n, N). - -% Generate label elements -elem(label(X), label, w) :- labels(X). -attr(label(X), order, 4) :- labels(X). -attr(label(X), label, @concat("Label ", X)) :- labels(X). - -% Add a button to update n -elem(update_button, button, w). -attr(update_button, order, 3). -attr(update_button, label, "Update n"). - -% Define the action for the button -when(update_button, click, call, update_constant_from_ui("n", _context_value(new_n_value))). - -% Add a text field for input -elem(input_field, textfield, w). -attr(input_field, order, 2). -attr(input_field, placeholder, "Enter a new value for n"). - -% Update context when input changes -when(input_field, input, context, (new_n_value, _value)). - - - -% Define a button to call test_clear_atoms -elem(clear_button, button, w). -attr(clear_button, label, "Test Clear Atoms"). -when(clear_button, click, call, test_clear_atoms). +when(input_field, input, context, (new_n_value, _value)). \ No newline at end of file From 3df97a9cb2d0c281cff26122e410759bfac11284 Mon Sep 17 00:00:00 2001 From: Mariia Date: Mon, 8 Jul 2024 18:43:11 +0200 Subject: [PATCH 3/9] - Custom backend function update_constant() now works as it should. - updated READMEs - integrated update_constant() in the new UI --- TODOS.md | 3 +- custom_backend/README.md | 28 +++++++- custom_backend/custom_backend.py | 30 ++++++-- new/README.md | 7 +- new/encoding.lp | 2 +- new/ui.lp | 114 ++++++++++++++++++------------- 6 files changed, 123 insertions(+), 61 deletions(-) diff --git a/TODOS.md b/TODOS.md index c4b50b1..fac5536 100644 --- a/TODOS.md +++ b/TODOS.md @@ -1,6 +1,7 @@ # ToDo List - [ ] create a `set_constant()` in a `custom_backend` that would allow user to update the constant dynamically from the ui (for example to set the number of semesters) - [x] all tests passed for the custom_backend - - [ ] does set_constant work in the ui? + - [x] does set_constant work in the ui? + - [ ] ensure that the input is only integer # Ideas \ No newline at end of file diff --git a/custom_backend/README.md b/custom_backend/README.md index 56a3a1b..571ee22 100644 --- a/custom_backend/README.md +++ b/custom_backend/README.md @@ -1,3 +1,29 @@ +# Custom Backend + + +### To run the new StudyReg UI with the custom backend: + +``` +clinguin client-server --domain-files new/instance/cogsys.lp new/encoding.lp --ui-files new/ui.lp --custom-classes custom_backend/custom_backend.py --backend CustomBackend -c n=6 +``` + + ### To run the test ui: -```clinguin client-server --domain-files test_set_constant_encoding.lp --ui-files test_set_constant_ui.lp --custom-classes custom_backend.py --backend CustomBackend -c n=6``` +``` +clinguin client-server --domain-files test_set_constant_encoding.lp --ui-files test_set_constant_ui.lp --custom-classes custom_backend.py --backend CustomBackend -c n=4 +``` + + +## Usage +### update_constant(name, value) + +> `update_constant(name, value)` allows users +to set a new value for the constant (name) directly from the UI + +To ensure the constant is properly updated in the UI, for declaring a dynamic constant use: +``` +current_constant(I) :- n(N), I = 1..N. +``` + + diff --git a/custom_backend/custom_backend.py b/custom_backend/custom_backend.py index 2135b60..00584bf 100644 --- a/custom_backend/custom_backend.py +++ b/custom_backend/custom_backend.py @@ -4,7 +4,7 @@ class CustomBackend(ClingoBackend): def __init__(self, args: Any): - # Parse and store command-line constants + # Parse and store constants self.current_constants = { name: value for const in (args.const or []) @@ -41,18 +41,34 @@ def update_constant(self, name: str, value: Any) -> Tuple[bool, str]: if self.current_constants.get(name) != new_value: self.current_constants[name] = new_value - self._outdate() - self._init_ctl() + self.restart() return True, f"Constant {name} updated successfully to {new_value}" + except ValueError: + return False, f"Error updating constant {name}: Provided value must be an integer" except Exception as e: return False, f"Error updating constant {name}: {str(e)}" @property def _generate_constant_facts(self) -> str: - """Generate Prolog facts for current constants.""" - return "\n".join(f"current_constant({name},{value})." - for name, value in self.current_constants.items()) + "\n" + """Generate facts for current constants.""" + facts = [f"current_constant({name},{value})." for name, value in self.current_constants.items()] + facts.append(f"n({self.current_constants.get('n', '0')}).") + return "\n".join(facts) + "\n" def get_current_constants(self) -> Dict[str, str]: """Return the current constants.""" - return self.current_constants.copy() \ No newline at end of file + return self.current_constants.copy() + + def restart(self): + """Restart the Clingo control object with the current setup.""" + self._init_setup() # Reinitialize setup + self._outdate() # Mark the current state as outdated + self._init_ctl() # Reinitialize the Clingo control + self._ground() # Ground the program + self._ui_state = None # Reset UI state + + def get(self): + """Get the current UI state, updating it if necessary.""" + if self._ui_state is None: + self._update_ui_state() + return super().get() diff --git a/new/README.md b/new/README.md index 1c5a4c6..e0a6fca 100644 --- a/new/README.md +++ b/new/README.md @@ -5,10 +5,9 @@ Run: ``` -clinguin client-server --domain-files new/instance/'instance.lp' new/encoding.lp --ui-files new/ui.lp -c n=4 + +clinguin client-server --domain-files new/instance/cogsys.lp new/encoding.lp --ui-files new/ui.lp --custom-classes custom_backend/custom_backend.py --backend CustomBackend -c n=6 ``` -- `instance.lp`: any instance in the instance folder, and +- instead of `new/instance/cogsys.lp`: any instance in the instance folder, and - `n`: number of semesters for the study planning. - - diff --git a/new/encoding.lp b/new/encoding.lp index 59920f2..0d56cf9 100644 --- a/new/encoding.lp +++ b/new/encoding.lp @@ -51,4 +51,4 @@ in(E1,before(A)) :- set(before(A)), in(E1,s(I)), in(E2,A), in(E2,s(J)), I < J. % display #show. - #show (M,I) : in(M,s(I)). \ No newline at end of file + %#show (M,I) : in(M,s(I)). \ No newline at end of file diff --git a/new/ui.lp b/new/ui.lp index db39033..6b39881 100644 --- a/new/ui.lp +++ b/new/ui.lp @@ -1,49 +1,71 @@ -semester(1..n). +% Uses the n fact from the domain state instead of semester(1..n) +semester(I) :- n(N), I = 1..N. -elem(w, window, root). -attr(w, flex_direction, row). - - elem(s(I), container, w):-semester(I). - attr(s(I), order, I):-semester(I). - - elem(s_t(I), container, s(I)):-semester(I). - attr(s_t(I), order, 1):-semester(I). - attr(s_t(I), class, ("bg-primary";"bg-opacity-50";"fw-bold";"p-2";"m-1")):-semester(I). - - elem(s_l(I), label, s_t(I)):-semester(I). - attr(s_l(I), label, @concat("Semester ",I)):-semester(I). - attr(s_l(I), order, 1):-semester(I). - - elem(s_dd(I), dropdown_menu, s_t(I)):-semester(I). - attr(s_dd(I), order, 2):-semester(I). - attr(s_dd(I), selected, "Assign module"):-semester(I). - attr(s_dd(I), class, ("btn-sm";"btn-info")):-semester(I). - - elem(s_ddi(I,E), dropdown_menu_item, s_dd(I)):-_any(in(E,s(I))), not _all(in(E,s(I))). - attr(s_ddi(I,E), label, E):-_any(in(E,s(I))), not _all(in(E,s(I))). - when(s_ddi(I,E), click, call, add_assumption(in(E,s(I)))):-_any(in(E,s(I))), not _all(in(E,s(I))). - - elem(s_modules(I), container, s(I)):-semester(I). - attr(s_modules(I), class, ("bg-white")):-semester(I). - attr(s_modules(I), order, 2):-semester(I). - - shown_module(E,I):-_all(in(E,s(I))). - shown_module(E,I):-in(E,s(I)),_clinguin_browsing. - - elem(s_module(I,E), container, s_modules(I)):-shown_module(E,I). - attr(s_module(I,E), height, C*10):-shown_module(E,I), map(c,E,C). - attr(s_module(I,E), class, ("bg-info";"bg-opacity-50"; - "d-flex";"flex-row";"justify-content-between";"align-items-center"; - "p-2";"m-1")):-shown_module(E,I). - - elem(s_module_l(I,E), label, s_module(I,E)):-shown_module(E,I). - attr(s_module_l(I,E), label, E):-shown_module(E,I). - - elem(s_module_b(I,E), button, s_module(I,E)):-_clinguin_assume(in(E,s(I))). - attr(s_module_b(I,E), icon, "fa-times"):-_clinguin_assume(in(E,s(I))). - attr(s_module_b(I,E), class, ("btn-sm";"btn-outline")):-_clinguin_assume(in(E,s(I))). - when(s_module_b(I,E), click, call, remove_assumption(in(E,s(I)))):-_clinguin_assume(in(E,s(I))). +% Debug information +elem(debug_info, label, w). +attr(debug_info, order, 0). +attr(debug_info, label, @concat("Current n value: ", N)) :- n(N). +elem(w, window, root). +attr(w, flex_direction, column). + +% Textfield for inputting new n value +elem(n_input, textfield, w). +attr(n_input, order, 1). +attr(n_input, placeholder, "Enter new n value"). +when(n_input, input, context, (new_n_value, _value)). + +% Button to update n +elem(update_n_button, button, w). +attr(update_n_button, order, 2). +attr(update_n_button, label, "Update n"). +when(update_n_button, click, call, update_constant("n", _context_value(new_n_value))). + +% Container for semesters +elem(semester_container, container, w). +attr(semester_container, order, 3). +attr(semester_container, flex_direction, row). + +elem(s(I), container, semester_container) :- semester(I). +attr(s(I), order, I) :- semester(I). + +elem(s_t(I), container, s(I)) :- semester(I). +attr(s_t(I), order, 1) :- semester(I). +attr(s_t(I), class, ("bg-primary";"bg-opacity-50";"fw-bold";"p-2";"m-1")) :- semester(I). + + elem(s_l(I), label, s_t(I)) :- semester(I). + attr(s_l(I), label, @concat("Semester ",I)) :- semester(I). + attr(s_l(I), order, 1) :- semester(I). + + elem(s_dd(I), dropdown_menu, s_t(I)) :- semester(I). + attr(s_dd(I), order, 2) :- semester(I). + attr(s_dd(I), selected, "Assign module") :- semester(I). + attr(s_dd(I), class, ("btn-sm";"btn-info")) :- semester(I). + + elem(s_ddi(I,E), dropdown_menu_item, s_dd(I)) :- _any(in(E,s(I))), not _all(in(E,s(I))), semester(I). + attr(s_ddi(I,E), label, E) :- _any(in(E,s(I))), not _all(in(E,s(I))), semester(I). + when(s_ddi(I,E), click, call, add_assumption(in(E,s(I)))) :- _any(in(E,s(I))), not _all(in(E,s(I))), semester(I). + +elem(s_modules(I), container, s(I)) :- semester(I). +attr(s_modules(I), class, ("bg-white")) :- semester(I). +attr(s_modules(I), order, 2) :- semester(I). + + shown_module(E,I) :- _all(in(E,s(I))), semester(I). + shown_module(E,I) :- in(E,s(I)), _clinguin_browsing, semester(I). + + elem(s_module(I,E), container, s_modules(I)) :- shown_module(E,I). + attr(s_module(I,E), height, C*10) :- shown_module(E,I), map(c,E,C). + attr(s_module(I,E), class, ("bg-info";"bg-opacity-50"; + "d-flex";"flex-row";"justify-content-between";"align-items-center"; + "p-2";"m-1")) :- shown_module(E,I). + + elem(s_module_l(I,E), label, s_module(I,E)) :- shown_module(E,I). + attr(s_module_l(I,E), label, E) :- shown_module(E,I). + + elem(s_module_b(I,E), button, s_module(I,E)) :- _clinguin_assume(in(E,s(I))), semester(I). + attr(s_module_b(I,E), icon, "fa-times") :- _clinguin_assume(in(E,s(I))), semester(I). + attr(s_module_b(I,E), class, ("btn-sm";"btn-outline")) :- _clinguin_assume(in(E,s(I))), semester(I). + when(s_module_b(I,E), click, call, remove_assumption(in(E,s(I)))) :- _clinguin_assume(in(E,s(I))), semester(I). elem(menu_bar, menu_bar, w). attr(menu_bar, title, "Study Regulations"). @@ -52,6 +74,4 @@ attr(menu_bar, icon, "fa-graduation-cap"). elem(menu_bar_next, button, menu_bar). attr(menu_bar_next, label, "Next"). attr(menu_bar_next, icon, "fa-forward-step"). -when(menu_bar_next, click, call, next_solution). - - +when(menu_bar_next, click, call, next_solution). \ No newline at end of file From 0e6e97ee89c60d2aa89185bd9650797278134619 Mon Sep 17 00:00:00 2001 From: Mariia Date: Sun, 14 Jul 2024 17:44:08 +0200 Subject: [PATCH 4/9] Changed the Repo format and made minor changes to the ui appearance --- README.md | 29 +++--- custom_backend/README.md | 29 ------ custom_backend/custom_backend.py | 74 ------------- custom_backend/test_set_constant_encoding.lp | 5 - custom_backend/test_set_constant_ui.lp | 30 ------ new/README.md | 13 --- new/commonconstraints.lp | 5 - new/defined.lp | 10 -- new/encoding.lp | 54 ---------- new/instance/cogsys _with_rec.lp | 103 ------------------- new/instance/cogsys.lp | 28 ----- new/instance/cscbsc.lp | 87 ---------------- new/instance/cscmsc.lp | 92 ----------------- new/instance/dsmsc.lp | 51 --------- new/instance/irsba.lp | 72 ------------- new/instance/irsba_with_embedded_script.lp | 69 ------------- new/ui.lp | 77 -------------- old/README.md | 19 ---- old/encoding.lp | 37 ------- old/instance.lp | 34 ------ old/out.png | Bin 111314 -> 0 bytes old/ui.lp | 57 ---------- 22 files changed, 12 insertions(+), 963 deletions(-) delete mode 100644 custom_backend/README.md delete mode 100644 custom_backend/custom_backend.py delete mode 100644 custom_backend/test_set_constant_encoding.lp delete mode 100644 custom_backend/test_set_constant_ui.lp delete mode 100644 new/README.md delete mode 100644 new/commonconstraints.lp delete mode 100644 new/defined.lp delete mode 100644 new/encoding.lp delete mode 100755 new/instance/cogsys _with_rec.lp delete mode 100644 new/instance/cogsys.lp delete mode 100644 new/instance/cscbsc.lp delete mode 100755 new/instance/cscmsc.lp delete mode 100644 new/instance/dsmsc.lp delete mode 100644 new/instance/irsba.lp delete mode 100755 new/instance/irsba_with_embedded_script.lp delete mode 100644 new/ui.lp delete mode 100644 old/README.md delete mode 100644 old/encoding.lp delete mode 100644 old/instance.lp delete mode 100644 old/out.png delete mode 100644 old/ui.lp diff --git a/README.md b/README.md index 0b777be..26eae39 100644 --- a/README.md +++ b/README.md @@ -3,27 +3,22 @@ Clinguin UI for Study regulations ### Usage -#### cogsys.lp: +#### Code from ASPOCP_23: ``` -clinguin client-server --domain-files new/instance/cogsys.lp new/encoding.lp --ui-files new/ui.lp -c n=4 +clinguin client-server --domain-files instances/instance_ASPOCP_23.lp encodings/encoding_ASPOCP_23.lp --ui-files encodings/ui_ASPOCP_23.lp --custom-classes custom_backend.py --backend CustomBackend -c n=6 ``` -#### cscbsc.lp (many solutions): -``` -clinguin client-server --domain-files new/instance/cscbsc.lp new/encoding.lp --ui-files new/ui.lp -c n=4 -``` -#### cscmsc.lp (many solutions): -``` -clinguin client-server --domain-files new/instance/cscmsc.lp new/encoding.lp --ui-files new/ui.lp -c n=4 -``` -#### dsmsc.lp: -``` -clinguin client-server --domain-files new/instance/dsmsc.lp new/encoding.lp --ui-files new/ui.lp -c n=4 -``` -#### irsba.lp: + + +## Custom Backend +### update_constant(name, value) + +> `update_constant(name, value)` allows users +to set a new value for the constant (name) directly from the UI + +To ensure the constant is properly updated in the UI, for declaring a dynamic constant use: ``` -clinguin client-server --domain-files new/instance/irsba.lp new/encoding.lp --ui-files new/ui.lp -c n=4 +current_constant(I) :- n(N), I = 1..N. ``` - ### Clinguin version `Clinguin 1.0.16` \ No newline at end of file diff --git a/custom_backend/README.md b/custom_backend/README.md deleted file mode 100644 index 571ee22..0000000 --- a/custom_backend/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# Custom Backend - - -### To run the new StudyReg UI with the custom backend: - -``` -clinguin client-server --domain-files new/instance/cogsys.lp new/encoding.lp --ui-files new/ui.lp --custom-classes custom_backend/custom_backend.py --backend CustomBackend -c n=6 -``` - - -### To run the test ui: - -``` -clinguin client-server --domain-files test_set_constant_encoding.lp --ui-files test_set_constant_ui.lp --custom-classes custom_backend.py --backend CustomBackend -c n=4 -``` - - -## Usage -### update_constant(name, value) - -> `update_constant(name, value)` allows users -to set a new value for the constant (name) directly from the UI - -To ensure the constant is properly updated in the UI, for declaring a dynamic constant use: -``` -current_constant(I) :- n(N), I = 1..N. -``` - - diff --git a/custom_backend/custom_backend.py b/custom_backend/custom_backend.py deleted file mode 100644 index 00584bf..0000000 --- a/custom_backend/custom_backend.py +++ /dev/null @@ -1,74 +0,0 @@ -from clinguin.server.application.backends import ClingoBackend -from clingo import Control -from typing import Dict, Tuple, Any - -class CustomBackend(ClingoBackend): - def __init__(self, args: Any): - # Parse and store constants - self.current_constants = { - name: value - for const in (args.const or []) - for name, value in [const.split("=")] - } - super().__init__(args) - # Add a method to generate constant facts for the domain state - self._add_domain_state_constructor("_generate_constant_facts") - - def _init_ctl(self): - """Initialize the Clingo control object with current constants and domain files.""" - try: - # Create constant definitions and initialize Control - const_defs = [f"-c {name}={value}" for name, value in self.current_constants.items()] - self._ctl = Control(["0"] + const_defs) - - # Load domain files and add atoms - for f in self._domain_files: - self._ctl.load(str(f)) - for atom in self._atoms: - self._ctl.add("base", [], str(atom) + ".") - - # Ground the program - self._ctl.ground([("base", [])]) - except Exception as e: - self._logger.error(f"Error initializing clingo.Control: {e}") - raise - - def update_constant(self, name: str, value: Any) -> Tuple[bool, str]: - """Update a constant value and reinitialize the control if necessary.""" - try: - name = name.strip('"') - new_value = str(value).strip('"') - - if self.current_constants.get(name) != new_value: - self.current_constants[name] = new_value - self.restart() - return True, f"Constant {name} updated successfully to {new_value}" - except ValueError: - return False, f"Error updating constant {name}: Provided value must be an integer" - except Exception as e: - return False, f"Error updating constant {name}: {str(e)}" - - @property - def _generate_constant_facts(self) -> str: - """Generate facts for current constants.""" - facts = [f"current_constant({name},{value})." for name, value in self.current_constants.items()] - facts.append(f"n({self.current_constants.get('n', '0')}).") - return "\n".join(facts) + "\n" - - def get_current_constants(self) -> Dict[str, str]: - """Return the current constants.""" - return self.current_constants.copy() - - def restart(self): - """Restart the Clingo control object with the current setup.""" - self._init_setup() # Reinitialize setup - self._outdate() # Mark the current state as outdated - self._init_ctl() # Reinitialize the Clingo control - self._ground() # Ground the program - self._ui_state = None # Reset UI state - - def get(self): - """Get the current UI state, updating it if necessary.""" - if self._ui_state is None: - self._update_ui_state() - return super().get() diff --git a/custom_backend/test_set_constant_encoding.lp b/custom_backend/test_set_constant_encoding.lp deleted file mode 100644 index 58418de..0000000 --- a/custom_backend/test_set_constant_encoding.lp +++ /dev/null @@ -1,5 +0,0 @@ -% Generate labels based on n. -labels(1..n). -current_n(n). -#show labels/1. -#show current_n/1. \ No newline at end of file diff --git a/custom_backend/test_set_constant_ui.lp b/custom_backend/test_set_constant_ui.lp deleted file mode 100644 index 4ff16f1..0000000 --- a/custom_backend/test_set_constant_ui.lp +++ /dev/null @@ -1,30 +0,0 @@ -% Define the main window -elem(w, window, root). -attr(w, title, "Label Display"). - -elem(n_display, label, w). -attr(n_display, order, 1). -attr(n_display, label, @concat("Current n: ", N)) :- current_n(N). - -% Generate label elements -elem(label(X), label, w) :- labels(X). -attr(label(X), order, 4) :- labels(X). -attr(label(X), label, @concat("Label ", X)) :- labels(X). - - -%Add a button to update n -elem(update_button, button, w). -attr(update_button, order, 3). -attr(update_button, label, "Update n"). - -% Define the action for the button -when(update_button, click, call, update_constant("n", _context_value(new_n_value))). - - -% Add a text field for input -elem(input_field, textfield, w). -attr(input_field, order, 2). -attr(input_field, placeholder, "Enter a new value for n"). - -% Update context when input changes -when(input_field, input, context, (new_n_value, _value)). \ No newline at end of file diff --git a/new/README.md b/new/README.md deleted file mode 100644 index e0a6fca..0000000 --- a/new/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Meta Program - - - -Run: - -``` - -clinguin client-server --domain-files new/instance/cogsys.lp new/encoding.lp --ui-files new/ui.lp --custom-classes custom_backend/custom_backend.py --backend CustomBackend -c n=6 -``` -- instead of `new/instance/cogsys.lp`: any instance in the instance folder, and -- `n`: number of semesters for the study planning. - diff --git a/new/commonconstraints.lp b/new/commonconstraints.lp deleted file mode 100644 index d657798..0000000 --- a/new/commonconstraints.lp +++ /dev/null @@ -1,5 +0,0 @@ - - -empty(int(s(I),s(J))) :- I = 1..n, J = 1..n, I < J. -empty(int(m(w),s(2*K ))) :- K = 1..n, 1 <= 2*K, 2*K <= n. -empty(int(m(s),s(2*K-1))) :- K = 1..n, 1 <= 2*K-1, 2*K-1 <= n. \ No newline at end of file diff --git a/new/defined.lp b/new/defined.lp deleted file mode 100644 index d366200..0000000 --- a/new/defined.lp +++ /dev/null @@ -1,10 +0,0 @@ - -#defined subseteq/2. -#defined equal/2. -#defined card/3. -#defined d/2. -#defined b/2. -#defined focus/0. -#defined focusset/1. -#defined focusescardinality/2. -#defined card/4. \ No newline at end of file diff --git a/new/encoding.lp b/new/encoding.lp deleted file mode 100644 index 0d56cf9..0000000 --- a/new/encoding.lp +++ /dev/null @@ -1,54 +0,0 @@ -%% Ground work by Javier %% - -#include "defined.lp". -#include "commonconstraints.lp". - -% generate -{ in(E,s(I)) } :- in(E,m), I=1..n. - -% s = s(1) U ... U s(n) -in(E,s) :- in(E,s(I)). - -% m(w) and m(s) -in(E,m(Z)) :- Z = (s;w), in(E,m), map(s,E,Z). - -% additional sets -set(A) :- empty(A). -set(A) :- subseteq(A,B). set(A) :- equal(A,B). -set(B) :- subseteq(A,B). set(B) :- equal(A,B). -set(A) :- card(A,R,L). set(A) :- sum(A,M,R,L). -% -set(A) :- set( int(A,B)). set(B) :- set(int(A,B)). -set(A) :- set(before(A)). -% -in( E, int(A,B)) :- set( int(A,B)), in(E,A), in(E,B). -in(E1,before(A)) :- set(before(A)), in(E1,s(I)), in(E2,A), in(E2,s(J)), I < J. - -% constraints -:- empty(A), in(E,A). -% -:- subseteq(A,B), in(E,A), not in(E,B). -% -:- equal(A,B), in(E,A), not in(E,B). -:- equal(A,B), not in(E,A), in(E,B). -% -:- card(A,bw,(L,U)), not L { in(E,A) } U. -:- card(A,leq, U), not { in(E,A) } U. -% dependency constraint -:- d(M,M'), in(M,s(J)), in(M',s(I)), J >= I. -% "blocking modules" constraint -:- b(M,M'), in(M,s), in(M',s). -%* :- b(M,M'), - #count{M: in(M,s); M': in(M',s)} > 1. *% -% -:- sum(A,F,bw,(L,U)), not L #sum{ V,E : in(E,A), map(F,E,V) } U. -:- sum(A,F,geq, L), not L #sum{ V,E : in(E,A), map(F,E,V) }. - -% for optimization -%:~ recommend(M,M'), in(M,s), not in(M',s), pref_id = p1.[1,M,M'] -%:~ recommend(M,M'), in(M',s), in(M,s), pref_id = p3.[1,M,M'] - - -% display - #show. - %#show (M,I) : in(M,s(I)). \ No newline at end of file diff --git a/new/instance/cogsys _with_rec.lp b/new/instance/cogsys _with_rec.lp deleted file mode 100755 index 41803f1..0000000 --- a/new/instance/cogsys _with_rec.lp +++ /dev/null @@ -1,103 +0,0 @@ -% b, f, a, o and p % c -in((bm1;bm2;bm3),b). map(c,(bm1;bm2;bm3),9). -in((fm1;fm2;fm3),f). map(c,(fm1;fm2;fm3),6). -in((am11;am12;am21),a). map(c,(am11;am12;am21),6). -in((am22;am31;am32),a). map(c,(am22;am31;am32),6). -in(E,o) :- in(E,(f;a)). map(c,(pm1;pm2;pm3),12). -in((pm1;pm2;pm3),p). map(c,im,15). - map(c,msc,30). - -% m % s -in(E,m) :- in(E,(b;f;a;p)). map(s,bm1,w;s,bm2,s;s,bm3,w). -in((im;msc),m). map(s,(fm1;fm2;fm3),w). - map(s,(am11;am12;am21),e). - map(s,(am22;am31;am32),e). -%* e *% map(s,(pm1;pm2;pm3),e). -in(fm1,e). map(s,(im1;msc1),e). - - % l and u - map(l,b,27;l,o,24;l,p,24;l,m,120). - map(u,b,27;u,o,24;u,p,24;u,m,120). - -% global constraints -card(e,leq,2). equal(int(s,f),e). -sum(int(H,s),c,bw,(L,U)) :- H = (b;o;p;m), map(l,H,L), map(u,H,U). -in(im,gc3). in(msc,gc3). subseteq(gc3,s). - -% temporal constraints -in(msc,tc4). sum(before(tc4),c,geq,90). - -% recommendations - -recommend(bm1,am11). -recommend(am11,am12). -recommend(am11,pm1). -recommend(am12,pm1). - -recommend(bm2,am21). -recommend(am21,am22). -recommend(am21,pm2). -recommend(am22,pm2). - -recommend(bm3,am31). -recommend(am31,am32). -recommend(am31,pm3). -recommend(am32,pm3). - - - -%* -% Examination tasks - -% Ep -in((822211;822311;822411;822511;556111;556211;822611;822711;556311),ep). - -% Es -in((555813;821912;555913;555914;822012;556012;822112),es). - -% ep -map(ep,am11,am11epset;ep,am21,am21epset;ep,am22,am22epset;ep,am31,am31epset; -ep,am32,am32epset;ep,pm1,pm1epset;ep,pm2,pm2epset;ep,pm3,pm3epset;ep,am12,am12epset). - -% es -map(es,bm2,bm2esset;es,bm1,bm1esset;es,bm3,bm3esset; -es,fm1,fm1esset;es,fm2,fm2esset;es,fm3,fm3esset). - - in((822211;822311),s1). - in(s1,am11epset). - - in(822311,s3). - in(s3,am12epset). - - in(822411,s2). - in(s2,am21epset). - - in(822511,s4). - in(s4,am22epset). - - in(556111,s5). - in(s5,am31epset). - - in(556211,s6). - in(s6,am32epset). - - in(822611,s7). - in(s7,pm1epset). - - in(822711,s8). - in(s8,pm2epset). - - in(556311,s9). - in(s9,pm3epset). - - - in(821912,bm1esset). - in(555813,bm2esset). - in((555913;555914),bm3esset). - in(822012,fm1esset). - in(556012,fm2esset). - in(822112,fm3esset). - -% d - -*% \ No newline at end of file diff --git a/new/instance/cogsys.lp b/new/instance/cogsys.lp deleted file mode 100644 index 44e9e72..0000000 --- a/new/instance/cogsys.lp +++ /dev/null @@ -1,28 +0,0 @@ -% b, f, a, o and p % c -in((bm1;bm2;bm3),b). map(c,(bm1;bm2;bm3),9). -in((fm1;fm2;fm3),f). map(c,(fm1;fm2;fm3),6). -in((am11;am12;am21),a). map(c,(am11;am12;am21),6). -in((am22;am31;am32),a). map(c,(am22;am31;am32),6). -in(E,o) :- in(E,(f;a)). map(c,(pm1;pm2;pm3),12). -in((pm1;pm2;pm3),p). map(c,im,15). - map(c,msc,30). - -% m % s -in(E,m) :- in(E,(b;f;a;p)). map(s,bm1,w;s,bm2,s;s,bm3,w). -in((im;msc),m). map(s,(fm1;fm2;fm3),w). - map(s,(am11;am12;am21),e). - map(s,(am22;am31;am32),e). -%* e *% map(s,(pm1;pm2;pm3),e). -in(fm1,e). map(s,(im1;msc1),e). - - % l and u - map(l,b,27;l,o,24;l,p,24;l,m,120). - map(u,b,27;u,o,24;u,p,24;u,m,120). - -% global constraints -card(e,leq,2). equal(int(s,f),e). -sum(int(H,s),c,bw,(L,U)) :- H = (b;o;p;m), map(l,H,L), map(u,H,U). -in(im,gc3). in(msc,gc3). subseteq(gc3,s). - -% temporal constraints -in(msc,tc4). sum(before(tc4),c,geq,90). diff --git a/new/instance/cscbsc.lp b/new/instance/cscbsc.lp deleted file mode 100644 index 8ad2b5e..0000000 --- a/new/instance/cscbsc.lp +++ /dev/null @@ -1,87 +0,0 @@ -% x and y are the minimum and maximum number of focuses allowable -#const x=1. -#const y=2. - -% i, ii, iii, iv, v, vi and x -in((inf1010;inf1011;inf1020;inf1021;inf1030;inf1031;inf1040; - inf1050;inf1060;inf1070;inf1080;mat1100;mat1101;mat1102; - mat1103;inf6010;inf6030),i). -in((inf2010;inf2020;inf2021;inf2030;inf2031;inf2040;inf2041; - inf2050;inf2060;inf2061;inf2070;inf2080;inf2090;inf2091),ii). -% iii, b, c, ge, k and p -in(M,iii) :- in(M,(b;c;ge;k;p)). - in(biobm105,b). - in(chea1nf,c). - in(gewbp01,ge). - in(psybs013,k). - in(phy131c,p). -% iv, ba, ca, gea, ka and pa -in(M,iv) :- in(M,(ba;ca;gea;ka;pa)). - in((biobm107;biobm108;bioam212;bioam302;bioam314),ba). - in((cheocgee;cheawp23;cheawp3;chea8cs),ca). - in((gewbp02;gewgis1;geekl;geehy;gewbwp01;gewbwp02;gewbwp05),gea). - in((psybs011;psybs012;linbs101;linbs102;linbs103;linbs061),ka). - in((phy131d;phy511las;phy611las;phy101geo;phy201geo;phy531),pa). -in(matd230cs,v). -in((inf6020;bamaO1;bamaO2;bamaO3),vi). - -in(M,x) :- in(M,(iii;iv)). - -% m -in(E,m) :- in(E,(i;ii;iii;iv;v;vi;x)). -in(bsc,m). - - -%c -map(c,(inf1010;inf1011;inf1020;inf1021;inf1030;inf1031;inf1040; - inf1050;inf1060;inf1070;inf1080;mat1100;mat1101;mat1102; - mat1103;inf6010;inf6030;inf2010;inf2020;inf2021;inf2030; - inf2031;inf2040;inf2041;inf2050;inf2060;inf2061;inf2070; - inf2080;inf2090;inf2091;biobm105;chea1nf;gewbp01;phy131c; - biobm107;biobm108;bioam212;bioam302;bioam314;cheocgee; - cheawp23;cheawp3;chea8cs;gewbp02;gewgis1;geekl;geehy; - gewbwp01;gewbwp02;gewbwp05;linbs101;linbs102;linbs103; - linbs061;phy131d;phy511las;phy611las;phy101geo;phy201geo;phy531; - matd230cs;bamaO1;bamaO2;bamaO3),6). -map(c,(psybs011;psybs012;psybs013),9). -map(c,(inf6020;bsc),12). - - -% l and u -map(l,i,102;l,ii,12;l,v,6;l,vi,18;l,x,30;l,m,180). -map(u,i,102;u,ii,12;u,v,6;u,vi,18;u,x,30;u,m,180). - -% s -map(s,(bioam314;biobm105;chea1nf;gewbp01;gewbwp01;gewbwp05; - gewgis1;inf1010;inf1020;inf1030;inf1031;inf1060;inf1060; - inf1080;inf2020;inf2021;inf2031;inf2041;inf2061;linbs101; - mat1100;mat1101;matd230cs;phy101geo;phy131c;phy131d;phy511las),w). -map(s,(bioam212;biobm107;biobm108;chea8cs;cheawp23;cheawp3; - gewbp02;gewbwp02;inf1011;inf1021;inf1040;inf1050;inf1070; - inf2010;inf2030;inf2040;inf2050;inf2060;inf2070;inf2080; - inf6010;linbs103;mat1102;mat1103;phy201geo;phy611las),s). -map(s,(bioam302;cheocgee;geehy;geekl;inf2090;inf2091;inf6020; - inf6030;linbs061;linbs102;phy531;psybs011;psybs012;psybs013; - bamaO1;bamaO2;bamaO3),e). - -% f -in((bioinformatics;chemistry;geoscience;cognitivesciences;physics),f). - -% h -in((b;ba),biset;(c;ca),chset;(ge;gea),geset;(k;ka),coset;(p;pa),phset). -map(h,bioinformatics,biset;h,chemistry,chset;h,geoscience,geset;h,cognitivesciences,coset;h,physics,phset). - - -% global constraints -card(h,bw,(x,y)). -sum(int(Z,s),c,bw,(L,U)) :- Z = (i;ii;v;vi;m), map(l,Z,L), map(u,Z,U). -in(M,gc2) :- in(F,h), in(F,f), map(h,F,Fs), in(V,Fs), in(M,V). -sum(int(Z,s),c,bw,(L,U)) :- Z = gc2, map(l,x,L), map(u,x,U). -in(inf6020,gc3). in(bsc,gc3). subseteq(gc3,s). - -% temporal constraints -in(bsc,tc4). sum(before(tc4),c,geq,126). - - -% focus input -in((bioinformatics;physics),h). \ No newline at end of file diff --git a/new/instance/cscmsc.lp b/new/instance/cscmsc.lp deleted file mode 100755 index 48f0cfb..0000000 --- a/new/instance/cscmsc.lp +++ /dev/null @@ -1,92 +0,0 @@ -% x and y are the minimum and maximum number of focuses allowable -#const x=1. -#const y=1. - -% i, ii, iii, iv, x, a, b, c, ge, k, ma and p -in((inf7010;inf7020;inf7030;inf7040;inf7060;inf7061;inf7070;inf7080),i). -in((inf10010;inf10020),ii). -in((inf8010;inf8011;inf8020;inf8021;inf8030;inf8031;inf8032;inf8033; - inf8040;inf8041;inf8050;inf8060;inf8061;inf8062;inf8063;inf8070; - inf8072;inf8080;inf8090;inf8091),iii). -in(M,iv) :- in(M,(x;a)). -in((biobm108;chea14;chea1nf;cheocgee;chea8cs;gewbp01;phy131c;csema013),x). -in((inf9010;inf9011),a). -in((biombip03;biombip04;matmbip05;biombiw03;biombiw04;biombiw05;biombiw08),b). -in((cheb1;cheb6;che15cs),c). -in((gewrcm01;gewrcm02;gewrsm01;gewrsm02),ge). -in((csema011;csema014),k). -in((matvmd837;matvmd838;matvmd844;matdsam2a),ma). -in((phy541b;phyastcs;phy541e;phyklics),p). - -% m -in(E,m) :- in(E,(i;ii;iii;iv;x;a;b;c;ge;k;ma;p)). -in(msc,m). - -% e -in((chea14;gewbp01;inf9011),e). - -%c -map(c,(inf7010;inf7020;inf7030;inf7040;inf7060;inf7061;inf7070;inf7080; - inf10020;inf8010;inf8011;inf8020;inf8021;inf8030;inf8031;inf8032;inf8033; - inf8040;inf8041;inf8050;inf8060;inf8061;inf8062;inf8063;inf8070; - inf8072;inf8080;inf8090;inf8091;biobm108;chea14;chea1nf;cheocgee; - chea8cs;gewbp01;phy131c;csema013;inf9010;inf9011;biombip03;biombip04; - matmbip05;biombiw03;biombiw04;biombiw05;biombiw08; - cheb1;cheb6;che15cs;gewrcm01;gewrcm02;gewrsm01;gewrsm02),6). -map(c,(csema011;csema014;matvmd837;matvmd838;matvmd844;matdsam2a;phy541b; - phyastcs;phy541e;phyklics),9). -map(c,inf10010,12). -map(c,msc,30). - - -% l and u -map(l,i,12;l,ii,18;l,iii,18;l,iv,24;l,x,0;l,b,18;l,c,18;l,ge,18;l,k,18;l,ma,18;l,p,18;l,m,120). -map(u,i,12;u,ii,18;u,iii,18;u,iv,24;u,x,12;u,b,18;u,c,18;u,ge,18;u,k,18;u,ma,18;u,p,18;u,m,120). - -% s -map(s,(biombip03;biombiw04;biombiw08;chea14;chea1nf;cheb1;csema011;gewbp01; - gewrcm01;gewrcm02;inf7010;inf7060;inf7070;inf7080;inf8011;inf8021;inf8030; - inf8031;inf8061;inf8062;inf8072;inf8080;matvmd837;matvmd844;phy131c;phy541e - ),w). -map(s,(biobm108;biombip04;biombiw03;biombiw05;chea8cs;csema013;gewrsm01; - gewrsm02;inf7030;inf7040;inf8010;inf8020;inf8032;inf8033;inf8040; - inf8050;inf8060;inf8063;inf8070;matdsam2a;matmbip05;matvmd838),s). -map(s,(che15cs;cheb6;cheocgee;csema014;inf10010;inf10020;inf7020;inf7061; - inf8041;inf8090;inf8091;inf9010;inf9011;phy541b;phyastcs;phyklics),e). - -% f -in((bioinformatics;chemistry;geoscience;cognitivesciences;mathematics;physics),f). - -% h -in(b,biset;c,chset;ge,geset;k,coset;ma,maset;p,phset). -map(h,bioinformatics,biset;h,chemistry,chset;h,geoscience,geset;h,cognitivesciences,coset;h,mathematics,maset;h,physics,phset). - - -% global constraints -card(h,bw,(x,y)). -in(E,gc1) :- in(E,e). -subseteq(gc1,s). -in(M,gc1b) :- in(M,e), in(M,x). -sum(int(H,s),c,bw,(L,U)) :- H = gc1b, map(l,x,L), map(u,x,U). - -in(E,gc2) :- in(E,e), in(E,a). -subseteq(gc2,s). - -sum(int(Z,s),c,bw,(L,U)) :- Z = (ii;m), map(l,Z,L), map(u,Z,U). -sum(int(Z,s),c,geq,L) :- Z = (i;iii;V), map(l,Z,L), in(F,h), map(h,F,Fs), in(V,Fs). - -lsum(S) :- S' = #sum{L,RG: map(l,RG,L), RG = (i;iii;V), in(F,h), map(h,F,Fs), in(V,Fs)}, S = S' + L', map(l,iv,L'). -usum(S) :- S' = #sum{U,RG: map(u,RG,U), RG = (i;iii;V), in(F,h), map(h,F,Fs), in(V,Fs)}, S = S' + U', map(u,iv,U'). -in(M,gc5) :- in(F,h), map(h,F,Fs), in(V,Fs), in(M,H), H=(i;iii;iv;V). -sum(int(V,s),c,bw,(L,U)) :- V = gc5, lsum(L), usum(U). - -in(gewrcm02,gc6) :- in(F,h), F=geoscience. -subseteq(gc6,s). -in(msc,gc7). subseteq(gc7,s). - -% temporal constraints -in(msc,tc4). sum(before(tc4),c,geq,72). - - -% focus input -in((bioinformatics),h). diff --git a/new/instance/dsmsc.lp b/new/instance/dsmsc.lp deleted file mode 100644 index 54c1a93..0000000 --- a/new/instance/dsmsc.lp +++ /dev/null @@ -1,51 +0,0 @@ - -% c, r, i and ba -in((infdsc1;matvmd837;matvmd838;infdsc2;infdsc3;infdsc4),c). -in((infdsrma;infdsrmb),r). -in((infdsam1a;infdsam1b;matdsam2a;matdsam2b;matdsam3a;matdsam3b; - infdsam4a;infdsam4b;infdsam5a;infdsam5b;infdsam6a;infdsam6b; - infdsam7;matdsam8a;matdsam8b;infdsam9;infdsam10;infdsam11;bm3),i). -in((fm2;matdsbm1),ba). -in(M,l) :- in(M,(i;ba)). - -% m -in(E,m) :- in(E,(c;r;i;ba)). -in(msc,m). - -% e -in((fm2;matdsbm1),e). - -%c -map(c,(infdsc1;matvmd837;matvmd838;infdsc3; - infdsam1a;matdsam2a;matdsam3a;infdsam5a;infdsam6a; - matdsam8a;bm3),9). -map(c,(infdsc2;infdsc4;infdsam1b;matdsam2b;matdsam3b; - infdsam4a;infdsam4b;infdsam5b;infdsam6b; - infdsam7;matdsam8b;infdsam9;infdsam10;fm2;matdsbm1),6). -map(c,(infdsrma;infdsam11),12). -map(c,infdsrmb,15). -map(c,msc,30). - -% l and u -map(l,c,48;l,r,12;l,l,27;l,m,120). -map(u,c,48;u,r,15;u,l,30;u,m,120). - -% s -map(s,(bm3;fm2;infdsam1a;infdsam1b;infdsam5b;infdsam6a;infdsc3; - infdsc4;matdsam3a;matdsam3b;matdsam8b;matdsbm1;matvmd837),w). -map(s,(infdsam10;infdsam5a;infdsam6b;infdsam7;infdsc1;matdsam2a; - matdsam2b;matvmd838),s). -map(s,(infdsam11;infdsam4a;infdsam4b;infdsam9;infdsc2;infdsrma;infdsrmb; - matdsam8a),e). - -% B -b(infdsam1a,infdsam1b;matdsam2a,matdsam2b;matdsam3a,matdsam3b; - infdsam4a,infdsam4b;infdsam5a,infdsam5b;infdsam6a,infdsam6b; - matdsam8a,matdsam8b). - -% global constraints -card(e,leq,2). equal(int(s,ba),e). -sum(int(Z,s),c,bw,(L,U)) :- Z = (c;r;l;m), map(l,Z,L), map(u,Z,U). - -% temporal constraints -in(msc,tc4). sum(before(tc4),c,geq,72). diff --git a/new/instance/irsba.lp b/new/instance/irsba.lp deleted file mode 100644 index 7595bc9..0000000 --- a/new/instance/irsba.lp +++ /dev/null @@ -1,72 +0,0 @@ -% x and y are the minimum and maximum number of focuses allowable -#const x=1. -#const y=1. - -% i, ii, l, p and e -in((slrba014;slrba001;slrba002;slrba003;slrba006;rusba001; - bbmvwl110;bbmpuv610;bbmpuv110;bbmpuv210;bbmpuv310;bbmpuv410; - bbmpuv510;bbmvwl210;slrba022;slrba023;rusba002;zruba01; - zruba02;slrba017;zruba04;rusba003;slrba021),i). -in((bamaO1;bamaO2;bamaO3;bamaO4;bamaO5;bamaO6; - bamaO7;bamaO8;zruos01;zruos02;zruos03),ii). -in((slrba010;slrba012;rusba005),l). -in((bbmvwl310;bbmvwl320;rusba004),p). -in((bvmpuv110;bvmpuv210;bvmpuv120;bvmpuv220;bvmpuv310;bvmpuv320; - bvmpuv410;bvmpuv420;bvmpuv510;bvmpuv520),e). -% m -in(E,m) :- in(E,(i;ii;l;p;e)). -in(ba,m). - -%c -map(c,(slrba001;slrba002;bbmvwl110;bbmpuv610;bbmpuv110;bbmpuv210; - bbmpuv310;bbmpuv410;bbmpuv510;bbmvwl210;slrba022;slrba023; - slrba017;zruba04;rusba003;bamaO1;bamaO2;bamaO3; - bamaO4;bamaO5;bamaO6;bamaO7;bamaO8;zruos01; - zruos02;zruos03;rusba005;bbmvwl310;bbmvwl320;rusba004; - bvmpuv110;bvmpuv210;bvmpuv120;bvmpuv220;bvmpuv310;bvmpuv320; - bvmpuv410;bvmpuv420;bvmpuv510;bvmpuv520),6). -map(c,(slrba006;rusba001;rusba002;zruba01;zruba02),9). -map(c,(slrba014;slrba003;slrba010;slrba012),12). -map(c,slrba021,24). -map(c,ba,9). - -% l and u -map(l,i,183;l,ii,18;l,l,30;l,p,18;l,e,12;l,m,240). -map(u,i,183;u,ii,18;u,l,30;u,p,18;u,e,12;u,m,240). - -% s -map(s,(bbmpuv110;bbmpuv210;bbmpuv410;bbmpuv610;bbmvwl110;bbmvwl210; - bbmvwl320;rusba001;rusba002;rusba003;rusba004;rusba005; - slrba022;zruos01;zruos02),w). -map(s,(bbmpuv310;bbmpuv510;bbmvwl310;slrba021;slrba023),s). -map(s,(bvmpuv110;bvmpuv120;bvmpuv210;bvmpuv220;bvmpuv310;bvmpuv320; - bvmpuv410;bvmpuv420;bvmpuv510;bvmpuv520;slrba001;slrba002; - slrba003;slrba006;slrba010;slrba012;slrba014;slrba017; - zruba01;zruba02;zruba04;zruos03;bamaO1;bamaO2; - bamaO3;bamaO4;bamaO5;bamaO6;bamaO7;bamaO8),e). - -% D -d(zruba01,rusba001;zruba01,rusba002;zruba01,rusba003; - zruba01,rusba004;zruos03,slrba003;zruos03,slrba006; - zruos03,slrba010;zruos03,slrba012;zruos03,slrba017; - zruba01,slrba021;zruos03,zruba02;zruba01,zruba02; - zruba02,zruba04). - -% f -in((language;politics),f). - -% h -in(l,lset;(p;e),pset). -map(h,language,lset;h,politics,pset). - -% global constraints -card(h,bw,(x,y)). -sum(int(H,s),c,bw,(L,U)) :- H = (i;ii;m;V), in(F,f), in(F,h), map(h,F,Fs), in(V,Fs), map(l,H,L), map(u,H,U). -in(ba,gc2). subseteq(gc2,s). - -% temporal constraints -in(ba,tc4). sum(before(tc4),c,geq,171). - - -% focus input -in((language),h). diff --git a/new/instance/irsba_with_embedded_script.lp b/new/instance/irsba_with_embedded_script.lp deleted file mode 100755 index 25802f4..0000000 --- a/new/instance/irsba_with_embedded_script.lp +++ /dev/null @@ -1,69 +0,0 @@ -#include "embedded.lp". - -% x and y are the minimum and maximum number of focuses allowable -#const x=1. -#const y=1. - -% i, ii, l, p and e -in((slrba014;slrba001;slrba002;slrba003;slrba006;rusba001; - bbmvwl110;bbmpuv610;bbmpuv110;bbmpuv210;bbmpuv310;bbmpuv410; - bbmpuv510;bbmvwl210;slrba022;slrba023;rusba002;zruba01; - zruba02;slrba017;zruba04;rusba003;slrba021),i). -in((bamaO1;bamaO2;bamaO3;bamaO4;bamaO5;bamaO6; - bamaO7;bamaO8;zruos01;zruos02;zruos03),ii). -in((slrba010;slrba012;rusba005),l). -in((bbmvwl310;bbmvwl320;rusba004),p). -in((bvmpuv110;bvmpuv210;bvmpuv120;bvmpuv220;bvmpuv310;bvmpuv320; - bvmpuv410;bvmpuv420;bvmpuv510;bvmpuv520),e). -% m -in(E,m) :- in(E,(i;ii;l;p;e)). -in(ba,m). - -%c -map(c,(slrba001;slrba002;bbmvwl110;bbmpuv610;bbmpuv110;bbmpuv210; - bbmpuv310;bbmpuv410;bbmpuv510;bbmvwl210;slrba022;slrba023; - slrba017;zruba04;rusba003;bamaO1;bamaO2;bamaO3; - bamaO4;bamaO5;bamaO6;bamaO7;bamaO8;zruos01; - zruos02;zruos03;rusba005;bbmvwl310;bbmvwl320;rusba004; - bvmpuv110;bvmpuv210;bvmpuv120;bvmpuv220;bvmpuv310;bvmpuv320; - bvmpuv410;bvmpuv420;bvmpuv510;bvmpuv520),6). -map(c,(slrba006;rusba001;rusba002;zruba01;zruba02),9). -map(c,(slrba014;slrba003;slrba010;slrba012),12). -map(c,slrba021,24). -map(c,ba,9). - -% l and u -map(l,i,183;l,ii,18;l,l,30;l,p,18;l,e,12;l,m,240). -map(u,i,183;u,ii,18;u,l,30;u,p,18;u,e,12;u,m,240). - -% s -map(s,(bbmpuv110;bbmpuv210;bbmpuv410;bbmpuv610;bbmvwl110;bbmvwl210; - bbmvwl320;rusba001;rusba002;rusba003;rusba004;rusba005; - slrba022;zruos01;zruos02),w). -map(s,(bbmpuv310;bbmpuv510;bbmvwl310;slrba021;slrba023),s). -map(s,(bvmpuv110;bvmpuv120;bvmpuv210;bvmpuv220;bvmpuv310;bvmpuv320; - bvmpuv410;bvmpuv420;bvmpuv510;bvmpuv520;slrba001;slrba002; - slrba003;slrba006;slrba010;slrba012;slrba014;slrba017; - zruba01;zruba02;zruba04;zruos03;bamaO1;bamaO2; - bamaO3;bamaO4;bamaO5;bamaO6;bamaO7;bamaO8),e). - -% D -d(zruba01,rusba001;zruba01,rusba002;zruba01,rusba003; - zruba01,rusba004;zruos03,slrba003;zruos03,slrba006; - zruos03,slrba010;zruos03,slrba012;zruos03,slrba017; - zruba01,slrba021;zruos03,zruba02;zruba01,zruba02; - zruba02,zruba04). - -% global constraints -sum(int(H,s),c,bw,(L,U)) :- H = (i;ii;m;H'), f(F), map(h,H',F), map(l,H,L), map(u,H,U), F=@separate(fs). -in(ba,gc2). subseteq(gc2,s). - -% temporal constraints -in(ba,tc4). sum(before(tc4),c,geq,171). - -% specializations -map(h,l,llc;h,(p;e),pae). - -f(llc;pae). - -focus :- f(F). \ No newline at end of file diff --git a/new/ui.lp b/new/ui.lp deleted file mode 100644 index 6b39881..0000000 --- a/new/ui.lp +++ /dev/null @@ -1,77 +0,0 @@ -% Uses the n fact from the domain state instead of semester(1..n) -semester(I) :- n(N), I = 1..N. - -% Debug information -elem(debug_info, label, w). -attr(debug_info, order, 0). -attr(debug_info, label, @concat("Current n value: ", N)) :- n(N). - -elem(w, window, root). -attr(w, flex_direction, column). - -% Textfield for inputting new n value -elem(n_input, textfield, w). -attr(n_input, order, 1). -attr(n_input, placeholder, "Enter new n value"). -when(n_input, input, context, (new_n_value, _value)). - -% Button to update n -elem(update_n_button, button, w). -attr(update_n_button, order, 2). -attr(update_n_button, label, "Update n"). -when(update_n_button, click, call, update_constant("n", _context_value(new_n_value))). - -% Container for semesters -elem(semester_container, container, w). -attr(semester_container, order, 3). -attr(semester_container, flex_direction, row). - -elem(s(I), container, semester_container) :- semester(I). -attr(s(I), order, I) :- semester(I). - -elem(s_t(I), container, s(I)) :- semester(I). -attr(s_t(I), order, 1) :- semester(I). -attr(s_t(I), class, ("bg-primary";"bg-opacity-50";"fw-bold";"p-2";"m-1")) :- semester(I). - - elem(s_l(I), label, s_t(I)) :- semester(I). - attr(s_l(I), label, @concat("Semester ",I)) :- semester(I). - attr(s_l(I), order, 1) :- semester(I). - - elem(s_dd(I), dropdown_menu, s_t(I)) :- semester(I). - attr(s_dd(I), order, 2) :- semester(I). - attr(s_dd(I), selected, "Assign module") :- semester(I). - attr(s_dd(I), class, ("btn-sm";"btn-info")) :- semester(I). - - elem(s_ddi(I,E), dropdown_menu_item, s_dd(I)) :- _any(in(E,s(I))), not _all(in(E,s(I))), semester(I). - attr(s_ddi(I,E), label, E) :- _any(in(E,s(I))), not _all(in(E,s(I))), semester(I). - when(s_ddi(I,E), click, call, add_assumption(in(E,s(I)))) :- _any(in(E,s(I))), not _all(in(E,s(I))), semester(I). - -elem(s_modules(I), container, s(I)) :- semester(I). -attr(s_modules(I), class, ("bg-white")) :- semester(I). -attr(s_modules(I), order, 2) :- semester(I). - - shown_module(E,I) :- _all(in(E,s(I))), semester(I). - shown_module(E,I) :- in(E,s(I)), _clinguin_browsing, semester(I). - - elem(s_module(I,E), container, s_modules(I)) :- shown_module(E,I). - attr(s_module(I,E), height, C*10) :- shown_module(E,I), map(c,E,C). - attr(s_module(I,E), class, ("bg-info";"bg-opacity-50"; - "d-flex";"flex-row";"justify-content-between";"align-items-center"; - "p-2";"m-1")) :- shown_module(E,I). - - elem(s_module_l(I,E), label, s_module(I,E)) :- shown_module(E,I). - attr(s_module_l(I,E), label, E) :- shown_module(E,I). - - elem(s_module_b(I,E), button, s_module(I,E)) :- _clinguin_assume(in(E,s(I))), semester(I). - attr(s_module_b(I,E), icon, "fa-times") :- _clinguin_assume(in(E,s(I))), semester(I). - attr(s_module_b(I,E), class, ("btn-sm";"btn-outline")) :- _clinguin_assume(in(E,s(I))), semester(I). - when(s_module_b(I,E), click, call, remove_assumption(in(E,s(I)))) :- _clinguin_assume(in(E,s(I))), semester(I). - -elem(menu_bar, menu_bar, w). -attr(menu_bar, title, "Study Regulations"). -attr(menu_bar, icon, "fa-graduation-cap"). - -elem(menu_bar_next, button, menu_bar). -attr(menu_bar_next, label, "Next"). -attr(menu_bar_next, icon, "fa-forward-step"). -when(menu_bar_next, click, call, next_solution). \ No newline at end of file diff --git a/old/README.md b/old/README.md deleted file mode 100644 index db26aca..0000000 --- a/old/README.md +++ /dev/null @@ -1,19 +0,0 @@ -## Study regulations - -- **Backend**: `ClingoMultishotBackend` -- **Frontend**: `Angular` - -Create a study plan. - -These encoding was presented in the article [1] - -### Usage - -``` -clinguin client-server --domain-files old/instance.lp old/encoding.lp --ui-files old/ui.lp -c n=4 -``` - -![](out.png) - - -[1] Hahn, S., Martens, C., Nemes, A., Otunuya, H., Romero, J., Schaub, T., & Schellhorn, S. (2023). Reasoning about Study Regulations in Answer Set Programming (Preliminary Report). In ICLP Workshops (Vol. 3437) diff --git a/old/encoding.lp b/old/encoding.lp deleted file mode 100644 index ea2ada7..0000000 --- a/old/encoding.lp +++ /dev/null @@ -1,37 +0,0 @@ -% generate -{ in(E,s(I)) } :- in(E,m), I=1..n. - -% s = s(1) U ... U s(n) -in(E,s) :- in(E,s(I)). - -% m(w) and m(s) -in(E,m(X)) :- X = (s;w), in(E,m), map(s,E,X). - -% additional sets -set(A) :- empty(A). -set(A) :- subseteq(A,B). set(A) :- equal(A,B). -set(B) :- subseteq(A,B). set(B) :- equal(A,B). -set(A) :- card(A,R,L). set(A) :- sum(A,M,R,L). -% -set(A) :- set( int(A,B)). set(B) :- set(int(A,B)). -set(A) :- set(before(A)). -% -in( E, int(A,B)) :- set( int(A,B)), in(E,A), in(E,B). -in(E1,before(A)) :- set(before(A)), in(E1,s(I)), in(E2,A), in(E2,s(J)), I < J. - -% constraints -:- empty(A), in(E,A). -% -:- subseteq(A,B), in(E,A), not in(E,B). -% -:- equal(A,B), in(E,A), not in(E,B). -:- equal(A,B), not in(E,A), in(E,B). -% -:- card(A,leq,U), not { in(E,A) } U. -% -:- sum(A,F,bw,(L,U)), not L #sum{ V,E : in(E,A), map(F,E,V) } U. -:- sum(A,F,geq, L), not L #sum{ V,E : in(E,A), map(F,E,V) }. - -% display -% #show. -% #show (M,I) : in(M,s(I)). diff --git a/old/instance.lp b/old/instance.lp deleted file mode 100644 index 2f44220..0000000 --- a/old/instance.lp +++ /dev/null @@ -1,34 +0,0 @@ -#const n = 4. - -% b, f, a, o and p % c -in((bm1;bm2;bm3),b). map(c,(bm1;bm2;bm3),9). -in((fm1;fm2;fm3),f). map(c,(fm1;fm2;fm3),6). -in((am11;am12;am21),a). map(c,(am11;am12;am21),6). -in((am22;am31;am32),a). map(c,(am22;am31;am32),6). -in(E,o) :- in(E,(f;a)). map(c,(pm1;pm2;pm3),12). -in((pm1;pm2;pm3),p). map(c,im,15). - map(c,msc,30). - -% m % s -in(E,m) :- in(E,(b;f;a;p)). map(s,bm1,w;s,bm2,s;s,bm3,w). -in((im;msc),m). map(s,(fm1;fm2;fm3),w). - map(s,(am11;am12;am21),e). - map(s,(am22;am31;am32),e). -% e map(s,(pm1;pm2;pm3),e). -in(fm1,e). map(s,(im1;msc1),e). - - % l and u - map(l,b,27;l,o,24;l,p,24;l,m,120). - map(u,b,27;u,o,24;u,p,24;u,m,120). - -% global constraints -card(e,leq,2). equal(int(s,f),e). -sum(int(H,s),c,bw,(L,U)) :- H = (b;o;p;m), map(l,H,L), map(u,H,U). -in(im,gc3). in(msc,gc3). subseteq(gc3,s). - -% temporal constraints -empty(int(s(I),s(J))) :- I = 1..n, J = 1..n, I < J. -empty(int(m(w),s(2*K ))) :- K = 1..n, 1 <= 2*K, 2*K <= n. -empty(int(m(s),s(2*K-1))) :- K = 1..n, 1 <= 2*K-1, 2*K-1 <= n. -in(msc,tc4). sum(before(tc4),c,geq,90). - diff --git a/old/out.png b/old/out.png deleted file mode 100644 index f731fd4ec238e76475532a0883d5ad119ad0b105..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 111314 zcmeEuhg(xiw?0KcP>P};AP_-7K#El9pdd)^y$RBr^b$f5m8KNwU8!P13B3hGL7MbV zASf+B2p}b)^V^>9yWhRXd(I#5d+yDpOK0QVn4G7fFFLHv)U52?#FBIz4=-{rKTSkhYhHy_2gQ0f9<%iV>NyUJqTa+1mv9 z2jn0S#~$ZJ6><>A3p)9rE3PkY%ip<2`aFu+LjM`ohLEX=Cx40%&hAIoj-pq(mh20+ zHbNDKl^^%w2k`xf^HcP<(1C2J`pX3CB@H&7R38cD%kNlSWxD$5MppJ`kT3Ctp>R%D z5q<%!Z!vLk1Vf~Qq4oaa@5O6esD#Qwapy*(OP6*62tdO$B|moq8fjRG2r8DMISvVE z>{<@Tg5j6Hkk)VrDn!xuK6^!E)cY)xXe;TsqpRwcJE^?Vo4%B%1oAEs(gk5@grbfR z8mZ`m2UiHzFGoSVy}5R8X}+8yJ&L-Ox+XjtGSqXBWj~X^nU;0$#dYt*EY){{TG?N6 zaG|M-p=R!JK7y~VyE_=w>SE=_KwrqXKSjCXD{Eq{2Z()-4R41aBYdClN%zY z#@WSV``&l$s+d}j)pyk;Pdhk^YBjB~>gi+#QJgMo!F9W@Tng&pQ~C1gH^}c%+H|#S zG(0OBT+LVaTY49-$jI9_Pqbhhe&@FQ`}pgHYR_#`&WaiXBX&E*94I6bRf9ot!m|20 ztgwu(6f`yZc`dmj?1cie0%|I%y>Xi)Tp^~>c8*BrLAEYB;=UZn@E%=Bly`p0SwjYh zOYv)#!bYYMP07tzu9Yt&r9)k#orl9eW2ArP-*q>xVPg$uh$3*Mxp+gK!i+Kfa#dJm zZG9`fC3nzsLV6W>QW^p>4&nQ3k5TN;yY6dWID4T&u=DCGNjI3}9l?%Oq;cmkVPPNm z(h_@ByIz#H!u{^>N!`Oc!`d~9+ZTjBhbp2!e~ma?`NWAi$De?XbDk)0KIl;)V;34D zlZjU7khi&WFWoVg>3eH~I16F?S!LsQ^;z#{Ec2)2TIARlT`!nkP<_sM{Mn{Q%OsAF zSzFH7B({dtCEQFwLtL5wAHJ^5Fxg2NM!ZR}Souuu#x!M>s~xK9qhQF$8S-*S1Cy#; z6)gh?HT!XrTL{bJ>Vihf(r)KdTgbJ>V#@I>nXz5(U>x;0`iu9$VD8j|4Uiv;)EkSA zxF`Ez;W-_Qm2?{om#NFjxpu}yZ}1uBYKe_qIb%nC&q*;58Z7-<+O-y&FJPs82dqqt zd-_u(T992hul>2z1;PmS1&KK8hWm{TM4;o=JC;@+HcRuAiuKD<;#<@N!J1T;FW)>J zc$ss-x{WOOBt97Jn!Y{yp5oI>cInbW`Su@G#DuLJV?UCLsb7anREF<*5^jECI*0(# zkmk!vtB}$@!DT$lQTwDXNc@e2w?wsbaZSOJJx}|x!NXb|_Av_PXdxXs#<;Hqv_qGDC`?}rD5t%1 z8Rqd3H;v4FBv2qeM72jU6HlmqeY8{k9@*K2&@RSg z6S0tv==;nL->IIFL@tour_Osm_?dnY^D`%a8TH!g3+oTafjCi$wMr#dz?J(i;4dzJ z)_*|$KD#pKS^6_NSv89n{)%imX^t9uVS_e8_hRqoG^96#H>3r`OlfZ1#wDrThP;*O ziM*z?@OI}hN1<=wTwzinw2*&XotaiZBcjR7^M2-e}7(HA+JUG%^6FoCA za}#?PD}vno5>SMoYewye`@0E9rC3g4ZI>J#JHXj<`wOSB_Gc@hc^1AcvgJ;0f z2h5Eh#v8_42VRAp-N}i4%DJqE{XPBMT~1k}G7fxbL9`9}5qgr}k6${CA`MgUq2Rf4 zKg+n_dI}T){p4GKaT9Ms-l!*W*KoI*lbPk%tlgAhp<^j!Nnxo^pZVsvVzWY`_1qy0 z?K)_i%Zivq>>#KDPM5LYbFhfMW^m2EWBaOGffVFhaD%K_uw*bpYiVm1MCwHSv?0VG zB>uGj^zaOMng@3^F@ep&(g-yP--dl5+?uxB$k@;eH?~%>cCvO!Fw}l9bo4H=-M*cn zU9=r?%l+2qL(P|0AAEV37KvK8;Te$atZ9|5JoT+|cqeu1B)lp$^MX{L!Dn%P@>5C=GIrmF8vPaH@SHQAyEaKemMzhTaVFyJ& z@mF217Lsd3uSYM^LTTr@NI1(>)^A98ZG3~LB~iY8*+a=)nB0+!u!#}o4MCJTQf(sRJjS5stR~vQHmD9KOQuNOx@5@T@fR%Cbnz{oh^OV`K zS#~x)ow^T!RX>+L_h4c6m?5foLPTXSU7=yF&rnk+gZ%Iv~EAqJ~9u6LbF+t0vw=wHy^C=-F1>mP;? zhkhA0ZHc{rcmX5b+{Wm$KMp&E{h z%YjQ}L1jKd{TVh*O(P~$T!Q@K=jZCUo@qTSdx%X%G=ckY;gAu?AiiX?Ef91fKdP|O zKJzd&l81VfI&I>X@96r`x-dqH@h#I#{0n9$=RJ4n;IW^pakj->JaL$tRzc6bY|f&? zla#oQwW785a|iCvO^cMSp)%kO<>Fl;^|_RC;2-AOjlyUXw3g*| zW~*`+PZx=kX5?0+*_;`sJiy$^ao5$wm31y;;p6=H=p<1^PV+!x$l;@eKT9GS~K$ky~E#kPxdQh4U{1@!#UnavYE#T;MwWNLsCxTbo$OrE|Yf zkiWJ3x0GkgZA3R*9fKqZD*OrLHAus#@D9nIF{gR6G@ZEyai2mz$H?T*&JuojdA@ZI zvAwlIM{r!%j-?+nVx^WBxgHjv6&A-RI!20j-hmW-i+aXdDY4^X>dtr|UOeS}mVh60 z0O|RX$mN}rjL-yYKlii$6=KBL89%ny&>-Le$`=VP5Hb>w03|};BTLBipYkKZI|Rgk zoF^h6h;$;j@b7yxf!|+$3Bc!<%)fq#-@YOs1CFi&pMZBn|8+Ns%{$`%l<9zL1PXc& zA3p|u^=!TD?A*N_J$%&muw%dp@@Fb0-UI}69KSw{mSm(gBh{(ap~12`IqL)!kb%K!)v)J0yYfuhRl-pg(T$agkv&*3bq$ z^zgC+iSY~a3$n>lfIuK=uc!8sx{8nfEe;&XusQnpJd+d<@b~xU_ZQ~(@Ny8iCm|sr zASfgtB*X{Y!RH<5?(-yo&)u8-UzPkp}nd z`&T>d0-XN)N$%eN?iSENfnQey?(qu>{HJa}RQlIhNo}V9J697$CpTcsfM>|w6BZPb z{zKq@UHb1w{tr>(|0ybd|9^`9k4wLc8hG1zJ@jw`9_l0e-wOM;@c+E{Z$W8+Uw!`{ zWAU$n{^Kk#(y|oN0{_vPECuZ1MSeh$H=Pu<^nqVsn*I7CiUq#z{OcDe6H-sD}(TQ+X2;vFX)9K=d3k*;Q|`NdGNzOLyV9&)?K zChRqLW{O_EW#bu>Q(HQhEs*fHAIJs|Hu}d2`)_VxlZ1sG><7N#WzYz;^zOj!=FiD< zv8`(qL>EC}1b^`*KXU;GqRA37^LzbQmw|J}L>FuV+5cLafXImskhZt>i~k#Gny6)& zzkD!of1yd3ylZCow9H?$>sNL1pj7K=ITL# zw=~@TZWS?HiBbglp$BrRp7!WwNZWmEk+FSsa){33|3*wLt-U@8gE9Cste|o!%lv}?c;To@@dQ8?ie%c`q3Uu z-Mknr-+HmbeY#4?elWwfh{d>ORpt;sA4ZAdoTrppA#QCb*Qgi z?rTe2^JsH>-Z#2jl4p2a9<*L+P^55rH1a{`A$QPrdn-oK=|{IiZi;fG44qU_BulXT zfLw*Ut85aju*1MxfBL&B>omBjf&}ty`lPEIR4KOcG84T9uq{#50U}|C{!~nP+pW3< z10!6bT98kCf25sFe`c+2+Y|Q5AL>~`CRB1QFc${l|7~XF9f{$Lu8{Kx>ZdV1$C56% zn}^3+ZT@O**SU2S2cY0`5z)h^E)ySatx;sV%{J(~k~w?vnhEbbg04M3JMMcUZZ5!Q zCZdJ(sK6T6*pluo8sa`&CR{4c0X_MaSHuFq>2zf{AeS6sD z#&g2SVJm;^xR*}7d%4}W-&XFg!}pgu_>YfVcn^+NvPSLZj`kbN-|H4pCAlHb;O_f_ zSWVTNK_A918AMd2XvBYg7gKE1@Zp$a=L@yml5-jsS(}3NXcqnP&Nd=)Rv-^@7U()p zeVKu6J<&>4pBP?u?lcbVBgRvwKBSW9uC4KohPHGBr-B>e&PuO*DKhNO z{F}yI>{!Pl^hz|6xb26^wpx$*Cu{Q?^)ZtbTyAFdslS#=Ug#NjzgZm}W$;R^KFoM{ zDaq}w2BY|Zp0+o#&TXU-Lz2%;-lF8;Ad5@4Ez~VitqR<=cgfL`J61n)@ahWcvrEGz zqY&lW{Bu)Ce9PVXY{5k4#u+(xumwr(uXfL8qv8p zHWp^0jLRLxJBQPa-X*i6Tb3Duo^O5k`oAe^C^GC^GZS6aAQhq^;{t(%TP$w>UVX?JY;@*pO~9z7RZTRV*3-Z zZS%0aYc*Zj&KR#)UG+KV9;G3|RMcrWKcj~mDN-t)?aeAlpkqbb;7NzDJ3YGbOi5O>Lg87-(`&rRX& zsckOhjxsNUJd{@t$0jP-llS@%$sq@gi_su!=*g4QTN119A~uwy*?w~}D$OnoNS2hl zPF1!C@lh5#YwyD(eZ7LQL6nR=Gqo;d`$s59T8;a-P?y^gYE)o?VXe;0BQcJ72Hnu# za=2SGm||42Cn>Qhl2@Jpmv=oUB(|G{E_(MDH<|-x%#oH&|uYR|x4EDEH-Go$2gl zz?eGPU+f4{dY*+}iR$O4!32*3GjDqDMeC5S&O2kcjnFQ3Z7;_6!Kru-Fkxg%KC%67 z(fndR^%!XSBI4rwedcN>yI<1#`10Wg?$61hBs{%MpyLcT<3Y(JT0}m z(wAa%N*{&5XgbX`8Ps96;<#!TZDS4Ho_57yy`0DOip~-EjkvUw*CaMM!$=HfyTk<5%9`jM+;Z06AxxBcpe5Kglmd5HNR4pz+x}fejrXx#_OKrNU z=S}4%B@v6ixn1CL5!|yv3nUhIyOIPYsUk)LCEG?FZ}klsl-7`}CoQm;}c9)>UKP14b-H>&4ULPa}t-y@V{I4HZ zv|YhyVuNLKMoV!~<1LkLNdGA2w|?|iHP#`nvL)o$Ib@;9?v(QYwl=H2HM-_dtcfYd3$zMz8YVTbJnhVwTs3avL+-L`w1%mZ{}V1nW!>+56OhP1ANagqBIn zz2^Cn+}T0FT4{?aZq8rM`=)ZwFsFYsDLaDL*=4Z9QjT6ta-U!7atCt^!gpnUOuv?&NOn2e~>TJkke=$0t|jl zeVv7-^iRcMg-tIW39Pty_>@MLSP!1pu)BUfglj%{_sz)>reY$@F*0*e;;=Ajsb=(J z>`EezH}LSpG0ehS(uKRqDzT6VlgS&@{`uw3DV|r6GE~^tyd}Vs+ioQJX5dnyZplE# z$}YTO{{7d~wZo9TpIz`nisinn!N5QlON`G7%*62YtjRs+n#_T<#QKK<#Yu_%v5!^r zA;+C{eNHx*3AdH|ZS>44Kl=pQgzB45p475t_BD+RUtiw-Le0hHt{El$=Mbq-=M#hW ze(UQq(wj#^5i9x_h*Wx$Rfav&ovl3 z(q$aV9b3ooat9!-Lp!&qr>whg*(aEy#wX1M&zX%Zk=b!yBnXm8J4B2ZUoW6*5VBj8 zASt6^MQ^9_;T5$oYxi`+9x?b;x)>xH*!0!h@e-4siM zIWl@81`!sz@Y3P`$>3u z{P@kNpT(hCO+LzQdv><~hF8n?^=TxHV{HkIy6LT6v|+d?@n^#qE<%2PQ8Gl}y}ykd zZdKc;MA~Ao(ZcU1Ia(G`O1^=96dyF;zrhZXO#v)KLdcO*E$rM4ann`u`WoB?&E_#Y z^<7N(S$Zl&olLXYJI`O{4TI}>#iC8(xg^J_o21^UOKMKwgv7+U0aQP+i&u zS$C~v34+L85vGgsWl6_f%#!rY6b+b+xz1ZwBJw>D!zbSS_AF$#zn=4ss7`UZuXrXZ zrMY@F%3C8#q>j{{$6&qE98trmIgxyMKZ?)ZK?@te08anRqEU1Tp0;dCz49`FQ{HSU57|;78phgzCy1-dN9D`Og@~;g(X8|jX#_q$P#2*w3{JhlRJh&3c64J3%vzTg^rhi(|cJ@|k zt4RtOhVYN{p9_qv5sl!~{Vjy>s|XV=Pg+e8b^p%X(bs67z*dT9o2TT&ION-?jFnJW`k(^&uQ^%MLe& zob^I068%vbB}s;lISKZ#_4BHjIurIor>(we&M+uBOz+on58A~ajU!N&^CP!k<9KIQ zPkwg2GG-=&Ky&k%jaRBz@P`k1nrMG@a{dN=%#Y z-FY&?eX_7V?79U?$?n04{qB-2X?$Xs>~YsZDYRrGmpN&mZQRHEtTeI1HBNJ;o2{6* zhKJqUz*)13)wwRbe=$P%P2_9lT^pD`>@0Oss#fmQ$B3d=%DvfOCQC{!M@h;xul^4fLL8 zIOYvdTPB1XdoU70APC6eD@;YTYwct;T|eY#Y?QssylsMLP!1)(@hzizsfo$`byaKnN(ukVCmHuiMdTgV# z>(pYoWhKu0=ti+TOuRpWB@dTh;kRCDxcNjX4Z9F8TNNZE6>-d{Kjw2WM8a0@^yD^e z6vAW3`e(7Gqjp=a`Al_*{zso0mL>y{&>i7HS$e$5&>n5XCX;oAy-W}>9G4X2?mrs> z_58r;w*^5&Sf@93i*Anp#5qqCSOrmSq1BAWKGhb>R%-ZWkbd53L|aaRl_I`2Hhy}4 zT<}|XxTFcpgU9yNIFRMICX~TU#wgr)wB3z*H?Mkft>7VRs`r3|RGn2$H$M%uR84d) zJnp^`x}2yH6anwzL8=KNsZSS6Yh7y4k7 z-EbFy!}?eF#-TnTaag3?S@Tx!QjZ?2cT^=XL8;>6FKhs6k+q&Fnb4i**3hE$6R8CASOtRpBooHgT39kSOXT`5Oej(XKRWww1d zPQT9uA(@4+{RbyCD15}qv~B!AvND-kPP~DJ=YF~mdlth6fN1Kjt2bY zc0G+t-@ny=Wbx3-qjQnp+uxT7InLQ^shy@=EsC)8-3)q<8H$uWdAE8z#qW)7rJclD zHt$n21n2QuyHr%j3^n6d*T9z`#(*O!@zERCSdRa+J1A>Ql8@beCL83TJcQ0=yl3t_ z{_Uv1wjysG%~c}5v9r9XaJ1*kzcxHa;XXspzA;(Hn#U?S({$-m?xgb8AqPcA>(0p3 zi-;ka?e7l_LrlSKM=WDuHPx3{yxLwf9P7I3pf#D7Q?oo``lYz`5F<@)QbtwVHEgKi+hEl&Th%r)La$>N-iU(SlUCoe&0J!LO-_j%(r?gc+!@bk8db=2g zZO1jPyxZmi8C)XW(>0H2oyID|F_dq=)diX;d(cj74iB`)R3YC*UF??Tie`fw#? z&ppc-)N>e4$wPyg96xS!c%)kEToObrE>_WwnQ= zzqtjU+Lb&Q9a3hgb?8Kbb(uumrZ(~^k?HixvA8o$eUUt;W~!V8cPDB!kRg*gR^nr; zsmQwz5kq!HV=84E`NXwO@!B4b_ji-@Ksb0;US&`)vZ7$Cjo#|UGSh|n$>FX(@P6vc zOZ1&|zK-*j?rqrAsTM1c-xT}9<&EmWn6ky3p*m#&oBMsov2+br6Ty0+($CJVhd)8` z^Sj_aPKIW%VwBvo=sG)zKl2arD3WZ?oY_r20bm$3(CPP&n)Sh7XL91JE_FzT9&2Wt zG-1juj?G2r9I0VNr81)Z1r{~7R$IIkRY9NDg_zY%w{YX_CAF6seDXv@JmoyNx5KA) z2PyQPDJCYAny58^5Fhe%CJ8JnMPv zCP9kb@I}O<j4C_L)) z6u@$Io8y|1ZHOEki$BWw9gwbZ+{J9AUJLD#qD0=;e52v3OMtgUU`;&aat)R2wYWg;UF2M_8A zGS(pDM{fq2wBLs=ZDRek;=*mwE`o3V3^!FCUjQ`s)Jn9Q1%8x?g6m}a<2flhBqQF3 z_`6CD78zjb47(6ts0DaOi`D&PIc74{!JpRet$H|sPp)Z@2b?Fgm-}KF&@K-2dR3Fu z>-Vn7*j!hMU@-Ne;YPSkn(WanF&Fdh1fp}eG%`i5LaH4l2_1$}a7M>K43;53(aT}D zC3B`gjhMm!Y8b7wSYL{n%=?bU( z$?l+B)@+}KMe~p~N`Z`d$#g}$;7~P7%pZTFe-Q8>HubPhFqt?6$M~R@U-%RylUTP2 zddwHmVaCa<1cdMAeJA#3M;HN#MRotJiPEI`1g~YPdP6*^O%iqu(pOgBtQ!^p{y3N^ zqg;;I44S;YPqjd&;BS}SKp@&zSo+52_hB!0Y> zyWSuVtEMj$FRdWu(Sn-vIoUnJ%8pU2i#pBT=cmu7I@(`z$cskBl@|f@g<-jYRAL2! z9b5XL-la_f(v%|n*|I#|&*K5QYVKZ{$8(Q<&(NQT^b-<}&n6BZ?XpDRK8!7OqTc?; zd|uXE`-za;w37gE)|SY1sVyuVO&>K*xj(U|%)(5EjEwtM!oDXFTP!gI<@6g48~H*l z<2YD+k`8!UVnp@xL9t^{bgSsB>_vy%r{IkFvR$0_Ko>bJmxMzn%Y|=Q55=aB#&gz` zVt7gn{juTz1`Z%JUsR2DcGvUllGZq2;omf}&T9C-t=1IFdZx}@iP~>H-`kfn+0hwk z{|2CmjWZ>~1-VH)CD}GPuf%DPrM6@)l|pEVBMtEU7r-4P6|OYuGjt0^vLJShk6+K& zgDO9I?QnC&qMpbr{F#U8hW!eH<`NxCzGBJ|kN8{OL2EO;n_G%GE3NzwlGqi`C%txh zxOzUIb5j6TA(^+LX~uNra!0u_T-UV5tIHFX;&q@*3{y7vKvQqHSln;pU%2Aq;1^ES z;T)#u-QoNbC3ZTh1y#C5d;O({jV`5#7=o`al`qRt)a4KWMK!c4*9^BNJz5XNel*Q= znh;ZE@H1XCtJ`ql<=WgW@LR5X#-f+cl9U0|CkRA8{@W)Jc)BL{FaEia{xcayig{|+ zqV{pPz2@gX_qrWm!wcBSZPFv`a*u3Kgz=12<5(#Bjsza=i=3E>oVS$S7*<}|sP@}G zsY{b!MQ~rs9xRe{%j(aPvpO9=e>0m7I1$wV%J4L`Vt;6!66_9e1+ z>BV^LrRZ`Y$-i_yO>qX4~G_K)BlJ}4RI4imW;p{t9gU*S+U~_({WBraDqjq(y zxK=)5c1s5wljCn`QR>Rmpj%W>W>6EkCeA4@-1Yiq8^C$lL>wQuc?gU;B8mks>J39L z7+H9iodEDw`4>jH&Fc~?>8j;+sPEG+el9Mp7WfA?7@l~1J#1I2>ng0b%r;`oew@6| zvG=9bu|2pg4QGMt*ydX9xuVsXTOAPtCy689`fiBYyWmH4Wlk}EF-M}h11U8FZ@$Te zP=EpGJ3Tf7%g3m=HC6<53FD{CZWCGQY^Y(x)ltiwM3M7+C7Z>f^#W^>bTDDhoS&xY z6NjT}sGb0BZUm&yt)4?>HOI|bZZi&uLTJjlb$zy>Ph;`<9iIqK`w1eNQ66iTJJx@m z0x_wO{Ws%b)P!G1&PJSB#Yf9A?B@-`AO8#E`DM34nkVC8<7Fg8`0uR!p^(@pnOkwTZ5{c&uyGEDeJre2&e*eWF6WdbG|QBz+V((K%&iXAIeS`@Ukyuk;~6e&b4 z1iQ7xK~VbftF#hzj38dF(fBgmD*2h?f?(YgC zl?tbY6LUGdhjS|%^cTPRfF`z5{V2m&yt;2a_FMxi%+vY-ZYc(_@Izhe`~EtBCCmno zzQMVB@29(h4E;ALlh=eCKpN) zLhggp{upn$II0mb&(8r|-gTq&zFW5dF6?&Qz;+jF(oF4O?VVPwHtnH@@dovK`J>LTE*MH-m`bM-M9E zLNzwAa-dDo9Kd-SnQqq%6~JuSx8-}rm#yH}a$jCj>v_vz3w6A_9%BiySzK{+{wCf( zw>>C}Z>iPXvNY-j=&{#j9$El5QF>-rk5A0%(!OAmbI2}I0`+6A>$@ZncZD(pJK(iQ zIoU^I(Y!H`rhZh*zcp?~$8Ubk?7YdPLJTp~)VbozCJ;XLv_jrd`wZ`;XQ{8IhK) zwR|lKaFeW@rt=%UY3JAKuu=`WoG@-Zlg^p z*SK|W*X4MB4s2IW+X9w~m2*lbYfGAbg)4J{CK<*H_lOz4V_XVEroN`lyfhe*u{Em+ z7@YLJz80lBSWQ!A8-Wr2Gt3Q25dWpFMlP^+IRZD+*LYtHJIlW+4?8PH?0j@l+`8sV z=K-2vxHOD{3A_%njG-6Uob8BVb-bz2m#ECbon)1F1ALa^x%l+cCxwZYIR&TPm43r` z^JezM-TE5DdzN`_1L$=1!W*@Y+=~Hh*8nGmTE$^x?qB|5$gS_A10nu%{4Mh3ZT!65 z>8CS2a!|q%)^93%e#7EvGDJ;?yCuq7Wxe9_0TDiHBh$4e0H4uR5HA~Sbrqt5r5}+T zZi2^((_omNVd9YPDM0)^4dn{nBQ^Bx1eABwLMpHy;X*HEysEDD{q)@oruZn`8RR!z zWjE4V&>T|UR2A=7AM9b$;FxG0qO>(-;}#}j6)VKF>(_kR+^Y)|)n5p);-O1wx)EIU2&6eWu7>9x|P0mQ4CF_qtTX#TIFL%KXR}Hsf6vcU>}-1n}4i>z7S}KwdSPaLxLej6n0} z>vvl*15$-+(LZ_Ld0XZcRyrCa7~F#U6jYIrO?hzxE)y4PluDe7j^f97c8s*zP+Q!F~Z!j#0> z9de9y=x=k`+}IdLtGbwiTUt*>jDf5Q3kmzOmn*CeT=z6=hpLn=aqAVU*DW4TAy;ts z7Q>B6JjNPIQ{snYqouYQEM{umZ2M8c7&pT-o8!j0pHtnJPecz|!^7K>tD9>#&B1fd z014n}n}d9C2P?1R4l+#0N3J<2k;tFl27u z*x<@Gdaz+9L1Kdl)E1RdFxU+rPn^f*N8DITNo+|4*!`oR`gzY1fP5a`2LRf-qe3g1 zpcUk(g~g_Y)MGFE4n3{DMXk&JWv5HqUCXaWwfy&AAqr`u($90k8g-3vMhEx`jqQ=%{PyyuXx-J3 zs&zt(@nxF6Lw3$7=@B`57VlKkrH8t=tl0x0k432f*r#o3J>6ceB!1B<3pDd%*i6>q z2=1?Ay~{w|5ftGVWFG`Ypu8%U7g*A|m063ZKLuSGlpBW{Bst^-&QyzRRS#Udj6>P? z2dJqg-+3}M7ji4v>Q%pu^+Wo09 zbd94x!+^zH#17E(5KI7>4YIZ#7Mdn-{Cwkgns$1-{HWlp7s5z~$Ncjj{$~SrD14=`TQ|K`2zT1vH^y1)!D3vJ!z0<{S!wqpCE<6I3CFBad>*4s zwX2;pza@Bn+Pso}f6X^AV3mEsViL%^U>3h)lwUA3VDROYj63DFEZ|7GB3Uv3CE;SW(`Ra$=xR!jUcCpD91G`3o zJ8O|}6wTdR*;_LtV@Ds{O{D5Td0~K8b^66^6C^#)0)5Mn!@f%0Iq zTF7n(6W)gUXdsvIJw__DnAC2s&Y77U5-)?>hG;O~bx0@Y3DOhEHbgXeBy@nGA^Gp} zPHi5t28yJ17^kh>L)dufe2l1v8N)|<=Sqp6NC1`@>al`jmTKGyTMx-&xi>4Wg(=p^ zDzruO!xORDfQh7mVw~f(u!n0#*@3pFxmtD^;!(@u#+mbHECJiM7*0ROmY0aoSFI@e z(Y1yBF!5an;5pXUlpV|FR!k{O{nma1qy-A6L0;zxFdxFE)_HmBrk22Jd#@R%@u%l( z$9-QlnCu3!{TH4WHsxBhgipO;5?9Ts9<0r)V-W!2ByvVeT5(XiWm(YXq0Y`~WtTYy z^Sb`$0Jms(eVWskSCmhOJ`s9Wlpbq}e7DM%cm0@`mrVqhtW3up)iZ_2aAM~qZ4PKX z13mU6PVYLhF!v8*?h2!V^!5xdH5aneK)ZrcOJsBW?@U#=$*mvJTg^Vq#9azfM1udD89otkgXYari1 z!78)fk=v}^-J7|d>QO!;b%-sa&{V5Fjq`YEZ<`fO>zn8dES%ih5kD&94U)c|F`dVB={ zJU@dz{MH>LS9WG1d$^~^AhE-6>@-;b=vIsWbcwdH64_b4@AIg+NnGeqHiku4zb>Qc zJfP=l-x81?7jI@n50D1q1fH>mXMx;g0AEbf1o6*Z_&iH$b4uDjLV&UT!V)d@Txzq$ z43#cDU2DFZ;j=mWI1U;NbE3hej6;oLah7|RWaF84pF3)qIt;s?8CijI9OIIo#*+G+ z8&8O>SKI5!|!^5Y@wB)nXKLM{ldZ5qzI9+7Zw0KcQnf$ zPvy;FP&cWy_d(|DS32Ko$lCH0PtOG#U%M@WCpaoPzVtkOd=U6_gT)(g7a&Lbs*v72 z8b80X$^DwNHKkn3S549x`Hd2y$|Y9Qt&rwDRzbnkzD^HjaK=PCq&Tv)RUn)F<`D^? zz}waMMZ7W0_#Wo@Cm?l&1}r%)4r~!bBWr^9v zQ4YShlY$cdY>(KC#bC3_waoqV?B`%yr;)|74*4^SNpW?VWTL!%+fnt|Xl z_#0_j#&_VI=&q$Xl1mo#6dYPDUmJ8G%F z84_R;xEg+}v}OP9H-Zfm7S<;Jl?WakB(VNO%y~?kbY5K0uS2r;h}nORV@8iJM+y8H zw>7E7V<0J+BS4G9*K=Y&>2a#8(bL41?ajX+P0SQ=zby&U`nk}F(CX@UiJR!rD>jx< zL%4?kt!$qtGb=NP15Ek&^}99x_m~9WDJwCdVy5UtyM?ms@NYSj3kGhYSEI z7#q9!d3uyQ4o0oVn^Fw;^#ESN!2Ep?h;k$jtAs36RN5u78bc^=tnu=2v)yXPt;PXzgZd)^?VStQx&$XDZ%v8+qH zzr-i!thBx5P&FoxhZu=n5|#K#ku>Uk>e1E{hn0GIPK-i(Qta86M

?`JIDI^>-2ZT<${=fsjWVV`^Ji+xs8F3?p5_PSOl@1{`DAY{ z7|Tt@9FX8Bpy;qIw5m6Xx7%l|HE*^!`nhluvo5~dYU1Wafw@P|W3Hl_!oy+Lm#hKy z!nSG1A}iV~`2l7x)h6;LoAOQ17eGke;d|1U@r%dWaB+0ssBJ5+UH8GHmgT$Y08qr; zieKs6({mfC`!%Ph`;%67oxLelk%wBl>QE1NWZ|6GP|L+Xhi3#tw`jYKL52~Wl41P| zow3VbI$2HHFCsacPfD8NsGO^(TnoZym10q9+**b16^KPmIYg=>#f$ZEs2x-C*gp5+ zLwWG9vxjN3dB}9pgxef0SOGG|GAR((uNv{5o~69;=;KWZ5v{Fv?GJ4*%s_IS(BXbG zJdpFZ%$Pq8-_iq3nE*#Y4NspERmIvhuaSQ|)B*@ctt}pMw5T9dg0eQPXhm}T92;&= zbx&ro#-VWkVBTjcD2qe-UapF%bPu-nvB4oWsebA%x?Zx=2 zXFu2&gmFd2+ZGo84wlRkqHWOShniBpYm8~Ohp&Y-(~31RyN9pG3pEB(SMpoKED@%b z!hs4o#7@&vJ5(R+1khLh>WL1(OGpw-@JAO(9!c-l0QpJJ=GjLHVW@PGcE)SH{x69d zo*nLZ6av8$gv?y^)nd<&c(YRJwIj1z-vigvnp@1Uc4OY^R6+oN1 zL`(=E&cv@uGQuZ)-ihZF-=+%yf4%%GfBUW(u9i0^!aH^`4tnJ2O|KY2i^wr4*$xTK|fXLS>Px;%65D`5txKM0G*V47||Q4TF<`^#TUAO)wlzF8S&tE;Xlkk_#JY+{!z-rtX=R`mMYpe188elbgoqxRh8>^uTSd9Yxtn5pF zV>SNi{6CuitBL#1wEzEd&7*fNmj2iO0{Ep?&_C<{ALI9z8`nSE-amW(KMv3DBk<3* z_y6U#_kUrli!ulKt@c45koPOx3X|U>DPJ?@x5~SXb!aV@rD6#W=953psDQ>tC=-NV zrWgvbr^!ouL=YYLLpYxl-X%Akk@h;2-C(0b((9m|w4! zn-JCHnb4`<0*a*+PxC1`XtJF7;Ie>Nf;@=!O~CVqJ>xb+@J1V3_6sx@<->5o1d4tD znn9u)hO3r0l;Q$%s0qpc5MnhH=PGQnm8 znI;!*|4UFlrOO?NfBxv&N7^V#-6RMwL_9!uN*&?+zuM0M^wO^V+OOhAdCnPaB6#V< zRm?A@i~NGna1_`5WOF`Fnk-&1u?Ga<1Q#6Th~=NsUj%7`NF3!ZJ+1W~0fsK&UxI`N zEX}`iS^+V#QcaMUiUtnoMCrw$kmCH#reEz(1$voEqW7!#ktoCQA$do!sT%B8GSh9E zZbkOo@7i9q>GH1SQ&SfSFA&kZJH1ShXaU?De(l}q-GuRh$LwM9^8XSf)eqbt1!gxO z#!@KxkJA28+CMAp|L#h=hTHewOx|xRPkz&OemCoU26TQ>t%T$Cs@$kQZ`aM=8`fP4 zd-yqo^d>9Oq2V94*O)|%My;7)2^j_9xK(Mlo412mU*2hx3r*q+J?92*nJMDr-lZqs z@vhkjwf=b^9{u}BY~WSG3;&P3zy53T`~Sdk1q?(%L`6^uDG?B9$$`=- z-62YswA2tVkdW>eQlpU^Fkl8qcZ}Q==`kj-V1vQ;^7;C_Z{N=!@%drDoNd>6oO6Gi zM_uRKPc(DC>TPW<>Fkc7L%Y_~Ceuvea6P5dS5;*3PNm;_=}Iefm3GjWbWp4F_rTXQ zQ7_N6dXsh55wcIr9-e+}8BjXn;9|9*CU{t?WDoqamL4h$J(J$&$-B?(2QJnetyzae z5*Zp-Fr;gBcI*8tYfJ0qIt|w}cx?pY493Ch^;R>uT+ZPT!)|hTo#$eQ?C)=!5#KG1 z4wmYSYF1O|k-zEbQkln#W}?}~`u7c7j=DF9C>N0I&fh<)b7^B4gV21@uNQu3k0rpVsV;= z>mGGm(Dw51C#f3$apH! zR@CV8{+8dc)<#?A8Z2iztB*3$-i#`m_$}s7??n z<6os410f4z$A-1?BX=!u-Gp>u+sE8nw6kcFM0u3R+5?6g8=!8GC5uddL-Ii_oR#xXkc5?0`dhMfjCieH>_52DiX&UI=o={a)=mEuePw{fS zYcsttGNzO*>vtFo$WcDv%J@^vOjZd{}Ht9a)gzu;64Z&r{)*3MlUSSF*T%kWF!Rtw| zgJT&;dRaXG`nJO&;m!j}VR@-Jmpc{;$t?eJM-lIcfI1EVFYNA5N~>^5do{yd`hfYA z`0aJ&0;iEx+#L&Du=P>IcTrJ2IZ{T6E>2gQLRWnK*?7KkpUV7WmH`O~H^vica!S$#u=S1}Z1Zqqct1u8iWBb#W{sU05=w^k zK3?|nM0RhA!9>&`t60%HLw8VwmTvuyR*8>9uwMAiQFB+aa*aqzw+2naR+HXQq0}vD zXN$2mWaaDQoZ>FmfHx1}yd8-){u3=*dqrLBNp4qTjg+7Fyvd}Gd?O3&aFUbS9}7^q z2%x*3M0%0FFv6tE(MB4vr5i1d@onA(BZQc0hz?VnXHb52Lmq2~# z8V9N*ALBwXSjSd&GM*JE(tErtpv4 zvj|ZLdi(qY+ypCc0`sC;qw)xy;roU1wFTaD+bi6DuiqKl969g}26GM72MSN62B2p-c%P#p_9$%AK*@moo74w#wH;2;vT4 zjZ}!pY*wB4nnC)0-*mIORtpJBssPcMMIcl&Bc+kN#ddtRBTswf#$p%+`Fcl8dk0NN zVd{9o;%vLFh70xgV((9fcWYlp@iq$$e>jDZX7v7ib{g)A#g0-E+k}&b5y`W}uqO47 zg)!2esA~Pt8;IjbSnSrjk!^nFBh=CLk6u0o$G9=H)BGe`W9XX8?A|FA>GKnjzA5Xv z`xTJci#(5!=OhrnNdd$xP5CAzl~Up)Q4p9Llq>Wc#KtKiFyoqO!jb(vSnAcTels$# z_CT~TbU+Tmbrmz+51Km14fxOy%~qfOXq2~mSl4k=u#LI~hwTXEca!%>uo+5?8ulgd zz}^V(E2=&%qm{bsfgVffH?zx}$&G6Uaf>Fn$KwdgQKMS@Fxe72rj24veHP7&kuC0_ zSM-{G3+F!7kNiT;aME!ZOrR&h3m=&8nYhhkm5}0L{G!+-Mh?ovvH39RVVKW7wfL+Q zmSG2(NblpB)oqAp1f$GJw-w_=AWwRrgCa);KRjZ zk~+o$iz`@oVTTaP61LW2RNT4mKYXJGS1|gm0x!S25f8P5lTWJO`L>%3aT@>F_Js=V zxST(k$Zr7iiK36D_PYE}@XWqs$=l8F-h`%C-b=qR!6#Z{=oPEF;Jce5%Z8%Okl*#c zCz$McZ=W9a1{TeqgFEYok5jJfF8xXfU9OF{8+9TE*eyVS#gGf$+2B-?2&Sw5vT`BR zVL#bI6A)0RBA8wKY+sG;J-4K!z8}#9uQV^n?KVz9_(4K|2g-^>6^6y zd{jBcU+$|$aq-6-nQYPbK@*F&-H|xKFl<+SSAXbqiWY(CYp}h@D}avd&a3gyv!-r7 zG3A)VJ4-6kr#>+rX+pcm{fwex{3&%v0PsKy|IAFjMEM6vMwIuV-c^uTh6ko5a+ zSRQ;_h#`S``4KXNi^gjy6gV$7sc-E9b9ydZZd8%1eTnNWjw$`7;H4gx9vh+RtnUGas;|$$J+LaBm2Qe%95fPYfOC$@;~m$MEEc z{F5QLp9vkl=~%s71kJaC*LvhAmayW`Qc;p!kG-;J86R*%3zi286BXA9VR>NtDeJic zH5|o#`Zpun(czjeS_4bKH)x^-;pVgn|vz9SPJ8w{(MQcC%*MP;@ z5#l{`pRs$(bt#=@&bu#l!bU?7ps?Veo{5<GA>Q+PV+G>FHo65XR%QM; zf!a^Ls3qLTZUMOTr*Yl?iWTI;EBNIshT%8#)RobqKR1Al$`LDtntoAW@@>#QPLG&Or_FK9n&VXSeH1Q0RBr@G7F~`k_3_A6DuEd!VWGB%ipUazPtt6 zw?cNzkGP7i5VI8BLvuOSt@Ng3bzkqQBOCLb@eGKQs9}Il;WT;E%VNP_blxwweWX5< z{^sL&G^-;vaW7-*IYy+C&T*z1m}b4CrR`a7e9$AB2DqxkL~IyFT=d`^cd{~E3+@)F ze!QTEP_9{L#d{>BT>;3GIwFI2k_*;BB0wIIv^8V)P3bbS7}KI@&kddD0bc<6I^MG)fFBg4o%c@Zo&1sKX&$K({*} zc4)cP(^UHWXc0T&n6wa2ET~NCTldc$*FPijuv7FV-4`SY{>&A$L8@5y3RQ3*5C?U* zxGQkftwYpSFzRFG)-qkFc~sL}RM1A_ef=rGbDP<}F4b7_@#rck@;<1J5FO?ZQ&(vQ zk-MnV=uzW7;)qz#FUgt0qS}W5OR2z+&JkM=T2%2NLfNwzjcupzp{(7XmG?7{32voa z`L4w^OZL_plZ=|fx9w(jIm?`hwcC=d@)M~(ir|)b_2hwCeeC81@r+_cF1Q_`X2zo* zHCnII0Abi}0LD~vot}8oeAK-@LiLym4Kp-KTJU%h7QX-saf?wRHt78E)7u)wGvHfA zBKy{iCN?A=hku(HTNMO$Gjp0m*ouh2ucZ3jXxeuoM{uKBoR1L$=N(&IzE`#^0xV?Q zSM$~eSbq!0f6<@tj-%%t_g=sm_`tVVV_T2}C4S&Muy>a02@Y|R%*xR|7dVt%muH)l zqk1%$G~@>QVebL1w8d9QaaD9V4slvfWsn}{NL<;+m?irUy>Rx3LW z)MB9?#qeO&-6ssbNixGK;zTIa4wH74Rg%3q1q_>kr;U0~E^6ncE^;)eMBohiNc!~} z#Ua>A#fYUhZN!7`9uU~1E8oJy2mf`Q_Fvb8=oI205^fcLCpm(0A7^=f=46#blrR)v z=z3u~C0J)kP_tPq$_%bOw3da{O{49`}`kmY)7px*5-Nds9e zqpKbTRLT#t6N`;dVwOsnW$}5nuu%?=)D4_uVl=TvGhh)ReU<&0(%kA(YVVSG>uZz_ zvF=6E!jINZ18I&~Y7&qnYXd}&^rNi{lI`v1EzIi=Rr!dxiHWf7i&Z68$3ddDU8(qemaY{)$Y!^ko!HXl zif3}f4!MgzzO#+}Tn~Iwf3Fqcncbp`c&j8)`eG?d48hD#7;Imc^S?QAI#cRz?~!6} zMRP?}#uYP)C_B68gLp;an6)Mr#DGf0DKIpv?+EQ|jRzt-hoflSHY@^P%U^L^8Q4h# zjW%BgN2UjK0hzTUq3{dlD@qy$5C$}@9^T7$VqOkIGURG2Iy6`(YfoamtQSk z`L(2BS5ENB0;{yrGK@w9?n*p~%M!-fT%ULQS50UEqm3Ko{jjoitZ7M#W!^S+r(6ga z-zDDZy2y{1?=Z$+#j-ED)M$g`VzbK`CyGH!gyJq40q+*MySm`x-B~%gUpov*JGrgE z0YrRQ5Y*0~r=S|m1aNAOge$SU7=t$9vR#{i0Z(1j-qu3yrUA%750C zBK0M^OE|+25p#?}z`KKiT8y>0$K+Gu)=x!_NO#(y8C?GNAf#)6!0@Wb4zl zzNs`N3#@Kn4VhX=`*P7Mt;;tVYXJ5E*@vx%N+=^Yq!S5qgsK#?g_|2ss7C~nz2zU| zrkV^^b6t3#6{2!NokWu2^EUnTE>zGaY_x9nRv9wcZ^q4=DAcvyNNONyaREFzRJ;DE z7eM9ffmxNxx!Y|jaO;tZl8w2h*{sn%igX;nk=V7HyCZK@gVrq1bw=cOWmwKRiozpO zH_v_l8c+YdTLSyB4G~3=1GB2oMpCb0fm(xVM#_)RtJg0cEZWef*XlmByxX$yP^A_0 zk%nGQvqt94@2u(xQBKqbr+$WP8fOa=GIW}wiJfbvar$zd3|gYCa2<#yEl`bQT%x$& zcpc7#=pXvo_Cn!g<8hNLKVpmPNDyN5w2Da_=U)I;t6K~8XN zB~k)zcD<>iP0do;f1AD#^>T5H>lD1@d(^9UjjHHd=mJC^zM0<0#Gu5)rvS2^`nZzP zLebbLi+2;9A42m^T{v}vZ1?)bMJ&b4wVMSj)T^}P zTahmz5lrLI7fu7;k;4@oyVkAwU35D)PUl-K3wO|yg)JNfQFE%~=SH$8yE5I^hx{=z zlP%O0;HX$2#_KPUL7z{E}UjctIUztgVxFzmP_to7`A%* z53KB5mW^1C89w+Y0cN%)OI4!`trGC6at$)7)vUeb*Ofidxac4hk*379N|Ht>N0(n5 z=fI)F$-VM_Cf_^``?-iYT5iQ%?x9?piI_OQl1Kb#G$4uD56a*2TDFAr1;WVg7Wv>;>Sb=QByrZ{PA##L7_P|tc-CC@m517>|Urwg2ycOV(( zx1@jYjb>pi{F#>0hYIuv*pg6IBNierwQ;(g0eN|(s2-CZBsvb5V)D6bc(`RA$8KkJ z=p}H}oPHOidH=7h!GzBlRu?Yfi23b^HE_a15C5iKf8B2myl4nH$M;wP zD_D=1L1qW=c<9P+cXgrQmRO2n&7N^U$p5fwY050WGdy6hEcvLK6<%F9Va6zIWyIR9 z-H3Hbjzr+k9Ix<$g9F+ar9b3om3T|h%7X7$>);yO`tk1xD848Emf?V8A5%aKcA>apOpB%e6D+DpjznW@O-Is-Cn{z9QK1OAJRE|FROIlAR$fI{MWoa9ndqgC% z=NQbo=XP3sl{W6U&e|1va&d3ssBlaeG@=ltfv|oTSWxbK{Na-Go!I-V3uCU+b-=S< zoUb^U4hN0@%7#6T+&DLXqWYOS?Xa`>=YnpP;{|2Z>#X>UhP z7yTrmtVjpjfPgwE+C^&P3veQvSm-*a1EIU3O@OJ3EHE+ zr_-uJU!}1F1ZD#XNZk`-1FeAL&~p)|wDCC;6%2i?72$*A^>D^dBbXk<>F$?0{s=E` z#MI(+C%7(SBteGc{UFK$Br$SiRq<+8OwQiG$4P!O8K~~6#bc~19sBz$>bI`sn3a8(lGu(M^*dKt8S*Q~ah}P_6tLM}!c@;s5{4ehd>Nt$zRibUGJ-V(uiJ%4xUChb{@HZ>KVANn?u_?Yt>S~D+>V^ zV-twXF9?}J2K|FPKS)j~srNrWQxS9Op^U8Y#ix7}a~Bu3?EDIjSp6Zxd4T1@)YlG> z-itXxmr={$YgI@R-Ww)l8Ti=K!uYOZ!kq3<5BExrk0@B^iaJe4PFFv7M-DaESevKS zJ%#b~MjA>;cgXE|7E^ltcqf%_xTWCv4NZ?xEQgBagL@oQVVrZmi{A1* zhW)MQIv$4Y;XExd9O;kaUGt_P+B0LOv(tPG-A7L%$XnI3)|yNd#_~7{*U&01%Z3$< z$hg%&vDbBj{TY9jFgMxirlmu&o*VF)F^66gzvl8iR$A8o=XOZ>(vsQ$&E-&6r>;6g zC9$L1-?O(~XUDLacmkoVzHRjsSrC$a>BeE&EtrvF>bk)yT#Z*Ix2`ru=qe%KkKZS zj=R~BM*r!l?DXE0TGxbFosQ;4HT;&M) z#mxIFG9sOtsqSqSJWQPTp4^?vhKU}*#8#*F1bzpU)?~#vvSIldVZ4+U;{+&K`)U{vI+w~VHa7~9KT$q`!sCHXEuppFd^p@-=j3<)*L%LR*{os((e{_!LPezo^5Y%Qq{h1 z@(ehHJm_eh(sS@F!#t*{WNGB^kbd>fYfy~C@j!U z74$E=6M%2G^tBJi+vmk_RF0u}_8OC80`j|luQsVK2yt&83=BSDHTJ=->$%sbw)aYh z!S^QT!%rrxcc5Y3r7e577w~y6QQva;9tvr5@m2#HyKn64^~HE}RRE95#m{;3>NSs4 zWF$H)FY%b^&I#b|K1aM4=_GLZJlnAyiT!Rh>yxE)F0l}i+Bz||?=!OZ!(c2VTQuUw zQ~k})xn2nSS^8lZMWU&eOu1=UB1>=}wNUhek6xDJ1sHi$D2^}c+;V2J()|Nbl2c=g z2G*^M1TH@RPVK*8ny&*eXJ;`*r{nPr8+&0#WjU6K=6!EZQOrGDh8h1n@Q zKkycqy(mHZ@ zbtWUL=g)s;_gZ~A2y;hLu?e#qY00tq z{$ee)3*4TCnGx=Ke_VdAt**5s-vG%yLcsh}b*#O*X9{nUoV0H;r*xBdp zzJAvcM;cI4_k6E?=UyS1xB{DW0IWp2x^PF%gdV7=XUv5D07=|84z55J=3M93(O;-J z7vcBGOr4Hmd4fG8M&eAzK&c^rH0m4hF6`1M^;##rBt9xf&d&kSI}Uo^8cq@7G9&-f zk5PkikG~j(!9_!BPgqimT%fIoRa9{JmG5bzZR#JHc~pi?agKu5MEx~}`t5QIf<|5H zt4a2e7R60ZhV)Asbq9j&y6qK7fAuWg^6%!b_)-(|s#q3GuUvgJj}uix7~hP@QxqXx z5trrM$V~%RApZuBno}^?8p99!%GIf~fWWm!ze=OFUoL&Ofha0;-n_Y+q2)0;u>GLXk)ESOVwF>w~*km<{OlALg()R@TB6Zm?D#D!97E zqyCTjhY4Wk31CFZ6D>$@FU=)?b8%G0s6@W7N~)j6K9;=BBmLVvEudNTQSo`Utq!d; zY-8h4(%Xwx*<4R%8xI04{c~I_;&Z~Q# zSO5RRd5JHe>GSru(Bdssnd%d;_VXT!o9`ULEMe|T&ulnFauYfXlfe=>WQ{FuXj`j0 z6)w4z9(|n~aCs8BB7W^<&ryH}`1A`^P0WJOt{-FfBly<22=AsT^t71xjp&;%XMjO) z-H%oIe0n~6n{?z>aG7|~s#CZE9NIaYa`ZP{=#m}1?U>MFAFOMVy|xP>)3HL_ip-2m z8_e$mEEzlHWK_1PK*V?tU?|MDJ(@~C;k5-J0LpPG%xD#iq4A7qlYerH1G#WEdM)%~ zHH06GSUqAO=;1qZ7knueCTK)-w1J36uAvJ&Sc%^C6j`%zGr#8&gVnPOU*vJwG< zq|PLnWNgMTKZRPh9Xv?;rqB6u6DHfg_$;#@#NXlorERyS|5O>2HZkZI8H|1lmOV%} zGe6=QNe<`7L$BeDC3SD|k-8gh_YnWyjF|ou#<3mtI02k{NKMtgzMXey*4D3?0F2_E z=;x{(w_7Q{E@+#*2w&ThpFu(pTfuXQX`enSyvw3LTFW>LS1DWq{1;W$zf3NqRM>JW zBneUIkjPt$QH4Xm{vQL`4wL0Yv(v_LH_jkTUCMZZrf&4f&hHq6WR%z@(OdeCe(FSt ze%~jbc5SLUMR|@vrGGwoxg$%kIr*@B3M(<^TZ>n2;bE(%nuO^hrNwc*}_ot}DR7pyfD`~R#K0>~+SMF0mXv5O?`y6ZjN@)$TSgYWpOe%jmgDs#m5;XZ%qB#PFb zhW&Ut%YNasY5frSV{6%aEVNqZQ^dhLspXkNRH%3u2RP&qd&N)UVSLj%Ms)B=t+>?F zKO@2W&cP%nl^mpS-Dwl04*b3bUk{ACdSL@1AQXW;13TmLgS}#})+sac@Mnn`=4_rQhiNK$jcC<;2v=_@tTSo_q9^qpv%#5zjgZ(7fs*Us z20NdunPc9XmY};WqaB!e|DWFOi6=FNP3w?KhNEQt-z#e9>azIA=C|N7MS-+f^Mb(r z+wJc%>?kJRS6MymteH1*rI3y0pEKSWyw%C(D%s2wK2Z^|`kUCoUT1{y8lR&e3|$L} z!B$SP)qg07FUK)_G78d>)j-;43m@$ueisoxtw&dNhT63vg`*y;F0Hba4``0Jf6kLj ztnvzw$f6f3<9h?n%=D?$&boaVVjt>ivAF@`E5% za22kdqE5-v0oxUs3EMjcPPtbRq}^-SYY=WNz!h2#BWtYOy4VN>rn5}Mn3F5Dm3OzL zzEHr-(RjWxCi@cST6c`$E)^_R|FS#SvPh@=^x99%v^9D+ZOGdDInMvyFJZXwrpvsP zR?CglBW+8Vs`~fS4$p>EggiZ_2Hs5#MwQOj5rbOJgeAIW${|-{pZ4e#hFB$9q+J$d zpt%~WeukRxGtuVin=^Fd26bmIDxaa5pzrzjpNYlz{C~}j7lGW*^2U9?3p}lwZ(e>l zLwAow8N^e_@ZdGAMdRpOfb5{W#@2>~YN2CTS^bG(cbPmH!_<^vE&ZMUx(A zkpzA$>Af0#hK}nE*zXF^)zw&iF2*apv56?V)we)%vKkj7^H`N~iu|nxH5y)dIzC3(~XbyZ}wk2 zd$BbC3?*lu;ms5<+_-yJKfHJBxjFOl<@(bqID3UO@!e&GR$e0Mon0UJ# z=;~q-#D?~tM8zzzPoIi8mcUqLxq;@F%)rDqJ$SatsP36^W`ObRMOFScV0Cp3^^3|} zYe2W@_Gj{y=(wI;kNOumv{vx*Nc@xWGN85!2iRVp=RG&alCJ?RuE397m-^5BgNnM! z4s^wJwcx**zunc-Xt^)T%syjDOT0{?m$00VL4XnW)YG&Aj_U^{$oB zbZB5^RUp!?Znmn$Xr_W+@dNPKeZDUXRSScr9+gfAq-nhQwDFMnteDmOzXeDS_}~eH zwA!bZS7Wn)DTaW650eIWvNNC?C$k!$gM;7q=_d7yu1Nv$)0kxXm~Es+|WHkt#P-(H${v30bld+CcgwUo?vrJ9QykvCKC72 ziIwJRMF5Tc=~Bg}?29Syo?=MGiTQW3%2&u4N~K8yAjwvw7c)bYHh>-Q9XQb+eDywG zRH^%Y^_q<;2g&FQ7vWbm>CdtlOi%v%w;=h&Z%OW7+;6})eRzu?h4FE=7fausp?n0F zuNrMgazDF9qcsBzVr=cp%z1Pba33bVr;*|8MH9Iww0Uh=w@tI9Av7n5=O$Hnd!Ji^ z?wZaSsxV4Z8N?DsHuk-EUF{526%^m`rvEaqCN-;owGsMo2`gP#;{JMN?%f%>2avDs znCqY;-=SiCNvygs#d3P>sq;nN%rg|rP5>i*;y!c*uowR%x*2#DFc*RX$tM3zO538f zy6{<=tC|8)24ar!?yvDp_rqVlS1zV6g4napfHz$X4}oq~0aGwBrfUDygo8$mMYH%n z5!mIvb8ziE;ZmbZy}!br2c7G69tTuS#qz4=&9itG9&Sr>;g)yG(}cGHwtM*^bi=?iCJg+|S@=}A zBIr^p08K2!T<4jkeG8xxt9(su>E(e#Pj0CeASdg8a@v|JxGJtBd^L*!4!@BFq z$q{Zls~1$ADDCZ9_e?ulnGMiFv1_`vg_}^p)bzCLfQx_Y3K*$B8;l@N?mRn{u7ImYZi<1wx$A2W5-5r%fsy2KS z<@tEe`&y_`!ra&zK&dfWuu6zW3GGv>VyJ2D=c* zE|3b_pk-TIe{5prPvm9$tFm$To@rC_#R5}1f+^SGVC1qw;aSeeR+Il`>cFLyKVc49 zm|a_USFZnL-8Oh}>ZX=~lp`9u*c4CsMGf8wjincI7Jfd$(zaf87Pw6f(ug>Wnjd33 z61x#ou}1%4ag77K+OU0GNS!?%$oMV853FlP-Du{czfkBmIt{@I|;S=@H6DJ4r;kl?@4W*M~4>0~`LtksvB9Bmtw!&GS*b3SXqOw<1#+C8xZpWOcp8B|2as|UFMU4fMG zYNL8FSV5!3bNT1L$L83tpDMjJn5nRQitQZQbuxrXnic5)n7 zRn8y+7uT?-zx%V>*jM(WnUA)tZA)79{rpzMF6UFbgOPJ8+@ZD~x z`?y1w>$~LY`!r?K1_>6Y0yk;O z#IHSaq~=L{ytf<4KjApE97{zop^dxX8>245_3wv-R_HEn(rK4L_V3=Jm)oiW-WYWz z(&gOl?)7c=VZwJE`UU<%FphXVb2QQ`O8*ykGPdpV}Bl>hBkeDO2KJNdf)U9W` zq`fCxai!vqt#MFKAguCk@ItR~-mm3zpkZ@=L}7{a+^eTE0l@V~3m&Ykzsx_A&1$Wj zMDDjP)qRzlJ&spli5LohfgZ_&0{4oB!5QBN<@vi@b({6P1UHL%65$i&$M{!RA$E_W* z!-1P{TAGk`wgS%>1`R=L!PMDpHXfPHzhF~RU7hDmFv#?oYJNX|1@zuT+8a+t`{s#3PE}vj%|LzC zzNxT|tN5<6NrTFy=+cT={5m5zv5Fj>N zFJZ^t0^+iDxL;|K)W(o#O&DTrHo{W^;}cQxbv4zDB3k^Mj0%b^26pZhLn7@;yAO{g zTE3mXy+Ha)?w0woGJ6&jsXV$dWuRo_hY&)@q8iKe{USl9M>t`ux2H()LbJmu7b8`; zIU*W-fkDb~jiiYhPD5YViuZ2RD(Odfkr!%gKJgg>*^{EVfnefX(g}`s1{2+c^+`8v zJ|*CO>>xe)R_0i&D*QX}f2aAwNU$41(}xW*)dJ3-9n^h!!Ius1ycLfgh&}1z*6wyG z3s6mSjW?Ss>4IcKYKWC7p4nYYJy50o7|A zxj-#CzIr!oWuVHbS~^7jfHacrD6%c_5UOb49oQjdt7aV-Lty`mcC@YU-cRjVnN%X0 z6X7qDDH|#mF!ng_q&qF902@+#1 z=9hz4;>h{o8;|);HRz!&*oxIi7H%MBSm`VfADoZP_@t9({0Vky7KHZq2_%e9>=sMt z$)KMs%k6q^NQQ$-HjA!b=Ys^Cmv2>^uj>&gl*+uO&FobKX7bA zR>!>fSEqA!0?9NMUrov&^8NI_!6XH zc&!HFmzrg}q|FhnHlLkMp>*4}$$*!;P++ji9LZf=*^J#)DlQDSg~C&bC&o2+fv z1F-<=lezGBo6yZ^0Gnn?PW{V>wak&$#sDacDz_U_u&~hAITabg`N|;ov6-T~9+HbG z1<$n+fNu~uue3QkCAa7SIL9Nq2(lVHsobNi59yR_0 z#CQx_25w^>L58zpo`58pHzS=buEXDfDVU89I7GE~mz#+hr>@1&aeb|UPrbezdHPPG z+@I!kqGCN>O5M)B1r?7{>fMBrIF9OG)5K6e~ zAnLt)>@Dji7a(U)FxQz8fm$(7=pwuqrrwkm(U%=r@qeGjw;}P6njROR2<@WmM?$P= zx1w>j>k;zE{aC9-f>PIV&i1tQ-6j9~J+ToZ`}F*u5HlwnG9@kC5eH__7Gn)dgje~K zhKTWX5rZaO;tEtldqq(JNIxG4mobM8CGyO~kjB0s_A-6byrxVNEX7>0^es?DS5OMk zWB`=`HOsR8nP>k&#{l$de7xp1x`JE?_G@ML9pQp+4%M@NCN7`WQ;-!f)N51Q1%!)P zem746;`B~P4ZI2x+-s`g+N)gmg1Q$XKNV_;@}Ep1dkw|PvdIdl=q6VNqkm@&?-nt# z`NnjV`XmXbnHdO2^EvPG&)(fa+qjE-*nQuH=OCc$tK z_a&_hOBJYMR3CwkoqNb+vJhModS+v~I-g*S(%uXW3WHZo8Xn;o#+(CR75FEQasTjn zMjGkto4HTTZn}%-64j@sr-VRTA1~AuFA3)_VxK@eEFno_V9mr6|LI?*nR|#0yQ7Z2 zY6(YN?qhYm9LaBbIG8V%0K@=6!pC~I5aRid@l)K)Xct)w)YTGhT*q?Kki#A zT+RMt;CIv(%E>{kDONq5YPT8=FNVxh1Wh;_cU{(0UUzd*Q-|s~QV8p&N<6I=)M;FU z+5xWHBiw6TH2f~x}YaNQDZIm{R_?uvipsJNu<)H7K9 z3<^`2q?=KFtlRNbaXsew4z4NApFeheVZpl8lnW z_XE~48`74!$%Y4O5{?_;gm)c(kDHba^Nn1{2+O8gtoen)$X!7KO5Vq*;63VN8ttcX zxsNYj&V2j8QJ3r0l1Pm^1u~DOEAFxnpYUy%Y*wF8lHRVe8e8qr*mndwQSS$)Oi6*bvkZ&(-x@_vJzw^~QL()vs1VE*!W<7%n+!cF@65oT8v{Q? zrb6vKBtLeV5l5}-t>fJkl3y^^3-XxRIVCd>IzG`%#+d2`inVta9+ZU=EBj`wXEo{R z9dFu)jNA_{t-Wj61A6{;>F9?^53<8j%&|!W26wo$^e-nu4#nIL`7ZQ(myKzWr*QRS zV}L7f|CFy7%kdMFy9v3Xkd$Y;l*-%mj5-s_AwrH@seH2+$!@z9avN<5U*uXw*xcoH zcwWY3Y>}4Al#YKX9({4`kwT(2d0Rk#X2*$_IE&+!H(|H8&>sn^`e0yiClH939X5!UDbBq?nYBUcZ-{y^u9 z)dzwCpX+TxPl5`jH7H5@K{>i1_ewSjL-!4{lJK>n9Ipe-PAw%V(FbxJ5hepdB@Qr@ zvo&F$kF#>45WFgU-S`0-O=Ng~u+Y!z;t@) zie2QdFF>u}RB829m^(D9ChF|uO%xY90#0~8;e)7sHl{$%4jrC+CGeWHB*7X~W>+TZ z*o9CLkOZk=TS#DO1QRN(FElMU4ugJscXR#G6-p@+yDI-<4xZT`fIy%R(VOU4qBjc6_u787v{d_9xzp(sz`4wM1gJ#?B z%#ZFu)ld1j-MhopcizN54AA%zr#y&18=Bm1Ro7XA@W|~K>tYc&>KGpkAtCUCHRgwF z=YQu*82DeA$^$kdb{NiCHJaVVbJG9jEBW*iB_yyp%%`6aEp$GqKi6MfokK^%G&=Z1 zk~$+HtF#ol0Gk?x50>A?A72yX(O4TOq6={%q_ZRiynANX;QIW^5He;dHUPVX(&Ooy zO=qr#buHyzxg8i^WnSNHt>~6FB)WyoZSYkv6?#W6B%rC$rXc^Fg03+a7{g5e1h

;!?Cnvo1LmK!9=&!FR_UEei(eINY4RPMPi5<5Ri=+0x4%7S5PLvtTlb%mf zlN2!9VX~Vpf{Aq0K=I$7PdVhnS3g%RscIcA{{Pr}>!>Qbu3uOX1w^Ejl9Uz!Y3Y(u z0g(n5K4 zv9Qpo=%h1t*s;C78%iF%`#%eIB@#l{8TAoNrH#ICo2cqT7FM_orK>W1YNO!zx_Dd+ zAGodjUO3r~aH=64MZ)HtbKxq8@vVZWzJ8utT>HnZ#A-!Fg77FzQxeCu)uXfqv%_4n z)*MRPHhha+83m@gio)+Zc|Jvj+i$Q0z8wDs3D04Jn!y5GMB4J?MJ(S(DKWS}gVX%? z8q=k(=h6)WRTaPHgU)2(>->WPnZBW#M2OsZqaKnw4M&U>J=Px8^KADKEvwfroPyUq z_U>tQ9Bi$ge;*pV{~YEvr@7y#u*^$j@_1-eLpQ(GCF)Dj50yIz7N>`C1gsk!j@yG% zquzUv*6bm_^LMJ=LOV6bLoew*!As97*ZdI5*x@a~@M0ElZF^=fHnRjZC(S7$?Buly zb!Wn`d}!Tb_!GJ4sg8D~M6E%r)|`_i4@Yjrv_x@!f^XMZ>6k$cgTE7FIHjOQA-O*t z==Ad1!SE)Fz#ZrXf~XU1EEdP7L@+b}11X!{#*#hlu;+HLma*Y0^Poy#`AOaR1J&Ve zpI$b}rVmHXwzE&i+Uf9Sclx8C<5Duq&LF3eqWWU)y~Z5}*~c3v4MmFiKxH>k*`z&g z)B7x26mPlV;4e@l;68k}EKRBNxyb`LuQjZAh^!{H#9GQnsVq#p)JDAO1#)=&_46pF zHR;hGVEsLQq5kx%+1B){Ha4p-mp|0@LfL5F(wB;|edN9uk;#FHeDp2qi++T6${Pb3 z{#zmgJNcr>KNp+xjwiGHWFUvmgTn#U4bw#aD0X>x2YC-3qi9{wzd6GT^M{{9Lw|kZ zkH3Yjd~jne+cW$2TU+a5KbgGl`SCCBk(&al3`)R~U!|P-h2KUW5-!=OWKl=a;B_y* zccc9}f;ib0vYA>58IkthU~kZUF+wh&Hcaj6<}|Z5-7Up4WD2okZ@?$xojxy*nPG0g zi|}@Ktoc0i|wZ9jX2dV0Jwv({27dB`ZT6-kp<~`tjq;oy`E5)J8 zx-#gMybuvP6qC)RYT)=()Pr4{P;flpKqwRX1yB3Q6Oj3bz9KC#lzG-6>)X5hz@cwV zLWZbQ0qXx{D4$sfRisO?vWhVd{0ekw`djIi&hMM zdqTU5gXr@YHK_I0JCV`u6fR(*N^u)CRsgN55s=2pr~{`|{194do{li;c*(^x|N27zz2M#p(5PtY3H9 z;-NqYb4Y4xI}+=T`?1wRp3c}p;h);arl-uhCB&Ya(d$kX1)Wxk5Bfbq<6QZ)v325P zQWqHzP5=7yJMX}+CX7}!y%uSf)7%Og{Q!$3WKg<0}fpum&KlH)s93Z~fv* z`RxA~FX?$fT5aJ+v+UwpVk~>|8sm;pqzJ{VKD%sQeYS&9O6#87Op=hvY z!Q-MbYu92VN4|n2@t~?`-s2hLrTT%@@w;pjKo$HExEPT;<6c-hzla5_9}Hr$g+7qU4^m+Xoxp_j zm1|_j6-5)o22rb-bPMXU6%jbS9d4e3i`F>*?5tPva$gaRimypA-o{&ddBVngk5@mE z06PC}V_{`P^*|~c#O?OSHJb6(f4S0%=$}0}o>tOVw zVH0)PVoPwH$=tgxxI zA^4+Xo1Z&70;o`i#F(C5Ld=QoN8MC)i;fr`SrkK7DE}&@4>Brv$JM?=B9$_{GhL-wcQlLkw#7d@&zU6{T|?%NSVRjpSN}pT&gd zy5oEAewEF^IaL>Ny@e2EY8*l29=}HFVLPwWrXhltrkQ4pir#-YhPF+Znc%Kt-Ks_V z2F%p}jbU5c@WrF1b4W6R<+@Rzp2*7vkl4~9`SjU^3(|C0w{$*#`s)SZDOpJtO1<=F zOBnipq+M?a>K7zSqwJuLgxlW4B}<5r6vIpSB<*?6W>7Y8T~AtIHG5>Vri$OHwR?(p z|K?XBU&I##(qrNVOG+uuNhY4Q2m??g89!BSLoe^@3mHc-(_Zl0!AKw@1S|BOL~9x~V-k zZ+s|~73*Psi*2;?Ig6b4j(2UYOXj#gfza_rQGSh^Qq>0WN?KCKOdKzs&FA{jZ}({9 zX=E&OuT%cs-@w`^8oc}STq2_vqKo z$(78I{SV$UUy0e21jtKDzkhwvrur6(oPi~4-Pl5JQI3^FK+ZIgsrZj;^ij z;Y6MpI~w2)tV%I8or!k#hTD5uSWE?m-M3z#c(w`p>h%yTB+;VMs$WSy&DVP>&Y|jv zRmtZtD93VWG^JY$X$A6*kU-b$z~d9&LzP>shoe(LRMq2p;xG19qY0o%P^rNAFV1BM zJqd~1t~Iiezdl#)G#yv2yBLgOl@3p*lyVn{)!YXP^-b` zT1GqNHyx1zuLDFMREELZ{pOP%M$7s-;LY1ED$LxNgND-|&tDbK-MPUD`#dV0I;IVx zTsvvco4v>S2}&@2yVPX~d%U%7$3Y|EsBagN*-MAmf6g&+(8s3vcs{)0?RT~Hos0ZL zdLd>TrxW0-dX?sQu%n(1z& zavV0vPI0NwAdX)wYCKD?H5AtuTB{ku*erDo)c>uoI;WTXNCD>5U_vJ&iH0;Gs2N&||c}U~d|B*btD?RP&n;*T7G4!pk>g~$r zO>gyVKM68u&%ZLndI&Dn;ZBQcS_u1rl{vB^Pclr?OHUf+^k%-9^)Vsx5eJluWP)*h~YcQI}TcY>95Yt>Ch0(7+L^^r>u-Cuhd05%?L82xW z{U%;*tCt#o&ILnO+jkJQ!ORQk>C|O9y1an*8>b`Gd=Oz&D_724RqL&w%HJS$F*iHo zJPIT@8?*fDYfvP9q$;+2Zr?uAwSE5<7uLp@olBjDVI+aYe;hZRfQ)6M*?m-c!^v(w zZ~mub*aXP;eKpRb#TN0|1v97uH|f4yWSO6tONi zWcuArn=ztyx(TuAfnsy{DmT||j2-a4O>^Be;5Gj<>P!xKYBl2dN-mOswS&E`I^G>w z5pSY`+@i+J4Y?@?6Xk||CJnYPV{>SEA_1gbH#$u7b>~4C^PmQ?ja6R@gHksADnD7> zPEA$qdg4%{L#)WfX3W^zPraU>YYCtONn|`tA-ddK+G(qLLII>Duf%5MI;%)0(*wj< z%r>+u%+*@ovI`v3f2Pw!J?q(xNDt!bmObZVxOC5!gy2nfvJnh=k~JHU z+^`AzK_x9UBnVrJD>&ckIh(P*#sS3?oY%Jv*M2fQTM3G%$uN+XjiDMG*ykcN)fvXp z6*JHA(o*B6UUfNWRD)EAwJEaVG(Su0!#13g&rzuh&wHI6PPFB{?gr;4Oh+X|5L4H= zn&vt;Yz7h*=Y>)f7|2Sfy?0ZiF*gZ~{Tq9~uBIGlgm=XX_IEEJ#IFggeC9DkpW*ZV zIAxo$xzrZ-TSy)Ak#~%t)eEUX@kTqB^IxwBSI)$ z^;MK4@EFc}A2>P5H*FvB-z{A?f9dXqyZQ56WXs;zj@@l`$YVGw$s5T*Y0Qy|&zt6{ zEJ~-I+M42HEj#`zM)6d?V5m_c$@**KpLxi78%e6N;oWuAL3@IO_F8rjAerTf_rk87 z=sCx&(u4-uloeP$Tx+ega;g{l=5I|tiJk9rwqiaSrb!m%vM{8EBj1U4n4+>hK%Veu zp7W^k{%lT@d=%I`2CPjHf!{rD90Co2(?Zyj9}eP&+y7E2q7d(OF+9v{@a3 zu=|0x4%fKYxN|phk?>(x@I9j}qokPE2W=jH?6A{=fe_VrMXOoSESIIt3Mot$ND4aH zZ5l64WU3^o{@d3=?qYLLqt)z4zWb;yry-@9Qb&#(tly#9r5D{lV!RP5XzlFEhM$pOZlT#6PRS?1MUSz~>jp71{zc*`@PcgE)NnR1l9ZtLrqj?Hym zNPoO}^XH_QreVIVfma1eVl54%exaK3FY~?En~3Cf@}KuNf!LqgmB}fZAB?ee@tIUj z^V%<|JuTcTY<#Z!RVF_(4$W@1UqFg)iw5uE@f5^|!4!G6)2M>in-~SBIRNE=E#+}V z1icUA73(Fl&^b?*emjCjysDoGo)uZ7-Hbm4NOhW z9AsCn5oL^lY>FDB_1THx6U9<%({FTzm|DmaM~i?{etjS5u+rNi*mH`yKf^Qym^kT7 z^eQ|h(xSg7ZI{SWtAgrH>;0|m=P+%VYpBY+b231S+%LfC?+Jb3%za)%dvhJsIxAtB zaXCP5$g|Q}7m*GQSW8Xf-I^OO^!v%cAPP#t(N-vSI&06cAs52_pUnEE;@ldl6QNtLjDR5B@SCI+q%wgZzi6801=JKg}grK7hC173q zMkmsxZ6c~4sS$#CyEf|qv0&`MQ?Z^7xj`7e=xP1-dNq+!zYEJ$$6=eG3GTbSn5^lW zsiFIySkx#SIC5y#c9KmMuovrV@OkxV5iB;uo%7?|N+PLhlw`l%OkssbG=cq;c`{^b zi9jgN&g;g~bsF-BXS>nAYy~%V(nMBV=&Gs-#X6J~QpZ@CUC@P#_K!Zc0X3*YLRN2T z(7NP=jBP6Up`jbiozw2|t&1i#)r-ALJ5wl)fb}F~Xdn|MHFg`>BN9|^=J*e&CJ%9$ z_-vM`@QhlY8R%t<@8B4JPbOVc;On`_3e}&p4|{&u8dS&#u)m)nTr8CsNVV$&;VHG6J}(t!5Bp_eJ@=n_t&YY| zO8;qa--%^QRNm9iNhKQ0k)q_H5y~>=4IlMtkc^ z0;6w{yE(iZQ@B3;A$*>P1>2ptB1Mh%hJ&|$^y`K@+ns2g&)0!=RfW0Q_sHG!HKI0PHcw#XWvQbF6Irr8TFw80Fw41=;4_+(4B>OQ{ zGVFE~Yz#5p0I7y8(c6*tLX||%9}9(qj>Re0&C%cywLWs&Jtxx|Ps)rLD&hL(%NWBE;}w~87g3N|4R#QK#u6~3t^Ov< z=8xYzV!lCEfPc4JL2TLSWj5_i57w&Og!4Z&(M_HkENDd9EwkLus&U*548w-ZI;#&NicS6xelVv>@p{ZUqH=m zmzN@QAv^adaz6dk^u-?1>#a$GIwrMyHMGlpF4G$H!x_;h&+e%n*Wz%)+pbwev1W^L zf?mGuyq=$sYS4|h9so=2Un^SLz<)x%^O zFP*i;XRdFK4jR39ybw&tuc<0BgRsOAB~Bt^#r3K=Pd2FFPl(9MpBU91bt|<71iUPK zO{nxuVsG|_7pc>qsE)i!h+`$yLesB)&du?788N5CHk*tz&@k|@dpsf%IKWT#pG+I= z&Oy38=l6g03W=3hoiQV{Iz=iyBe**nNxfYZyuP1~zCRs3xn3$Nf8WAg3>!2IyzWAl z@~`SW8}uCmZ2yA57Us`6_6C|gJ8v$4_j`26{c|J{`fMz zW%2JobFb%e4Pv1ZFebyZ#R!~{fe_+JB_96C@+hHndgcgzJ-v)n{+;_3-P#ihQ<;h> zwR7}Q$KNb##+E2HMhc*Ov*jfwwd3KsdIFFa>A^`$TI@3UT@L%Kte0i_aWv$JnQC7G zWtI1{u%#@MlYRZIfHHC(O^&)~>CMR|yb$6%X&jP=YCv_enhf^^?dB94?V%H2u zb$IMFU6?jh);EgGmy5zIoM5ysd=O^uM|bi~@K$#3OX$2NTZK6J=ZS@bX3~>FLM;ld z^L}$pB$nIi-Q}ITpvzPjR6(}(Tkz(gxcoDnsfJlEFKCV}?Tw6)w-W+Q;nYwoAH(Y# zLJxWAuZ)w?D*$+}7+>A)G|%*ShGsaQOgi^3$0 z_t6DW{pce_L9Z+`(!PCpmar`OSI@mWsJ)AOI>R*@mx_B$Y5_|@*{Y_r*~(ITdn{7- zyK{;9*QQh`Jv>J(Y85Hc@R?;Vo9rpTLVg}{;2;lSl9u}b7XXOf_|ZgFvxARKH%2Xs zAd00hS)kRVHtW=MW>GPl-h#1n3LCW%)IuJ?c|Ur8N_@QBA^+Dh3{lHKcQ(-*0S#ey zo+N%~_wOry13kk=Apu^s1@p>tS3f%B{){Ud4R8>xa+*XMJ32P?=6%XuA1o?wdS&-+ zx$9NosBH;4`9|a8y)Om0i}W;$1;eLe;}|B5ba&9@M^IpkIA4Mdv}nk2&xKdvcCAq; zVlyV9jMyf!&B=MnjUS#y7p`2l6{R&pucS=jD-OT_fG0760HDD1ymWBj%=1a2FlaEB zX-=#)H&GN>^JzR7+YrD>*{t8#J~FKOiOC>N!-9egI4Hb^uEG)@^d0BR|Mlv7s8_%G zwY{(JqlQDG9TH?UGq@_Le8XF$i{_0#3WCu2;X(@w1$qdG5AY`L{}{V`x!2&ub={hM zmkQ9Z8T-h$Y7P-sam$fH_@v(z0G(DL6dF_rGEAq&vb%rb8d%Z(!8QE<0JbswpMY`7 zJvP`rc2m2o7=~#ca&Hqaozmjtp&hEQ9CD{xMA!s~{{-T+3i(-Nu#Wfs2{ygjWe;Yb z`h8F6SYgFaq8@gDP+Pl4Uj79$%ko=&Wn~rGz`)_=Vhwt9y zX1~323pLAyu8xZyVBJhmShwlX*eIHBKQDSsd#ErT0{CIVZ2BsM5AO&(SXjriv??=@~)eE(scM+Ahv98|}Vah*#0Xlp>d`X)W zp70Zo28%q=8OV&H0qF4+Sf4T${Ri-Zrix1?bnAUNQO;9<)lxWB>pKCPZO3}kN-iZY z0nW1<5QoLWRuSOY9s>j(Phhk!SkGO;OC+R<>sPyOaFH1bWymka{4&a=$7 zp%Zcwofv3XqySJ${!Wentm+}4X0D~PA~`sOrX9d%l0Y9H=~5!}bVp8yc9*MWY!j?aP) zFnSE&wz$52dB6pMS5VSG@(4o|3Kn(5xkgu@ws+#BfX<}anE)9Gz_S3NsacFduhIZW zHfl(QC2JHFik#O_P}eUHqtZDI=?v(IFlgSqyM{2k_COjCDVH9gR!b)Z%m7vKFK-)r zxu|>_wRV6irFRO|jNw7SnX$m}+?EO{zrq9$UWpap6^2U$Z=e;!Pq0>e@X4~EU`$np zS3EM7^p?he7`Fj2aK$sRz^dZFVXN{9G2sHLUIBl}&4oXLPoJS~O3DnsLihnf0X{N# z8%2y-IykiigCE4Gkp@7Nn@}7PK<0|~aUV!6ALto8C3%-j6Fvii~ zwr*2cCOB;=aNFQVZbRIP8QPOq&07egE@K=imxt z4L(X_{(TF7U-F$4EmYHpnFZ_LHu(2nQTMzP16TO4w*t`ef3lnZ%gFH_@P`=EGyEcf z5JlH7tr(T_&OL-aQf48tV$XZxe*#1J28i0@`{5{}cLKa>uWXPJig^21X!L_BY+00Q zx%&d>0*-3?8}zNgY}W|o0pCUg33%=sCkdW$7yMKi>`Zn=oMi4zog~@WF7Quf#x}=OhyWX|L zeDKSA^O2mWDeJl|)xJbtsW@pvELE<{kV+|Z!ZI=4OWy}spEJS zdf8*BA-{HcKO>V&~@^$WcqjLo%KN}Jg3EpcjAfIs1VZ4sP*BrV*_Me zWF2`tr$O!cM}l}R3n0!@oTua|U1sdevngG=1wYxq!uaQ3^6UEeA)HQ%oJ+?Fw4p>w z!kqfV;Sw}XAfOxJ6<`9n57Gx9Oh%Uno&*S!TQ3J=Ip>PNM^wyLi@%Phj?SMS@sAeS zG<_c`@j2TIs$E-28u7yu)wI$wTu+@sjF=Bcf$R<#Sw+C#1qRz}*6*z3zQ2x{C*ZK6 z8d9OOBf1_bb*C$7`*_|*gJ|b-PL@(yYFwe!bmjWtu;Rc+BTRHN)c7UjtzT!ro6Z3X z%USBg1U`y*?&Z`c-@k1I2+x*XDy4f|0zl$_( zfa1#!KTPOUg+-lRDQ(f>9coTp5#-^pb$uvCOes0PdA{iRk`WxSQ3TcZDIlL^_@F3y zV(c`Q0I6AKFgBB#kDVE}5H6x!9AM=ko2vUThCnNwTU;DC=RucqNM>Kej-hOmp$?mXR1G zQM1Lnixoai=j$9kC(nuX5;!U^q>*J*ZxtFKdD=D&@Y0`ssUkXI6uexlirtP>dIqhg zUkxzP`M_K-958C=-{z9hT!rtqYK|BcQZu*f4-`)=6M3xDts75F)vBy#lgo&>kLuZB zHAQnDhiu!HHH^Q-C>wyfO(P}KLDSLpsL)1r*&?rxP|B$M2eaqz#I-MJt(83*9M@Kz zSoL;0okGOCT!e5eY>>}*%C{fl;%o#e&@JlYhVt|_jKR65tuabD9n?NE{Xqm93r5$` z*+CXb`o~Q`-}f&8$GohT1Dt$0w^pS-xDIDuAA@Z1ke678{uqj*xLfa_kn{Z)BOz)z=`W z8q*~5=JV&BH>}oUl*E+z=Ug)^>;(h1i(Bp-O5#XtW#)(*^}13}nLU5^kF z4)u6l_Ya7r7$x*q#_1O)13nM6B&O?DMO``?SClUZk?QdBMkYtkvwx&ex$u z?%}38cgT6*HxS+t-W7M+lO_r3Oi4LB!|8V+bCV4;$u)EXV8TIrNKkw2696IjS{zd%5UmQAa9Q?2q|VJvMYAx0L!n9@0yf8MmNB zVYgBb$9b<~wbE2(fXfqvQyokH6Z(^xA*Qq9A6e_SJ)q$Nbwt{T<1zuTOo>7 zRx7GUJo~iv&~!6hI%G4`aC^I9e9nBUVq6`Vi1*QL`pJXE22xJrDJ}waUqLzg^Bqc| z>iOXkBUz_sJt~rMzv(}zwbnUqEo|ml$m&9!CrwCP(r~dd!!Coq5*E73SMY;6(9}bs zZ(o8~NwTrrG@vpzXicnt#R4TnrK>0Ml0k;Dm=PoaEquA=K{ikI;Z< z8734U4u*=1CQuIa%DYWlRplle_m?joPeQ1j;A$F>Z+qk=uL5J2F*uEEs2%DO1aR0&hWY{Iz-%$ zY-L-vD`0x&osqQXA3g+#KfBDn4kbP|WR(_!d5XvuXxDUmzh!LSkfrv?r1Jh_aO`3b zA#(K6uaGozeI!@qCDEH!V*d|MS-?cXtm-`hCy-kLm6FRzYp6+xS4!Psh)usyw_(4V z^(ZQ_!aUFC3`yM>V$7ynJ($Wm$g=QW3vYr>GsSB*I8Iu}_&2MKW~uQ9!J6eR>%;kr za~IxUKhd@u%V@I-^4Hnuv>9}rM%CP4@16G7(gvD#>r)0kYz$=t2`=o?CC|Q0oL(6RlPROg z0uGzZO+&?sQ=(p{IWF^F<8xc1(0IYk!IosHQExC6CnygVATsO7{-@4RG7tSW~2jz%m` zw+Hv3Qgp$PuNW~iO-@ z6DV_T4Rdjj9qtY;+$gML{~3!hr(A(a=@_{_U({5`Rjs4NM-wS|S(WGo(~F{W(qb5u zUisuBqzWp}b;@m{5CFnfwsM1H8&WPNRRIQ!ePR3_%!Wnu;T4#3_`+_{VI5dhWnie% zcTsad`~%X*ixFaZOsSrd4F~-~>wWz5y)mWhFGcD2=Aoyx1VV?2U!Sc|9pWg5 zPTasD&e;~JWj%?d!SM~F5P0>0>^@&TAaEWq?6a1y23Rp)=bDcfZnc-7z2^a`%~pkd zKC@PJUvKxxkKy5IkM%@OmSVPPhrR=f49wz9eGkTcASH~E2c%UO3?ltc)F{`D@85fF z)@I0Ek2aBxPa>#u-81x%V1oqMxP5aT=~T|sDl^rBvm3*}M$}0ho4za5w%ifQq4f*O zaTHAlfXCFpWIC1E zIv1DWxEKP~5O?_2xQ5q$7n3ux)t{2jQ8PyXH-#wX#G=jLiTKvE`$j=r=!_L`^JDy# zKP;SVe`ntep@N#?Dn|dir81BVJ z6$@>Z$LNep@~;e}6&bJlOM^}wtwcVnJek|n21<4>-;!neiECf#t;s~!$hfD-STl`J z9QxK7Ge8ERDb~`CC9hAN*%81MRUu$9tmu0#>>+2pnGY9=@`ks3M4YS!1 zCaqM-7OjPP4ccMkywCc)Eh}{-XJqn6)@nBjRU(8D!8%L{9Zp3JNA|}!vzox@h*bOl zezYmX41|5;Zd-B{U5rV0wK3LcA_Xs(+_+_bdI6e@a|;lRg{V6^gV<+%Ejz6; zqNkjL8`7%^{Ks8|ou`Jag7kmcQWSwi$L#Qj2zG6>{_rT}Rb0d!nvo%`(|O~r-xX^&}6v0>XS4^DC| z+YW4^cBPkL_xYWjPr&?NPZSG?js{bhGzX75F|#08w8yh;sN<9BB?haM=94j%(!(-j zBJ343y9OJ*Je4YQg1S9c6K)8t=KO_lehMQ%yrZj<@3d-C8i*$~bPTstgQj zoHRY0vMAbe`TXQ>hgOwH#*z@OLOSPopa7y|Ev+Zg$5qqLLJS#tV#rMu_?*X%iCL5I zYVB%z$mXIJnV0ipL$5FRH_$-UKKI8PB2)l^1*|QWCOxV^`s>Q8b0?Q@ULIA^vNc_x zB=QP3O=oXddd2J6YJ1!+tVriPv1_p21-=WQ%HBHm3yKMCIG&sC`#KQ6DnneY+`0by z2C+037JWF%ogs|IrsMm7SbH36_F5)_YHM=^Dg4`?NEN1-ay|R;u4(&KR5uB9k|ot9 zs@lvP3k)YS%TLtr&a2AlN~PcZ17Jk*%!adBAgQXb?}c@ndHuo%FDiQ2>zHTD>x~vD z&4(5EouYI3tfq5-2A?=JvZl`9oA-1${@nPL!4sJm0A=}S_jNu*awE&~Ufb0Vmdati&%7!%aT&A5W6jS zuaRRBAha9H1FB@bSPE}A13F9WH=fXR8hQlD87t7yND9Khmm>n%359~b8jzh}1fId= zuvD5zzN?}Znnpq|&J&ky-HP=HHS;pYq+A4igCsJ99-PS3r7|K*;xSBdXV4Ohf23u| zF~h7fGy>HaNaa@dnOI4tO9R*K0kT~UfsRxJhbTCmQUP*@{ z^&iws_J6uf{#$pO{3BFAz5dg}_1~<8>ru-CFw*v0<2k~j!g7*pG+&Ebtw^tdE1yBl zR~*%7*kvtd4!QzbuR7|&s`^gA_YuDMUYh$oV4+cC*#GWWTTW4bG47EymoewF;|2c_ zL~X2AX*Qf?4kG+l9h5G~Q)V40rQs!@x9(p*lpuNO%`Z>+0dEe~Q}Dn#XWg0e-#h%& zPqI>uXN7rpFDC0qn7i^2df)E{>g&T_yanw zTP@cfT&F8?+a+cX{x1Gh?*|4o7SUYMtb@F}=}0of;1W;V}Q*4r;H%p?%GvKi_{-W9@jtgk<4vlJCTm-<^dXa3zAr z&Y}x&snS+@V3uQpm!rL>pcQ?;e3YDrKP{E+ckMkbcIN=CgwjIKBh6}>88=u;iU#wo zBBove+Re&o>kPe;YW+=Yrd0e-?60+t=53L<27b7F%xM<*H26$3VvF^mjNGMHwlyaoxgBadz#Y@Ff5`#Nx z9^;MSCY?`a8Gr%@_{vL};#Ss3pV~}E#h(WSBzms2mW?MX2GD}a^%=o09_b55=n*34 zny&U;F$O35%PE{bC-FXHV|pH2+Xg15g>^f(4qyX2!t?e$Y%S6xda6_#cFIvu#fopW)Zz#axDC7dc!oSGS$Ob-a9kUFy1{7+&wS=`d!Fz|i2wzC9gA*Nt zQAOOlaOAaPf4VK;c*j%D51(K`iTd{0R}e5CcJVv(VgmcyT+q#UTZ? z(D+!J7C6l(a_GgFUEhRCeBP_PzXo@x2aY24jWcCRl9#-doD03|q zkUPaoHWupd<3x!%l(3Uv0jjOiYZov<%4UR(FUJDtXnw?+n(B>MGk}fn2!E`rzSzJ# zU%PH%S6;0kp-ka*(xa~zeqU&us&0n>6dIS5(~{Y4)n@kz6$od)tv~6rxzpi&IH9~q z1(?USH{Yn+F5B}gR`F})=IXHK{!(=DS=;j0>U$E(u3m?A5rG_DYtNSxT_y~I9`BU9 zUEgt-hG@UWzzQXZOfwP}W&l#{e<{^r6EspN%^?Rw4^LZZlQUpKlXDR)nE@>MSvXs2 z|7T9R7ioMA90yW(B6q{n96a4D|I&D`MR!u6f66x&pv1>)?)_(jy}J`e5l;QAw`%$4 zY>oaj%%3*cr$)&r7gL_lZy&A=w}c+|kqV3)!*q_lEauM_LfSzdw5b^6sEx}v*1|T$8w&8o#3t9`yy~DC`@5&t#yRb(Whun&I z$8#Pwu(b)XgPqh31sivjCkFl4blG7Dx3zEafdj}>7@~hjWEZ3za5eNDoU%7|&bN1( zWySV~wp&EDY9%d|H)lawqgeuz>h4D!23J54&i543{vQfl4<~c?9S-wT34p5eykt&i zPY)xM^jt3J+WSWI+*{ayBWInb*^-^tSEp}=dhMa|!nzfI@)VCvldOo@>kdop<&Je_ zsoacRJErHAsWz;2-A3bngX;2*<30U#HBT~)rjB@P2^U4I7SA`HI<GKm^pwOS7 zNL79B4pquSG0diq8GtgY9FcTV_Y6;W0`&eS6cBSlIW@Ue_EakPkBnwCOp3?5@TSw* zoj^S5gWvYO@is{N$?epQZ?A&ch^stL_HFk&lV&l*pO5wQ;6JN zfbO{0QLVk}u`b6qNz0P&3&b}ZR(e^+5!4sw)Lu<;`4nFy-ia58hd+?qG9;&vi%Y}R zn_>aG!a^C_F%GK#dHC2^nGfk5Nt7-n?PBxfx`vvkoBAGucAHTMTP0S!uBW^}qeo#E zd#mW~_v;{ws<&Ey)GxF{figGtlt^;1)5(G6Q`7n)VMkDh2)nP~a)!sSan!yZk-}{L6v}-fd8)+uc(U)uTdeR;1zj9LoBrijD(@ zKSLMzh_$FcnSn_JQb z4q?1wt6DuIO@G>Ke@l~mLV`KMxE`C0vM2SIDSmm!TNm7Zd z>W35k&FC-Wt{7dg^b1N*Kn39Y{s1yWas`PuL#-&dmKjBBkP*grOT!cK(f)^TA>(Zvqc@0Wki5)n&H#2|fh=rJRP|jo>FNURh1jaXPnxyCu zgwEW2v-Ha>JCzuu%&VfZQ_^M~6r5=*U4Mjd)I6C1UP#8+%Ndw+kA}@;O+&Mf*wOs& zY0zbpV=?6v|GMP^Q|go5Bb*GzL;q{G?lWf8Cw=8}x7SEGx zo>*8D^=VS727W}#LR&}=M+>>uW_ZywXFW`02OHP{q}+H;nzTeYb0~2Hs1gMj7J5fm z6xJ|$u1pO$-nmyL@fmnIO$NU!r)_Wm`K)0RjW)CVo_|`Xw}rMr5fhi+XM1J0lP<#l z+w=IN&`HA(HlWWb@6PR4*{lg<0X^l4qRt<+v9zd%VjKED2*7EL;9Q;-0%`02H*wy5 ze~4n{c4EWhX_uz`iZr*C1Vw|gKZN<<8y!z9K}XSYNxb=D4J;K$NqFxm%o$??d_@_S zTGBQp0swDJkr}~})^OU)?txefE)q2KErLsV**ZbmfBVa30N08JsHev{_(Iq{d<g>J9|;X=s-X-2o4fB#?z_u92($Dd{_GBF*fSdZk5Co3uMthZbK3ORWy*x z|I=%}fVU(WJwsQ~y?lw;zr93o`BsT?fuz{Tr+lb3`2}1*fX|( ziO=)oz=>hTSjwKi4oJpBa=D+ri}XH@-@D4Vkc39nmq!Q7)RJ%dC@z z>r#}gpwbZtj*9#Erg`|B9sp|KN2YB}Ks4lmFNbwW`>x67WrQ??k|1_Tjn<;&`<7LM zg&zzY6;ADTlqn;OOp6O31|%>94ndBj|Ql zHgp&0gjeF;mG;xGdC<^5T*hFQ>3!U|-~qtBedZJ}5u3R3K%7QK+`IiP*>muuXX4)K z#M)pl!B?8Cq|R6vTy2iJzV8*e6KgAv^A>jTGQd2lvT?hXLAP<0}B$!+K*0!df*eO+*t3JTnkmFir^%14RP7v}{$4V1>WW z2NL?J1ob4aGLx^;U@w}Nd~?6W=@|473BEjB@B`)8?1 zPqW}gKGB%2LtiI1E|d71JRFeEi_N-K!ou4p{Z2d-^K{XIWf1U@V?a_%X$^`m#M#H7 z#Eva?J`~Y1;Ins7+&{J9AI3MuTz^ziv~|`|_n~jo5?w`K+*=VT;v4{Sui@{`k|{J$ z-qM|`koT7hl)2e^T_x=n%K1%IhNRk=PMBqTAiRz$~;j7;;!0VEiFA@0rR;DB<|ZvDNqo%fhj zSWL;Tk^<>}9EU-(1G)Fbv5y#q?RT`__ljJl-7G(cU7Vy{V22dxQCQcmWhrxbbkYX- zAJ?CXWFSB+|Hc*Nk1mf^G~j!{Qd|OW;E;qqm_@~B%{Opl;Z9;TAkETzcH^L~4pDhL z<1p|T_D4XJa#}-{>AkRxuS#u|h?t5t$`^Zrw)4Mcv)^-W-M6Xd1Rl+bl(0= zp&HC)t#i;7BBqsE_B-&t^ZBcV(IRgrS43{M)Smn#2uMD4RLz=B+pZ))OfN3zmVJ4! z>ivO#{roNWqkwDgM}ZGos6K51oVohetGdBEec$1MCn7VTvXDa1mi7siq@;fAzK;j; zOjf@^j}s+a5^UevZC*QILYXHOpR^XmS8h>Ok6K0dJL!Id@0F3NJ>Kdct(DvaBl*jA z8_9OSEH=9X#UzrC4zg4njeiUw+eKbm7Id$FgTx)K&B=6C>;Nwoz9z_5A{kK$hlF=$ zmMbfdfY*QbD)se!XAbnI-ETZd*>RLf7Cas)KHaXvBNeF$5_Q;uH1m$@sx->&bwP<% zlJOhuVH(W;u~VT5P-zk`zxl&KEcY^*i@LXkB^G#)c<$W((8r4>?~LQ0ws4dcLO};d8OqPtua# zG>1Ud5^jN7gOt<)@7`yh>oos)#qeZ4bB;0RDEEC&$FN6Vb!FZ@-O*y=*>m@4gg11F zVrAa!Y!ea2Xr#BFR z0Tvsq;MQT;eR0FiGHzUB3wC*_l-DNtqwI4w!}S;0-bp~BsAb~v;c&^fp2|`}+oFBv zHPO@;#$REZ*r4bzyT*%Bs^wU++sXAA8y?jj*S>tqvxhr!oYR6w+<-H7_6kSQ#Jp@k< z@iM;)y&)w*JjMskHx68MR1HvFo{5jqc-0Q@NMe9uiswXckgCV6(Ut+eS^IToPZqmP8X-e7aGt?a!H0nF*o%Hzzfig&7$&7r|HnCc_Er|5~1Mw>* z{jKRXPMbcz>j`YF3Vu4nUpdm>Vm(ARc@MwVJJ4TtTi5kk7rg=WU<`A5B<`;WI7;_z zAN#Y5FzR?}?L=TAX?nIRG79IEKaiO8LDIpqb=k|1G$3Vo_i0CN6JKS?A@?_Ce=3b% zZ2W5Cj}9DD!sy^*e4hcQrHbMqL(Ua$EshCeuc8XY4lceceLQ zBH*QeVD`(EO7bybtJLRWW!%_}j-&-v(S3y3PZeJ)1)=z{L0kx<;_aafJ~<9ezVVYA zRp6f{RG)0cv!2tKiE{O|XcsAwzz>~)8u)eb4g3^JX(_&aD%I&YxOzhmoMZrZYu4L; zz9xF(^m53O%2XSaz&gLGN=PhR0*k9DG^>o*!wicm6ubW24ysXIx^@`YAQ-`R?|0tv zIi@=sb^kQKdDT)d%Gm8}?wqsezVWFvtnY!Y$$iSq?;j-XWXg!b&VO@2Si4laHrFQR zw{~_Wly6ay`MMgA#ZOq7?`+fRw)!x2AI^?x29M?D*g`ib-aMm~K2}Xv->{mR-5VJE-!@1QUa zZs2s|w!V1iev=~Uqw+wr%d^&JX@MijFBoDW%Ym9ktuQ$}eG zQ9Fp_P4KecvDc@2k46o~S&r{@kmz8I@6ztZ&7c zVwZ^%oqE7tShQ|VldC1y#289oH8;DF^5i}q9@5fK;8Jv%4EaE?B~8{!GxHcZ1Q@Qr zgHJgWr>EpM{jd+(1;rk43VYnS4*yib(hLnzDOvwFU!#W*wuJG}@b zC;3SMaOlNEV)xO%mCvkH?y9`KVi$LDT414J7<^Xn0T=2i)@>1|-vD3<{I@*lKP5q@ zI!Su(WeES5z}YZdzR1~d-+xc$pMG!o+Z!w+suWvsWm+w#vMuzsA4Y7q5`bgyT*5D9 zJH1Y_+?<^o!6X3~4S)kw4jve+$}EYHAJL~aVSE5+;G?dLOeEQVkze$yEZ9x?_q7~~ zJUq05KLpw`D7sPzyRW1In<1B;5&Naw@!*v)hV@ zBhchPhX=LKaBTB5+{3sI`ez$oUlVX69eopaY{d#zmlH=1X>Yd04`+9VU>40iz67i} zJpNYKQZUJI^E8v`;^AC?aw{8`1FYe|fM?t7yo4&(Ws)5KQVJIoCfmGt)cuR;S9g=? zSH`IOD;RbqOF?=5l^?m$0L!4r&lTLiimo<4ekJFtmhsyJ{I!ZWtfSxP=22$2 zl709(eo-qb1hYJW8O^GoJY7(=$x&^LfvHDrP-HhJ4VOPX+QwaaD>5%lvQL8G|jNAT58@ERwYcZJJH zRPNR>B1UM{c14YemfMm4MFJ`8uy}1 z;;?9CfKQ;p4}^9b(89g;RkbKp(}!(E#>5uKp~Y>X@_ZSNMuAwbftTrvIhCcN(!R&^ zu}f1bEORH|=!Q!AJx*RQ@ldG3pN4Cpzy|NojQ#a$=zuB3<-s;+U)0jRPXuDHgGOA;zInz|4VIk~TujTu*_ao) zBoH$~7g@yDun-*1j+#H%{jRV7ZgQaJ*zYFCZ%_E`3I8{HLI6<#!@+hR#X~8aW0cIh zts_qu3;v{cDp;cv>igc75X2^wo=>fyo^NMJXxI-8@jY}&-hSmqNvLxvq{-;9Ol^+t z_6gu0J;Y@ZLZ~&lxgucaE_7&~@e+#s3Qz#9OU2dLut4t zlJVZyA1?@92LHo{silb{T!7mr-M)}J*xo+L&bIc0+^T-XJp%u zNS$b=JHIFTf6GLx=N(QKid=fVFBW7V(MC#a3G?j!zHGum7|X2d2y6UzPV$S9NWote zoZlIq&t<`vA$xU206o+~S3cQ^YN1fR=*h-kprc<;!>Av9WW@`sk7||!|9va&yR9^! z?>~&+KcE|GSJt}~9tJrPedu%Wy}QsepdMCi$G1|G3=X?kD8dS%QzuchjOHzSU_8o| z`qY!)Tjr~}E$}YC_@*YxLv8MTdSSRZoBh#kfPX=;g+u7!acvg_xMvdv%C-wwXa?ZP7SBCX`xH> zRNWw?!AcEqVg;Xl9rP}_5yAJRgoc{?AiQw&}aaFyc*jzjMZ(-tMO zKzIoku5c2&E=h%5X!l3zx%@)e_WN1>moaHT=}ye{2b#*dtX!A6FHEBB&{yJITq$qH zs$Z>X2c)swXWf1*1u;}j`)@Q=)4!pq`d}$ygQzJqGS_etX%`i7rije7Hh!IpzOb9n zuW+hku-IEFFMa$D2;<^8wLu>w>^Gt>XVYq9egQg`|~YQZn>P5_Hd8Oy)e z>v55QFQ|yN4yysI@Ghv7XklpsvG;#m4}pm z^|@;Ro6|ang=!W6@fAtUXQ5P5`p_n|xw&YxV}vQ^vyUnQJ(f7*7Cxtsm-B^4HR?Zg zOgp$ZR@ym@>)13>G&nK_(r|9&2S+_?nI?LxZLSaIX!%YHxVN*9%s1gn>SL#~0Ak7) zNIpoGHJ>8tjkCk5K?zDjs!>m4{B= zEf<3A>R=IU8`#ApgE@BI3{m@YTUXLugxNRH$YdANL@0v9shtV2>x<@zX>M-Z&|Q=E z?A+dY-!g(xM>v~e0KKZxH){m=L3v;TaXNwq(+G;uuG429TbI}Pi0h{d4P`pu9)#c* zKxD{ycD4euX@sy$8OfM0myjP_4?H;>m$VCErf@VUOrmJV;*b?43D?r**RN{YlGko^ zuxn$Rr8E^QD||%CqMlfL3L4DR{@|^Dv^4UaV}r#9>}g-X6Bh6lON#@~ z2KWjD6$YL@w*KG+phy%kSeHFddECsvwgVN%61p4zaZ}hC<|XWAV1=OLh(DwcN`EDG zm_l(Q-)dsLebB(8jC#zubPx;)6wmp*7d47Ip@_?1nm?}^ZvW0CYw}4tpxs?-mk{1U z(S;O}zd$4pO*i3#1`LxBgJpI+63d@z>}EH!L};H%D@8Ex5x>{t!`MZ)1M_`P`6{wK zrnozG(!6x^CtlhFV<}`Ti_X(*O8%F6oEk|;8i*>!dJ7sCe zYI!!inGiEyZaWp;SSg7=c(DJ3#z2AI(z=o&`;MGehSYYtIgueKXQF^IRse1GhBdPT=#K!FRZ_6e1*!Ukx-LsvU+LE7Vz;1?77! zJ8PF0Yw-(H;RA*RxW#S}`H;lH!mr;%&l~G4@wd`5Btvg#9Wm5+ZhiwQqH>{Zk;_E0 z`w?%(O|xLY^a5CB`_ujGE9rvZRbF0h;>!TWA!`_`;laTehZDWSSkz0ir^W09S`F_JqF>FqlnW;!&aM_9Qq&Y`#oc8&zs4s1bqR|H04 zaj9e3*NS9gGV#!%tW#xDA>O)=@&)I|Mi~pi1nN*`v7q!=$=A_7?EORrK|WCLiyeO^ zeorXGAd#p`DY%@d>ldgz^uciB2@qifcy(jFE!+VGab1G7v3(hGd2=$M#k27dkd`DF z^h`X@kqZYR9dxkQZL;;I_|mLm;cmf{2jL_>3MJTKalFD^BdO?Rep_~Hkhp2)Igd^z z6VhClL7R+KGs%8=sl?d5jp&)sA!BVNTfLc%z8CP$;F&dtHmkt^9-x3AKIE zd>LWf;%ntc(k)qEX5W3nZs;pN1rV4%in^`ce9if(3PNH>Y@1h7iq+Edp&I6XFl9rV8M8%u##yJkET(R+Y%+3I%k6EkDT#4! zZx(%bJtcjx1CPF`FWALgC4oe*uitDlvj577T$&Z(3_)eHx2*A zb^|w@dUG*!k}=Dkvu{}a*e(_I^g2LSps{1XR*!IOq4TXEOH%TylUCR_BTTdtiSlKQ z;s%rD`6fyC2*5&IN7Pj7vWVx|iU2dBLEv@&@vM!0^{zQ|SVuT;d1jeniX3ADu!4Cn zf$rsqA>51W+1Xs{=Vpcd7!X#1;6ydkpaI0&K0fX4Qqc^%Ocu&4h265GrY}On7kZg& z8t-5J3w0(>OIalSF$mq7rnx$zuA#V?Piskfjoe_B z7rC%2W|VOs)!Xt9{u^@|`iM&t51Olu=yj*9b{cbk-r) zft(cIJ(FB*;cS*a9~IxA&BePXvWRk150>OJpQ*K&#Qx~;M}A0Iw+La@oOWh`-3{<_ zTJCRN@MeH8&jpfmngX6Mp5GrP%`CV)TXBSVCxuW%2~P_F_+5r~-?Q85Yb8C$Rpl0l zIffnBx&=H&LsP)0z{Am_&BnCJ?v<`3Wn6H15C24lWxjI(xowou-mCsm{sNq}8%$_t zf~m|tRC+)`l-8&J;;?-S;~^#(BZA^(CW$_7b5Mn3NdwApDbDVjRp;Z7O#_P`Q%AAO z3vDw==Z8T=>GSMd0CuSf%e=6RU2w0^=Ceu8Q1+;{F{z)6X?}Dme%Xwh4d;ZXZ>nr!Bu6`|>reNbD?B{e{1Ain z)1NFl*11!|^MjKx)ji7CRrd3yRx;0b1;G7%yZJrKZgy_0^(eQsmsj>LW}~f4=w;cv zurjWQL$bVRo+D)u!sVg}oPCJn5A{T=_$&3p(K5htpzHd+{P2%gSma(zsHB|7%SaT> zes$I6cnaq4D6DKpdYYkGl&GcEGyoP4PGmH?RqCp9Q# zWV*16j{XBT!p^;g6Z~JeC0>xnTHUl61esVS!eWo4Jb@1nRJtG(420u0>pvKr2Te6W zv{#RfE>lKhIv)AfILC7IRzJ$wo4|YIe{M=LC*_OhA;6&RDlA%i$cUkXU?Mhxn91kL zLv?}MVJ|>VCWHWaJ4_(+!ZNLZ&lso&jQr6z(LiVlKv=~zEG4~_H=}f|9BjUapxGPe zR3oeu=K`6|ynq=r^4EctLVOtV^1d_F!8AEw3SLJFdT9x}T{z4ETWK70!`W(JyWs>Z zU>ITb3iu4snu(zTPt1V(=C1_oz|bZPmSh)BGG85|;a?mF%c_ZxVVe1nD=e|3`$4%0 z5wu_&+Esb5dAwkR)4HXCweTgo{Qk#`;5mqr%s__S`Wnv-+}jSi74X?%nm3)^oq#3) zg|34*%uu%SQ2ON>zzl1`1iXlzfC(^$4yxZ8eGC{oqC3GjcJ&&8u{R)NAMOfiZwM85 zSVs>py8||bKxgQBz6Ao+SNoMK;IqxN3D|L83rzrugr;f*-3*1@^be6agm%Ax3DBHam@ zC~zbxhY9#Jx?&I}as$n3PQ8srOs$8=YJ3;#Adou3@en>(30C9p zpbl2!0amjpj?kc+X%oP<+IbgDzyO*6%3SFsNU25pd|(0qU~uJwY~+f7PcQ-f?*70V z-F=;AHP0<-kkzOmt5NjpQwt|OW>f==kUv|>P)^JiWXye)(qbp z122ceNr)rR`Rulab@IqtNk7K}bI)$`RSZF`90~R$;OE))|8rPk{#Q9$I9uaxOG~J4 zA4YI3ZoVO*M5bswyhryrJD&gQD*9X0b}CcdKW0I{RALo%tSyD7QQfCP0Be*B$|3k9 z1Iuu!l2TU8=jNu+;a4P~-6AM+>pA?N4XQD8sgo7EfyK~A-%@JSx7NG#cI@Oc&85za zfq3@TFBwOK5W-0#kKrG~(q9Uc!&>ov;iLgpv!zPHqU!8hUjl=M@x)6MeJUf&Y^ilp zN~6_twvnQRkulTdDbtvlW%BYO&YY;D$BYFYJIWz90;vS&@-Ut_4q4w^%*+7CQm+hw z5ku%A$6#___i8n+1KNrs$?OVq2}kT$;C%Ynl)aBaw8z)0F_yJnjhQ7X_k6b6=5_{m z&Zij*sw;X9xSLB^@crq=uocA*J9!@eV^a1@A=EcYj>TRlt7H(r zG4Jr5hO~>Yd)a@-sIYF+B{6p{-c6)TWFhOh(IaaywG%UL>FQdx2v{n_nnb- zI-UOS%jT^KCsFMOH*4zE9N%`{8mCqABPSJ`aVunBC|cFdqd5LvLrmuUyb`fNfoxxc zMuT|#z8;O(NZH=|V~H574pc2>%#-YEi$+}2Y_1bS?Hov(cPCKI=<|6d4~_AAIxjs4V)&a7+YAs~;6 zgwuQSAFZUJ@O0I_nsvn5H4UcjZN7TsgcZ*tb<`Td?wN2x79ivMV!WQ7_-4Q`lbBZB>A{w1 z#;O>qoACZeZUPmdEA3d#jt>76KbdJ#SHy6Q%TPu|uwK#EyKPJJG8T|;S2}dFtGIPM zYWL`S98zNF?mIYn31yTV5eF7SM<|oZ#H_X+alDJ)k!(5XiOlB}YRgIN^5UJQbk0d{KL-an^;?FDP-1wrNY# z9g?4c@e-4BenEO@QdV%WZcS+=HmK%?Ucpx`M7kMdNs|HkPp?P`s8fCRO)JXiD?Zj~ zg;_XDuB*_P_3&t}G||Q4@xF_U6(M|=avx`=u>+y(kPx0ah714U7_#TxY^KDUxC-z2 zdY(n;uiO!7*lZj|WXWzJP^cu14=gpCOeqgt6~yc*n2eW$jk){w5M48h=sz6$ z$D+coy&~K$B3}kjx)==$FC{4oC$M0l+RCi5NouM!?JslhlCr>aN;90wLgQyl{Mpu1 z#y2g5nJ#XL_G)?A3AO%yqdrxWZ?{mbw0z--u|NPfWDwjuwee7EMFKI_Wz##op@T45 zv=H1z@yen8BxM4}igm8(aB-7vx$t!Cy@t;#c@yDmRr4#wN2!3NxLZeK!GI=jtt>C^x4H)~0P zP>$|Qe;Xnt(N{R?Y47prb}Xm5?9`na$8gdgkpgt@AxCpM!?9jS^9D6V8+N`@ZCj>W ziZp%FhnHKj7ph4rg1-9~OLHij`QgH;wzG*HAxmWsa15w0I&&Y!Uh+r4RciU<&`;$P z+4!mARjh$)1bxyoGb!_fAwXTs%v?eYug`Om?!n%pc{0i4-BKm{aN|{DPk0JO(C~6V&{$Z;gui!<12%=*rXM@%{GAZYiN%P$ORN`O_ z-1kyqlkKAha`zWeC9Tp?xAqxu9o$K9@7E=tm1bUFs`3(-4F-So0~2GNSrz-fXfB0c z0o1yf5i~tJlQU}#MmFZiSwRWR92d0UqJg_qHj-N!5wq-+Jipy`>Qm_O`evcsWJsNB zuKGgy&jB!asOBtu)&$=G1)$QXqRDs%pp8s!RB-ip9}*Rq0u7J6J-iu}HxDS8ZJ`?J z@t=%T{UY&E!l+M$e5qd1{9Om|rj#2_Xv++1&)Ja-Y`Jj9sl3GCVW4pH61rM8ELOy5 zX~;@x6K1^H=g8GQNf`w4CT}<1V&WU?MMU}>%Wo=7-J>j={l+|`I2tMzvOQA3t>8eY zb2LzG6@Jg7xzNUyAKkR{@o6a-$G5TgBmyU@0`?SbM$tCnJU*Sk*;PxonRt&9ea93= z?Q5A(f!vCZn?<(!#@KB`>?hCBJGV6$A=vLv?oyYVdp7nu%{OJDeGO*z&Dgx131%>N z;LD^8SK=^=Ar64Fe4?5p9ku@vnqUT_eo1$0{zrDH10q>ec`Ybx2e$fo8RpJEOu~~JmYLF#kfwHR&R|-O zUv5`~yj*Q@J=P~luJcJePY_UR(x83%*SQYeVtK=TP$Yql2vqo`zZE4?Zl{<+iy>xt ziZCCOJk@BLHlfKc8{P?p|2VW;zkl)5ZoM<5`C$TLJ9zYnnlyh&_FJBc8TGQ7sa#2{ z<~~dyWT*=@q#XDuq?C=9%JlS_I~P?uACmjrE>dBHG*)fzmzim}6mxlClz_}WS z!H6k>Q`;SZN1rQ6OIk(-Dc zwU&~L$%^t*)r|v6zNv6gL6CquDP!NI-sSqxn4K0lB|P9z@B=;8P^Ofm)e22!{F9*3 z1G;B`>y7$X-N8<)lw=n1TP)++tBXCDG%svGw1LYt)>+|P-Q0bAB_MVPgV+IZJ|d~lxR3f5GtkzU zfobR|hzr}I9O?{s>tAYGS_V_S7pESjAzI@L%J9tmmk`Abev4g#?(OZ6fR!E^#k`Qu zQiKUZhyB0cvY@dSxO)0D_;)t)@0~wKV>?s4CbH!AVkwIbq!1P+ICeicMWePTOrWt_^EPypI`^So2WB=w5D{5Vu`;5FadvVJHxlu( z{Y5Qg?eVV;nSBL}L)qPi%TTL-Oe^l12l#?&=WS}Vb?w)qvHf6*->om5A%Y`&FXi>z z>%6MrV?j<}*yJqI1*D%nyFmCZon%@`*w~JIsiy6(_9Rx*%m_|?g5Sbx16jhzA&{;$H z(Q};ebBz&+b~xOT(GHG#0EQTi%LFYrL#kKY^Q}Fr0J>=Cq%Nss{V80I{`9b!n%m>A zv%>vLs8Cayn3T#3m77AO^yu1=2~;(JZ)ARMF@z)cziR}lUrc$y&ewGjQ29O3%5}1~ z`@zQM&FCMzpbRl77uxAx{^FYP?0n8m8{h&-z@N6Qf!4+b#6E^jh>4^XYTH0}rHqef zcXx#H&<%fe*e4O0^jHGB{Fr$6QM$Jf5Ll?%!=bj7)*oS9YXz`NAO)Z$F8F1M_gh$w zAdx%}VoO*+80;%Ft9Ucma|-@sKicuS=z>3g3>8>k*AKl8P*zUpL*(xen330+6Z1_3 z#e%+LlDwpbtB^))7Q$4%$kc(YQ--#6Ub4QZ3opruUh=_DFZo?zj@kwMsoW-=eUd5w z7YW8Q>b!H605nwyJsbx zGvK((v?R726P`u~gbKgo(cFG-nIM2*3i}LM3Nj&(+MOt*Y`Gm;y6R@9#Q}1D6Sk9^ zyBA>F-L6f2ntEULpJ(CV2fPHt-si3<4}rKjFNgcK4aFBm{SOt1e z8(}-RE@uc@r2UX`dui>1lskfYaEg;DuOR8~r9zdAZv8K84KH~!5TJ%C2ii0iO+F}s z&T(%AbToK?7`6NY;7k4VovWqfTZ#6S?M@ToF%z*1pUJ_fQk$Gn&f7MT7!LTv1D`1q zt)*@5Z30LJz2-hB$9jg(@rjTi-jjkCkcxK#@r&!ATEw4uIhP+W@}N!%shpu}ST3OW z%g>@UojgtqZTo>X%Y(X%yn^kk_uJbl5B4-@(X@3aC`H~b`FSh9bJd>5)@6;RDE&S# z8+WDjNA1>OX{sp%R05Lfuct&NW%G#X*UgEyJg6Av0P$9UcgGs!!K9U|D)~j|DHwtJ z=rB?W<;@t*S1}S_NoPsrggaf&{|nZNv?BUJaqsr_jqN%mdk?Fruz*J^B`WC?YwQ7li z25qqiKo!RmLr`dKOtWy~nb4$dN@mxoiFyQoI0;302LR}Uj`|kk4}c;ac0g&|Oj5XA zcJp?AuXm5b9RcNK=&^igbTr~Sj&x)tct94&v1UKlmbkMbU=P5uEp^$VpstogZROi0 zU1H|}?f(PRs@$fhm&$ZI+>E_CKc&M(fs#4bSGBt<Q3FtjuCqLPVEyv6ACezo24PwyCgdI`?*aOb zT#FOr7R>f&+!pOzBireWTQ(vWLYZQh*xcByvlS4Mp6h%PCOJ@$Go0NTe1t{u&qhZU zIJMg$fhZX48i0_)6k>{^*N*34br1y}uqn$6C0rokww~IAI}bOgF3ogch8FeYYx4t{ zBnpI#K*1?yCJ|HeU*uKtkn+e6bnk+c2LliHlX5%;6A0V^WC&!6Lp=NxwP|%?FBk$c znyca|K@hE0z%U~M)Bw%_6;A|Cxmpx27O^7WG_@f&SpVNQ z~^{Z7M_g9joZ3)o} zl_!ByYf0_ko%kss_%50FoA^R?v;TJzUyj{tdjdCuAiA8C1qavPir2sM5t^v>|0x!j z9CSSNU8sa#vy)1~jWG~Bf*-QJ+1a$~JJa`XMe&C;cRRbv8^XjLx=O;2NuLZ41Psy1 zZn~@`Vep;oyXP=kc5Ob;^W+Ed_iqNN7WH(KwlPED z>)W*#wsIPJF^NEPui}WqhhvrBxxasFxHLkkjJF+La)ln}r7wOrL`J6>{t0z}%JqH#AhZTrQemE5Qcz$5;90e&yQZx8t8QiI=H(C;mXD$Mfx z4ETTQA)G13>i9zo;O7I`_oD<=C*(3&Lk6(=vJeGau`cUP&aH*(9*Z|Hda!MJYLUwc z>_j;3C9ad4fPAp~9$hS^;+2@hHKjdtvatZA2+J!JL-$;Ya*qiWSO|_nrr?g^5Ar3c z^YEM%0e88^7V}=6DThRphxRArC%1aHLV&=u`XED2`UQyx#eod)6R~V^m7vrCGJglL z+4(*au}XuqA!SptGk~AK@Qi&-D7yTk80Y|@2qc1V(h5n2C|R$p#l1XM4Rjp<@LNIt zdVekTMi)jH(!n=xU+<^0L=lBY)d?eN9KbfVc=qT6@ms~DwcQ?nKq}ta`Udh~L|)qz zs4_SVjFmq0&Lh70i2e^Zw||-27gbOT*C?%jH@+^BeXt$kn-u{O{%g!-=vLC@(L?-1 zHb{amz^AePWSVY(vgD1fjnFcibe)D`KHCP>m8>O}XSsQf#Q_P1_06$j1K?xRmm3vN zkni)n>tVm|5WrsxXd@0kt+QyHy1K62ZnW=RM@Rn& zMhW9r)5GjT0U8m8Z)mK@qXGYd6)F*A~qu%ulpI zgAY(ulTk!;w@|tZ39Fcm&>zIs#H2i6Wb*(yCN!oD=G1e67bG>-M+v>aTJe6x&$bqYZU3vgZ;>ghFyVj#&MyFebB%Ty*6kG zgV{X-?^{uLI5o1k8y1ow)<{hh#huvtjGcOl?+ zA;7xq|EIM`YT}6W!0ST8zwU+mOF*{mAp@f%=G{;Fi+_o-QH33W9u5U$-e6F6R0d_o zt2dl}k%9b6cMCEclqRS_H9OcG1SW5;?Y^+(nb9w5ls|OFP=0{Y5{|m#FU(1xbNLJn zW9P4;m_KyYAUQ){Z=m15-g<*Hv`t?sMQlI(;TOrs-$VX>=_{>MKvQ%3|N1QNehi7E zNLKp2V{xmgt&>+jtoZ+`P6FJJ9tFT1M7}>-?6 zhKZfSlpx)*o2FM-x9&!AB%efW;kJn?bWIR3G^X;}!$+__;_HtSk6-wB%NWECEVoeG zC!gRlY9#;RKuM?_HEN+MvH@%JPL%Aeyu{u?Ai8i|D(EkF03uQdfNF9V@({XZHWRau znGRw&K~44(^COM`%2)@g5;VyzDm)^2Ap#kM9NkM^#siSIgR~%YYo>Yi_ABc6Wdq$3 z-My@(uCUE#;!%eYyB@GA`3MVzHiUGz$VhQSe-*C9=#0MTxcz}`61V?V}}DP)AG-_F`Z=_4M6@ZWUR^$=G9RulNpCeBa4ld< zsaK}K{cY}%0_c{VyJ;Th+&lgV$m4wRFdbpWXM_`#hv1szwl}l zRp}vPx=u&f~!vWgifq_wff-Da(;h@2JOIpXT z23Tnw4ft<~qNO1EvuChJw_|&ocUqwps1;)O4C)Psjrg~&$f7fp5|s~st=ucHl5RCB%&NbC2sfpNlVl3})jGjG?G|GPY?}%Y)Ldng zXSY*_bqa6~gGbP%nFz$x${Ays5bI=}3ml?Sq^{+DYO4Ih;`82X+g}u!FEko=wAf7| zDwVw27p|Bt1v=-=n!chyIkjDyn$95Im zWjMmpgmwg3Zm_ufU6uO*ea^81?Lylu6Bmqg{81|7o zQT#Z*V@X20BX}tUI~!876R{8u0KuFQq^PuX-PU$7Y~{*byoRAH7JurkWvyEDA29qv z%z0BW1^)bcZz{yl(lnsI^yiJKNEBR{4c=+e{=zZ>&iRqqp1F_A|xK+b`l#!XT7>i;b9omGwG(4vq)_xq+|T6KgsL-2r7f zJNvEAKGecs3A14Y20>6%%hXMrZ@!G+O*4-Y_hAXIfsg$#R#no7SJ%{cs;4)x_rE~) z4Lr&vCe1%pCJM?Je6#@-jH>y}wM46e{&4%X^21qLv-OyzdM>q21v+7l7ZjCikBZ#2 zx+YAf$Y}$MsZL#AHjHE`U@C4jY(wRL_0{_=$ak8$;oP|piG09YcL;Dy8+Zb;W!9hR zAy+Be5;=j2i)+a_MHJ*qr1WV{fz(1QR}E%#afAfSZOY=D`M7x)ev~K!`iBU*c$jiId|*T7GSJlAq0#Wrbg|_iT$z zDzk=135VPQ5G;YiE9gc^iotgc@DWXe(UN04h!Rt;1Z*2fuL#X{_clhK#d>JurGXklHSE4 z?^Z#S=}lxeT)y5vJdk5Yn2nbVo;Q8g@tp@IuTVyySKh9%t<5NL*#ir=Apm}z;f60g%u|a{9D8f7HV9;1O|AhHoc z9P0?1M>qAgz~>q?YqEk!>6%`_7Jm03M^Q2TDV6L*Ot#e0JW{7k2YrvBp$KQ;X?Mbc zvB!jIq38UoQbv(zHfitX^9U>6d*%xOPS+BbH)vvYus*5t!Y)%yJyE8c?wMp|`MsD( zft@p>YtkCr@piloa>pHDOe&9u_Mw=H4!I+@7;zi8U%eOoI)CV0k#$`)TIKUTb| zlm+xI$JNIb10JuwG`ql8GF~Crao_3~A>0QP^Mb=9i*on)jemV>PHCLrt8hXN=-e`g z`cd6%b)nUdNA{tnRWJ%KEpzur0jKRgQ&!>48`L8x@lP_&-OmG@j+o{OnN5+?JP!QP-0Ky@f>H44osikgG=U!K3!tCHvNieK|Nd{r!ty!0w=ovZe#jKYCqqXrF?d-Vdk?OQ$ns}lgS@u`HsL|aRM^&m}k}oOki%o)Dz_EdXU&t zdi?ipJK#n_3_r@kuwX36)w%=pdbD64zt6ijorv?c2|syDm8y|Ef>xTUNi&umWIt%4 zF$KyX*rGxZq#QP>oh-M)%rrZ|4QA@2Zhm~(^WplEz_6u-^eQQ@8x2ki%JzAl7TjC> z1;)2R)om?|$v_-@ao}4Xy1U^S2Z|KkkDUiT2j^ejfQPF`Ll6<)n@Jm6FnCeJ+aPyJ zBqta}gh0Qu1O-wi{7`{v7YRm3T%)&~H!~^2oFMsZUU^ixw&TUbqYU>BXLstRMPM=v z_w3ylyDV7!6W5-#_CbhvSTGnfIzYLZ+W!W@&vD+cZ3jJ7^wNGBaL`v_-!hU$ z;YY$GYzrx64<<+=n)ynt6Pc6qXF>R{hw(z$Jw0bp)Lc(S_LHeTA_Oy|D@5CyKpuN} z7B{>++gZ@P@usmLNJyB2M%ETw+oG zLXG;>vK+G_i^c!a_53`ZH4Nd%M4$0vf1-m>}nJry)4w%)Ww$i4>J_9|wEB%dz2@uz62v8T6M=a$N8hKIC`L zt-?SuV4VE|Y-*9uMA4>p0c~nsLt4lurvYwgX}X2yxS7T3miFUtp@6rI!G?eg9`t>M zbS89MS-|U*#XUz|VnaY1wiw7Zsl_d!6@OPd-El=%DK3Q$w(#tH{3Wo{b-Uu&<*E9O zLc7i3=^VP6m7D9fAdBs`3cDm7b<(Vaz9kmNq03T=rZnk2#h{3K(VJMby4^l3kFEj&cDVD$i)0bZVjO%rB*)1Z~F#^yGj{3#nG4Z zJ-9*G_9mROG~lgJdV#-k$+zth@XEZ@p^z_(aNrL67k@)T@6qc<_la&dR1$W3HE81s zW6{3|b+^0E_X5|UjP|N!GJ*Z*^8oPAladWe@UEvq;kXLq{InNMB_KmfzAISLej)Cz zJ0KED*CNX>CV&{EP@ObPWwuV$6k50lD5>=_G-iR~d@A(?CLC35QEIvs-XL0-yB>YX z7FM?+d%px~>OTc2=7y9U4bU$U0qeiKI7Ivemk2!NLTja42@;D+LIju|3U4lmRWe); zf&uB@d2@_y$CB|qt4bRDPhf1J(r-V7{LIpNwN5V}3KoPmH^}4gG z5g$;ssk5&>y>!tPj$!oun(WkYG`7vKxIBs9fhhae8|d$kI%Rg4o@P2u!Ulf?aHID% zJU(&@9Y}Xzel&g5k@t2pT-bU_T|6aFsg?G1JA9XsWWal5nd<7>k^|xKq9SqZcqiI* zonY7Nwy0;4fbF=u;i!ETJ7B-cod$whaJ}T_TgNB zyfAcwue?J6a-0#(5%XqJ?{d6DzEU+zMy9#j8XkW-Yyp%?8Lqzs%el{8evW;I63udo z)vT}5musV^KTnoG(sa(-!4j;pw!_kbjsWZmI+A*-X18c>d)r0EfGNNY?TM}N!=Nu9 zv>W_yXe{_V6se1kB1<^BQT(!!C~aj^3WkmL2V7-CmT;6^3>hXnOeVX2Fmi!g$Pn`K z8+H7#6rUInq~?O?$>KUZo&Y)Yat7qe{kHw_s{II zi-A?};D>FYV&yk!Gy}Am&onG810RlnJ$b_M9@!4Ya4H(!md2nL+I=5>!R%5E+|uGf zGoG;-|BbMo)U_fd#-OWArePDz&T&hPhF3oU?|aMX;q?^(479a6n!&tHN$4d!f8WmF z_ta1n2E@(z9wJdCGfpraTD`66`+!msfmXSDE!wAcT=zk_Px%Sh*rF3V4d9P&oK_Ov zEL;@1T{D;Z!kJ@yq;HIWqUkyRY~mxlvh>I$^k$u<0R85n9Xo6Wozc#wSY zQCQlmLTV`f%7!f`tMGCvPRX0Lw8MonMzZiRGMtf7P)mkFX&gJB==p>2@a@`4!sdsW zY|hdfpws{IqU{^C-t~;9UZB(PaHRz>PeHyMBBrQvD8RDqP=(VZ*~?Hoz;Qk8G^uav zHek534eUlN$v_wF8lb+|wi><*71O%o4#F@ys#Jr2FjzC52gEQ1jLr>Ml6Vw_=sFG} zfm=Z^0L9%bpie@k&4?`Fm=Ao%7wrYU_j-1tkpip0%|g}293CACZI;l9y&$jRLi@hU z%w^!;hQjgeSDw-cH@YxnnJNiqFG*#gU3)7G6BgjO!@O-~;+M zTj7ZpZo*C$cCF_O@~bFVe&?4qaPsQHxdD@6blSBLgi4Ii&PV=K{u%yYg9@yWWAZf{ zbRoq0i{cPr-~=t^Ml6z)5?!Sl{{A z+H{s+Xp8*&)PZIQ^&}o}J!cC+gyM4p&(3 z3=CdQ^*i*AmoY^G7ba3?O|$eQdkhta2gaq_h3?;GSO?jt{ECOvSmi3b>TP`;n=N%L zw6DvL?9)48wth8C{B3;>^mfJ9Ahywa2Gudx2)4pTpqU|lxA;D7PpudVc9NxE3&!Bb zt-VVXEv5>PMZ&2qE`gQd^fXu^^{~ks;fKip!_ry}v#j|L27Qq$#{?cbiE8Ty5ZzTx zrmbP_PN|}cKJ}_|pRcoma77Ki#FvmOx!9XSU`(ntR7l2;OUjvMip{?>PQC z*d*@2pZxojl{K%Ha9WD&!X~HeZrNyH(0ceWw?W)xeSX93i(#h+%KA5)IKGi%t(UnN z&nf=nJ5OC^-dr9SxMQ8oqs-=nwj_mwWa3onsCP|uvv-&*9z-Kt;hw{I^Xg+)FX$*2%ig;Y&lLt(1n{?nbt9&dvB zZ>dV0K(bI3n`X9vYClJx_szP7C1)?|8gxLM^d(?F&>U%pg{tc3A~4Dq>=zP`_j$7~ zz}@fhuVs=`PJ1o&B$}nRj}NwGq&@OD`bBf~yvf%6uFD6tF&Kbz=F!1Z?mddG1`Q1z zC3ZvWZ__BQP^44iV)T`;$gyj^cd2l=@o^O}*dO&)J-FRI5j*qDYUbdhME4IPZFqMN zpJ~%tb(_ZI6Z@=c_=|c0zFW`peW3GBesJ&Dr`7X*%VG+c1qc^n{kLQnRM{a-*$nDW zh+E*WlsT92Z9J@Y>asm|vYg(2Z~=i9X43`eoZQh(I~#*qP%Nf~ul_tCH}jOtg7b#) zO@4oi=%Q#GoFy&+MI9K`+FA+{yo(DJmvrVsX+kp0_hHj85`KAUBnvL;38-eQz}=9x zYq^8i?n72OcQZ`q2J}9`d#tJGt%-T0YlOETOccNmH2nC1{QIZ~Fvf#^p$Ek+pXfO= z;gf*srs-fhz;+Q4r1ce6N`P$f+^Hujx?>l|6_Ta=R zueqM6H5DCGsqV~_1C63-1$$?O4e)NmyqxjGL88ik`xGxez4eZb^ywtJha z-f$iZn~;M;KoJk4S{sH{q6dX5r?~qTmYlyy$0Ae2t~_Q-+1QHAM{7OU3@Inn7bFiA zc1XAnkuo~?iB{hXQ>JmF#|~@F)b>}-F(Qq37fnEdP98Kz4g^t7f-DIy;lG6=J;c_eecT%LTZO33Z#{J3TMTcv~spM7&~ zhb)JrcKpb2N1;N>LQQ^_Gr8t!RE3{up3^zG!Btk_3etCZlH7}R&)H9*Hdof9p=!c6 zOSq9JPWk&_csEIcO~vWPjn34zyoF2S{FR==Xii;ujqV(KE?TF3bGJcRM2*Az#e{@B z!RSX3(T?45JA8-6E0kFi;#H%b&so*tCR_fG_O3jt$t#O1V$nfmaRCbog-)R|LMyVW z5FJ4j*@_eqQ$?mCvP2GH3xqJrAj;-8C?Eu-fD20%i3k!zBk0%?3dSHH3|hd11Y$`- zOi1W`Aylg8%sKOK`|(!}FE97L_wMq$_kG{JhjcbX6_f13M0YBx>C(d_;&92?9qenF zh2~_YlZ>~1Sm?lkd&`{-MP2`<5&E5?P7tA~dTC`KZ3)$Dc(W+7cm8=xeFdbX8`mQ% z(Rn8|dZBjLHWi!X-5bFM-`k9oZsY5tkOfV_9RxmqP^(1Fui?2#0 zDL+-eVDgHD4i$bUqz@>vpnQkuA;B$jMi&=f!)gdIqhDJmPK-;olE2>OoF5-5ki$Kd zJ5|!)wUfke)-c+6JEA^9(oLS|JKra!-Cj)f5;Yh0H(76j?Ax)<97pbz<{w(2X2C8> zZvsGI9hG5Nlyx59!4Vu%Dy_PU@IbZpBX68eLC}@2k-xcw^okeAu#|RR?q;S`I@!gt zxKMM#zjBWarzT)qMi*4!DE*fGH-n-LZ~hC_PJ^Yw`P8ELd?yI~%fl3+{DJWk8h)XP z3g?T?lS$9X6gDG4LrQ;jnmt60XgN{slJQLspU^^~^BE5GrT?F%=&wC+-T7%PhvuO% zDbLWeTAf71#dMfWDb8|~<@hE+>P}izxfxCM^rK_^x zOPsf#gFYZVuKAhA^GtyjL?^q}Mc=l8lNB!oH3sIGkV@OtXe!3-E3l2&;hZ2aJLcO4 zbyIJVSlj_li3_h~u|a1=Kuub!tI^)5!Q~w2mST99D34*6!+mjtP#}1dKl1E5)O<^j zCR3 zjO_kj;9%qNNaAj#SN6Tw)A&S$+vhA}QcDX6^n@e-Ibl|GVYE)3jra-|kz$g1*@tu* z#L`;MQ(v!DaeExknZ%CuHFCl-=(*R%SpK2_+6cSa%WvffTvi=apY~+ouAP1WOt&NI zXKvoKfW25V*QJ7j>MI$4p*_7T=PmL1L)1-EDfdxdn?1BiE2^9{qgTwa`gHjNBgLr| zWU>zln#E~Y`%x~Al!@$0&w4tB+Lypj-HlRN)Bd{eED(6X^^Z|Yp-LNAR`UaL1JE;Q z6owo;tYClhQDL5@b2M%Mb4+@{1GX-n*v^%0-61f~tg1u*Es4tEZhLMKU1Yxpfp ze9&$1l}!m$Sj=BOts*r6e*Tb>P**y(M~|{$E&9v78QF*9k?%Y@KYxv`YepB8fH1?8 zSuBlRcuJ@A7Fi~4b^y!fVNr$ua%0nV6EWoBJ)czLi<0Fd`?Nx?_AQhtCYmUc-g!Vt z1t)48eEgN!Pvk-$KQ01F7qq<@o^BFPpmbkFiCgkf@)5RHN9IcF7A_s?>~Y*Ro7PWO zPwC-_KJ^k!JuN2xa=Lt+I(4zCK~aAzxHWsg(5~-Du;bu4-!$eXu$%#^4J`1Bu>mR8 zMpB%b$wNNXXRZtHN?I$BHs7t17JKH@)3>1m_x~0A?d`rsn}`=uX~_LPVrSTxZSpQb;SE-Ur_tN7Z5{bGVQF2gkm|_Z@4tlm zX2Qqx*t(1^C{SH48*L&;Wd2oq^V+2M0v-&nhFB*X*PoGEHcI8cu7@XI95jV;MP9UR zEJ`fc!}9ExSA*Xz#{IMGWGYw)NS=CFLD5cJjWpOFx{?hQA0k6LGGDj{a&3yFbB2h& zJT}XrpIZ{5BkP=!gw_w{vZuUv+ql_G?V{&e1&)pfm#YmLs@bTKt#tG2DbED)=n0Hk z1m~Vv4#7wDbs#SXKdz`nT7XxPh0^HA)&^&-{| z*iZXqh)!58{%q`MuY-Qj!&-}v<`2@Sk?w)C@aJRr@1eh>yB>M;@_GP_H%uuCO{!Po z#ONx+hVjI>vbejiRs}Nyp?g%fh*8yiBgU@Ey(WaYI#AF79mYJ$kci8gs6JWFKQ^e-ETq5Fmoi1$0vNA9g#sXLM zZcE*3&Z#0<|CCds;J#)kKwA!PJo^|@z z=P;rDPKwE;@db;}TkI}dZu}I8(i89%WAAeSj<3|MMd2a|;8|mqDMYar#pw}jHVZK5 z^h1LOz}f`=ydTwlBU%=x^Eax^L+{(`1cnP&Kc(x!#a-Zw|be?#)GiPc0 z_N|+DVc_6TgQ2G3;0$yG7@7%aaOLqZ2nm%y@!bd@#aUo?2LJx{rFAO+&l^^;e*4F) z53}I53KGAY{%AKOnxg8yhQRE1w9xcfr|{ueFkteQfj#KP{(V+wW9bjZumw(sEANg# z70O^II2{pwAc&ZVPDhg;XqqvmgVO;!W@Kg?Va!cneo*C8W`O|AiegrDww0I`4GgMb zVEcXV2~vV#Q4EV>@!%})3BfQ1wlT2%JBd&#$o~f05(?kf#_6t`hVdNu+wS7IwQ9@$ GqrU>w9lOB* diff --git a/old/ui.lp b/old/ui.lp deleted file mode 100644 index db39033..0000000 --- a/old/ui.lp +++ /dev/null @@ -1,57 +0,0 @@ -semester(1..n). - -elem(w, window, root). -attr(w, flex_direction, row). - - elem(s(I), container, w):-semester(I). - attr(s(I), order, I):-semester(I). - - elem(s_t(I), container, s(I)):-semester(I). - attr(s_t(I), order, 1):-semester(I). - attr(s_t(I), class, ("bg-primary";"bg-opacity-50";"fw-bold";"p-2";"m-1")):-semester(I). - - elem(s_l(I), label, s_t(I)):-semester(I). - attr(s_l(I), label, @concat("Semester ",I)):-semester(I). - attr(s_l(I), order, 1):-semester(I). - - elem(s_dd(I), dropdown_menu, s_t(I)):-semester(I). - attr(s_dd(I), order, 2):-semester(I). - attr(s_dd(I), selected, "Assign module"):-semester(I). - attr(s_dd(I), class, ("btn-sm";"btn-info")):-semester(I). - - elem(s_ddi(I,E), dropdown_menu_item, s_dd(I)):-_any(in(E,s(I))), not _all(in(E,s(I))). - attr(s_ddi(I,E), label, E):-_any(in(E,s(I))), not _all(in(E,s(I))). - when(s_ddi(I,E), click, call, add_assumption(in(E,s(I)))):-_any(in(E,s(I))), not _all(in(E,s(I))). - - elem(s_modules(I), container, s(I)):-semester(I). - attr(s_modules(I), class, ("bg-white")):-semester(I). - attr(s_modules(I), order, 2):-semester(I). - - shown_module(E,I):-_all(in(E,s(I))). - shown_module(E,I):-in(E,s(I)),_clinguin_browsing. - - elem(s_module(I,E), container, s_modules(I)):-shown_module(E,I). - attr(s_module(I,E), height, C*10):-shown_module(E,I), map(c,E,C). - attr(s_module(I,E), class, ("bg-info";"bg-opacity-50"; - "d-flex";"flex-row";"justify-content-between";"align-items-center"; - "p-2";"m-1")):-shown_module(E,I). - - elem(s_module_l(I,E), label, s_module(I,E)):-shown_module(E,I). - attr(s_module_l(I,E), label, E):-shown_module(E,I). - - elem(s_module_b(I,E), button, s_module(I,E)):-_clinguin_assume(in(E,s(I))). - attr(s_module_b(I,E), icon, "fa-times"):-_clinguin_assume(in(E,s(I))). - attr(s_module_b(I,E), class, ("btn-sm";"btn-outline")):-_clinguin_assume(in(E,s(I))). - when(s_module_b(I,E), click, call, remove_assumption(in(E,s(I)))):-_clinguin_assume(in(E,s(I))). - - -elem(menu_bar, menu_bar, w). -attr(menu_bar, title, "Study Regulations"). -attr(menu_bar, icon, "fa-graduation-cap"). - -elem(menu_bar_next, button, menu_bar). -attr(menu_bar_next, label, "Next"). -attr(menu_bar_next, icon, "fa-forward-step"). -when(menu_bar_next, click, call, next_solution). - - From 6a4b41ec64fb6b9ac88fc40f8ddbed22d65327fe Mon Sep 17 00:00:00 2001 From: Mariia Date: Sun, 14 Jul 2024 17:45:50 +0200 Subject: [PATCH 5/9] Changed the Repo format and made minor changes to the ui appearance (added missing files) --- .gitignore | 2 + custom_backend.py | 67 ++++++++++++++++++++++++ encodings/encoding_ASPOCP_23.lp | 37 ++++++++++++++ encodings/ui_ASPOCP_23.lp | 91 +++++++++++++++++++++++++++++++++ instances/instance_ASPOCP_23.lp | 33 ++++++++++++ 5 files changed, 230 insertions(+) create mode 100644 .gitignore create mode 100644 custom_backend.py create mode 100644 encodings/encoding_ASPOCP_23.lp create mode 100644 encodings/ui_ASPOCP_23.lp create mode 100644 instances/instance_ASPOCP_23.lp diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bc1a1f6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +# Created by pytest automatically. +* diff --git a/custom_backend.py b/custom_backend.py new file mode 100644 index 0000000..86b943b --- /dev/null +++ b/custom_backend.py @@ -0,0 +1,67 @@ +from clinguin.server.application.backends import ClingoMultishotBackend +from clingo import Control +from typing import Tuple, Any + + +class CustomBackend(ClingoMultishotBackend): + def __init__(self, args: Any): + # Parse and store constants + self.current_constants = { + name: value + for const in (args.const or []) + for name, value in [const.split("=")] + } + super().__init__(args) + # Add a method to generate constant facts for the domain state + self._add_domain_state_constructor("_ds_generate_constant_facts") + + def _init_ctl(self): + """Initialize the Clingo control object with current constants and domain files.""" + try: + # Create constant definitions and initialize Control + const_defs = [ + f"-c {name}={value}" for name, value in self.current_constants.items() + ] + self._ctl = Control(["0"] + const_defs) + + # Load domain files and add atoms + for f in self._domain_files: + self._ctl.load(str(f)) + for atom in self._atoms: + self._ctl.add("base", [], str(atom) + ".") + + # Ground the program + self._ctl.ground([("base", [])]) + except Exception as e: + self._logger.error(f"Error initializing clingo.Control: {e}") + raise + + def update_constant(self, name: str, value: Any) -> Tuple[bool, str]: + """Update a constant value and reinitialize the control if necessary.""" + try: + name = name.strip('"') + new_value = str(value).strip('"') + + if self.current_constants.get(name) != new_value: + self.current_constants[name] = new_value + self._assumptions = set() + self._outdate() + self._init_ctl() + self._ground() + return True, f"Constant {name} updated successfully to {new_value}" + except ValueError: + return ( + False, + f"Error updating constant {name}: Provided value must be an integer", + ) + except Exception as e: + return False, f"Error updating constant {name}: {str(e)}" + + @property + def _ds_generate_constant_facts(self) -> str: + """Generate facts for current constants.""" + facts = [ + f"_clinguin_const({name},{value})." + for name, value in self.current_constants.items() + ] + return "#defined _clinguin_const/2." + " ".join(facts) + "\n" \ No newline at end of file diff --git a/encodings/encoding_ASPOCP_23.lp b/encodings/encoding_ASPOCP_23.lp new file mode 100644 index 0000000..ea2ada7 --- /dev/null +++ b/encodings/encoding_ASPOCP_23.lp @@ -0,0 +1,37 @@ +% generate +{ in(E,s(I)) } :- in(E,m), I=1..n. + +% s = s(1) U ... U s(n) +in(E,s) :- in(E,s(I)). + +% m(w) and m(s) +in(E,m(X)) :- X = (s;w), in(E,m), map(s,E,X). + +% additional sets +set(A) :- empty(A). +set(A) :- subseteq(A,B). set(A) :- equal(A,B). +set(B) :- subseteq(A,B). set(B) :- equal(A,B). +set(A) :- card(A,R,L). set(A) :- sum(A,M,R,L). +% +set(A) :- set( int(A,B)). set(B) :- set(int(A,B)). +set(A) :- set(before(A)). +% +in( E, int(A,B)) :- set( int(A,B)), in(E,A), in(E,B). +in(E1,before(A)) :- set(before(A)), in(E1,s(I)), in(E2,A), in(E2,s(J)), I < J. + +% constraints +:- empty(A), in(E,A). +% +:- subseteq(A,B), in(E,A), not in(E,B). +% +:- equal(A,B), in(E,A), not in(E,B). +:- equal(A,B), not in(E,A), in(E,B). +% +:- card(A,leq,U), not { in(E,A) } U. +% +:- sum(A,F,bw,(L,U)), not L #sum{ V,E : in(E,A), map(F,E,V) } U. +:- sum(A,F,geq, L), not L #sum{ V,E : in(E,A), map(F,E,V) }. + +% display +% #show. +% #show (M,I) : in(M,s(I)). diff --git a/encodings/ui_ASPOCP_23.lp b/encodings/ui_ASPOCP_23.lp new file mode 100644 index 0000000..cee5c53 --- /dev/null +++ b/encodings/ui_ASPOCP_23.lp @@ -0,0 +1,91 @@ +semester(I) :- _clinguin_const(n,N), I = 1..N. + +% Root Window Configuration +elem(w, window, root). +attr(w, flex_direction, column). + +% Container for 'n' value input and update button +elem(n_input_container, container, w). +attr(n_input_container, order, 1). +attr(n_input_container, flex_direction, row). +attr(n_input_container, class, ("m-2")). +attr(n_input_container, class, "align-self-center"). + + % Textfield for inputting new n value + elem(n_input, textfield, n_input_container). + attr(n_input, order, 1). + attr(n_input, placeholder, "Enter new n value"). + attr(n_input, width, "200px"). % Properly sized textfield + attr(n_input, class, ("form-control"; "m-1")). + when(n_input, input, context, (new_n_value, _value)). + + % Button to update n + elem(update_n_button, button, n_input_container). + attr(update_n_button, order, 2). + attr(update_n_button, label, "Update n"). + attr(update_n_button, width, "150px"). % Properly sized button + attr(update_n_button, class, ("btn"; "btn-secondary"; "m-1")). + when(update_n_button, click, call, update_constant("n", _context_value(new_n_value,int))). + +% Container for semesters +elem(semester_container, container, w). +attr(semester_container, order, 2). +attr(semester_container, flex_direction, row). +attr(semester_container, class, "align-self-center"). + +elem(s(I), container, semester_container) :- semester(I). +attr(s(I), order, I) :- semester(I). +attr(s(I), class, ("border-opacity-50";"fw-bold";"p-3";"m-2"; "rounded"; "border"; "border-secondary"; "border-2")):-semester(I). + + + elem(s_t(I), container, s(I)):-semester(I). + attr(s_t(I), order, 1):-semester(I). + attr(s_t(I), class, ("bg-secondary";"text-light";"fw-bold";"p-2";"m-1"; "rounded")):-semester(I). + + + elem(s_l(I), label, s_t(I)):-semester(I). + attr(s_l(I), label, @concat("Semester ",I)):-semester(I). + attr(s_l(I), order, 1):-semester(I). + + elem(s_dd(I), dropdown_menu, s_t(I)):-semester(I). + attr(s_dd(I), order, 2):-semester(I). + attr(s_dd(I), selected, "Assign module"):-semester(I). + attr(s_dd(I), class, ("btn-sm";"btn-outline-light"; "m-2")):-semester(I). + + elem(s_ddi(I,E), dropdown_menu_item, s_dd(I)):-_any(in(E,s(I))), not _all(in(E,s(I))). + attr(s_ddi(I,E), label, E):-_any(in(E,s(I))), not _all(in(E,s(I))). + when(s_ddi(I,E), click, call, add_assumption(in(E,s(I)))):-_any(in(E,s(I))), not _all(in(E,s(I))). + + elem(s_modules(I), container, s(I)):-semester(I). + attr(s_modules(I), class, ("bg-white")):-semester(I). + attr(s_modules(I), order, 2):-semester(I). + + shown_module(E,I):-_all(in(E,s(I))). + shown_module(E,I):-in(E,s(I)),_clinguin_browsing. + + elem(s_module(I,E), container, s_modules(I)):-shown_module(E,I). + attr(s_module(I,E), height, C*10):-shown_module(E,I), map(c,E,C). + attr(s_module(I,E), class, ("border"; "border-secondary"; + "d-flex";"flex-row";"justify-content-between";"align-items-center"; + "p-3";"m-2"; "rounded"; "border-2"; "border-opacity-50")):-shown_module(E,I). + + elem(s_module_l(I,E), label, s_module(I,E)):-shown_module(E,I). + attr(s_module_l(I,E), label, E):-shown_module(E,I). + + elem(s_module_b(I,E), button, s_module(I,E)):-_clinguin_assume(in(E,s(I))). + attr(s_module_b(I,E), icon, "fa-times"):-_clinguin_assume(in(E,s(I))). + attr(s_module_b(I,E), class, ("btn-sm";"btn-outline")):-_clinguin_assume(in(E,s(I))). + when(s_module_b(I,E), click, call, remove_assumption(in(E,s(I)))):-_clinguin_assume(in(E,s(I))). + + +elem(menu_bar, menu_bar, w). +attr(menu_bar, title, "Study Regulations"). +attr(menu_bar, icon, "fa-graduation-cap"). + +elem(menu_bar_next, button, menu_bar). +attr(menu_bar_next, label, "Next"). +attr(menu_bar_next, icon, "fa-forward-step"). +attr(menu_bar_next, class, ("btn-sm";"btn-outline-secondary")). +when(menu_bar_next, click, call, next_solution). + + diff --git a/instances/instance_ASPOCP_23.lp b/instances/instance_ASPOCP_23.lp new file mode 100644 index 0000000..733a3d7 --- /dev/null +++ b/instances/instance_ASPOCP_23.lp @@ -0,0 +1,33 @@ +#const n = 4. + +% b, f, a, o and p % c +in((bm1;bm2;bm3),b). map(c,(bm1;bm2;bm3),9). +in((fm1;fm2;fm3),f). map(c,(fm1;fm2;fm3),6). +in((am11;am12;am21),a). map(c,(am11;am12;am21),6). +in((am22;am31;am32),a). map(c,(am22;am31;am32),6). +in(E,o) :- in(E,(f;a)). map(c,(pm1;pm2;pm3),12). +in((pm1;pm2;pm3),p). map(c,im,15). + map(c,msc,30). + +% m % s +in(E,m) :- in(E,(b;f;a;p)). map(s,bm1,w;s,bm2,s;s,bm3,w). +in((im;msc),m). map(s,(fm1;fm2;fm3),w). + map(s,(am11;am12;am21),e). + map(s,(am22;am31;am32),e). +%* e *% map(s,(pm1;pm2;pm3),e). +in(fm1,e). map(s,(im1;msc1),e). + + % l and u + map(l,b,27;l,o,24;l,p,24;l,m,120). + map(u,b,27;u,o,24;u,p,24;u,m,120). + +% global constraints +card(e,leq,2). equal(int(s,f),e). +sum(int(H,s),c,bw,(L,U)) :- H = (b;o;p;m), map(l,H,L), map(u,H,U). +in(im,gc3). in(msc,gc3). subseteq(gc3,s). + +% temporal constraints +empty(int(s(I),s(J))) :- I = 1..n, J = 1..n, I < J. +empty(int(m(w),s(2*K ))) :- K = 1..n, 1 <= 2*K, 2*K <= n. +empty(int(m(s),s(2*K-1))) :- K = 1..n, 1 <= 2*K-1, 2*K-1 <= n. +in(msc,tc4). sum(before(tc4),c,geq,90). From 19f22cc5a8eceae07ffa8eda5d5d91c42f73d2ad Mon Sep 17 00:00:00 2001 From: Mariia Date: Tue, 16 Jul 2024 23:12:17 +0200 Subject: [PATCH 6/9] Changed UI: - Added credit information (Total + sum for each semester + for each module) - Added buttons to the menu bar - "Download Study Plan" now opens a modal prompting the user to enter the file name - Added a module information modal Custom Backend: - Added a custom download method that formats the output to be user-friendly and resemble a study plan --- custom_backend.py | 60 ++++++++++ encodings/ui.lp | 192 ++++++++++++++++++++++++++++++++ encodings/ui_ASPOCP_23.lp | 91 --------------- instances/instance_ASPOCP_23.lp | 1 - 4 files changed, 252 insertions(+), 92 deletions(-) create mode 100644 encodings/ui.lp delete mode 100644 encodings/ui_ASPOCP_23.lp diff --git a/custom_backend.py b/custom_backend.py index 86b943b..4540230 100644 --- a/custom_backend.py +++ b/custom_backend.py @@ -1,3 +1,5 @@ +from collections import defaultdict +import re from clinguin.server.application.backends import ClingoMultishotBackend from clingo import Control from typing import Tuple, Any @@ -15,6 +17,11 @@ def __init__(self, args: Any): # Add a method to generate constant facts for the domain state self._add_domain_state_constructor("_ds_generate_constant_facts") + # --------------------------------------------- + # Setup + # --------------------------------------------- + + def _init_ctl(self): """Initialize the Clingo control object with current constants and domain files.""" try: @@ -35,6 +42,11 @@ def _init_ctl(self): except Exception as e: self._logger.error(f"Error initializing clingo.Control: {e}") raise + + # --------------------------------------------- + # Public methods + # --------------------------------------------- + def update_constant(self, name: str, value: Any) -> Tuple[bool, str]: """Update a constant value and reinitialize the control if necessary.""" @@ -57,6 +69,54 @@ def update_constant(self, name: str, value: Any) -> Tuple[bool, str]: except Exception as e: return False, f"Error updating constant {name}: {str(e)}" + + def custom_download(self, file_name="study_plan.lp"): + """ + Custom download function to save the solution in a more user-friendly format, + showing only assignments related to semesters and formatting them. + """ + if self._model is None: + raise RuntimeError("Can't download when there is no model") + + # Filter the model to include only semester assignments + semester_assignments = [ + f"{str(atom)}." + for atom in self._model + if re.match(r"in\(\w+,s\(\d+\)\)", str(atom)) + ] + + # Format the StudyPlan + semesters = defaultdict(list) + for line in semester_assignments: + match = re.match(r"in\((\w+),s\((\d+)\)\)\.", line.strip()) + if match: + module, semester = match.groups() + semesters[int(semester)].append(module) + + formatted_output = "" + for semester in sorted(semesters.keys()): + formatted_output += f"Semester {semester}:\n" + for module in semesters[semester]: + formatted_output += f"{module}\n" + formatted_output += "\n" + + # Write the formatted output to the file + file_name = file_name.strip('"') + with open(file_name, "w", encoding="UTF-8") as file: + file.write(formatted_output) + + self._messages.append( + ( + "Download successful", + f"Information saved in file {file_name}.", + "success", + ) + ) + + # --------------------------------------------- + # Properties + # --------------------------------------------- + @property def _ds_generate_constant_facts(self) -> str: """Generate facts for current constants.""" diff --git a/encodings/ui.lp b/encodings/ui.lp new file mode 100644 index 0000000..8ce5067 --- /dev/null +++ b/encodings/ui.lp @@ -0,0 +1,192 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Semester Definition +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +semester(I) :- _clinguin_const(n,N), I = 1..N. +values(3..8). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Root Window Configuration +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +elem(w, window, root). +attr(w, flex_direction, column). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Container for 'n' value display and update button +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +elem(n_input_container, container, w). +attr(n_input_container, order, 4). +attr(n_input_container, flex_direction, column). +attr(n_input_container, class, ("m-2")). +attr(n_input_container, class, "align-self-center"). + +elem(n_l, label, n_input_container). +attr(n_l, label, @concat("Current number of semesters: ", N)) :- _clinguin_const(n, N). +attr(n_l, order, 1). +attr(n_l, class, ("fw-bold"; "p-2"; "m-2")). + +elem(n_dd, dropdown_menu, n_input_container). +attr(n_dd, order, 2). +attr(n_dd, selected, "Change"). +attr(n_dd, class, ("btn-sm"; "btn-secondary"; "p-2"; "m-2")). + +elem(n_ddi(V), dropdown_menu_item, n_dd) :- values(V). +attr(n_ddi(V), label, V) :- values(V). +when(n_ddi(V), click, call, update_constant("n", V)) :- values(V). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Container for semesters +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +elem(semester_container, container, w). +attr(semester_container, order, 2). +attr(semester_container, flex_direction, row). +attr(semester_container, class, "align-self-center"). + +elem(s(I), container, semester_container) :- semester(I). +attr(s(I), order, I) :- semester(I). +attr(s(I), class, ("border-opacity-50";"fw-bold";"p-3";"m-2"; "rounded"; "border"; "border-secondary"; "border-2")):-semester(I). + +elem(s_t(I), container, s(I)):-semester(I). +attr(s_t(I), order, 1):-semester(I). +attr(s_t(I), class, ("bg-secondary";"text-light";"fw-bold";"p-2";"m-1"; "rounded")):-semester(I). + +elem(s_l(I), label, s_t(I)):-semester(I). +attr(s_l(I), label, @concat("Semester ",I)):-semester(I). +attr(s_l(I), order, 1):-semester(I). + +elem(s_dd(I), dropdown_menu, s_t(I)):-semester(I). +attr(s_dd(I), order, 2):-semester(I). +attr(s_dd(I), selected, "Assign module"):-semester(I). +attr(s_dd(I), class, ("btn-sm";"btn-outline-light"; "m-2")):-semester(I). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Updated dropdown menu item to include both module name and +% credits +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +elem(s_ddi(I,E), dropdown_menu_item, s_dd(I)):-_any(in(E,s(I))), not _all(in(E,s(I))). +attr(s_ddi(I,E), label, @concat(E, " (", C, " ECTS)")):-_any(in(E,s(I))), not _all(in(E,s(I))), map(c, E, C). +when(s_ddi(I,E), click, call, add_assumption(in(E,s(I)))):-_any(in(E,s(I))), not _all(in(E,s(I))). + +elem(s_modules(I), container, s(I)):-semester(I). +attr(s_modules(I), class, ("bg-white")):-semester(I). +attr(s_modules(I), order, 2):-semester(I). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Module display in semesters +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +shown_module(E,I):-_all(in(E,s(I))). +shown_module(E,I):-in(E,s(I)),_clinguin_browsing. + +elem(s_module(I,E), container, s_modules(I)):-shown_module(E,I). +attr(s_module(I,E), height, C*10):-shown_module(E,I), map(c,E,C). +attr(s_module(I,E), class, ("border"; "border-secondary"; + "d-flex";"flex-row";"justify-content-between";"align-items-center"; + "p-3";"m-2"; "rounded"; "border-2"; "border-opacity-50")):-shown_module(E,I). + +elem(s_module_l(I,E), label, s_module(I,E)):-shown_module(E,I). +attr(s_module_l(I,E), label, E):-shown_module(E,I). +attr(s_module_l(I,E), class, ("text-black"; "fw-bold")):-shown_module(E,I). + +elem(s_module_b(I,E), button, s_module(I,E)):-_clinguin_assume(in(E,s(I))). +attr(s_module_b(I,E), icon, "fa-times"):-_clinguin_assume(in(E,s(I))). +attr(s_module_b(I,E), class, ("btn-sm";"btn-outline")):-_clinguin_assume(in(E,s(I))). +when(s_module_b(I,E), click, call, remove_assumption(in(E,s(I)))):-_clinguin_assume(in(E,s(I))). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Main Menu Bar Configuration +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +elem(menu_bar, menu_bar, w). +attr(menu_bar, title, "Study Regulations"). +attr(menu_bar, icon, "fa-graduation-cap"). + +elem(menu_bar_clear, button, menu_bar). +attr(menu_bar_clear, label, "Clear"). +attr(menu_bar_clear, icon, "fa-trash"). +attr(menu_bar_clear, class, ("btn-sm";"btn-outline-secondary")). +when(menu_bar_clear, click, call, clear_assumptions). + +elem(menu_bar_next_opt, button, menu_bar). +attr(menu_bar_next_opt, label, "Next Optimal"). +attr(menu_bar_next_opt, icon, "fa-forward-fast"). +attr(menu_bar_next_opt, class, ("btn-sm";"btn-outline-secondary")). +when(menu_bar_next_opt, click, callback, next_solution(optN)). + +elem(menu_bar_next, button, menu_bar). +attr(menu_bar_next, label, "Next"). +attr(menu_bar_next, icon, "fa-forward-step"). +attr(menu_bar_next, class, ("btn-sm";"btn-outline-secondary")). +when(menu_bar_next, click, call, next_solution). + +elem(menu_bar_select, button, menu_bar). +attr(menu_bar_select, label, "Select"). +attr(menu_bar_select, icon, "fa-hand-pointer"). +attr(menu_bar_select, class, ("btn-sm";"btn-outline-secondary")). +when(menu_bar_select, click, call, select). + +elem(menu_bar_download, button, menu_bar). +attr(menu_bar_download, label, "Download Study Plan"). +attr(menu_bar_download, icon, "fa-download"). +attr(menu_bar_download, class, ("btn-sm";"btn-outline-secondary")). +when(menu_bar_download, click, update, (download_modal, visible, shown)). + +elem(menu_bar_download_asp, button, menu_bar). +attr(menu_bar_download_asp, label, "Download ASP Model"). +attr(menu_bar_download_asp, icon, "fa-download"). +attr(menu_bar_download_asp, class, ("btn-sm";"btn-outline-secondary")). +when(menu_bar_download_asp, click, call, download("#show in/2.","asp_study_plan.lp")). + +elem(download_modal, modal, w). +attr(download_modal, title, "Download Study Plan"). + +elem(download_filename, textfield, download_modal). +attr(download_filename, placeholder, "Enter file name (e.g., study_plan.txt)"). +attr(download_filename, width, 300). +when(download_filename, input, context, (file_name, _value)). + +elem(download_button, button, download_modal). +attr(download_button, label, "Download"). +attr(download_button, class, ("btn-primary", "mt-3")). +when(download_button, click, call, custom_download(_context_value(file_name, str, "semester_assignments.txt"))). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Module Information Modal +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +elem(module_info_modal(E), modal, w) :- in(E,_). +attr(module_info_modal(E), title, E) :- in(E,_). + +elem(module_info_credits(E), label, module_info_modal(E)) :- in(E,_). +attr(module_info_credits(E), label, @concat("Credits: ", C)) :- map(c,E,C). + +when(s_module_l(I,E), click, update, (module_info_modal(E), visible, shown)) :- shown_module(E,I). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Credits Display Under Each Semester +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +elem(s_credits(I), container, s(I)) :- semester(I). +attr(s_credits(I), order, 3) :- semester(I). +attr(s_credits(I), class, ("bg-light"; "p-2"; "mt-2"; "rounded"; "text-center"; "fw-bold")) :- semester(I). + +elem(s_credits_label(I), label, s_credits(I)) :- semester(I). +attr(s_credits_label(I), label, @concat(SC, " ECTS")) :- + semester(I), + SC = #sum{ C,E : map(c,E,C), shown_module(E,I) }. + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Total Credits Display at the Top of the Page +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +elem(total_credits_container, container, w). +attr(total_credits_container, order, 1). +attr(total_credits_container, class, ("bg-secondary"; "text-white"; "p-3"; "rounded"; "m-2"; "align-self-center")). + +elem(total_credits_label, label, total_credits_container). +attr(total_credits_label, label, @concat("Total credits: ", TC)) :- + TC = #sum{ C,E : map(c,E,C), shown_module(E,_) }. diff --git a/encodings/ui_ASPOCP_23.lp b/encodings/ui_ASPOCP_23.lp deleted file mode 100644 index cee5c53..0000000 --- a/encodings/ui_ASPOCP_23.lp +++ /dev/null @@ -1,91 +0,0 @@ -semester(I) :- _clinguin_const(n,N), I = 1..N. - -% Root Window Configuration -elem(w, window, root). -attr(w, flex_direction, column). - -% Container for 'n' value input and update button -elem(n_input_container, container, w). -attr(n_input_container, order, 1). -attr(n_input_container, flex_direction, row). -attr(n_input_container, class, ("m-2")). -attr(n_input_container, class, "align-self-center"). - - % Textfield for inputting new n value - elem(n_input, textfield, n_input_container). - attr(n_input, order, 1). - attr(n_input, placeholder, "Enter new n value"). - attr(n_input, width, "200px"). % Properly sized textfield - attr(n_input, class, ("form-control"; "m-1")). - when(n_input, input, context, (new_n_value, _value)). - - % Button to update n - elem(update_n_button, button, n_input_container). - attr(update_n_button, order, 2). - attr(update_n_button, label, "Update n"). - attr(update_n_button, width, "150px"). % Properly sized button - attr(update_n_button, class, ("btn"; "btn-secondary"; "m-1")). - when(update_n_button, click, call, update_constant("n", _context_value(new_n_value,int))). - -% Container for semesters -elem(semester_container, container, w). -attr(semester_container, order, 2). -attr(semester_container, flex_direction, row). -attr(semester_container, class, "align-self-center"). - -elem(s(I), container, semester_container) :- semester(I). -attr(s(I), order, I) :- semester(I). -attr(s(I), class, ("border-opacity-50";"fw-bold";"p-3";"m-2"; "rounded"; "border"; "border-secondary"; "border-2")):-semester(I). - - - elem(s_t(I), container, s(I)):-semester(I). - attr(s_t(I), order, 1):-semester(I). - attr(s_t(I), class, ("bg-secondary";"text-light";"fw-bold";"p-2";"m-1"; "rounded")):-semester(I). - - - elem(s_l(I), label, s_t(I)):-semester(I). - attr(s_l(I), label, @concat("Semester ",I)):-semester(I). - attr(s_l(I), order, 1):-semester(I). - - elem(s_dd(I), dropdown_menu, s_t(I)):-semester(I). - attr(s_dd(I), order, 2):-semester(I). - attr(s_dd(I), selected, "Assign module"):-semester(I). - attr(s_dd(I), class, ("btn-sm";"btn-outline-light"; "m-2")):-semester(I). - - elem(s_ddi(I,E), dropdown_menu_item, s_dd(I)):-_any(in(E,s(I))), not _all(in(E,s(I))). - attr(s_ddi(I,E), label, E):-_any(in(E,s(I))), not _all(in(E,s(I))). - when(s_ddi(I,E), click, call, add_assumption(in(E,s(I)))):-_any(in(E,s(I))), not _all(in(E,s(I))). - - elem(s_modules(I), container, s(I)):-semester(I). - attr(s_modules(I), class, ("bg-white")):-semester(I). - attr(s_modules(I), order, 2):-semester(I). - - shown_module(E,I):-_all(in(E,s(I))). - shown_module(E,I):-in(E,s(I)),_clinguin_browsing. - - elem(s_module(I,E), container, s_modules(I)):-shown_module(E,I). - attr(s_module(I,E), height, C*10):-shown_module(E,I), map(c,E,C). - attr(s_module(I,E), class, ("border"; "border-secondary"; - "d-flex";"flex-row";"justify-content-between";"align-items-center"; - "p-3";"m-2"; "rounded"; "border-2"; "border-opacity-50")):-shown_module(E,I). - - elem(s_module_l(I,E), label, s_module(I,E)):-shown_module(E,I). - attr(s_module_l(I,E), label, E):-shown_module(E,I). - - elem(s_module_b(I,E), button, s_module(I,E)):-_clinguin_assume(in(E,s(I))). - attr(s_module_b(I,E), icon, "fa-times"):-_clinguin_assume(in(E,s(I))). - attr(s_module_b(I,E), class, ("btn-sm";"btn-outline")):-_clinguin_assume(in(E,s(I))). - when(s_module_b(I,E), click, call, remove_assumption(in(E,s(I)))):-_clinguin_assume(in(E,s(I))). - - -elem(menu_bar, menu_bar, w). -attr(menu_bar, title, "Study Regulations"). -attr(menu_bar, icon, "fa-graduation-cap"). - -elem(menu_bar_next, button, menu_bar). -attr(menu_bar_next, label, "Next"). -attr(menu_bar_next, icon, "fa-forward-step"). -attr(menu_bar_next, class, ("btn-sm";"btn-outline-secondary")). -when(menu_bar_next, click, call, next_solution). - - diff --git a/instances/instance_ASPOCP_23.lp b/instances/instance_ASPOCP_23.lp index 733a3d7..34e76f6 100644 --- a/instances/instance_ASPOCP_23.lp +++ b/instances/instance_ASPOCP_23.lp @@ -1,4 +1,3 @@ -#const n = 4. % b, f, a, o and p % c in((bm1;bm2;bm3),b). map(c,(bm1;bm2;bm3),9). From f236ac3792451cf868d8174393249a65a11adc84 Mon Sep 17 00:00:00 2001 From: Mariia Date: Tue, 16 Jul 2024 23:23:59 +0200 Subject: [PATCH 7/9] Added description of the custom_download method to the README --- README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 26eae39..7d87a01 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ Clinguin UI for Study regulations #### Code from ASPOCP_23: ``` -clinguin client-server --domain-files instances/instance_ASPOCP_23.lp encodings/encoding_ASPOCP_23.lp --ui-files encodings/ui_ASPOCP_23.lp --custom-classes custom_backend.py --backend CustomBackend -c n=6 +clinguin client-server --domain-files instances/instance_ASPOCP_23.lp encodings/encoding_ASPOCP_23.lp --ui-files encodings/ui.lp --custom-classes custom_backend.py --backend CustomBackend -c n=6 ``` @@ -20,5 +20,10 @@ To ensure the constant is properly updated in the UI, for declaring a dynamic co current_constant(I) :- n(N), I = 1..N. ``` +### custom_download(file_name) + +This function is specific to study regulation formatting. It allows users to download a study plan file with a specified name. + + ### Clinguin version `Clinguin 1.0.16` \ No newline at end of file From f3a32834acb8bfa81e49a315c094c12327f3585b Mon Sep 17 00:00:00 2001 From: Mariia Date: Tue, 16 Jul 2024 23:29:15 +0200 Subject: [PATCH 8/9] added screenshots --- out.png | Bin 0 -> 45856 bytes out2.png | Bin 0 -> 52015 bytes out3.png | Bin 0 -> 66729 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 out.png create mode 100644 out2.png create mode 100644 out3.png diff --git a/out.png b/out.png new file mode 100644 index 0000000000000000000000000000000000000000..1c8e8f8687d2c48e0e0a0aa490f7e2c7df029b25 GIT binary patch literal 45856 zcmeFYRa6|!`|k?`LU0J~7A)xCI)va3Ay{yC9o!{AaCb{^celY^g1fuxpaUG<-+Q)P z?2B{O|D3gNcC9sQdZwN(d8)d)yPoeSR7pV+4VefT1_lOAT1xC249vThw~x|?_iz8a zU&ao7`+^63mHz(WEqQ$~{`K~o&`DgwNyX08$<@Ho1jfwP&c=ipWaMaKVhb|2b2@(q z2EG}6{>Mnv(Zs;X!p@fByM>JjjF<%lfSW?b*_wi#jh&N%or9m9o1cq|LR4JkJAV2* zXBZd?7-=z)?`|04bwhE;EYq53!B#|KpW`cJyYMbP=b z4H%JI{>|M|$8i!D`zQ5Q(jSEVYpAFE7x!O7aL#YWe+_-aMb!UeCk74sUlr*8PmPWi zxa37!+llB`F62Eb`>j)bSbReSIA1C|Hdm4i=xAB$bilc{OzOn-+bD(ng7HT?OD-Kx zzPoW$$k#eX z`$x3i+0igcYpAl0M3;Z=PiMt$OUv7|`7Zor(x%TOC&SJnGRN_kyIaMq#d$GGA9J~I zWICQ^vfgHH;8!AVN z6^*1nV(oJij?4C<$}I@IZv(HHB)9twfxRPj##O2paSXebm_v8Es0oD~NP1cjbh_Yl zKbtV60@BQC5wFenO66*}JQriSC(MKu3WW?%N0bKJt=m+~d>BHw#5j&qHBQ!ttd)AA z8pHT9GQK?e$zCJK2(y~XLY$3Jt=2itI-XW`jFXh+sFUilY%o4JTCWToZD*#scrKXG zYcWD|g!CRC%UJn`k1}CV$9`=Mlh{m@duN817BFXF*x_2e)Fsc(DnoCE;NwJDAn#e9 zt5tT=T+1>>8$Tbi1ETz6lg;A$n^+=b!BO_qUoeqGsjG<6J8~IC5feZ~coz@$XM(+9 zWk;Z8slxFU?{jC~^6ZxQBd(t zE*U;){H~~rS%I9#$O_YDerQ=&O+-h|aMqVM)X1(#LEWfu*&1B!TjFV~yDV^l5xn^`bvUvY(|1~h4wuOw|Br1Jo zYyC8apNKKg@C{vDL;7^lYgv~>E6TnoK5=G5mxa}Y54VY59Lu#CU+Q))=2{vdZ$YYo zyFGSivr~d@7b%mFVA;u6PZr{obc%}yczQsNBbTAfeG*^GD@{9@U<5?94rVVSAN!dH zuYc@cyfdYkGxqKC*9MH&A9pe*UJ!ZNg#q1y7#s4-HUiduVX~zQcg<|jFH$ZEK zlDY>Y9H7S9{Lj`bj&o-0uhHjKXAv>WP>>Feak;+j9P%DZQ?zT+7)A45SIwN)EDKDFyl$9VpontOrKG zN(^(8Zk%fxKnoNP5)YXxS&S~J5l(pLs@N^`f5jFZGo!XJ2W!1g0ef~eG&kUD+xREH zvqIKvE(kCzO!kP!()tSDxE9~pxkp{dLWt3tv~!)s6>HWisa+Atec{t{^dN5hBy;a* zs7Sj$cR3?ZV24nu$4b?Tc;o)5We8$~W|cK+Dk??-PPY&^HC2305`5W)z!bElNeu_p zIh+I7^_YIUEIF^(wT}+OR?2A99MH4K^5yzY#@}>A(jo0*slDW;yn~e-dex+IE#Q6` z^HM)L)S%I1Br*1O$fz;WZyT4}!X$27n?&;Tv_sCc@uZ|ZnWW8Od7uv)$=!MF*a^+- z`dMeT?&kfS1SmUriX;8Fx=O%L5n(P1lXdh%<|-=Y;qI%8_71yV(JlEaTIKxVZY?xIF+3!P3FvmLob{kD#Ak!B!U0_W>L>$e!2G?#NRN_*Vsnn6Fi6|{ z!@~2Ad*1!4Y>;StE7EPT-Q}dHbk(kft%ZX*h;YOgkVe-~$Y#|?EO$D$lOJZC)b_~# z+USFipui*203W=T(L2e%A?A?5=%#-%ZCw+wov0ekQD$*hBM=^9=NTi{e>prbrfXHJ zn{&YPjCHo^MhChxtu{rBXlWigo((GVHX^h0s>)pX#v?KZ{}`RpIf~dH>m@-^k*oh~ zsH>AP)X?@dCvvj zS@~uUiyjLAoG+h7k5+GzwQ;;IF!nmGv9zv9W(aetFi3`?&s(#l-zl6wu-xl&SNbH# z+WH6PnwT`L=!aFsCvf|xaul-N)M5LQB9M<8oozv^SJ&C()|R;ZcK{d{EAK3PKq|Y2 z*Wc$c+*~j~x<8%;qH!E3H|KZpw_OTJ^#=hh=Xq>1HY4N7*pZ2n+f5#>37G z_`696>CARXaPMWi)H$(V;nbM_DUEeXde5fbN@oJ4x-1`ScG?6=3V4U0Aw4%W z;bYk1cELR(hN*C~z8z0xNW0zc#nimRimzg!OXT;WMa^ETkGM%Bls-J0fg+vl+w`_n<9nsk z``~hN+zUe&+-dS~>dUW7ZDaij11!s#e@1?1#gK6ayV`k1yMOL5*seL^*gtkT>}Jh6 z>H8u|vpjcZmYAFM`F7y2Lj zN?*IOeH#Lt1(tc#?-G6oH@CRvakz|rh?{WiVP)zLK(ap>>fe;NoF_F>@gg!(QOIYo zTEC8K4#P0mL{^MYpRKnmsR8Rn#UHI=TG_5u0Nf1YQ2illlH#md3ng$ zpMg2(WuL2KNkJ}|V&S-d*D|i6v^Mpr_HcAvD}=^}tw%z`{&ab~fJU*_Mv*XFuQhrn zei>A4bvDs#C&FSIh~Sysg^Ch5+=H-lHkzZKov4fv(NyHREx+z1U(FNtQryl)c*L95 z9$C()w-LS~g9n~%+XsgE_reav{A{0P7-DG{f8gU-8|||RqvE59WOJqTe1)J- zyjYPgXL$tT+csu33#}hNF8ScWloPdRKqDgjArv72i_@dlPBAaY4@w1Scm}lIGlT zIP?;l6J#}=z@(-}sr<0&OqxoK7y^8f{5n=ZLgvfiC(Q~m)Mwi$*FO|}_`W6-^Ay5m zE$BOmzLzX^eNT;b;@<8T>1jzXu$K?)^kdFPaa9PXytEc5Nwj%4a}MkbM~T|v-J@pf zm7Bn-hPrw64n6BO)c)F)jlP(TwF9`IckNw@RH_~2LO*Eg!LvIRWL|+ujkg0dCwBhJ$ zjhc$ED@P2j4j86ttQCGP|GN8HoEx}hkoSRljAZLGBe%nbsfkOCiG{8 zoiC~m+h{3mRj!Pc!C+ib7KRPuysvip>*AHL9_P)Typ>>cG7iVS@W|n_8}ecGU(2V@ z45s5ok_WfTFLEc#3q3Whegk@Cn{%&cqCZeTOQQgTUS~TuyDdMqh!C*;>}%<7)4@~~ z9}@BtgUu4l;T8RcU^a6@j5Cs%3)fBF`Dc4V_u*1{G#;bcy0sD2GOLY+r80}LSIs{Dl}tF+7}?EMoX z+%ost6!}HfCN@K2FCh*ey!ZD-izx%5#KdcJPsxGJ!Vt&kUl+-n4PzTd zhh$%$)4Z7u9p0(D&oqfKV}xuj#SQo}-`J1DdlQnPkq8W1MU(!N=CSv+6m`FSaTdUM z#$|K*WTZeItXII7Rycf4>$$0`3vCgYwzYT+NPfq7?cVVz>8Y@u3~NbMvAnJprILHtALtJtR(@z-+y?kL2lZ4-Jn5}t@e})>xV$K8NQvh4bp3iA@UFzKH$o>v_zJ(1^l7(#Y08>5ZQ1=J)OqEZG2 zAC`w!*wcqNNJgO#LJ_2xvqu@)BYq5m&RyZkv(=EqLXB@4AIF_yf#cw@YN4l1;h7`dq79~ipIM$A#l-cso|~1 z1X-TXgj22D(3N@+891ZbuYLkJcGXqM-f_53coN}zR<6?CefAaa`B8VzTC>ZFe0AdQ zrSccTY@aH!WXh~Vl-Hrrxvvq~#p^nq)4mLaBRbM@;POL8AW5qGsFs>2xBx%%)Bu&{ z^p<|^H9w_g~rXG6Z;)Aybu6qS?GYX_f&-iPjoN`kQf>Sy^O@-CgC8HpG-w zR-YObq9~ZC{D!@0+8XQpM#-L2Q$E6oi!)`Y%RI+a$UTInK2FIrwE4EpR_Z;z4%0`} z1FG$CD!wCLbMrB@GPD5b-y75t7A>mxo8@EWEiI{6`tQM9crABpPkU(3!a5PpM{eLE zYSxa8Kl2d6vM!cJDWy(DIvHW5R$!y7)$5R(Sale_AY%xf|1z@nf-!NITxbFh(aMsH z`d+d{G-X-5+V)&g*mgQIcI4YC0)9(Ow#pyor9x;=% zBWsC>nvafHIxmb-O&mOO1DH8lwmOJ}ZT1!Wnlvg?)*O!`lgdw;ON3)R@q8I?XO<;p| zw%idRNKC5|L)MZ+cnL~#&ivV6X-|uCf7nxSZ@Uk6@pfUq^`4lUY;|GF0sQ|4y#_g)3 z!-=HQt;Ze(TAQ6qfyONKR6Yt+3|%%Pft4S~RaGGwNBLIb<;h2TAr7*iL{;DzG(9is zVwOwJss-=a^oCjc|dZLoT#XE!KW-)vn{$ zk^yUQ)F)3;P2cqiTl|#csO)7ggYkX7mNlI+E#Cx6R|SeLm?ZzZ%i$-hg^Osj6fVlh zpSAKmRlOY6P}D4~dtf@p`bINie?8+4oIYvSbfr*F9;`BNBhy}}MQ-!%I@!)5jV3RP z$QOa3_Q>7R5sFWdsTk1$Hh-8@yr6_aQAj-NVgay@z@e>~uSU*Z)ztW?m#C!H``S%9 zCO9Y1m}c-3X*jw+g9+UBQ-&KLe3ucWi#<4%gIJV>^JlZ?bhXMrLzzyb&B%83={YFl?&1*SaVo57(N6n#RrzyaDmQHaZ$u6q*F zF5L+BL^NH#!Jnvh0Y`->3Hx_$$M)VJ8zJ7$RpCMR_N))Gpww3b+qUWJPLj-uzSHI0^UuqZu`H~AUr|+x?LSxC0 z!6mSriTgP-IA7$u9Asd%6G`X+nAu)i-vnT;Ay}X8A}JmUG-zMg64Ek|k+oX-ZLOAJ zVh!?8!zd~|2^bpt*g5B94GhpWsC@&mL*Cv2o=)=e#Mtefn2Lpd6l0t_GqO5n?f9Vc*)z%5* z;|t*6PxjI+DHXu9jx_AOpy>FavZQ1--eY}F74yfaeBmpqTa+hp!=$PA_iE>DhtZy` zl%&bfodo)+e#!WS%NbW-RYk&+43$*-+i=`_@R;+3yZW}F(Ny_%1P(&f z(&^^ZYbxRfm&NnT?c^2k>bQ$qpNH1Jjg~6cJSBvXwX<`U0?KisRP`(5G!vMG>lk_GCnO1x(8!Q2}DA9|WpGtgMy zgNlPT*uh!_DZ5$WS;6yGR^OPu{V6z>cW^vfA~=8{L8K=~>V&xOpq1aKvOMRaw>l@$ z=pyl(%IvuGYdyp)c=$l6tlvZCw$Ug4H37!9X-vUsk`fR4Y~^B{T)TPxwD<$->pC%U zh#K$k(BsTd^5U+wmYP%&wV$m}8fxpsOkDEr&d5ZD^$75;dUAg)_n0ZK)1*-Eo2V4C z+qUkR7HR*1)&Se>8lRl^g7`RHYS|-OxQ#eVw;>{j^(aCATE@?O&U9xhyz9Rw&flXl zCeo+3mlqZo3hn`dE%vC>cRqtxCX5>OwBa-pCe=HUU8B%zk^+nl_;;}AyUGV}kEo{R zo@(C5fH>t#l$7koC`E8qcV2}bPqNLTvp(@C#?qv~fi6cl@gvWx1?Jq$Q_Ax`!>5e< z9)SeOD3qr0t^)P9x6T5)%JDw5CQ|eazg4Y4d{1qCg3+RM*7K6F@ir#ls`9Vt!@Mcu zzP0=Nyrnc0g2D5#-EbjieWLEaGaPrGjz{`sD98*8wJ7+P<+nNMhSk952u+p>)zxl=R`w)ZGD8z3Cl85t`NylUY}q**O{r-VU+rX*Ab|wo31fJ znb)d?==9Vb2so(IDgrFf=*EA@DTr{P9!Z@WQ)}`iHrethr>KaJ9+*d1MaAloiOzJ% zAV=c)cqRD}+HznWT>ag$$Rk~@U|`y8&zD?OIVpJmuKx$Qfp-T&TSAf>+kmU}-Nnme zWz>bcGp}nV!4&Rts7Q6b^{Q9KB(?xIl!-kqVt|UE8XUn)998w$XU&cNYxhNOK|y!4 zb#DLi2@*+e$)zvRed^mmk}cmzXt$_Cb;x67m>aZEz9Om}bJof2Cee{^skSg}%kY4k9r~S= z@aw^1PiKFiY7=S$$b5oX+sla?OInDFStm$W$uoGWa&<;B7;AofP5J3S7kXJhI zS6>~&S1LmQq)v_K*mqAnE4In?M!*!NM;$3Zb{sy<3u@)n`0IZ^WabW@ki2a>6?EEq z4V3@1HkTRNn95gc>z!Z=>=YKZ)F=wwKzH-PbWU1ZSG((>`KG7c9haXdwwmb3DWy%>p1FoJl;23e`kr*#3NP-J@KSv{OaN5yk*M775Ew z+xkeJAGIoYBN89!@vchso}xk1prc}|YC!Zwuc3Cg4!@gM4b3EoYepd>j9B_sf3(9xunYG4Ig+`F$pHv-Cek=A z&y3ei)N?!e4RO59I%&tG+W1UG!?O^;@BPV$+$|~FwSMD;Kbf_`Ymj5ww1(knhD6s& znC|b(Z_j}GJAwjXVDKS^fX36Xkzj|p0Lb@=V9ta!8z=`cv{(Ihh|tYccRb`7{HZ@m z+VEw?TCLob&7y|%*2b_Do2judb|&i>Rtq^-VU(HWEsS%*F2}&3!B#0fX!C>HjC*8# z)b^qFh-l4dV5l0o(>Q;6ci3v}YtrkbNY?XThp6j@<(@tOKBn;>6$h^rAZ!t9R(HbzV2 z<{uDuBZaL|5iBP6d1eY;^l?J~Qv-8ZJ!&wQ40sWh>M`f+v0&DeHCHi%74MV`5{w3K zmV?D|1Chd{GfqT5tnm|E8w^E+^LA}9pJ)PFAsi9oFU*>i=K|jJh0!j+tloh&`Q0XM zUAz~^<3mmYaL}az|bFP(@Hk&d>QfLES{$c~cFsG-p2#PM06JS-JrTWyu8Y0D_ z#A1$Z=_U1E0of7z#{lUkO?K(imz{>pr{;>5kLunmdMA#6`t(qCvuUjiw21+o8do9N zy}B1b#Wy-zmW?d%(0EbE-Zxi$P7L2T@jW_|i0r>nYcisuN)Gk=b7eFUZ0~r7m$6ca zXd(y){yx+$rafRG#Gm)nc?%%uq8##ISj@X}<*)Rh(2=q3jGLU*d8TFyMGveKjHcgl zEkfvqlddqynKQnY2IjQm1&G2Vqo}u5*b~eC&>46@Uvq|nxF>uLDCkX)6@}UT4cbpM zj&yL^gu)~68yYW&_dkX(|J3qB#+TH31SYb4Zr4Y)*+&cGfHxoq1ma7qM1#y|?b=%W z8f)>cl{(__lYl)%BhZAOvgI8`396-^dB1rZHW__7#OUuH5kH{`5FoF?ZsO0L&xouH zNoh8)=J{r{?6BXj(ifa)(o~j7u=K77Js-tn=lq%tDyDS5M}U~|-g=%VqX_OvEY6zV zSiJx?q?$TDcZ}faef1*>q5-0JubEiZaxK52wv?-l(eiEx-wwM&560;ySHus!rby<3 z41}SffN$|S($#cVqmp-=>d$D|=Reot9wIW zx(zRbN=?Sh?X*|P3D_* z(;BX3c6xq*fV%J0tS`s(i?g^S$CIJJ@(l23L)5~y7Lt0Tv$~45cq&6cL_|?P!jg%bVa`cW&8B=Ms`nqBncRir)+5fPC}81Jy_!ne zwGWA5{Q=5y9&G;p2^nOj)IEc4RdhW@j2cZ<-r2K;LWF@@c4pf8LP28eoVye#^SJTe zASwp=Xfzrc>xC`KBh%y5X)mJL69EMV+V{=~EPXxM98a&EJ(wQ}r@-!(ZOf5EBrAdig` zsgH;(Erlw)w)vx?tS z`#q{ZhAJWzYDUH)vS!OENrJVScWDu?lYRPRPHxa0;@fL}8fuxDqMAdiHalR@M#kqNz!}OakL051PqQ=6mRNfuk^`#~U^yz$5*#Z$dqvzHFmDWx}7_p25cf5j=^x z__=|fi`!kB-0?|Ev7LJZ<5G-`s0;?1Q-VnzIntqk&T674aTnV9LjTSL^Y@w{4agO6 zu*wkQa+9A-%FvSF_E>(Vl5ezx`MpQ_N>g_kYTHWmUX8f@eqd-`rj7Wa8X+NXF>&@= zv~CTX2WF`VL))axZC)IDPfS2yMCGuh{9?5!Qe%76W1mjwIS&I|w*SREC)KS(1{W_7 z>z1mn(~#GDF|Eg4k+!QTYo`XLVxJkk*CzlR@TRL$EtW%VW8aPongw&lSdhG)aK25{ZqK7b%C#wlbM8Zurv`G5-b zk3$6R{LAeKwT{A%=P~4@313)G7t$mwYC@L|v%mL9f?Oa{ zSK-!7abMlhqP{yW!Ee2sKQE0=j9G>Z&uY*AzD{6EnYW<1lBOuY*U(F>$M#3#F+cS9txI%`W)Y!{lM<&ofd>fzJo+ z?sV6UO$;H^YWtkQ?>`IXi1-h4+M%!CT~gB3TH8lUFW8jwKcD&$xddW7 z7V7gqdi1^NUo^+^R?KNZv&y$>As@{H-W{XIsh;Jp;rsQi#m+pn#5=Gs!e%QS=Vrmc zDbD4_?pz8<*(1D6D?Wm!Ax>X+%Owlo<*(j??6L(vvplpQ@oNxOstUIOqwwQ&@{^a+%#mE zRNUZxBp~mp8&YkntI9E;WT;G!oZuM^SxG+vYp(STOt%Sl-C^Z__=;U;)ph@?}KMiZhCHJ*K7wW4?g zvuJiJ27~qSN%}K=rFx;JfMfif%`2i`M_6NZT?Px10{{;_Sk21)>PhpQyHx|!6CXY@ zVbg9ro6e7OK@4E?mq9*k?sWembI_B7ir5l?@c5AWh$8fN{o{cj^)=?=rq2CXRj{|A zbmVT*Y^!E_Tf`r51Qmo1ume8Y$Yv!Ax`k~EOl8wtjvHitP(=vE{03nwA?JNRlCpctOd_{NNj0eo*ba28K*bI zV@`fXxW?nI8{JYX8yY^qhhFoKDkIBQ1NtSk$hO-AB(}SAle9R0Q6sdvu;r z^E_n*D-tgyz!7cTi5IFppw38BYb#(QO3bzzexvwJRtnDe$f4wvGJDK_8LvFgaf40A z*ztMC&ey+{)@8FouTTGGcAH5s;<|@g$@!;AWe{jWu>}B`{1Tx{K8ss_;>vwPs~15n z9EzlqJpejgj2p4;vJ;bN&; zkp2~&6OUvGc8F=MG#Ia>fncp=@ceN=w|djEab?lfXs47(-<%u#nbZ6tl1%6Y1#efq z-4SY2puHX$@CK)eVt2=K8!k1zc9i3fIHu)pfyJvtJm=$Y0&Ji0j8m2mp;XO^>~ok! z0zck1HA$PapkzU#uS1!mt0#17JQ8s+DU;qxX6ht=At5_1(oaz8Hw#w zYCAH*H;2J0e_H1cT=XTA?CwC2YceC_JEJIT5BdA*fg<8pN)aya&hjX91GH1HxhFfz zWR1D3?c;63J7JLSP0_~LZy|tOJ&h8<{7>4rLNc_U;pLz+lm7Ie$cagLTeqk)GDMaf z0?0jaTa1Hc+n14SSg-b!A=kFf3jgS;&3Ysa2BV?6>QQIfN#V(`KKP2j)`f;f)JA7i zR;DLgG#wxFBQ;$O&YKgv3o^4^-xG_ucXMGIFmOV^qjGN3XZ00v@3R{1!RlrP^*vj_0G9ufRvlCUng|GYK7>6(4C z1DBZfBDiv%_9onS2@TtfbzfD~yW2+vx{R)lt^?aWY@wOq1-UDmn$JS86!qMU$>;Qo%IC1viJr4!4T}p)e$ycO|rf{8!7lrB$q^g@=k*7 zW-e4Nn~mUjXd=uIn!Uf}amLCtG;Df&OTp9t|LBS#(7X^Mw5^E;KW21BoNB$AJf_x( z^D&5vB}iGC`f#0dFeNVKv2phkbLv3O9nYn>3mzXtB!wxnsxU8>leavm|Kmg+1GU?> z@Z9zhf86DI>)$^WF8#usL5+n>`o{t48lF!a5j8MLU89c!A0NS&{B~uF5@%6Nj^_6r z?bDBw#fMecqJr_d9^ne%x|@-AwS%i!2=jf@zBdFdX5NEyou-PjM}Q!3hpoXGO1Nfx z=Ez)S*PDp`V`AsuE`|shOUJvW`R7rerUyUyB1hd*F`;q+EQj0f1e@6la>MCjR1c2$*GkF-dFPC0O+CEeagRXPxRMl3!ZZ@{mFWI=Vx z@kt;OfpE$1x|U4DI!umdAA(#Z3U%^&v)9d%E{D;OeSL-zpnsjPw(D%jiYztEa+Mg_ zp>GE1Yh?yBfT%<$GJFexI8^#j?uX@oRh_NaPKIhid_8j-%ew$T)^6Lr1Bpcn$1&pg zAIW)pn8cc(ZyggBtyFt`zbJk|A&;spyrf zA>kuRl`9#c3SOtTUGPVU)OjPJjLHgLs~cWI7ULM<*+|EG8McEj0ggM{TkdgP&n9N3a$16;D+ItB z91|+}ahYO<1Km#r>Es5x1(Fp`fboiX-YgG` zl|+`H|4>kaG_F9!3B1_z4@OEbXGg0}xAT4B^djaBn*Sd@Mvplmu6Pc#Iy4q|e@qf@> zXgYZRZ?Uld3TGx0Vh4V{U1rqz@NccL;o?I7Ut??kmG=EFIk^8*;D4PZ{NLuok8b%W z6jW3%``dTumy3J3IQXOkTCb;xEK%C|sQ#qCLQe-Hd7QTz$esT|8?ms2r#6@Ez_Yk- z3x+n1bF|D^w4xzGOxW5q|wnX<4z z5ux5fB9DNmt+V^)xd-%r+KUBCk#Zv$ay9TIfbEkX4)+CyXGJ){os~Au7#@|B@VPME z?J`xv5KXC=w&dHh87TC18zC~!sJDg*(Ycn^}jPmIgag`toPx@Ol=GUvM zhi6d8B@Css&d}hmz2F_pvMwd}rnm|9Gqc6u?d0DiZ}smh{NwiuWUXYp8Zf{*`0lWu z+533$(w7EjmJ3>D>T4tL^*hWQtd3M`b--$+PItF1(%N>Jn>9!2#pWekFh$%{3tQd^ zK{(58Lj-B_E{}JUl@un|)5rsK`y2XsrQn03RJ6j1e);yutR&wa*Q8K6N+YxlBf-W@ zy5Za~S>kP&GZ@|=-9c4@FIO2mzy=BtHke{tce*J-HZSDv%qq`Y_RY4=Xy z{1mg2-+I4XBU6&z-t*AKLiYT72%~02@XAY&XN91@=A^-M^=)FZaQ%Y?Kb*0_JM@5^ z%}#zvwTQpp;Pc2>wL*5^Z%6)|-Z3$is@FE#yt%$6qXsplOAUF~WFR94?^}+HP)NE1IlHu-S7133xNv+-7yTSgiq}sa+sA4i*~F;r}H@j z2%Zbi9U7}+=*Spzc6y@`Zw%L3+lgLI=}m9XZ&mb92APHBjc;P2Gy?y$`820iW9ooJ1MJiqctM6CR~_H>YHmO^ z%a8th#vT0nTR^z9bT3qWnP-6O#B&IGJD-W%(44=!buB#b2d^!}me}ak zex5)x#pVif{zAb6ts@6FamBjI~sjJ@`r(aM=&CeiuvQqBvEP8?|j`NE9cenx|fDImsa8DhXqM> z*Hs-IPfd?M;&YG&HIYdh?L3K6ieK8CIn?k{ACTUn^NyL)dvWXJ(iC6(Vo>5U+=a+7 z$T2ecKzpFAhtZ5XFYtcGFzJA*(pDmukhJ<3&*2UHddSr0_PYG)(w8|r)d%^OlM2EX zX2nNq*-+%qa5a&kN%b98=uNX^#nsicngbHI?wB$BtkUsiq)WGj*p_k9YM{IChd_M=meSrR~| zg0I5Yw@yPZ3xI5$_{sOnKtp1YzGP)$e*SSVO{^pMwfW^axn74lPhiR9Ni*pxX#p}2 z2)Qzin61C=QGGfydra1YMARf5S6Ott&_2OAb8%WOXP0;&jM_(%lQXC$y{XA|KMPRj zdAO4P1w+9y#oe=#!C74MNdHX>z-{4Wn(*ncMxb(P35=3FOQJNr`NPJ&LqqHC$-~Az z$JX=6ahFE=%JrbuEDWN1h+v5Tv+;5B_A88^GNq+yK);s2_qz55^)J^4xu-1k;sb{@ zC*e?;Yu5vfRK>6c`V!%h!cUftY2TYmAIoAq*IH_~xz?8cu)4PHL~;%hS;Wmw=k?%z z)0T+Xq7m0g`u!ag(y_96wElhb`snZG7PmV`|KYN4X2r<#I86; zFa$0U|BPZ#kw$o#Pj(v7IDv<=bCEn=UtgNj8c1wxvjv*O#Qd73Qyhw?iK~=8pZ79e zU%yly#vv<@mW9IVWx9$y--d{9xt6M!ZY8$aPR&Bn#ER@>!w?kG@-?di={pZLk=pSb0R-PC5#_1xp*yZn5 z4AoDcBq390cw8QGY0yZE;fa&=C(rbD%WK(&CVOep=gL+tic0>QMGnLp-9AE*x$Q{+ z*!Xm@;U~&Z2!~bNC(wM|;dD*@d~Q3dPeFTnj?)7qwZ%j{`0POoY)Q@{VD(5uAi zR{9W6Jl*Na?y%fxWS58GGmCcI`APDF5Wn^mrHQzOb;gaR4wwfP#?PQ@#ssFb=9^j=shg9XTtEQXV^Wi!h$#&qf zdL?VAM^Hl+j5*hk{mKbrE#sID(*hP7`Nn6&CuqzbV+A?Kshmt-)8r(H}5+Y6-^!c%FNzXPRy+b zsUPNw0{hIOmDiZ!hjj%?qFY$SoJSXP3hW{#(bh-4c`3JY(teHf{XCbIYjY*B*8Gk(KkE3IYvIole>Ug*pIx5%gIS&<)n(6{>Eo$6`T8`_EAR7|A~j^PLSoh> zB{Ab@zGFS{@S^#MrBtcw$>@e>e&R1R16|$uZ>{p0;VjFkNp*B9b@_9fktxL&N?r0( zn?zYP`EkMZ^GVXjEB*AFNQai^%KRJ|2H|$C;??=aP8s~Ssh(rl;VO*gP{a?3q zUClBzL=_E#Nu$kO>!(51Cg;6RfU;ieSt;-5hYrM{7KftT=fw?AYT&C?-cXZ3Ur8K6($B^u#(<&JW z)mUw1X+&!83&+SC`mYj!{&9d1;Ud%lUEI9<4bz|&Tr0yPM?$^l;&16-=t0a*oHjBnBzsQ)Ed0D%Bp z4Uf z@!%di^|Q4w&{E(E&!8?s;QFsf5O2*6delEl6O9&jfp}#>U)**0+Hpc$E>=Xl@V7C_ z?t#lz$a@3zrWWzGd!_t z!@??cyI!r|plTI%BZ#@LZLUlVzNQTVOB6qJ z&KUMpTD9)>cW6TN6}ZoU14!w#1%1<~Lqqf2RoJO6pn*avr`W}H2qPZ)S2?cPCU!mH zR1nu>NXP*L1xBCak`GSz=v_nggo~3nBoE$Vdct2^Tjq5Hx0?xQ0QJcUgQ|c$Nckr5 z6{8r&(;=smKT`Yim~vV2{3+Ne9iZ>?~#=4aC zwKG*`kg1{uTMT!eSEZ(ML}1E*9*+L)pndO&e-n3jklrI1w_I4gZDkssCj<9o;zZT7>}BHn)a&i|NWMs z?ugf?TwZ%_wYs!5-a!eO+noixsB6Y;b>Q0CN?q1eYj*!9Y!8z??H{-l)T*XE!x_Fg zzF3n#ie5L*arOy~a_u%y+Ivunl=wFOG%g}$V9tCXF6mNMHb?9N8C{qO>2_lU3%h<+ z7$K8Y*B2gieYq&`ZWyJ)R`x?SYSS)h{qa$>NYzuMPT>W3b(v1Hf+(rQK4Dc{EzHI{ zvu97DJtx^NzdgwTTGa$jIzWqhtz_vuEcL1PtC(WFEBjJha=oCvQo-C$BI*wL(`doS zAjjf^?=DL@@{m*bicqf`oxQ7zeFk1B?bBC}(p@xk2G9BF49>Z({i?eVbselL8m6cd zuu>}sPQ+>=U5BqiYk|`}FQMl3rasMBQ?o>|{5)9L)fS|fl+fz&0ao>+CDG37yRbt* zJiJr)a2+vwZj=MHTpal{ai&*C)F94#>q0SHP)Ou>|8tRYp%tw_)AkVPK`-swG@GdS z1>ZLolyA0wudcr$4I~=SmJTM+K zwix~XaiDKVg28kH5(*(mrpiz!kAI6hr1U!<{w-lwJu`Pu%( zH|X;!OYZTkKNt1Th2y?FT|;vEq#M)rBsjU-rBAQLYkMx_xa>x^wQH8P&yg{e->`bJ zT!SsJ+K>J=vEG!;>aa9%Oz)-R$2jLO73Uu9zO4gWJKc!*tlaG}`P#h!KCrXG;pXGv z<%9w_zDi>;V&FmR`Gc77jAoQcb$#y`IyBkf{)qyc(mG>Mxb2Imw84QCO zqnB4%#5z7@K9xH~_x1|xG^3Oi!kla=(gxP4ku#?VL0rZagp7!|mn0$F25_4r3N!hEe;4 z&vbN$Cn>1*CmW{U3r38RG7k>FWKE=v$Camd*Ay%aE~o|U-MtSz=u==Va5UXd9>Mik-~!#w;p z>`r#3{W+I3Ib2fa=8YIR^5PXchymJkwP(F8W21O)+iEFf>No1rl zBP=a(;R`ampeF)84#F!CD-6DWiCw3Ea%wwPWt-72jl3o`$Gf-Ak1_oy$E2f& z$PRC3F1>|hV3Y!O|Ae!P(J%X=4f6|pNz(UCwWQ)oZ^L}{F_2%LmD};O{E5;*YRICe z0#*UhmV3mTtaML(h_$hZ1g8N=$3;?E@y4M1q1f2ogZ#Qj9?RyG>>p3!krc#AWfxX+ zZ;v0_9{ow62`6gM0nwkT_c70T;P=MDJ(B+DTfU!5muCC>Pwh0h?s{IesX--1&7o~e z41EdG#2$LFbIzFbWh2gND|8P z4tgU~Z-(u+*ZAxUE6!X4l|382pmbcM)n(J_NSMwR6_vZE#r7c2QENXR!4!}tE$pUg zG|cWEP#Q{pkf>=339M4{aj>*=3rplShhms$7hEVEvY&e1GmuT0i*+g~+Wm7z8b`iF z@jDq+e{Ov2mG%x9a(Q7$V7I_kUnD*3d%4H~dQ`^9@N<%~LLwku# z{)j?nhzzx??L>{@;m*F*fZY2bUiyhLY-N;E$?)q`(FVJVN=n%a2tcz*X!T93pE0#H z=8R;z?(R)rOoMMuUrSq!hu4CL+=86&uruP;T5 zcxG$HZ~G$RZs#x1B;eY7gxjv-Mjpft_V^?W2NG_G3~{2={B+{Vj9tc4*(!TDdx>%Q zQOwU&32&FV=3&czG<}SEvs#6u=Fa5Uc5#nUhz>IThK8{(+O)__+T-^FY@#(`thED@ z>I5||;-_U%mNDI>2x{FD>AnFNm^$y{)oPiQ-_`Z3x{M2qW)Iqm)eq!0mSZ3b>o&GR zGln)8pU2ulG z(tSwB_zCGQu+n-$kRE!gKMVEc{l*_7_;NL%6`+;C`V zDfz}lL5(fx-Gx6|x3p%BHHMC`$k*bsMp^>w^F*&0CNMtW>Us*h9J}2fWRnL4RPy6$_^8 zCce|Yc^=wCa1g882f7^dt6|(qVX_@+xtu3gyeHRBhF~$-j!WV_Fo8GBgN;8&8cE^rYo&$mb>S zdyTB{T&2NrafqKF5b=Xr5xuW@+4ePvGm-> z4}v@m;>rgzCQM}ny4riitlax!lN1f~G>l_i`}4gV-(~c`+4TC$*+y+Y8n5 z^C)WT@X$gt8HSslqm|N_l)tgo;P{S;}I=CR0o42sYR6#O;`zrGd z(&G1Rb)p_4vkbe%$Y}0m4>y(l8&1X%MF(zRWiw3Im71cc9)o8^abK=pkDPFJUf~u@ z{gkIBWnPj?D0mQS-rb}+;V{G@)?MBq*akJuk4{P&{OqW7IWDAY>W`HPT}In-h|FMV zu8>IBM~y|gaU&xA5BSC08cekWoG^sj`x7lr!*Lr>0i8DnE=mX4C&TSqL@1p?O4za8 z(AZ#l$ECGaX$Q?JL3K4@hh~<=f@RYmm=soN&!IGjyoRqW~5}DoXptyv=5xPS{+YIsL zR(>LD;?++t&6n&zT5Pc}&4FsHLfCTFQI|?@Ep_%4gtu#%EgIf!-nVe>)-iB3 zN{&Bt%!$|7B1#alj*XQ{LgKIDJ2#xt;-dgHkI%17CAn;l0puU{kjQ~I_tVbV5eubS z9NQu)l$pwC(82}%?5WC@r>uWG|9MriGZ-T7ChDDEvNd?-1HKZ*szw;wDW(D6nedTZ zQLxDHISziXNpyk0%qcc*mJpt2z~R|zF3YV|VqM$_x-1X77sZJ&FYz-hOkJxxi3xJ}kQ#)t zWL3%_%tL%^?&|-%zES*0s@{7(^Iy6nmwCIQL8KcT56F<+}U{OIX>R<~FWwgF9msiokcW_~d%PN9c!3(p(}%BJNZ&n45d11^=W#@pHnCZWoF zS>2V>eat5#VDZ?82|?ruW~Tffq8j!(7V`Hx>QnPbwto#2yV$Ay9@Q~p`~L5Xrd5lW zLeK9>b~kAUEoS@aB)I#GmqsbNC4dH+EawL+$=#Q6xw|n2_$fn+=WvgVeeGWtO!*>M z;#Vu77S0=^b%{<@b_mshfzBnzv7d*q1tO zqd!#1$f|!7ZX5my@zIEuInKP_Y&lO(6p+^F*wh|iHRQGZ6A0OQl4u!PY3Z|6xd>LW z_rAALe79ulNYF4cR}HM(azm>D@9Y2>UJ5%LElnMb^?Bz)>I;o6`ZPt`9@2*C`)mk}jVQ26S`-?`?-C$z#595Ryl3%k&+X zR~=`TpOx!pJ-D4c(m1p!=TZ`r%lwlx*EZuy42^*;{Mnvw#9Tx>sq=JsaG^}|P$^}X zNh30MxlX|b0`u3FkgGNDgl|EcMY^8B+q1uu?x0EuD~ky*=VEo?AXDVlW=eX0+SL`G z@cw4_Rcxm%zRXQ{;2z%8uwMCIqk_#n>y#%0V0nxh~y>3v|w zDx)Co^(Fer})pQr6nS~hHqn2=LfoFWAf6A4E3!vhS3wk%}9ZOb3+cFJg(yrbqTL9BC}B4(Z_3=_6!_LCxFW_Ua2!&UYpIJjn&8HC@I)D` zlsOZ{VvSgOUk41_4%K{ZG>BWra3M!bvaGOToAO_#33)l+MZGBmCe&f2HrdM{?$UT> z`7!zZ6ecb^5b~f|)S(S@oZ8lAcKacC&!@0#43H^^noNmiUNBL8x82FV|mksF0_R0YXEB#Vsa2nc+$@Q}gHgFG&T@8p2R0ojFzx+l(?~VKk^qu0t z;8Z8XMJ4-3d?h_-mzpiLL{@@Q@m%mKEOa-sGZz=zH-k{H);D@xRj0*eup5Lk zV{$0FD<%xB$DZTdR&;x^Tv$yZj5yd4R0AISYNZ#PoY_2#a^8)(+J2Zuvo|Wbv?DMP zc0{u>;4gsJrr+$b`*{-9ky^zMOW*$z;)vIGSlM)=)qx*8BOY{JaKo%9k}Fiw_ZX71 z#;?%Po`%O~iwYtaz9_2dEm1;w)8#5Jj2ZWepDXLp&cR7EMmiSjPddN{P4LkwDmeJm z`1;CYGA&bGP_NBtDTDnR=O2gde_tb7dguvnpI#vDZe{@75q?t%`w&2sQ_U^V4LO_J ze07k`!vdqUvedu{8LyXhUX%G&-xkSeQtd6b5z8#QFcrgL@uIb8C23F5^r}O`SVg_M znqT+eVPuQ&8d(rQ3B43ny}F7L&H3J8U^2bbEdDkIy4YG%WY-EFFdIG;tv59VzKD2m z2#toJl~?2Uk$3D+Nk$g^t$mTxm>jm){;M*kgPt3ET`;;^b@R^%v=`&zW+2VDqvKWP zdE}P_;nokFN|g1pgfzuFx1F9I8BIz`n0^#vh0#U7T9%sjC||XM?y+Fry57m177s~- z@VF;PwB%IW#eg;6Iu%QzIqG_9+`#yF&)gBa@v)FPytKM$qP;YaDbr-A(EKW@a!_^0@o#s; zk}f_DsD##yIHFpU7I0e~S1#w)thoY`v4iU?Sd_pUAm3d#0x#E4@GAq$s;EvoNxCe3 z4!`IywkW9qX{w7pAvc|G?6h$QyN83)j!)93Ej&I#2(s22VGZiDl?Z#nVaWJkSuJp$ zzDCx<7i%RSX%qLzy61t2^5>bxLq_eU zo=ip&hMYspW)lRaa`N^rjSUT-HItNaN&Xq!oKvOu(Gd@PDN8Q;(iIb=@AujWU3 zu`((lCR5|BB9yWlVv&qLhL<64iXm<M)cfpQCO4n z)31#f&lMJuP~YT!&ux*mJ6`H`c)dA90ajVAYnyu)6t`8Q! z&-Q4O8$E>Dwf^?#A~?ht>i=ksSIVcO=tI?hV18wh#^%w__w<4G8gY>2M61)@f9T(B zZR#MpSUy!}K$;gPLzdn9c*3mE71aPRP|_$8zUHS|t*NX+Rtz~ErT8QTxY#WjIRf2} zGK}Ef^RhxrD}kFpy#H0;;Xsciif4k{cOD}3UC?1!D2yjJGi?KU&-82L&5s#7VRZl< z;GDiR>@8Xa2o5EXqA%~YT`V6Wd+c9hWK{C~9W`NdF+}ES)PzIBUCB&_DCvdEK|3*BMAMovtX9wX9V}qDC9g0qa~SdI1S3<(>6w1M z<&%6S7FDpyj;9C~_xR>D2sy*7mShk>2{{5WB1h5L>!-w0Z|Z933+|4ML5?)?Q^Wdv zK1hJ*I5o@b2ppWoGEIaN*H&~QK;+g&>xySy$B;>+p*o%+^0^@I6uT>ctR z6ZPhw`3%obyFa{pff`JGp~cVJf5V-QB3(1MT-dKZ^%QJ|k#1Yod82WG zn#^{i(Uxmunq&PIV3V@R19ohB>wN~mj{R$scKoClJ2rmHW=WhGeohnl{uG4P$E!%TTlxuujzNfsc z!?Hqu@34a<+|K=noa()_dyg&0&}0=Apd}#HEWjdFi#c(|?x2Q_+R6W+Mf>l2PyPI# zvN;%AUC%Q7XYpQA)R+G(-kVr0DKH{%?fdIFWp-+)_iXc_7)$x(Z_UbdS=WJZGOpUG zMo>HAobTl`7cL1luT~|s&{aoieN=8j-H$oZBw@7A*rMM1=K3VXT88cnhc7iv9bNH% zj9(X>ss>r#$-d(nxMO8cjb4`o1x2@am@QCzPFLUH2p_$eLyF?)f_=HTRUbOwz`;Zs z5g~EBWe9ou_-^l;44B`5zjDKiC+cY@nj*Pr!XsM&5*cv)S8zEZ1V(5<3ICqM@lDwJ z)*BI-DRfDcqfROt&$_2N?H(ihEADE45{Eb&(9Q?FYL6UUemhY29yh;lr3G>B~~DdAs}G%yKFB`foK@ z&-NQdbFnwSII-8|$}|8_JIpF>Lx6&T_Vfajk8k2G-!pn7ACpXudu=!XK1RlSAm)z| zc0us#q&!(l2hrHeymMM*tj;#vXVC>xnvh0z0dfO9KyEk-kQ;_4mJ$2_f#DwRR2Hm9 zd9YY-mSvAo^#!+rY#^g5KxD|fw%qtD5cjA}Vuqt2HRL@eIW=0j>2Z2%cQkj?Sbu%obrU`y$9eRPZ{i>hX~j2Y^-t0i z;kTg2mJ*6pM!rzQ?Plc)ayPsCFgV90_%_c`vdFXPb{5f%KVE#NS+ z5>iDCev7WO9lo^DdyY~s?9lO;(GxiHs*4!64Xh;L^hHN89*< z$45|(4r&YDp5&`)IREPo1G&-V%~o>ocY&p$(!HsnDJ_W8v}lZ@9TsNAg455*{-LHa z$Uy57S9`;dc3S)KH=%?oPauDTKSv*}c)Wn2%ar3|Rn=FVoZG9PD{E6DJBP!9eIHoW z{8sH+F3NrcWq(R`fm^y~8^=wg_(aQkf|Mwi#>%P_NH$UfE zDYid_uG%HG*Zt6#gkC1)211&k^EL4G~4&hM1XwZ8FzuepxVpzNk6Ww zohqT*hZD;ca+7JGvXU@xv;8Wt4($U|)9z%5|jj z&!RX|=a@@Zuw0(;)r*%uk~gQbAJ&DG=H!mq77Gab3=yg*2?`6GZz(|AzBK_nzVP0! z`xnGawkozuNs2T21fe%(#|;J{v!fX1usE*HRiNPWPl2k>bJlsj+t_J0u{&d}U{M0(XDA z3%g^W{Y%#}$x#DAr*D3#{gGF=`?w+nMZVd`iuqJM^M4+z8EEOyHpFb@wc4b^ytZBA zYS#nH2*UNO2X;g9+qLRG14OzCNuSFg$*mpD5_fY-efhfKxBAKJ4v_5aqhb0{0Ypu; zWm4I;eDRQBCf612{*UKshx8YXz76;}+I7Ag+aEB6#R!bssq7*{z$0e78bv)w)Mzl@ zNud3I$=9hrb^~{a65iQ6sJAP~x zy#0~8dkq<1vsoHF<~LNb0Co$UVNxm^;8W}FS7M&>0E1`%E_w`=VHj{D5n0P`o@n@U zZ95Iu_wtcOYRKNNc`018s}|&EoU7O&X1qH7cYv*48fraJ%cn<{UDyELuGRe|-U9V< zKVkLbwA^ChNGU0Ijcj7MATTBg0zDU@Qlt3HJ<%<`dZNCS-5z|`f`C=o;jajLa_8HW zlKPq<-kcTSc+Ur84}73MQjW8t$9A$zd4B>uzVUa)e1D9Fs4YB-)=_RfH6NO4WlnDA zocv8v4q(YQoesH2dt4GH(g83V&nHZQKv9ay3E=u0`X74o$tp+8#6ORUBzpVRUU3AG zzlkwxW3J46R&TJTf@?MUNAh} z4N=m4uUyMz@~058dL@(+I8*eFoUuQf0S4r5lr?qof$N_)EMt!?eJua(Vak8gI6yeS z+7@8L{dzi&g=Zt3#Z_N@TN!;9xJ?xbQQD_q9F}J4CHyNhOXBK2H?2d%a+yLm;NH$@ zK;aEP9`wGM1++JQ=k;?yF*^o5L7_jEU-0j92hss|PQU}sEAlL9=W%TVbFW}*K$+dI z#u={jcc!SQSNkPDwo!ejJmt$fvS=L_@h|kum%!M7K;q%)k)O`9+Vla0%YlEQe}b~A zDkT4n{3!(oh`N%R=e;i&2r3xH~_%lFQZp;fIGM@(GX|@MP7`UC08bbZqO}fu>X_zQsP20AS!#%Bii{^iAzTS{d#ZN=NROJLn@-cOzrvpnbY)iRmoIw=g zQxn|~8Txx)0l3ov9_UT|2?nUa)REv=q~ZyXH6t*feH&atRQMNDo&s1W9B<|>HA?#( z0hk^r6GT1#@#sOb35j4g4~$9{K+YvhEH4^sS6ut=mK?_|YVDtZsZ4DE#_eT<*MA)W z8mI}l{u5kI<%5DaU^SL$!AIdIU)=qwb??1oqIS_2ogyS8 ztD#wd{miMs3uk^TF$?oHf(=bfzG|HWMLnmABof1Q_HS&!>!}UELII>al}BE24L|(w zNAvshXHG4U_o%zm`Zd+C6#ua#wD5GnI_wn4;taqDe||6O=TrVC|M&!DO^*sw#L%kXT8;k699wEntSzs|h=y7HmbAcf@qkA5XTi>%qG_F$Aa zApZEiLF;ng)df{^AL0E-YHb&YlO)xyn9mE~!98{gZM8hLkw#QUSqC(~@wobKtbuEh zfOh}OaUSTsmHgZk38ieruy`-26F{|3icr9tO+^&DtYW4Dn~uTDE~ck%%tjT&S)7ImFCu?__FDS55hl_1F@d|U zy@!+3%BAP*6lJuv5$HBHwl-m=_rcfI|B-?W$xIDlNUJxUfw;-zys77qQWu!^P+$`` z%&@NrUpJEs+mm#sn)y_fH}lkVz5O`%q|z?CFQktAej^0H9ozU}L%d=p%5PjxoGp>^ zm0ot@Iz?-Gp#34kV$lfV7*8AMnP@H%OgXJo*Oe85cN?sG=-_1RC&V_9kbWi956tf{ zRc5S*;||I%KYvEQ%kyZ~Nr^n6u(#k}-N+T|O(0WNGxp=bVws!JtEOSq@yA;ob!ky1 z=&*oejYUeJ8?kPfoF-9+Qz7mfl%C@aFqgr^M8t#_r((<}~iuWzw6XM_wP| zg$(-UO-htjgBK3|tnKxb*BP}o7vL6{&Acd0X62=iSaD2k(;3@i7elJZc84pyYFOaN zpDKVfIT*EGw&Xm}-1@QT*)}kIYx~q_wL;hY??(|vFKdGqhI0ojW9xDEQtG#UK=v|* zl%K!j4(I@oNT@;i^iFnsKepkQllY)Sm{qpDhSRjak=}F|3Mr#pAiWl8R85BN^<=J* zA9n{>y4M*@A0IN82%{-Bg_@h(U2ap`uaCB&JQ!0r+^b|RX}1b2W$G;4C#2w~F}x(= zyQQd9`$T{E))C(r>6c#VN(Ia3YW20v`XU##cz&H*T0FHRg^O&L;>9Ca7vs`0`Ir0XUpN@<|kH&MV~TSSZ8L|`C|m?tfW z_@TcGhy;8pJ$a{GwVI?+%>T#E%%i8Pom*(7F35-6LT5CC?!~1D80h}2v~vIOcrUIa zZgMGVmfp?GD&4F;dqnYY`dodl+q|Aq(s5Ui?$LgB^2VoC=HY#%3^^G?=mJT1lnae{ zwy_7@N3>g|=3;pHMIJ`R!zSzj2yX=Jj?7BJ;|-&>1aYDXMHQ>U-*(GbD?yB72du?V zvMm-cX|a_`FZv zsp)ILSumeBV5FWB%M(3A&p7_!*1hFO+{*X14r7<*ojPb=*lc_97v96l`{<)rp<7U{ zy^i{W9OGc(t!5-$^)o;|y#O4?nr2ixAYBWoFj!zwxN@S9$We&q}Ge-pmC4i;MWS(@3YU0}^qx2!8rGSfcS?9UiYGN@ZLX>%Xk%Y$ zbN^@E8}`lpPZO#W5%i$meh(>ddLeJ1%g(u1gR*5Qjb>W(^aj-)PrIHvLud=7 zj}|(CUNN6=A15laaq;b~B+C6EuTIhs{&e2efO~D87W<-TEL&goZ6M_|D19+g@6>H$ zlb0<$8ofKG?XTPpsYmAyBWKdGDOwnEC^17Fwc3zpb_sVCe;F!s`&M{tZZz&_tvXQp z=efh6mGUto6Wpiw=MkJ*Q| zt>3H)T=%L9BxSX?eaUK*=rpo_Qt7GuB}<~E#==hw1S&c24Pc2+{N`~u?)_x@;4e6Q zg4l59EKzA7XcZlq^jv8EJ@;xr*}mPAJ&TZ<>J=3CH|GRCkL1+Li4krbVNNIbpAP8)LjC0Vu^tJtC$Nz|gWf#x666yeQl{^N_syn&FBvVWd729BHp&|QX6o=5mtPP|E8sEBsnhZSqLKq zcy&sCnlX;=NlB`PBZ-a%)I0ZF3Jhpx07LyN2+sP~6F=$z+@QXQ`p0Rye;hWX|JPG> z|2T9=JzaPA)eW{#iw3{1Dknjlje7LJg9GeAMffHab=`iQ#sUgIO?zr*K<$;@SCbp` zXMRzrhx~Y2-NiuR>V=~x&s6^cM>g{&i8YMdfk3)62O2D(UST#Bl~Q_oBQ-S?7zRP3 z(ObS6j@NInMIKUZfu z;C*-$GiKjB8H>BAdlTFb-#_itS#Z$gbr6Tmgwe5DO0_3kihDlEg596a&@*^uT*p+V z+$MSo9%cAzKRw&#k5gSF= z_;kf@lYPueA4@}rZ^@$~_#8C9YKezxce=drRu5(K{ZD~hqtz#>I0ysv7xn7@`Vfh=yDRG>o|C1aR z{I%cfzL!Zwqau3+SHY)j->Q}7FlSrJHIcAVd)=!zOG+D9uR01T4^k`$&GWW{)n8~yGUN);-?jGJTTPI|*zyyM&STT=7Kn2t@fj6u}0~ zLr37mIqeH~+PFE>^NM@YV}ZT#9C>XyQ*C8LAnq%*^Bf;t{>6^{e?c%AI;%2Xljv=en zgngr$`iXJW%xyym1Uq-Q2%fUS0VS-ytaD?XKpx8jVkP);JvKuv?`&np?2FY2G40O| zWpKjk60ztx=krQ51eiQvk_>?H3@Hyx+Y>6I_?iNhsjI5Co{J<&Cq3CVsRQcYHfPpN}(!1hwS*F-?k%c>!!aDbQt-Kp*Cqx}e782QZsP0veHKrY7&*Ml`(bK6I&S<<`4K^HKv$an&j_v-snUZ%9<5w{fj0+hWLTq?&hhf2`11)S@O}~@b-2<@>Gxu2!Sm;(HU(v^1-B>(zr8g!)_ z$0%o5SAIL!9yo&?YXKCOo)5(FJQ$#zv>~j+BD!b8QnULe1@a%c3>PSQmKi&U8TX@Ez98vf%eiPd!}ehqV3wmw4hS+7cTsgKR)?52GdAZsw-Ms8Uf5ikNIHC2#9 zE(gWcS4TBOssrf|_0`&dp3L(Ps|2(r0Z^XhRHyY_rGHT!7QN-zI`dk+=KYRR`$c8< zgjWMbj{fQ5%i}{->`=SmBQLGcM;>Mk5&*fiwrcls><<8^PEtSV|Zq_ z@+(~ce>6C~Opjzk0h+gw>fN@!gX^O%tiPS6{{P=7l7CZtPu%rF=j9opFq#kuWJ;V? z?0xgo&-H}NaL|z!(5zpy2gaxQj3CgCm4a(CjiLacH?oAFG@%IBGLY%PK@IF8FiMdv z`5lrcud~;sqtTkW4sXgkfPPRB>>VP+$mpWytQ0k$zWxf4irdV9Q(C$~2=V*k!3_KS zz>f60;O#M%mBe7xqzw4AW?+B4(mW1@74Du(o{*sbrp+W-sW`KtbySsxUxPM?+5bPj zqUv&fr?nQ|s;WCr08|BNUpQ4qYXAMhkzXEM)vv*~6(3V45^NK*<(B}&lN^C`z?~DM zg`0I#0t!s*Uo>Faps~0~q)PVQuK)rf_+cpd!1@>}m{=luK1b4@V;-ap84s*xoXP%+ zqLWX*G~dUBJq`NrfQGkEpX9&6jMFI=CDgbtD16{it9Zt1Rsc~A{{tI7Wd9|%*lw;2 z9hf%HWWC}ASuPSqYpDoC*O}W$#Gt)C^t-1HcTsYMTSdspUrjbAEn0(dh`@!S{gUj0 z4Lu*gd{m>faHl?w$Mh`q5MH9JMAmYxjKI~rnKnLsC>m+cK}ogXKnyM#{eGU&dt4??>fj^sEp*-+ZWDTaN%Y|3g2 z=BM``7TGjLb9xu<*QT;>52UNdQx(Kj=4a}(JL#&|p>SVZKh%6e!lv4yau~8 z)qxlY&1gAxi+f5F!;Rvm^A&aXo0`SfqTcBurVhF|SvBFM@1E6^`uyry-M1R zG54Wh7!Z}!HAhsD7A^>IGU^H(qb*Z^McnG(Pmz0E&V;Q*O6&cxO2xQ3q|a@JX!1S% zxcN*sK;)7)G5z|xdR!P}x{5#FBA}XKLh4Ox`vv`J;b<0_N0&CXPyH-X43XY<=ak~t zSLI30>G8Yh53H=-17OPWU|81hW*xM+JWi{OWAfIDK8)*Ufau{l9V2{Al=6lP;htio=QR~LkHDud4NRuV#_-(^}j{|6R!z;kburew$9oS4tUrCy{ zF1xZhAU)fNjD6ohCiF{82^{8DnjAh+EweoRXDF{Ev9&xUAVXd8 zPx#TyitZ9I2L()N_)j%J1V~r2ue$Zj`(JI-bGcuC9>GTVu9LL>B*O)=k{;e))Agl)lk_@Zq$`a zb1awFjoP}q+AZdd=B9ZFgy>o=giCRb3h6C+grT)Tb469{gEAG%Bi(Pw$_xvR z(VXwlWDN^So}9WLy>L{n*6k0+%Zb6K;;3q6&UBSOM>NdpWRJ6 zWRG=k!d0YNF6eHrHqnu6Lz$>@viUYv$K~4?fMfFQqdA-COpM z<9n_@FeFw#eEE%M(a~m5GQk!Kon%>eMO;@F-gHzsc;GjwcZcU%fpYp;1hNCfjc1>T zvlSGYw@gq3O5ZNy`TTu)nuQBL_3cMUr1Ztlk!K1C1YD2(H`clEQ$O@bkiD_7+({Ar z96*^02_=oF?sq@Bmn$qh1xh|pv#2tcpf!AC&zG)y>ZN**pDPOq{0EN^m*=k z2oFjJ^nZu&*uQIP-2s8K5zU<07q6d3~X+)p`v#?mAwQd)hU-@w4< zZhXOaz8x!<1T1qfiZlEC>2ffv`43HK%zWH)v-8OJ;@&f(?ZYk#)v>Q{ouT#`wYblX zo#>DAKekT`^TR=P55S0$+?VJ0{k~p1-PXe?hiQ2EKe^Lj0MSF?Y>8}AY;SdcO~z(h zQq{L(^}4Dsis*ueC;i>2UQ6;aG&aIzFY^7 zS}Pq-*?FC&k?9`#5h`{;E8n!@CwJ!`v!z~J_}=C2_<%;Vn2zPPq~@gZJ?HpqH*%<` zLlrlNwb*snsq>M++oLspik80TExxKfNaL)J$0IMz-vNgqpWyNZY%Ygn{;{fEue1C) z9DyA7Y3$=Z$p~&b=7+K(D=XN;)*oA6#blS#Ni@!45v^UgaG7tU7h6UCF#Fy+AMr&T zDT_?RWndttZnaURnWA#j(N9tv^PF&SJrmum3w&C~H;@^cVP)2oc5ZhE&%Gb0JE)^` z#NwDUGjJx;s!G6y)Q?-_Nx-uB3_2&VSeOuRyr%AD8MYsT;;bHLfKGL+(?0VMYGKD|f~69gl^M z2ak^bdW7{1j&rI>)tiTaGa9Y6^Y~SG-Z}nQ@naJ{sIK-8UcGZh_j`#O*vzl7-M|NO zBU;yV>2R%~K*!P3ub{Z1%XzycVHa#@a}xqo=fmf!J6=;rf1c6USXrK zZA$8_*#l>XtVFjf45n(v3ch_gadTvxj2Uv8tWM>wfYf<@fUxpW6;Y>@or|Q;rOfu& z$1|B~a;%Q7cJJGTw)ab;FkatQk$5wYWCfL!9=TSr-?q{I{9Ogt#7O<@oHfpM$!)9q|l`7&H=Xj+Q4qR$-L(nTf)vlpFGUe#JIsP5+d z(o9!*J$n|McJ`W;ohio{!>zt4vMA@Y=K_b{fpNgm!pAG=#>2Oc-%2pkJVP54oqvaj z@gQ9_T?>WbrwugSLl|b@Fc~AO{lMxN((p4Yh4)#A^ai%Lnku$I*OGJcd9Jh_>A8{u zH@FsOtd=y+F*cW~h31*IlF1f{hPJQkI*^I>LD@TN*S6!&=rjRK?)EY-`r1rE^~{0D zLQDHYc8Z;HrU4a*9?Q2Nh}@5yjj8rErPO@JWVsGG4X{_VmVpGZPjjLeBe{`cY6h_W z1+e8ZHUkskqOnG~#Q&(P&NyBP(`|KZFrJEyk+$q42F`5qY0k{2&7LcYI38X1H zF~^b-DA@B@O}y#~M)Xj{?MYt5WRnXFZ&P~3S)#A{J}B*I8X15m!tYGkUX8y`E;f1k zd&GXZqT7dJtep%?Gca5@cm{s#AS*iaEZqAk*mCIQ{dt=->|xqNJPGMZ&*yEq*gU+I ztRKX+ioH6MU3j2#IPC!|n(3F#JFI)HK5iV+dQt?CrBQ1(PS{$k1Tt%m<$|_f&PmmF zNedoGy{;O5XA%a7!&$7~yUwXVHcfHrvYYG9CHohRJJ9!h()OWODqQC1r4PUkQd**v z0|Fk@<*maJ=KKij0$wVC3e6)B6una(3V#HOjhe}eOx?8DtL7x|)`MBuydZGX<{x_<0R2mJ z8}QtJg{nr|XHmlk1{{V@&C$vmz z?H|(m6rQkfThi^_lf@z;aVpFu2;9G`$R1{f0I145%Nmq<Z zunyFHCPMXI)0#?i+u%}>S&Wh`v|05@a?7oy1c2(Wa?A9k?r=JMA0^2GRF{MyDv$6pE{@zZS{HUQ9-hP$4k669$-iH zHtg$zE$R%-4(9pKIja`eBr$tn^VA$sNI<k1sc)JV#VpUEDY^!NFIO(=?8)El>v{ z&oI`&a=`}dQ1()i;XV*xS1oF9B7!GQT70fRcL}x1+(j)297GGxw4jyBHFclgD0F z{p#1&&4me(s59ZivPjPXy;9~!e?H|LvO zYb-zvS}FB*ts&gGQYB-r?1NWlmXqLw{_gR6%WuBxU>mB=+&SM_N%9`_OfMKD z&6POQM@Wg8vwg&q+Zw)1Be7lsNVk;$+_%N2Q##!YTDNmhq7H88!B=Kp>qVQS z*})4@8v9CrGikr0R~!o*iCT{*| zyMu~O&aJcE#!MtQ*!cw2phk0<4D>78a|Y0HvN?}}AS1t#RER$4lU?a5@>!I+IG}+V zOktMEhhYaj%`JLMbqjLusyJ8`PFS%e!YGC%>8}VCfJLsA9wt>_4+=k%4Gek1M`%_$ zcK8fR@&du83?7A~Yb01#Z1vcNXpNilmq?}+FQr!h1~%`RVr);F6uv55U5lCjtsAis z<3Luld3i{RD)bE(3h5op6qeF1*Kj^2qS8y{>12{mn<~;uX?Z%Y5lFQAm#u5AAu0G` zs0|ukfBzE^xs#DUnMvvSxHJEzPE7?`WKsC%lqm9jOvZq$_7!G_F@ocRyHHNJ9jR}R zwuRBf3jRd5)$n5UVhiwEKZjGi)ZG*;QGu0qGZW)*n}yqfN;=dX|jKLZu^X= z;7!yb7)fPMgkdUOr*6eAgsuh+vbV(o`MYIy^NQ!dZO%#g&0&(?okx%14N&-Gh&aYQ z?5V^?v2a)_;e5jI`Dnj8d9!7@ri#6#c$2sB@ItPe;%vLUSYQL#@6Ieso8f0R zuraK&uG2h>Z?=C0oC9ZQK5dYz6cNAW?$}h;wneEYnlHp7IhC;O!Bd>&eavI33g?{Z zpLVZ&M!O>XZo#xEv!vOA+l0#j><}N^m2{i+IS^=JZz(k7mwvO4%LJo3<7~=}qSuB# zu37%d7PPvXW|UrREpOTe=`DrNyQU5HsBZ$9ksvkFx5jCoz=LwV2lwrqjGiC5lwK^k z+VT+3areqjs|`RDm^1BaBW~6jigmwD@bnO$v@ACg)7ZKNwtueb)(RvkOC)L$DR)ZV zk}m*{iLkqe3|mKu0_l>>ub66L8jhH_4Pgy9{)V^X8)$q$X{2Sl7aiXoD{&|f!r9gO zt&TskZmrqcsIu5w10@>c{pb!oK?d1b(^L@g{XBylIrv22fwt9NnmjkyL!SG`+ zlQ-r4$B*7J7;5eGVpa+g0tfrZqj*8Jg{@eAuA^B+@K;+E@;w4BWQMmJ2vyuOkTZ|s zuXZYwQ&a{kN;2GPczf&I=WlL}8nXONaW)sq?A-gKg&Zn>w;5am4)NFtKx*Wk3ej$l zuZOJv+}9*CDbsMAjGy1a|^CpAmgN)Gk1!8vYm;PLqO~I}(p$~BQ@G}BY z7Gbe-W50Oj@epQlQ=`J!6D=8C8qZ$JOC zMe5rx*?g15&nA>D-xl=Y(yn#(DV6KA^!yPhmDnSP7Gvk0T8n??6zTA48MmWb-N>u^ zBKQlstHph}();G1`lE`JQ~BQ36v3Ckx%a=odmz@KnP6pVIW-Hc>_$vT}bTTW~yNP*)|a7&d$; za+Uf*lp)3mAy0kTOqmMB<)9E2%~E;&2MOBsgN($oH8*u57TfDpj>Udb;BU3B zJEidk?A;W7a|Hl@m0%^raj`rgEo}f(2)B64h!&5+5+jvqCW3J^Rwu=}O`gG-OR(*D zvHZp>Oc}~kivQ4`u@ZDX7eR@ZV14P&3vunRY^o8#W&}DC;!hbABN+Ar$q6~JKwelm z*T{on4h@x$uXdudYs)?VBv($dsFe$4$YJBnp!APyVoB-c3snnL%G_P>%hfn8ul@Ta za%oiwrYc?*-QWbf>l44;PfJ;~vWwHqZ_HJQ87csoI7@`hq3hX-y`NUqOGf5x?>40e z-=Tt;E=gR@LONxN)ToK{hWovpCNnV>GiUr^?k$)!rEu_t1mz>G@PtECx zsp}DZvmM#nXt0Yog2kC_bJi@`8Ns7g=IP-WT(Lkb_cvDGtJ50RKzQ;}xbkNEjaFbNn9DmZn*as5t)y6_BsOez+vWQ7^O1(V^?VYQk5< zb1%b-f_<#+~#Bt=NGUXn!p z_c)zVd|>`C2}w4o9<3TUezgD6FvWtVA)?NDd-?f?d_~kJBeRCS?9Vql`&bf8e@xo% zvo&5D*Co}bCh=k^W0tucdXNciNddj7sfTGF*_CJpX_m8YT@Vnk-ltjnx>nxfOU%mZ zPIa}>{j$x(6E{>}2kz)Ng}fe0hdW;7L&uc2_R|K$`!v&!KAMd_{mPJHO6%G&SumeG$k4b9 zTlG7AZeuYRZ7zYIo~F=0u3+kZ1#KK{WHOl^-oRNOz;)4oZ#04HUqm$i$B@W>=LH+s zTA-z=J)PQloSOl0K#)RmJCw!pyO+_+EQo^}qCcnzq>sPB)&l%XYUB+xTB8y0R-Z2V zL+}}y)p6n2pNj1a^mJ;@|0x2x`7;FAsdZxfLBICHp<@$%&{^OwfTsYkslB5hPPlNB zZ+WNqIJj{4fv)|y^T5li=gl?d*7-hV4V8EEf6BPLo7*IyjqF4%lVpp5UJm$)C9z#$%g^?2J3=x-%-QqOcU; z3osQ50Q?`GET2_zRDO-d4_Bfn+<6a$b-5(vt9Qk|dk zs2R!}#Lud`pf|G_qoED$+uzr5%J+448-mzec-Gy;tV&W_?^fVC!Xi=@iImf)g2QH{ za&MX^nT0CSS{6LJQyhzcf50(eB66R26ln9LaDo|Y)3-|ho)XMp%X-Ch$M5h=;l#-! z(Q&IO0?9>Mq^k^Xx7qg0p@kObK;k309Y{AyS?5iTWoG?~be?xfabW$Up+zjeseS=v zUASPYxLJCOme|1y1erXDi3fpHVl=Lcu=#D?t?4;zpfGxBc8I{K&eZL;D;>MJ*N(u@ z-H(wGL*6w49^B|mjp-zI@OBbw;AU(WyDG5D-p*7w%s9|PWqZas;8X3UP8Y*7wjr-1 zLQlrTNwR?J760t(q{o_)xCZybQM}8G*B^!rl4W>5GKk_1MQ1}|oWmFfZMusWh8I&# zH1pCLJz@+tOk-?9^#gQHih#PB_CW4(<>Z?c-bzBDj<0XQ^j4ry4~shu4Z}`yA&#%Z z`-0%3D%aj4HWh91{OqQ%ca*79Sw799M+kBIs8T7iQ2gzdFgB~o6?ZU6S}I?j=#|qK z9^&BG>#$ASOkdp=u3v&Qn91VdZ;oDhR2@}T`8A3D5I?uVPTjV8q9}_R88w5Ss)8

0%blJAO0C)+A`8jN~NbwxQIg*gD|QZAFcHx=Wy7oq5XbYRiD(gbQ9+U$K=rsan~b0`#>t9dvPQV!myX2PU{AYp|Zq2 z?&X~kq*ZO%gIpAL^&8a?HRABP<3e1H$($b_YYpCHJ1tiw__y;|xSWbwmIazf-6j&yikT zH5nlS9JBvY&`CgY{Vy^Pxbe3lrr(_aB7&>TwMyRpC1#&??}f4b(;Z(x$dhsMpFP+; z{8d_YfDi|DG?B<;^1z@m&^4z}ib5}6nSXhR`CBK|(2p7)J=iutoD%t)a1_P2uO2S& zkA?${I(x7H5ct6LuZi-%+by8nyT6Wt`XB9f0bcaa%H;pI;D-_Ow?3{Pv#={2e--p@ UW^4^eqyg-|GKO3x8s3cfH?dXH82|tP literal 0 HcmV?d00001 diff --git a/out2.png b/out2.png new file mode 100644 index 0000000000000000000000000000000000000000..de586d4e7090007bccd6c40c5943d459c36fb983 GIT binary patch literal 52015 zcmc$_19xOm*EO1StWG+1DmFT{Z5tiicE{-0wrx8d+qP}%RzL6a-aE$qe!y4b)Twc5 zoU^gk-fPXd&)i}1vSJ9Z*svfVAP5rT!ipduU~Ry!JTxTmAILS7FyIfkqo9N`H1OjE zZ4?T;#&Qx-cT%!7adOpnFa|NTv9&g)bu@G^Hnwpzvvs-x>*fXCMD_0`AqQi9Cv#gH zfU>!@F^I4^;3q3U(%A~Y$iT=9U}WNCWaDID0SJjGDJw3s$AW+WKqQ0(l-)AUH(b56 zmb|aO5LrQy0X-0O_Tk8sipZpzNfn(H!%|K0>|uL<8x6@P&C;99>-13b=7qEcsJcl0WjJX}5A*pT=z?$*|@yX=mWTglr4 zdf$V?5g37%5%zO|?^jIqEo7PR5ZL<;BVObZNV|f$6y6xz4a^Aj9zu^1e2015a7#oA zQS{lv{UgFz>+64ClvFbLCCq50_lK>=FiTLS%7SeI zVSr1c6WvV+hFj~ z`#qhw=4VF>19c64$o1p@^{^xFsRQN^KU5`cWrpR|;31SUWcV1BdV?EbVe2Z6Y06Pa z5K47df7p&!ldlm^5ZjFq>ePzb%R`op!xG-fF&=zZ$H2%5MZ2WKSDv zwr@aK+sBGxM7ljJdl#AwULot>5Y>;^+AZ>>z>PLEIz@#=r;xB=%s=ZdglfZwyEvM1 ztZGcOsV6VxC*NnDS^bsQsLz*nPK2(aEMHrbaBlP}8$dvmxtgH~L#F^dm1{l|5+2pDsUCCs+`eQ*OM2dTR*|f+3d36^J%{ zaxm*74$rQ{M|_;mVbn2k6--zRMHQ71qWt(LpC`!5E(x4I!^`c!)&P_cWlUHpjfR@I za0gA%c@_T39u-nDPAo}+-E(;`3f1Q5b^*`nwcIaR zhoHu_l+W(5!LG=RY9hPtiYgY3BUTpN=PsT+v`d_$kl(#37oSHsp2^El6vuN3hu^z- z(rYPBO3!oikxrRSSI76p@P_z2+%_Rzs2}Bef@pAhM_ie)cOlz6CV+v5=V$H%1uVal zUG!54T#16E%+z%vBV;d4_O@1kzHevi%gb2qoRc)H z19|9ktuvcrOM7bnklJleh-xg)P8;^A)wXyv!7TN%`xDt{gW-(buyr5uN>w zrsQQ?r_*_4NwQyXv-^t~z3CHfLCY^{W3@VwCV)24P^&;x76Nj_H$@n#M%+vVAqf$x z)YJ49)gBYmD_yqRQQSqkEV~eFnAt66X)Rk2H9)vBrBHJGU>utHae;mtVj8<4HkN=q zl|Z3NoKAwMhz4w#ga-D2Q$_Zk3xZ|S>5SaFF}6$1mk!2hqWe5;OW2fHoUl9o6yNdo zxCWb0{||rhX|u$AWn=kN>VY}qBe&*o7LF5≪yRUD+<<{4IjFDsePL<`b%0^izt7 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

qj_ODMm+%oNpcx$aZ*xxZ6Q(+FtPP4zna z=0DRbsM-DsG%%gki7goAw;q?iZr9yh@J2=&20po2@FA)^#+~F7t*>0?INFu_TNfEC zDRxk0roOkDNM-(Qj=WEn=+G&vu@w=V|C0eDQKDg9Hc>0xku~;-3Z={I`$k}wXN5JZ z2uk)1r7860HpOH+Rxweg)ZL~^#rlcRU`#)(v<%%@qPQQWhTqHCM*JF^$G|C`kHOrdj@!U{9Xe1?}LB` z4G1K1DV-h!x|M#;9H_c*e~}ghdMt8>0|a_~houInx)l8DKm8J$TdvF?kgC1bY=and z9QbV?RL9g*!!=?n-01pFcf!V9FnP2lv@maZ^%dx=#_{19^%g(RLAz+HDU?>x(SUS;)?dqCmQ(4MD8MFMR~Mq0o_KjO ztNL%>WDL{-3~kM%#42P@>AxzLRj!h=!$ipA(a8ve0%+PASn9ph;HDh(&Z$J@qsOV# z*2?^0x4+Tc3Q`%u446iJge!y&lyVIiZ<>LsyLMrMn}{Pve)j~VoG-v{_3D^1b#wCC zA)W0qrXSXnb1M22T`6TFelvrA1&e*B`RJVi70$X<;!c-U8i+`Ox^zJ}oO^K4myk#A z+&Ahra?+$k?&h7%{C4=*OO5=<&~Gj4VAH55FqgMMAP|Zu&&0+_41MX z-GC$5!q$SBnw-(^G$5PY-a`Xd0kg~`tu%GIBgZBW-otM)WXV89 zV4$$=SpkmMYHh(1Ab%}tSKY#ProFSfg);$97-hCuNHRCs_d}FcDzYtTcgM1R%7P6P zuHe#ds#WF@=*f7>?H2Ir$8;`(FDp)3QKXx$hn|Cl6KR>EwI7+g<0Vza7oMzO4OZW| zH}x1q3(MoDI94CIM}_|A5j0|68aKChlSow*+voQY3Neyfu#8#=+!E#r++RvmNe@g7 ztlT%qgEEf}8F}3Y2KNQn#u4@qIH9`TOGF33BzToBQ>ODMxXW)nNjmY>WMqn7Y@Jte z;PvZC26~TRq280IT3I>>S7eudRNwUPaP7*Yl_5pEoyAiIY!G-a+jnkG>|l{4B7U_0 z=F0AORT-y$_2O!;9{C+Aco)Z$l0K6BeRiTyTysx2Yp!R66}H;inIy1)s#GDy~34~ z<|lw&TTNrJV|paF+7tXKdGmlC;}bwIHNNUXU|1!G^2b?Ozz}YMUaPvf8VuU~_$gZg zOJGs}oOYJ>7XKuR&I1tWRF>ww+fS_T19#4jkc;uzt|Mn3ZABX#c3|_z#*+qvX>!yY zU+Rvmzld8~aUqaaMm_&#i^g@tf}fREvJs_FhHli~OeL1pSzG9)A zIVFzeFxn_8vp_LIwN#$}C{G$i`S^x10^WCjIsG-1vs|4qVg=I_jaUNx5(!jjAf~k72uelgPZmh1$b*e6Tt{(owz7XFnYYal%?f+*_n= ze6={#3zV_Dpj(jLWE6UFl|{FwTAH$K^wDOb0D^CbN5EsK#sSaQm;lk*2<+>FFN}!? zsoKh`kG)o1Fii&6!9Jv*Cu`%ecJOVIHRv$|AmxubJ`SYD(I35dnEQ$GVQbUiir;fM zyJUc97*^}-Yd%0qPDeNqx}f+qBNFKn=&_lLxKATn#Y&!aJ+8j z1P8qQ-zpLi&d8^otWN;ZKki8IMKFLCSq_ze;)^&3S`; Date: Tue, 16 Jul 2024 23:31:32 +0200 Subject: [PATCH 9/9] added screenshots to the README --- README.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 7d87a01..3cec913 100644 --- a/README.md +++ b/README.md @@ -26,4 +26,12 @@ This function is specific to study regulation formatting. It allows users to dow ### Clinguin version -`Clinguin 1.0.16` \ No newline at end of file +`Clinguin 1.0.16` + + + +![](out.png) + +![](out2.png) + +![](out3.png) \ No newline at end of file