From 2a60fa832139beea01d85e367ab1b20b8c15caf5 Mon Sep 17 00:00:00 2001 From: Yann Papouin Date: Wed, 14 Jan 2026 10:06:11 +0100 Subject: [PATCH 1/8] [IMP] web_tree_dynamic_colored_field: Allow to set field color from another field --- .../static/src/js/list_renderer.esm.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/web_tree_dynamic_colored_field/static/src/js/list_renderer.esm.js b/web_tree_dynamic_colored_field/static/src/js/list_renderer.esm.js index 76612d4cb711..0a9107f20c66 100644 --- a/web_tree_dynamic_colored_field/static/src/js/list_renderer.esm.js +++ b/web_tree_dynamic_colored_field/static/src/js/list_renderer.esm.js @@ -40,7 +40,12 @@ patch(ListRenderer.prototype, { for (const color_def of definition.split(";")) { const color_to_expression = this.pairColorParse(color_def); if (color_to_expression !== undefined) { - const [color, expression] = color_to_expression; + var [color, expression] = color_to_expression; + // Check if color is a named field in record + // and if so, get its value + if (color in record.data) { + color = record.data[color]; + } if ( evaluateBooleanExpr( expression, From 77928b792202d561844034f420a90b329acb2bd9 Mon Sep 17 00:00:00 2001 From: Yann Papouin Date: Wed, 14 Jan 2026 14:48:45 +0100 Subject: [PATCH 2/8] [IMP] web_tree_dynamic_colored_field: Allow to set row colors from specific fields for entire list --- web_tree_dynamic_colored_field/README.rst | 105 +++++++----- .../__manifest__.py | 6 +- .../demo/ir_config_parameter.xml | 21 +++ .../demo/res_groups.xml | 13 ++ .../demo/res_users.xml | 12 +- .../readme/CONTRIBUTORS.md | 1 + .../readme/DESCRIPTION.md | 34 +++- .../readme/ROADMAP.md | 6 - .../readme/USAGE.md | 152 ++++++++++------- .../static/description/index.html | 157 +++++++++++------- .../static/src/js/list_renderer.esm.js | 68 +++++++- 11 files changed, 383 insertions(+), 192 deletions(-) create mode 100644 web_tree_dynamic_colored_field/demo/ir_config_parameter.xml create mode 100644 web_tree_dynamic_colored_field/demo/res_groups.xml diff --git a/web_tree_dynamic_colored_field/README.rst b/web_tree_dynamic_colored_field/README.rst index 13c1e46e9200..0eeb72b35776 100644 --- a/web_tree_dynamic_colored_field/README.rst +++ b/web_tree_dynamic_colored_field/README.rst @@ -28,16 +28,25 @@ Colorize field in tree views |badge1| |badge2| |badge3| |badge4| |badge5| -This module aims to add support for dynamically coloring fields in tree +This module aims to add support for dynamically coloring fields in list view according to data in the record. Features -------- - Add attribute ``bg_color`` on field's ``options`` to color background - of a cell in tree view + of a cell in list view - Add attribute ``fg_color`` on field's ``options`` to change text color - of a cell in tree view + of a cell in list view +- Add attribute ``bg_color_field`` on list's ``colors`` to change + background color of the entire row in list view (\*) +- Add attribute ``fg_color_field`` on list's ``colors`` to change text + color of the entire row in list view (\*) + +(\*) This functionality only works for list defined in a form. Since +13.0, the ``colors`` attribute is no longer in the RelaxNG schema of the +list view, so we can't use it like before, but it looks like the RNG is +not checked for embedded list. **Table of contents** @@ -47,76 +56,79 @@ Features Usage ===== -- In the tree view declaration, put +Using view conditions +===================== + +- In the list view declaration, put ``options='{"bg_color": "red: customer==True"}`` attribute in the ``field`` tag: - :: + .. code:: xml ... - + ... ... - + ... - With this example, column which renders 'name' field will have its **background** colored in red on customer records. + With this example, column which renders 'name' field will have its + **background** colored in red on customer records. -- In the tree view declaration, put +- In the list view declaration, put ``options='{"fg_color": "white:customer == True"}'`` attribute in the ``field`` tag: - :: + .. code:: xml ... - + ... ... - + ... - With this example, column which renders 'name' field will have its **text** colored in white on customer records. + With this example, column which renders 'name' field will have its + **text** colored in white on customer records. - If you want to use more than one color, you can split the attributes using ';': -:: - - options='{"fg_color": "red:red_color == True; green:green_color == True"}' + :: -Example: + options='{"fg_color": "red:red_color == True; green:green_color == True"}' -.. code:: xml + .. code:: xml - ... - - - ... - - ... - - - ... + ... + + + ... + + ... + + + ... -- Can use strings too... In the tree view declaration, put +- Can use strings too... In the list view declaration, put ``options="{'fg_color': 'green:customer_state == \'success\''}"`` attribute in the ``field`` tag: - :: + .. code:: xml ... - + ... ... - + ... @@ -124,15 +136,33 @@ Example: the options doesn't follow the JSON format, the options string will be evaluated using py.eval()** +Using view fields +================= + +- In the list view declaration, put + ``options='{"bg_color": "my_color"}`` attribute in the ``field`` tag: + + .. code:: xml + + ... + + + ... + + + ... + + + ... + + With this example, the content of the field named ``my_color`` will be + used to populate the ``background-color`` CSS value. Use a compute + field to return whichever color you want depending on the other record + values. + Known issues / Roadmap ====================== -- Before version 13.0, this module had a feature allowing to change the - color of a line depending on a field, using a ``colors`` attribute - with the name of the field on the ```` element. Since 13.0, the - ``colors`` attribute is no longer in the RelaxNG schema of the tree - view, so we can't use it anymore. This feature has then been dropped, - but could be reimplement in another way. - Since version 17.0 coloring is written into ``style`` attribute of (td) element @@ -165,6 +195,7 @@ Contributors - Phuc Tran Thanh - Sylvain LE GAL - Jurgis Pralgauskis +- Yann Papouin Other credits ------------- diff --git a/web_tree_dynamic_colored_field/__manifest__.py b/web_tree_dynamic_colored_field/__manifest__.py index 8e798bd0f1b9..c9d559a71b6a 100644 --- a/web_tree_dynamic_colored_field/__manifest__.py +++ b/web_tree_dynamic_colored_field/__manifest__.py @@ -9,7 +9,11 @@ "author": "Camptocamp, Therp BV, Odoo Community Association (OCA)", "license": "AGPL-3", "website": "https://github.com/OCA/web", - "demo": ["demo/res_users.xml"], + "demo": [ + "demo/ir_config_parameter.xml", + "demo/res_users.xml", + "demo/res_groups.xml", + ], "installable": True, "assets": { "web.assets_backend": [ diff --git a/web_tree_dynamic_colored_field/demo/ir_config_parameter.xml b/web_tree_dynamic_colored_field/demo/ir_config_parameter.xml new file mode 100644 index 000000000000..b01ada997054 --- /dev/null +++ b/web_tree_dynamic_colored_field/demo/ir_config_parameter.xml @@ -0,0 +1,21 @@ + + + + ir.config_parameter + + + + { + "fg_color": "key", + "bg_color": "value", + } + + + { + "fg_color": "value", + "bg_color": "key", + } + + + + diff --git a/web_tree_dynamic_colored_field/demo/res_groups.xml b/web_tree_dynamic_colored_field/demo/res_groups.xml new file mode 100644 index 000000000000..a975203531a4 --- /dev/null +++ b/web_tree_dynamic_colored_field/demo/res_groups.xml @@ -0,0 +1,13 @@ + + + + res.groups.form + res.groups + + + + bg_color_field: name + + + + diff --git a/web_tree_dynamic_colored_field/demo/res_users.xml b/web_tree_dynamic_colored_field/demo/res_users.xml index c2f004e70dc9..2bc0511ff4b2 100644 --- a/web_tree_dynamic_colored_field/demo/res_users.xml +++ b/web_tree_dynamic_colored_field/demo/res_users.xml @@ -6,15 +6,15 @@ { - "bg_color": "#9e1635: login_date == False", - "fg_color": "white: login_date == False" - } + "bg_color": "#9e1635: login_date == False", + "fg_color": "white: login_date == False" + } { - "bg_color": "blue; #653b5b: login == 'admin'", - "fg_color": "white" - } + "bg_color": "blue; #653b5b: login == 'admin'", + "fg_color": "white" + } diff --git a/web_tree_dynamic_colored_field/readme/CONTRIBUTORS.md b/web_tree_dynamic_colored_field/readme/CONTRIBUTORS.md index 36093db6e17f..9d1135e376df 100644 --- a/web_tree_dynamic_colored_field/readme/CONTRIBUTORS.md +++ b/web_tree_dynamic_colored_field/readme/CONTRIBUTORS.md @@ -5,3 +5,4 @@ - Phuc Tran Thanh \<\> - Sylvain LE GAL \<\> - Jurgis Pralgauskis \<\> +- Yann Papouin \<\> diff --git a/web_tree_dynamic_colored_field/readme/DESCRIPTION.md b/web_tree_dynamic_colored_field/readme/DESCRIPTION.md index f1c8a74a115e..8207e75681b2 100644 --- a/web_tree_dynamic_colored_field/readme/DESCRIPTION.md +++ b/web_tree_dynamic_colored_field/readme/DESCRIPTION.md @@ -1,9 +1,31 @@ -This module aims to add support for dynamically coloring fields in tree -view according to data in the record. +This module aims to add support for dynamically coloring fields in list view according +to data in the record. ## Features -- Add attribute `bg_color` on field's `options` to color background of a - cell in tree view -- Add attribute `fg_color` on field's `options` to change text color of - a cell in tree view +- Add attribute `bg_color` on field's `options` to color background of a cell in list + view +- Add attribute `fg_color` on field's `options` to change text color of a cell in list + view +- Add attribute `bg_color_field` on list's `colors` to change background color of the + entire row in list view (\*) +- Add attribute `fg_color_field` on list's `colors` to change text color of the entire + row in list view (\*) + +(\*) This functionality only works for a list defined in a form. (Since 13.0, the +`colors` attribute is no longer in the RelaxNG schema of the list view, so we can't use +it like before, but it looks like the RNG is not checked for embedded list.) + +## Testing + +Some views are overriden for demoing this module functionnalities: + +1. On the Users list view: The `name` and `login_date` fields are colored according to + conditions written in view definition. +2. On the Groups form view > "Access Rights": By renaming the rule name to a color (red, + blue, yellow, #00FDF0), the entire row background color is immediatly updated. +3. On the System Parameters list view: + - For the `key` field: Its content is the text color, the `value` field is its + background color. + - For the `value` field: Its content is the text color, the `value` field is its + background color. diff --git a/web_tree_dynamic_colored_field/readme/ROADMAP.md b/web_tree_dynamic_colored_field/readme/ROADMAP.md index 16376e95ff72..04f6b91a4a4a 100644 --- a/web_tree_dynamic_colored_field/readme/ROADMAP.md +++ b/web_tree_dynamic_colored_field/readme/ROADMAP.md @@ -1,7 +1 @@ -- Before version 13.0, this module had a feature allowing to change the - color of a line depending on a field, using a `colors` attribute with - the name of the field on the `` element. Since 13.0, the - `colors` attribute is no longer in the RelaxNG schema of the tree - view, so we can't use it anymore. This feature has then been dropped, - but could be reimplement in another way. - Since version 17.0 coloring is written into ``style`` attribute of (td) element diff --git a/web_tree_dynamic_colored_field/readme/USAGE.md b/web_tree_dynamic_colored_field/readme/USAGE.md index b5950598ff01..e531e34926de 100644 --- a/web_tree_dynamic_colored_field/readme/USAGE.md +++ b/web_tree_dynamic_colored_field/readme/USAGE.md @@ -1,70 +1,96 @@ -- In the tree view declaration, put - `options='{"bg_color": "red: customer==True"}` attribute in the +# Using view conditions + +- In the list view declaration, put `options='{"bg_color": "red: customer==True"}` + attribute in the `field` tag: + + ```xml + ... + + + ... + + ... + + + ... + ``` + + With this example, column which renders 'name' field will have its **background** + colored in red on customer records. + +- In the list view declaration, put `options='{"fg_color": "white:customer == True"}'` + attribute in the `field` tag: + + ```xml + ... + + + ... + + ... + + + ... + ``` + + With this example, column which renders 'name' field will have its **text** colored in + white on customer records. + +- If you want to use more than one color, you can split the attributes using ';': + + ``` + options='{"fg_color": "red:red_color == True; green:green_color == True"}' + ``` + + ```xml + ... + + + ... + + ... + + + ... + ``` + +- Can use strings too... In the list view declaration, put + `options="{'fg_color': 'green:customer_state == \'success\''}"` attribute in the `field` tag: - ... - - - ... - - ... - - - ... + ```xml + ... + + + ... + + ... + + + ... + ``` + +**Note that you can use single or normal quotes. If the declaration of the options +doesn't follow the JSON format, the options string will be evaluated using py.eval()** - With this example, column which renders 'name' field will have its **background** colored in red on customer records. +# Using view fields -- In the tree view declaration, put - `options='{"fg_color": "white:customer == True"}'` attribute in the +- In the list view declaration, put `options='{"bg_color": "my_color"}` attribute in the `field` tag: - ... - - - ... - - ... - - - ... - - With this example, column which renders 'name' field will have its **text** colored in white on customer records. - -- If you want to use more than one color, you can split the attributes - using ';': - -``` -options='{"fg_color": "red:red_color == True; green:green_color == True"}' -``` - -Example: - -``` xml -... - - - ... - - ... - - - ... -``` - -- Can use strings too... In the tree view declaration, put - `options="{'fg_color': 'green:customer_state == \'success\''}"` - attribute in the `field` tag: + ```xml + ... + + + ... + + + ... + + + ... + ``` - ... - - - ... - - ... - - - ... - -**Note that you can use single or normal quotes. If the declaration of -the options doesn't follow the JSON format, the options string will be -evaluated using py.eval()** + With this example, the content of the field named `my_color` will be used to populate + the `background-color` CSS value. Use a compute field to return whichever color you + want depending on the other record values. diff --git a/web_tree_dynamic_colored_field/static/description/index.html b/web_tree_dynamic_colored_field/static/description/index.html index 946fa0bb26d9..c7b3bd730f0a 100644 --- a/web_tree_dynamic_colored_field/static/description/index.html +++ b/web_tree_dynamic_colored_field/static/description/index.html @@ -370,95 +370,105 @@

Colorize field in tree views

!! source digest: sha256:9421f600f808456315bd58fa3ad58e5d8790f99fb1f0809e81ce7bb0ef0774b1 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

Beta License: AGPL-3 OCA/web Translate me on Weblate Try me on Runboat

-

This module aims to add support for dynamically coloring fields in tree +

This module aims to add support for dynamically coloring fields in list view according to data in the record.

Features

  • Add attribute bg_color on field’s options to color background -of a cell in tree view
  • +of a cell in list view
  • Add attribute fg_color on field’s options to change text color -of a cell in tree view
  • +of a cell in list view +
  • Add attribute bg_color_field on list’s colors to change +background color of the entire row in list view (*)
  • +
  • Add attribute fg_color_field on list’s colors to change text +color of the entire row in list view (*)
+

(*) This functionality only works for list defined in a form. Since +13.0, the colors attribute is no longer in the RelaxNG schema of the +list view, so we can’t use it like before, but it looks like the RNG is +not checked for embedded list.

Table of contents

+
+

Using view conditions

    -
  • In the tree view declaration, put +

  • In the list view declaration, put options='{"bg_color": "red: customer==True"} attribute in the field tag:

    -
    -...
    -<field name="arch" type="xml">
    -    <tree string="View name">
    -        ...
    -        <field name="name" options='{"bg_color": "red: customer == True"}'/>
    -        ...
    -    </tree>
    -</field>
    -...
    -
    -With this example, column which renders 'name' field will have its **background** colored in red on customer records.
    +
    +...
    +<field name="arch" type="xml">
    +    <list string="View name">
    +        ...
    +        <field name="name" options='{"bg_color": "red: customer == True"}'/>
    +        ...
    +    </list>
    +</field>
    +...
     
    +

    With this example, column which renders ‘name’ field will have its +background colored in red on customer records.

  • -
  • In the tree view declaration, put +

  • In the list view declaration, put options='{"fg_color": "white:customer == True"}' attribute in the field tag:

    -
    -...
    -<field name="arch" type="xml">
    -    <tree string="View name">
    -        ...
    -        <field name="name" options='{"fg_color": "white:customer == True"}'/>
    -        ...
    -    </tree>
    -</field>
    -...
    -
    -With this example, column which renders 'name' field will have its **text** colored in white on customer records.
    +
    +...
    +<field name="arch" type="xml">
    +    <list string="View name">
    +        ...
    +        <field name="name" options='{"fg_color": "white:customer == True"}'/>
    +        ...
    +    </list>
    +</field>
    +...
     
    +

    With this example, column which renders ‘name’ field will have its +text colored in white on customer records.

  • If you want to use more than one color, you can split the attributes using ‘;’:

    -
  • -
 options='{"fg_color": "red:red_color == True; green:green_color == True"}'
 
-

Example:

 ...
- <field name="arch" type="xml">
-     <tree string="View name">
-         ...
-         <field name="name" options='{"fg_color": "red:red_color == True; green:green_color == True"}'/>
-         ...
-     </tree>
- </field>
- ...
+<field name="arch" type="xml">
+    <list string="View name">
+        ...
+        <field name="name" options='{"fg_color": "red:red_color == True; green:green_color == True"}'/>
+        ...
+    </list>
+</field>
+...
 
-
    -
  • Can use strings too… In the tree view declaration, put +

  • +
  • Can use strings too… In the list view declaration, put options="{'fg_color': 'green:customer_state == \'success\''}" attribute in the field tag:

    -
    -...
    -<field name="arch" type="xml">
    -    <tree string="View name">
    -        ...
    -        <field name="name" options="{'fg_color': 'green:customer_state == \'success\''}"/>
    -        ...
    -    </tree>
    -</field>
    -...
    +
    +...
    +<field name="arch" type="xml">
    +    <list string="View name">
    +        ...
    +        <field name="name" options="{'fg_color': 'green:customer_state == \'success\''}"/>
    +        ...
    +    </list>
    +</field>
    +...
     
@@ -466,21 +476,39 @@

Usage

the options doesn’t follow the JSON format, the options string will be evaluated using py.eval()

+
+

Using view fields

+
    +
  • In the list view declaration, put +options='{"bg_color": "my_color"} attribute in the field tag:

    +
    +...
    +<field name="arch" type="xml">
    +    <list string="View name">
    +        ...
    +        <field name="my_color" column_invisible="1"/>
    +        <field name="name" options='{"bg_color": "my_color"}'/>
    +        ...
    +    </list>
    +</field>
    +...
    +
    +

    With this example, the content of the field named my_color will be +used to populate the background-color CSS value. Use a compute +field to return whichever color you want depending on the other record +values.

    +
  • +
+
-

Known issues / Roadmap

+

Known issues / Roadmap

    -
  • Before version 13.0, this module had a feature allowing to change the -color of a line depending on a field, using a colors attribute -with the name of the field on the <tree> element. Since 13.0, the -colors attribute is no longer in the RelaxNG schema of the tree -view, so we can’t use it anymore. This feature has then been dropped, -but could be reimplement in another way.
  • Since version 17.0 coloring is written into style attribute of (td) element
-

Bug Tracker

+

Bug Tracker

Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed @@ -488,7 +516,7 @@

Bug Tracker

Do not contact contributors directly about support or help with technical issues.

@@ -508,6 +536,7 @@

Contributors

  • Phuc Tran Thanh <phuc@trobz.com>
  • Sylvain LE GAL <https://twitter.com/legalsylvain>
  • Jurgis Pralgauskis <jurgis@versada.eu>
  • +
  • Yann Papouin <ypa@decgroupe.com>
  • diff --git a/web_tree_dynamic_colored_field/static/src/js/list_renderer.esm.js b/web_tree_dynamic_colored_field/static/src/js/list_renderer.esm.js index 0a9107f20c66..b046498b9e84 100644 --- a/web_tree_dynamic_colored_field/static/src/js/list_renderer.esm.js +++ b/web_tree_dynamic_colored_field/static/src/js/list_renderer.esm.js @@ -3,6 +3,40 @@ import {evaluateBooleanExpr} from "@web/core/py_js/py"; import {patch} from "@web/core/utils/patch"; patch(ListRenderer.prototype, { + setup() { + super.setup(...arguments); + this.assignDefaultColorFields(); + }, + + /** + * Look up for a `fg_color_field` or `bg_color_field` parameter in list `colors` attribute + */ + assignDefaultColorFields() { + this.fgColorField = null; + this.bgColorField = null; + if ("colors" in this.props.archInfo.xmlDoc.attributes) { + // Colors attribute is present in the view definition + const colorAttr = + this.props.archInfo.xmlDoc.attributes.colors.value.split(";"); + for (var i = 0, len = colorAttr.length; i < len; i++) { + var attr = colorAttr[i].split(":"); + if (attr.length == 2) { + var colorType = attr[0].trim(); + var colorField = attr[1].trim(); + if (colorType && colorField) { + if (colorType === "fg_color_field") { + this.fgColorField = colorField; + } else if (colorType === "bg_color_field") { + this.bgColorField = colorField; + } + } + } else { + console.warn("Invalid colors attribute:", attr); + } + } + } + }, + /** * @param {Object} column represents field * @param {Record} record @@ -11,17 +45,33 @@ patch(ListRenderer.prototype, { getDynamicColoredStyle(column, record) { let style = ""; - let color = this.getDynamicColor(column, record, "bg_color"); - if (color !== undefined) { - style += `background-color: ${color};`; - } + // 1. Get dynamic colors from column options + let backgroundColor = this.getDynamicColor(column, record, "bg_color"); + let foregroundColor = this.getDynamicColor(column, record, "fg_color"); - color = this.getDynamicColor(column, record, "fg_color"); - if (color !== undefined) { - // $td.css('color', color); - style += `color: ${color};`; + // 2. Get colors from specified fields in record data only if not set dynamically + if (!backgroundColor && this.bgColorField) { + if (this.bgColorField in record.data) { + backgroundColor = record.data[this.bgColorField]; + } else { + console.warn(`No field named "${this.bgColorField}" present in view.`); + } + } + if (!foregroundColor && this.fgColorField) { + if (this.fgColorField in record.data) { + foregroundColor = record.data[this.fgColorField]; + } else { + console.warn(`No field named "${this.fgColorField}" present in view.`); + } } + // Apply styles + if (backgroundColor !== undefined) { + style += `background-color: ${backgroundColor};`; + } + if (foregroundColor !== undefined) { + style += `color: ${foregroundColor};`; + } return style; }, @@ -74,7 +124,7 @@ patch(ListRenderer.prototype, { // If one passes a bare color instead of an expression, // then we consider that color is to be shown in any case expression = pairList[1] ? pairList[1] : "True"; - return [color, expression]; + return [color.trim(), expression.trim()]; } return undefined; }, From e00fa2c5fce98d5cbb81b365012435e33f407d9a Mon Sep 17 00:00:00 2001 From: Yann Papouin Date: Sun, 30 May 2021 11:37:34 +0200 Subject: [PATCH 3/8] [ADD] New module web_edit_xmlid This module override the default method used to read current record metadata in order to provide two new actions: `Create` or `Edit` XML ID. --- web_edit_xmlid/__init__.py | 1 + web_edit_xmlid/__manifest__.py | 17 + web_edit_xmlid/i18n/fr.po | 58 ++ web_edit_xmlid/i18n/web_edit_xmlid.po | 57 ++ web_edit_xmlid/models/__init__.py | 1 + web_edit_xmlid/models/models.py | 29 + web_edit_xmlid/readme/CONTRIBUTORS.rst | 3 + web_edit_xmlid/readme/DESCRIPTION.rst | 2 + web_edit_xmlid/readme/USAGE.rst | 29 + web_edit_xmlid/static/description/icon.png | Bin 0 -> 9552 bytes web_edit_xmlid/static/description/icon.svg | 713 ++++++++++++++++++ web_edit_xmlid/static/description/index.html | 450 +++++++++++ web_edit_xmlid/static/img/xmlid-create.jpg | Bin 0 -> 34457 bytes web_edit_xmlid/static/img/xmlid-created.jpg | Bin 0 -> 36122 bytes web_edit_xmlid/static/img/xmlid-edit.jpg | Bin 0 -> 35429 bytes web_edit_xmlid/static/img/xmlid-edited.jpg | Bin 0 -> 34762 bytes web_edit_xmlid/static/img/xmlid-editing.jpg | Bin 0 -> 49224 bytes .../static/src/js/tools/debug_manager.js | 109 +++ web_edit_xmlid/static/src/xml/base.xml | 15 + web_edit_xmlid/views/assets.xml | 10 + 20 files changed, 1494 insertions(+) create mode 100755 web_edit_xmlid/__init__.py create mode 100755 web_edit_xmlid/__manifest__.py create mode 100644 web_edit_xmlid/i18n/fr.po create mode 100644 web_edit_xmlid/i18n/web_edit_xmlid.po create mode 100755 web_edit_xmlid/models/__init__.py create mode 100644 web_edit_xmlid/models/models.py create mode 100644 web_edit_xmlid/readme/CONTRIBUTORS.rst create mode 100644 web_edit_xmlid/readme/DESCRIPTION.rst create mode 100644 web_edit_xmlid/readme/USAGE.rst create mode 100644 web_edit_xmlid/static/description/icon.png create mode 100755 web_edit_xmlid/static/description/icon.svg create mode 100644 web_edit_xmlid/static/description/index.html create mode 100644 web_edit_xmlid/static/img/xmlid-create.jpg create mode 100644 web_edit_xmlid/static/img/xmlid-created.jpg create mode 100644 web_edit_xmlid/static/img/xmlid-edit.jpg create mode 100644 web_edit_xmlid/static/img/xmlid-edited.jpg create mode 100644 web_edit_xmlid/static/img/xmlid-editing.jpg create mode 100644 web_edit_xmlid/static/src/js/tools/debug_manager.js create mode 100644 web_edit_xmlid/static/src/xml/base.xml create mode 100644 web_edit_xmlid/views/assets.xml diff --git a/web_edit_xmlid/__init__.py b/web_edit_xmlid/__init__.py new file mode 100755 index 000000000000..0650744f6bc6 --- /dev/null +++ b/web_edit_xmlid/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/web_edit_xmlid/__manifest__.py b/web_edit_xmlid/__manifest__.py new file mode 100755 index 000000000000..f80829e3b3c8 --- /dev/null +++ b/web_edit_xmlid/__manifest__.py @@ -0,0 +1,17 @@ +{ + "name": "Web Edit XML ID", + "summary": + "Extend development view to allow adding/editing records " + "xml-ids", + "version": "12.0.1.0.0", + "category": "Base", + "website": "https://github.com/OCA/web", + "development_status": "Production/Stable", + "author": "DEC, Odoo Community Association (OCA)", + "maintainers": ["ypapouin"], + "license": "AGPL-3", + "depends": ["web", ], + "data": ["views/assets.xml", ], + "qweb": ["static/src/xml/base.xml", ], + "installable": True +} diff --git a/web_edit_xmlid/i18n/fr.po b/web_edit_xmlid/i18n/fr.po new file mode 100644 index 000000000000..8e8312883fe4 --- /dev/null +++ b/web_edit_xmlid/i18n/fr.po @@ -0,0 +1,58 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_edit_xmlid +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-05-31 07:11+0000\n" +"PO-Revision-Date: 2021-05-31 09:12+0200\n" +"Last-Translator: Yann Papouin \n" +"Language-Team: \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: \n" +"X-Generator: Poedit 2.3\n" + +#. module: web_edit_xmlid +#: model:ir.model,name:web_edit_xmlid.model_base +msgid "Base" +msgstr "Base" + +#. module: web_edit_xmlid +#. openerp-web +#: code:addons/web_edit_xmlid/static/src/xml/base.xml:10 +#, python-format +msgid "Create" +msgstr "Créer" + +#. module: web_edit_xmlid +#. openerp-web +#: code:addons/web_edit_xmlid/static/src/xml/base.xml:7 +#, python-format +msgid "Edit" +msgstr "Modifier" + +#. module: web_edit_xmlid +#. openerp-web +#: code:addons/web_edit_xmlid/static/src/js/tools/debug_manager.js:81 +#, python-format +msgid "Edit XML ID" +msgstr "Modification du XML ID" + +#. module: web_edit_xmlid +#. openerp-web +#: code:addons/web_edit_xmlid/static/src/js/tools/debug_manager.js:41 +#, python-format +msgid "Metadata (%s)" +msgstr "Métadonnées (%s)" + +#. module: web_edit_xmlid +#. openerp-web +#: code:addons/web_edit_xmlid/static/src/js/tools/debug_manager.js:25 +#, python-format +msgid "No metadata available" +msgstr "Pas de méta-données disponibles" diff --git a/web_edit_xmlid/i18n/web_edit_xmlid.po b/web_edit_xmlid/i18n/web_edit_xmlid.po new file mode 100644 index 000000000000..4a8262d17a2e --- /dev/null +++ b/web_edit_xmlid/i18n/web_edit_xmlid.po @@ -0,0 +1,57 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_edit_xmlid +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-05-31 07:11+0000\n" +"PO-Revision-Date: 2021-05-31 07:11+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: web_edit_xmlid +#: model:ir.model,name:web_edit_xmlid.model_base +msgid "Base" +msgstr "" + +#. module: web_edit_xmlid +#. openerp-web +#: code:addons/web_edit_xmlid/static/src/xml/base.xml:10 +#, python-format +msgid "Create" +msgstr "" + +#. module: web_edit_xmlid +#. openerp-web +#: code:addons/web_edit_xmlid/static/src/xml/base.xml:7 +#, python-format +msgid "Edit" +msgstr "" + +#. module: web_edit_xmlid +#. openerp-web +#: code:addons/web_edit_xmlid/static/src/js/tools/debug_manager.js:81 +#, python-format +msgid "Edit XML ID" +msgstr "" + +#. module: web_edit_xmlid +#. openerp-web +#: code:addons/web_edit_xmlid/static/src/js/tools/debug_manager.js:41 +#, python-format +msgid "Metadata (%s)" +msgstr "" + +#. module: web_edit_xmlid +#. openerp-web +#: code:addons/web_edit_xmlid/static/src/js/tools/debug_manager.js:25 +#, python-format +msgid "No metadata available" +msgstr "" + diff --git a/web_edit_xmlid/models/__init__.py b/web_edit_xmlid/models/__init__.py new file mode 100755 index 000000000000..9a7e03eded37 --- /dev/null +++ b/web_edit_xmlid/models/__init__.py @@ -0,0 +1 @@ +from . import models \ No newline at end of file diff --git a/web_edit_xmlid/models/models.py b/web_edit_xmlid/models/models.py new file mode 100644 index 000000000000..4e2bb5b0fa1c --- /dev/null +++ b/web_edit_xmlid/models/models.py @@ -0,0 +1,29 @@ +from odoo import models, fields + + +class BaseModel(models.BaseModel): + _inherit = 'base' + + def ensure_xml_id(self, skip=False): + """ Public version of `__ensure_xml_id` used by DebugManager. + Since `__ensure_xml_id` use raw SQL queries to create data + standard ORM fields (`create_uid`, `write_uid`, `create_date`, + `write_date`) are not filled correctly. + """ + res = self.__ensure_xml_id(skip) + xids = [] + for record, xid in res: + xids.append(self.env['ir.model.data'].xmlid_lookup(xid)[0]) + # To avoid having our record manually linked with a XML_ID to be + # deleted when the module that owns this record will be updated, we + # set `noupdate` to True. + # This is done only once since `write_uid` will be set there. + xml_ids = self.env['ir.model.data'].search( + [('id', 'in', xids), ('write_uid', '=', False)] + ) + xml_ids.write({ + 'noupdate': True, + 'date_init': fields.Datetime.now(), + 'date_update': fields.Datetime.now(), + }) + return res diff --git a/web_edit_xmlid/readme/CONTRIBUTORS.rst b/web_edit_xmlid/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000000..10b35766b6dc --- /dev/null +++ b/web_edit_xmlid/readme/CONTRIBUTORS.rst @@ -0,0 +1,3 @@ +* `DEC `_: + + * Yann Papouin diff --git a/web_edit_xmlid/readme/DESCRIPTION.rst b/web_edit_xmlid/readme/DESCRIPTION.rst new file mode 100644 index 000000000000..8753804a50ea --- /dev/null +++ b/web_edit_xmlid/readme/DESCRIPTION.rst @@ -0,0 +1,2 @@ +This module override the default method used to read current record metadata +in order to provide two new actions: `Create` or `Edit` XML ID. diff --git a/web_edit_xmlid/readme/USAGE.rst b/web_edit_xmlid/readme/USAGE.rst new file mode 100644 index 000000000000..a87b93385683 --- /dev/null +++ b/web_edit_xmlid/readme/USAGE.rst @@ -0,0 +1,29 @@ +To use this module, you need to: + +#. Enable the debug mode to show the Developer menu. +#. Click on `View Metadata` to open the built-in metadata viewer. +#. If the record doesn't have an XML ID, the `Create` button will call + the same built-in method used during a row export to generate a unique ID. + + *Create a new unique XML ID* + + .. image:: ../static/img/xmlid-create.jpg + + *XML ID created* + + .. image:: ../static/img/xmlid-created.jpg + +#. If the record is already linked to an XML ID, an `Edit` button will + open a Form to update it. + + *Edit an existing XML ID* + + .. image:: ../static/img/xmlid-edit.jpg + + *XML ID editable form view* + + .. image:: ../static/img/xmlid-editing.jpg + + *XML ID edited* + + .. image:: ../static/img/xmlid-edited.jpg diff --git a/web_edit_xmlid/static/description/icon.png b/web_edit_xmlid/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..4c6f8717cdd47aebeaf637a73770740553f64c8e GIT binary patch literal 9552 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + </> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web_edit_xmlid/static/description/index.html b/web_edit_xmlid/static/description/index.html new file mode 100644 index 000000000000..7d12bdd608cc --- /dev/null +++ b/web_edit_xmlid/static/description/index.html @@ -0,0 +1,450 @@ + + + + + + +Web Edit XML ID + + + +
    +

    Web Edit XML ID

    + + +

    Production/Stable License: AGPL-3 OCA/web Translate me on Weblate Try me on Runbot

    +

    This module override the default method used to read current record metadata +in order to provide two new actions: Create or Edit XML ID.

    +

    Table of contents

    + +
    +

    Usage

    +

    To use this module, you need to:

    +
      +
    1. Enable the debug mode to show the Developer menu.

      +
    2. +
    3. Click on View Metadata to open the built-in metadata viewer.

      +
    4. +
    5. If the record doesn’t have an XML ID, the Create button will call +the same built-in method used during a row export to generate a unique ID.

      +

      Create a new unique XML ID

      +https://raw.githubusercontent.com/OCA/web/12.0/web_edit_xmlid/static/img/xmlid-create.jpg +

      XML ID created

      +https://raw.githubusercontent.com/OCA/web/12.0/web_edit_xmlid/static/img/xmlid-created.jpg +
    6. +
    7. If the record is already linked to an XML ID, an Edit button will +open a Form to update it.

      +

      Edit an existing XML ID

      +https://raw.githubusercontent.com/OCA/web/12.0/web_edit_xmlid/static/img/xmlid-edit.jpg +

      XML ID editable form view

      +https://raw.githubusercontent.com/OCA/web/12.0/web_edit_xmlid/static/img/xmlid-editing.jpg +

      XML ID edited

      +https://raw.githubusercontent.com/OCA/web/12.0/web_edit_xmlid/static/img/xmlid-edited.jpg +
    8. +
    +
    +
    +

    Bug Tracker

    +

    Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +feedback.

    +

    Do not contact contributors directly about support or help with technical issues.

    +
    +
    +

    Credits

    +
    +

    Authors

    +
      +
    • DEC
    • +
    +
    +
    +

    Contributors

    + +
    +
    +

    Maintainers

    +

    This module is maintained by the OCA.

    +Odoo Community Association +

    OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

    +

    This module is part of the OCA/web project on GitHub.

    +

    You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

    +
    +
    +
    + + diff --git a/web_edit_xmlid/static/img/xmlid-create.jpg b/web_edit_xmlid/static/img/xmlid-create.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e15f8cf1030e7e5c219d56d123b01c030d15185a GIT binary patch literal 34457 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 literal 0 HcmV?d00001 diff --git a/web_edit_xmlid/static/img/xmlid-edit.jpg b/web_edit_xmlid/static/img/xmlid-edit.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dd701003cac78d8b0b9847a6b13a0e12de62f57b GIT binary patch literal 35429 zcmeFZ2UJwuvM$<4lpr}sMnF(<&a{Xm5fP9Kf&>Xokeq1&0m%Xak|l%W)MT2RgXEl( z56-59B z1_r@w=NHH);G48qmOaK4|HhQ#w8}R=)Fz#VuVdLQ9-Nz?Dcc>)++{3`cyoVk?ngDcf zKlJwiEK+PT76CaNa*g-6kDMq317frASf5w6Q)-UE*o4fS1MlNgQPVu6Wq-`U`Q)jv zh^Uyjgrxin1w|!gm6uv?wRLp$^bO1{EI(LT+t|9ey19FJdU*$Z4h{+Z5*8j8|1BXg z>3ecYc1~_yenDZ;&#LO0T1Z`eLt{s0S9ecuU;n`P#N^cU%Dl?kCF1J(Z**Y*F#nCLzf<mGVquyFrI7sfpgbi*XY!e$Y`A(PXs!jr*aXCcM_Cp7Fh{tdp)w4!!D-@cGHtA=6?yY!#SN=^^}}9>$f<| zIQSB$ScuVg&N)mlZk@a#>I}MR|EK!94saFwf?k02_0r;NDG>YXCsJu$AE4Q`;d{%Xv-RvSWonXr&Jje%8EWU?YOBytTf0EVNbLMxp zp4R~{BXL@OLz5y%Ju^%{PSY=e8^Rvsw)ggdlbQk)dggeBTaX7e zWDHm{VcKJ4MwG4t2?h096AGTk8!SGfY0iR}CN92>6f>35H8Ec=C)i8s=zIl#oaE>3 z{DSH-wx6ZfBtb=5cf`Q5H`rHbqdeUHg52eY+y^t!#JKOBM+p=?50#%bE!gzRWwbnv z&LWNJW+D|GURB*#*jDfzJ@kd}(O_;l6tLnx zZocexwzogra5aeiMMLh^DOU}FWsBn^=BV1FZ)i$3~7#5Vs^WF8{h5ho=GX3x)LEKOBlW0 z!)0g<+<+hH-acCWc8~L_M{yg=S%s#pSC$V%xQy8d8*1f(eF!ev)fg&zU-moc!;>TW z3P&MV2f{2R8jFYLI~lzSV>M8OEs#>4F~(wjzMI#6-J0Ca#Xh*Mum{tD?TCIe!+Kt| zt_8t|U`A1|sCO@1Uu6vYt%HedJoeugAwpkOHkslDt{;hSGM`=P1r3`tH`h!YY&An0 zL&oP>8dVBDehHeaT-6;$VUGLql_R;~BMs}nc^qm-W!K8e96kvdrYAqoJxTUkl8lXZ z3hyv%QP+Z*bhJoy^WFhqF~f!Z^dUM=<9e!|=AUK+sA5cnlQn7V7i`@6_8ipimapCV z#^jvyQSFwl4!an^wu=gE%k$?|`T1X0D>A&PAgXL>w4m*WS;ZW>sfW_)h9PweZMQ;{(G@}kWHZH+`Z+goniHv&E1l$dBUyU(VmR@s zDA9`85Z*@pqe9P4-SH2w^02cnZc-{DG_FmdiDMtMgh5-3`a)kN=wlakM;mp5R{Nor z=}HEP(_^*Yx9w+M5KBrlw~=DH0kTYz3fOKYPaUqgfGxAdc8zt89Xr2LAeF@ih#lo| zG(#S=zjyvT4DyoVIV;F`|K_6-X5j%y{S6!#a+ca%HRUUxuV>6pSh2X&Oa9dp7eoTu z*;lD0hzSGYaZE-=xzB4R3f^wt0rYD!3%ePy$B-=Re0ZLhZxNpd8Usy$3w&&E9C%2~ zL66@iNYy>S74IQ_Iac--S&k46dwuA&09VT>STCpFn`i2F#7Ah3FOMD6etdQEGScFm z@|ChF?(5YVxf0KeE}N7Z1Ew#oq{VtHymd36EyJ&Ey?=AWgeB%(f;3i#Jde(2Pp=qA(TL6$j|~vClbDw@qQ>yrP&J8u+}TJL&a z1eabxXB($N@-{byZrBIZs%3;~(yVY#%99;yZqy7$SIbht)afASR-?)c%qIzgTzS#s zzz6j_@x__=al?zOS4yBK#xD{MlB`i2b?RsnJilzD zzlexe4cVSkRVPe}E$+e*)K?jZRx&ZzYF65~5(ZLvzLIAT-U)Hr0l9dPF7NWuJv0&> z|6Fl6d-{$g_cw~X;Wk;M)ccywY6g4Z4v?=BBdylp{==dEsk3fYzev#rd!+v`iz$^Z8pM@GI=I+3g%0z)Djx7P1rINYijrAG|6oj1F;eh|j z#zoNW-Hi%e+bwrp5;T5({78Hw%EO-H(-5vW<4S?ShO`@;;4LgE9M$RQNHkmnksD(Q zjH5E8V=Y{DLKZu&T|^Zc>`s6hAtjfWjjeNw+^N}e(E`!;dmqvh0wguxozPwC4_Y%3 z))pJPsK7*vy1b>_CIEaKOyAmM%u4C(t7Il z?iQ-B*mEK)p5aJU@G7H;OOSWB%dIOY*pa@$%Qk_h(Wy zCN&gTg01!qc$3$8s5TU*d0MB;odJnF2dNcu^hH?Cxbg-RnzlC~y?lI~cL2QCDYSz* zA++~#)o;%->)Wxw)WZWYEh*KGt1CnX`;GYxRNq4G06H-P&0Y*kR<8x~XcBrcf0SN7 zxdWK^-vK zFU@L&)?vJ*q>9w{^vT)%cP(}Bm(zmUdSC8Y=hS_r$3;Gg2{9})M3E{BIpcv>R09%; zPKfRR9IObZUWNx;h6V_q)nihdL|TXH?7XGcj6f;-@xF4}fKN@GIIMt=DkDP1Y7}0$ z$-T3_{4mDvb^GRPeUH?hFB&ZNSh%aO(zMO%eR9U=Yaf*u6;WJSUFkG@mT3hWP#hbo z&JEnQ-`k%chJIw6>wPU=b{+14nK;?X=qaWPfAQ||r0|O*oi8~A0o-A6P}izrY{%Df ztLAwYcYu!X2+PJT=o&?k7<1_DS^Y!P73P%_XJ9D3)35cW>!)^7i-98}E9w<>l{L>3 zFW@B_MP}XFihzE$3|yCYF019(E1n+RvO?p>HT7lELdCCmOVj5V=-fTJ`c$N?=pz|w zcWbovJtmF0qnT6?DzM`h(=1bGD?|zmn?$W*UU}bGy@TDkVrMs^r?QHWK$w5!dIXq! zkM^lb@j{ib#}n?@w5)+R%1>r8?W-8SbTt$hnuDOpJs>6mX^e7^lKzym2-eJyymSOx zY}f;r#J8p;ek!;!`;Iy=Xz2Mcz*;gt)=~C*mNrkvfgX%s)V}@I0}LZ4Lkf-YCCt(h zB_#xC)el#FlG`=?9+#&ZjluHfRh3jf9U;Z?kRIl5yz_lcHP~tU3?nH7mNw7tM?0-9 zNe7lS>bc@zxpY81K3;D8$+>cUfcvo2lUnIU?2DT{>non}Jp+rxcP>T}f-&4ri*P5j5pGHw4FuM#o_pYHK zYZ(`>9Anwzcy^`&`3e2{`pZVbaa=AL31BVLmAQK-Hl(G?(ScG_Ve`TPO3z4@jeJP8 z%UYQ{pP$?TbXzl(hpva7)2+u3L`X(5YU=^~HTnSOJMn0#1pg0paT<&XMUfI^iCw5m z;v$3Y0ORbpz37)Q~*Ph0y#Js9ywhwga_M7g^u*FZgR!8TfHif?8)4Yaj zGa;|Ic*A~RI2FFTPYoLQK@y%DBEftbjp?IXsi7uiu*8F~BR0HRfiI#>{4)v-1;BrG zGuvCHfE_is*Lg#dC@1$)F&mf|9gv4ulshA&?j;bE8#@&GXA**Ebjn z6#v!~aa^MPtg}B6Vn#-;|2?+PyZCSi$Q+Eh`3(+c`rvqltiJ=ah9b1?9a5?u4Br8O zNlcf&?g03*Lo26OPImx5V%QIY8g0I6F(k?eydsa}yb%JAZuQ=t0XshNj=gRDqhHRS zuLm?KX#UYN=8wz&deC32`@1atB@BNF!+&RC_<`?{@o4No4ch|}I%vL) z_0YVYkdRoD>#KTHCLyEcXU{BoA^WRRjyJ>&PXf+GGS`o<_*yaV0Of|Gw^Sg^wYXjT z8*$s>k}pvq4#*WTnv4A&mq?%WEU6w%Kgv4*9mNc^e|aUm;fPd~0+#!$ud4e|h?0DQ zsTUUMq*n2uEY0sE?}CmM9OGr%>%53rhh($b`jhc3>CRe98mS3udZ+estx~oILq#VK zm0$`D%{S=K1n@6v7!2KAREbqf#;?B0;U}{tD&iOZu!vI!U@TX;I#T>jIm>4d-PYoZ ztHV#C8egc16;mNm{%H)HH;Pu04$p(*w4*Z(-cu3p7WBQoI*BX>ihm2i!ZrUz#_wM{ z(Ero+I;k6s#d8$E8$C9^EF9Y}tr`D)M#>lRek)`igN+RQ*(|uE^w#bU(8stklXR7l z^Y8Ds|DxYG#yg>|KDYjz@0zMlMHpm^dGb$byx#ZF*yG}|PSS3gBRF6^Qo-rIym?bW zM3*jA@o6Unt1)H*#wcFs&Nq`w*c|{aY_^Z`Qn&+viSGd9&vj@F*wrcFhfIH1rM-mP2iFI>2{>03%WWe*fflpO_Sc z{^<5UUH$`i?A0I7jr`MS{(8{gX5zmE>u`+c4OZsVEPWi3s3x+am2-^;_PhhR_>^E} zp+81uXzfb^UC0)~%6Qr9-NL*`iG@pOW@_!4O{*t@DRQBI(*uTOE z{UD&wjYHa1sR=1fpqOngWA*k^2=^~MzQR97el+WaTd{3Sc$9&@Kql52Zqt2@H$cU+ z=R}|`rq;$}@K*F=zzeBJZ$BxFm#Blhg=>?U=cPZ5(fLC^Rt4V(oKjaPp5fZhkvo8W zs#a8B%+;A^a69msSGS#~6iOCF1cv(E0dir0)1p(^Ne;`UU=&eWbn|&Bz1^aB!L7fd z%@W7T_3i77aLyvme@VWwS5_S~qRSR{*6eM+ zzCDMAh}Z+)RMZIdUi4*IkH}qh=0=7(2b&eb6U5j`31(hfj`Lo{d2YPT|GLyCtWoE>_;5MIbDU*>{}j1TMZ*IB*(m4q;;!e zWzn!(v60Q!o{CQBaAaK{|69AOk0pzjW)dRyvdq?ZfH}$F!>PRUyy4(ql}YMxBA}4; z%1R1WK?pJ`S5!tBFkw(!zISm45V;JRxIVuFJa(JZ8HF}S!^Jp^G&vmuM6_g>v>Rz#F4c}g8js5@NcoPA)YsL zxMiH!#g(&TM$%w19?L2FvqB_aS?d0vlZO>?0-hNE&T*h+hpF?6U}9!-4vJ%hzJWBP zkpd#=P~ayDu~Y?Fo5?+DHd2mhnR*+P;ZnCHeb&d71Ie!E^yl0aoR``E?LFL*&@x-u z+>l7qp|7@WH+u(Y?%ynXiHrHMf0WW(13sOcwE|+Yr7c~nZG}|vD-qgJshAUHGxHBU z@LE*q-w3CI&J*~|irXNMf#?Y#{V6SJn(8VOg4|qJdzY&xMSDQe3 z*n6!vsS_^!rfp3qG+wBkRP~~ldu86Lskj4?jC97O7;kNJo76CZBy51}KltcW{yO)V zaM(VpSkrapJLvQn^_dO_!!b!&4TyENYmww{#%O}`X&~SVrxJI>}xu5B>wF1YE zT$iZ!Rcl)&k3{mUYOCsA=vQR!6F6FG<160hnF&Y<2Y;CtmXxWzp4}5tleq(2=vPHk zijf)}nr}5GVj`TrDsR$nqyWn&PBE*pn^(G-NO|p%#OqSStS?)tr(KhjAJ;YMsTz8H zqWrf0yd;-VG;yb}$7Wd;t{dSRgKxNEJujt?L((#}wHPZueB%1Rn|^ewo$dR`6wejDX^0WgjHXrVy^Sjkv@go2bqAOcMQMv*vYen(!kI;2 z_P@EafBGAgFo9HBPk(>BIgXUd6Dch{xOji$X2a?sAn|-bXX(?3P*hLmdO71RBXz~3 z#a9(KFLTEoX@PEzM4HHK>2`cY!wR$eeQlc-2RG64v%AP-;Le^&KicKBDCXvG&R$zE z<*5x^-T2LwIED1G&)p-{uT5PP+T))Uo7+gyqCzA-AEM%R=p^LiU`>NP+vkOD41lk< zR|YcAZ~ZnGQ^GlO`Ln}00sn!9842eL0IxlTyGQ)AP07FIP;rzHuEZr9o}0UL#-+DE z@KZBYgGJ_NuD8&=f>Y1dsFRo}REnl{r!{>`)M~b%C#}PbbU8WQd#edaJVz?|Io?`( z*@1EGCb|=snI(HHf|O~kk}e#Z*NHhsMo_XQYrPw9!E3MfL>sMw-;ev+To4>T2tyV_ z52oUW1Z58nZ1@GzTv9IZpPWO_XOOed@`*Ev7((k-p7DYPFq!8Jii~sf%_H@L*;3z} zjMs0{=Ppb9Kx@zoXqc}`$sNG%3b^2{eqoYu;kT@=o+%Y_l+G_(yD}y}<5V#CQ#zdZ zvn+F}d^K#O0ZzMq((Q75CS9)>kJojME zZDdNA56g|S^NLr7au2N*u5XEjC%Appvi4z!5Fo+gvXWPxoVnA7>V?wonu??L{&;g% zhl4A63vC{*_SQ$R!;#>1_6jw{>nDyDlic?C&pHozX}r`}wAuMF1_@7NzPqk@9mKDxD4QMoZj zHB%+)aoYFbk0Lod!iDq{ga7Fgc-qh5^sUD%T@{dB$QniBiWUMgOrNHEfoLAAR zU?S1<#|b`;g$A8|ZlrPW9J?CN$VO)7RRQzSH@G5E>oG)#r0(8#Qz5~RGg-zg#t%x4 zcpnL=voOi$wjwE ziV<2Sjqu0CUf3ZBj+wKC*@a=bMw%QsR?{??+(yv>k#{hqfDxol)t?@U3`f57UO~Hq zQFnl$6EH2p;QB@v?vUdm0!c4evYA$K^z!%^+w~#b?1m;j0qgJ~E24f_o#>*p1nKZA zx8>L7xXy%1{nu_`xGKwHUmnzb=$;jZiiEfWwzqwEGquk6{E|F9>}4KXxB_8Wu4y1K z7U_J|A(Cs&N0lIzz=UY`qk-|pA&HU|ZLg@L;~W0j%K|13IMNXX{5&gGxFcX<6wi2nzmxX1S>3IA3m2n zkfU{#U_ux zt(dMc+#l9(Jx?f?)_?D0N%!)H5eA8o1$iAe-VS36*Zfa{VlJtvFh?Gi29myNMfOP9 zUX#X78N37UaMq*R6Ql(AibC`#Gaa2Gy8|R|wLXRQhBa%0*6sCOZMe<@kJeboaME z4>Ie2E@w?}ju-_v09|(;QqJ(k77~ZS_kmV-fM>KU)q=++=dB;@>qop@(##qgpBSoo zqr}h)VKU%yb##5%?z?+4HA_+*jltVVel9#wwZjQp(V0bliEEVGHl*V(5-3BTy{+FP zW;27>`?4128i)*_ojnUMLOCSQiF~=GYpjFCvs0BVPWJMq0Z)0;T>Np1VtDSs#3^(G zJj4i{Nr18rAXQfH03^1ma0Yw3Ah4a18VHx*2qb6397fddKrStOjiH6MK+u&jE~FTWHS`(lZqDanPsom zoV8mww}>c3B7q|fw*}R$XbE#-HWk~-2DC^M4Mx6)i-jSj;7pw^p8k8gIU&=kMF-{ypLOvfRga#1^nc_3 zy*LFJz1D(g`3YiL(8cWptxZm1@d(l6+yqAtt%`5byQGEhpO50&(w29Fi9L(hY9-y% z?S;v^S;f9@O?_&cmtzu>c+^0IyIPV0jA(wjeSx{Qq|;+4JHF$Uw?3L2|0y2R8s@4pAXH@YHydXF0^oTrgZnt9k}W9#$Hykv3Rx( zU1C3QQ{ISO9Xde4?s@Qdm38V8Jzc#FBT9W@BhMns=56A>cbXuJT{ z6YN~wF>Y}$@DAaPkyJ9_!$4%6~ul=C1Rr8W0?sQQ!RaCAOShT+iMSCt>0jZ zk}&8my90z|MsMWb9{bd7lp`?{5UE9bi9!e>*W2fNGlvFK&01gBEl$6l>$G15oJnh| z-T@*~CJpMs?9R#o!$s|DbNUWPnz!Z}G^4|T$)jl3YE>%-rrQN10WH&K_FR{RH2McU zU3#<&dJ?y-y%2TNhMBeHG#TmA%aXU7Av!H>371lXWn|?o7%rL6`BeIsH)sb%jV0i2 z_pJ5xz7&~WcDw_qD1R^JT*-^S1N5g#p{oePJM>)%fOrUJN0L3ssiKzX*~PrN1d=}X z@0*wjtPJAPXQKkEOmv+A54JfNH!>u4@(>am1TlnrR7u`F32tDg(kSgX zdCs~<8s?JkZwC80FlCdE)z$28eFo1MAu4wO1K=do4ep^k-Hfq57{w%S$YZXgO(snH zSxlgtF6d_KD^Z!Q&DArRhW+4LL>>4CLab9KCI55ve%lROS3DHr0cBhLmazHUlJMw&mwt@TJ~vwlYh4-Ju~#!iew zG5DDoLM0DUfz^iG7N$SBpXOFzd>j(=8nr#%%RIki;X40+8d*LtUnfEp|EB+a zmEP1@dGw(SU$|=++I7RTo#!U!7F?e1$CrxyS%G+*gT{9s=+gR^$Jmc^1JLNP|o zx^&0O-|Z`8^(7y+({YB(@8~0x$v3Fs0~376H40su6Zm|EL=-_a(S=St0^x9fZvWAX zn5N_*sXF_ee5V+@%iL!8(jM5}#AccC#yuiy$h5iPMyEeHKH0YrLUMy^Jkr1%FkX=l zV~Q9JHH9^c(W+nAm;K}$-`$EINdy9iPX@d^H3j`mhtn_u;^dD|w2P0kN=q{$)>40; z8|F90Xigq>C5fuB41Hn=OMD~olz_9py)Um6S~hkE2tvItINw9hEn~1piT*so)(`A| zBVKB7`Vqx;9|}xxLdV~3#!{WFj3Ih-I&h{i)n#rWqwm>YD9OZzY=26?4q?NLC zkPRK8R^61H7Q~2WQk442Kku&7PAW zOBTivwSj3cJ@@{S`?5@k#J!EKIAH_ERL7#Lg za!*D3mp5_^jS0Z&vn9!sak%;Nczq(J`qHNYk0se#e&Uy!?orcs0MyJKz*Z+o_4)<~ zdx-`nRET`phAmz)lIzusk}R=N)!n;sjpYi|$W!OTA8HOJTxw^fZ$Yt)H2RHxG5_T| zO0Zx|XVpq=0<|Qn7^*mEj|4tkNxSDXU*E*@{MZ-@dl2xx*!sFOKfyh|dUrx-WK7}V z+c?iTr8yWLwu+g4We=AvQ}Bd-H*dUsHsS;5Lz7@{$&x{CU1is3b5>NgrTfFDH1#y? z3$fw3wI@wCH7oEtKqyO#^dSlidr&2{pDwoUc=0xgZ1{c2TwjbEp zfA#*0Cx6MwU)u1mw-7%b2=!zLObM4dzJwJ7*WCCVliFrw0BfsxT541;bK@P^K6=u_ z`~o66QIFwyWmzS2h&zCMO>OOjJ!L& zA~f&!CGAv8B(ar`jkVb8%1Uw18K4AR4CcfH8>?r0cLv|Mv>`E)#baJ4>^6y8Cj>&0Tkba=AsF!gsGS0Kx##&Yy786#pFs!67V}HbB7vf;tsjyil)DZOP`6^Q?&FX1; z`J*XmhIN9Kxy;T+`-}uHN>rxgvXNdkO&No{N7VlWHn|RAT7XoBH0~^1pa0(=gU0517Mvq0M}LV~8a|T6^ql85p)};JiPVXyExMBXxE4jF=SnLZU z3`W-KM7_3Pk%TqVZv+_a1h|%y_QM@JueVUK>lP5yNZhi1t)T|R#{pL6T&Eukg!;^! z;-lgvsm5Gg!!W24tR{nGhNX49S&6c%Wcsza=WKtX;=@IBL?S4${gZ1&{xZ2OddX=OvOcBEw6cway%^ENmgIhELg<#wCQ(xK7f+nJ@v7ci4hiyC9|cOff> zU+Gdk-g=Sg^}@NBnRhBi)a_=HP2@{G<$D-qsNdmDBIT*WzNShw5rAbrYKJB~*^5X7 z+yR=>NW;t5Re^Wi22xB}Hbt0>=3QkvrJNk*RsWFwk1C;fRmQ#-WU z?I4nGNmL2Hl(3uaqVgCDr?5(hU2wO%5f6H5#SnWO-0I=Rhy5r5wUOyH|u1d=6bN%3>km5j5gP~Utf&v+1O zRP4Kv`L#@WwD2dbM+nkporj|*#jh;=XKBJxID6^L7rPC}BuA{V-iwo%ls9iF7ke?c z=*=l53-=pUkE@^?w?^Ks$7uIB_8@}^5wn^}VYE2^+u%&sWq~D5dB~B@{$c-{Ju!@E z_Z@og@H|Vn%i2*kZ^~d7~zV;OJ z?^59XvP~bUXwrK6H`^b^xa6zTSoS*Y&-=26+;o7khvpLl3iB4pMy2MIY!!x}Vl?uB zU7rNbiXkY~b8FRt)LUNf59x*ad-KL+1qH)92F5R{h~^D^U3dhHitbBle&F+29XfvZvH0%i5!{`|3T&ia_o07}`x< zB{tY%o04UgUprk_;Sr9f?Qt+s)XP1c=C-oV^q+Vv<@L-e^0IV=`nUbM3HIJRp>v7m zyM-F-!!#~8O{WEBT^V3_?GxnFYXgL#4kK$Exvf3zh}^vaU55>)7_PzNuUEZxaLwb= zx?QyWYEVabiT^4`loCx!cA&Bn~kGIqu;`O*j zNc9_-({k3-GyyjdjbU9#RfDcVN6#BlS`zL6r9h=CMs%L=eo{zi=;n;!+qaeBS`J$q zZn2iQIIN^}UCAh-rj}yXE?MbX2#oKG2$Z;S7@W&2X!venkU+5)+oNlZ{@w$*4Vf6q zo+az~q4}xaXqGWPwNNA*i3t&K;L+M@G$v`<^N$M=4DHIx&vy4bd(|e9Dvle*9R+_pt_gA^f$SF;}`_^G=>s=>5^$J)I=@sFP<3ccXV+y(YVkM-=7}E}hqi zx5v+F{k_Bt09@?TN@rtmPbt{T<-&%w)*X`m;cL}^ReO|sP@fsz!h{HTrfl9H4C@=A z%>#3xBvAzFLJi}-W+LieypMxXy~0krl^vQokZ+D37L5|0QV=&%-zy#=S&0vZ$*6su(n(7#p}$f)cK$@M9gRaC&mA(m?mxe zICOY2nTb9J)1j+BGK+xdGd`eNL1&H+d8>jBay6<Ud0Se213akqOB%V!wAsn`TtSsHoYu|PBISUedEAI; z)bmswi6i3`y?EKaRHU<#rhjJqbi25b*^s$bv|ZzsnYk)ud{WNWdwnzdJiFB<=?z>l z2nJMxTS6m51`pLuV!5}(#2TXK1xJT`0%kXv>H0U=;0D*YU!>o!8LCsYugknV8W@>w zGkWgmCT0KbV&ucqpYFv^SnAMQY&BqJytdf|^G#^**zeo{2z_o{v^-Bcbgo~~R__bc z26ykwKFZ)+R*18Ut)bM4J;_Wxx|s<>DDHPv`zk_UOUo_mo~}z)%3ks-d#XI0Po577 zK0UgT=vz}UlZw}CB(RlaYHuNUJC2n5+0K6XCA%(;qRBFf3^dTlk(vB32TGL+B#a`)O0 zIhws6F(doblc3Xk@>;aE+%NHZ#W9(B?t@>`H~y_RLG29t#A^?-iU*{1v-VPIr++qz zma>;nQ#-uV{1h8vK9dh7U!cSdhHh>&d))!vC1zgpa2gCN*iGF52txW>=lw-xsO8b6 z6J$05w(|@~k7;KM?y%TE$-oErnPwQpGt?vo3#x8zf^t|-E#mZPo@NKcsYnBGy{`sj zY-c)QzN+y`Q@pM%PdBs!r>E@&mpGib98Rf7Tb{9D_DK_(r)eAB_f>JD?n1l#lC4lj z^a{sJ7}0iNolDNsBmD8go@rddpvv~0lq4SBCKFhLiqEv)A!7DgUTw0ZHi~yeYr=|r z-snf%lY6lZ>b@jIhUMRhR>EANSe}@j{*05g5y3NKM;4@eD)vt-@v%sT2ETlBTNqL4 z^*-anFz`(6S|*x80@u|%-c#%M?!iXA$R79>J&uqtReZ2|f3!f2c50#E_d%aJ z=o}ThU!(c-@L2-~=0h1Z9_9aR`5unCwCMDSk1NoiZOkBzBSSTxobHtpqP6no$99vAC+;xR(o`(kmU-xz_~K3_uE4_kRA=cs?l zc;LhJ-QL`g>tq5B;q*-F^$I8eh4 zdiRZjZYF46|A;)=?^Xk^M-jXd1Nr!E)#fPB7gkC^uE0~-!B|a9M`h}-CCZr8>n59V z3p^#4d%KC(iFhw|g)hT?1e;mL>L*&Kh%5?3rVp(KdL0`w(xdvDEBqWaeOO&eY~vPZ z>AE!+k_0*{$OpY_V(ZcbuBWbDk!QCw(DG4a)D4i*nz~W@sDLWFazRgsXRKZ^pmg9w zKIhYb(;kk^JTR=r-rMHKL>aqKM=@)slRZy!0NoL!pHf9DC=iFMuUX+DLTH0WNGDNh zq2E!sX<=|Se&BQ4cs94cK2NnnC-RjZef)eAF_|rJj){`T?RBMrr~e7)YwkS_WBj1= z_r0xtyC$mFDAJ}o0Ly~g402u-iALbaVS>%}PIOjBCyOI7qKfE7TnQ8Vf{&J-EaALF^teJ?)PDk?<%cLQJUv zT1lOP{Do&0&e`73m?6I{ZR@?-z_t@GIgLfjupL^AU~%jDytJ|}mUQ_ZIF;A+wdrYj znIz_7zVwlqfYZvje{E_@VDouZ%mu%jm+xqd&O+esF8>}&~l-7)fP>G7nY zK`&7l9!(`%PMj*4D%oolws>QYFSRnna@8?LQ&}pH>mG9%SKjCFVv6Ah zNX4msdMeqpnO8ihDR`zXgy_+H|Btphocji%4?e^@4t*AcEX^_pg;SsJ4}uXG;Qbv( z1cyqAXR6{a%Mb>|bq(o(k*^C2{Z1^}H^WsTAMm9rX&7s5WlUbBzMx(7_ytLMf1@<- z;hXVJs7dyFnP&fUUx!J}*ZQuUSai{bR%tg4(i!eMvQxvqz1gE{VGg$`)oryn!Ff}LKh`2pRduTbLIu~>3LTkd8af1m-V-{a2Tip}~ zg*+FtqI9WYJFaR-5Z$72T^}ZR(WI*Od{5)!uhe)7s;ZH(t_OtCtU8qo4L$n{nvEt}z3gWRAvbK2Trx)(&ptvWIa#lILMMUPR)%7WOjw~uQ zJEUpc9g3Q)EMbcnz$aH~ASC-~OouUGgujP_b;9xcg41E7`FwovF?t@taB`)DAR zP~G2l`T3V%hR}N@^}}&PT$w0sLe=0n$&|Mc4{YBM`MnZ6OWDKo#;j)@eCqF4{4D5s{nHNSHD;}IYR20Ylp14uizIwv%RhIcr z@US^PSD}uq@nfPMXqu_*C!dHH>!xlI1a z*mG-U9gT;USUXchgIo$1(OF%qB+Ys;UA1kgt2oBeQ}XB*9BfliCO#5-UCq|d%HWs( zl%G@GP|~5+`pJ#a%}u3kyANk5(^svir&y^%~b`3|On zc{tnwKoYXG58`1P?UE1cC3S)*D;jD=wK(Gx_02fg^{7~48g?L{!aoqGf5sVmAJNg9 zBGh3BPv74_Sagr;DRABwlA$^H_+H`z!;gIcQ+j&sV}x$&gFC=yc@!y2wqlCdcXrWT z?r{C~k@dAY^0v*4PY(hcjs79n^*fI!{ZG<+g>9Gs&58dB`ur#4^z(%mvf&^8MC_k| z+|PRdf=K_%(dB>)JO}&Dy82+WReQqb%xUSyibaCPG*c_VVnWZJWY|mgcSQjpOEO(` z*etk@L{1+S z*^Ab_DvjZLM++n5MGY+(Hs)VRwBvN0e=Ca5chX;{%>F~|vcVV`UR5Vpv{q6`>CmYL zWkP`0Mja}TM?9LFE*nNKzn?J%)(8*Z>s6`uI<%U!urkgy-qRK1irfiKR0O~$38xeP ziB`PAPrO!4w<$5Py|}pHbDS2bPx4_{!ysrEr@=bASG50*YRp&8%hIbz!P$XZmCnol z_;HL|0CmUpM z|2WH0NX@R4UaQlETQK;2h>4)64)Z0}SD&fbno>z33hN33HUsa@3#WU&KUsT3BVEQz z|7;TeY!|(-2XwA^Gi`EbcXf(HTGGEnnMQMkkrckBR3S=a%nHM81)+ECZI^vGdH(RY zTzK1y_aW`NNPWVi22SUEy@WuOn2T@I|7;Tp_0sOD%CKTjVCVeOTJt1#+Q_d|FGhke z(^E6)D`zjeRx|X1$Q*+o$bsg4U0w9@GFu4Ew?~TMlp4?401rMrnEYp>4*9>acmH(r ziC>t%^Z(fm0oPBy|Km3v;IBvh`|ch8A2Lt@pqJg8)NOL&?2m)qv4$)27JDB8hqU;u zjox3hHLw%aTnf?K5W7^dzegp$cyN$|`HMayFlkN`RafCxK%Sf3>a8B0!3_rnAwlLK zryROr-e0d%qEj3mMfQ05rNVA{Kdf3Uq*#C{q~%sK0iN^c_w*Q(|d*gCoVsitSyO6n&F6Y}EIr6aY@v+MD zom%B18(uxeMWg_Qi$UIoDpt|0ACrHyU3Tuk3V7H#%Q9iENUYlMBoFfg1Fmggr~z_? zNSb(k?SkB=NTEcjz_9H#=Igfs_1A<SL^iy+ zYHP!9Qnhf+JcukN<0S(q9(-J{q zd_g~K?b^EYCX+0&@jJlujEqh=EQZ3@3Qir`taE`<4>f4#YaQaIS}SO^o`O_YE534y zb2(|H0lRL9=p0>k_pXn2u{WbJ+ree=9O;f+BhMfw$=P}^MVh##E6l`R@sg_=Xgt`t z0sR7-fV;~EWH(F6!O^R>tC^Udp!PMCyKj|%^ zVcnj!gOQDT{#`m#7*fWAsCh3?sWzG2F=1kxP@LiZnGB5Q_dKeuZkzq5$xQO$H{GP) zjN0qF`THH02|HbSVOs$ z_dVx~ckF%3xZ{2}=Z^hhjf}A}R+2T>oKNO6pa1+lVO9KF?Jd;hNMOwU00lmzl(VUyfXCa#DSF_KNO<|60Xv z(bv7$Vu>3xx);GjKB}tn3{9M_syo+S?M^mgZEx9NY9Z3yiYB;VSZiyp0bqcbAsM}y z=gAw~$Pk(K?nqaS`dc#{4i@<+0)=Tu4XNUl973@n#jq;pO)M4VOi`mLK*Bg@wkE&J|x$}^{P!HG2L)FCmxf%;KQvd>Aq`a1WDom+89uHRg&5-I!00%-=_ z9v%<|hCR%89|qPr%+({yWKs<6vkCGw7;Ttnpx6o>Yq?N!w$=6LFkWVG^)?w4K3cPd z35Pxyg*>-*%41;Ctc|~CC*j5!@gdtUz9t!A0Fh#|eltIUgeD&zQ9`5U6E52Yq$3$wkNKj-Lb(qnf^A02)BL_^JN5{!x#z&A!&ATbtkTI$_l7 z)p-I_IJkq%;HNOFH&f?d>W7_T=#LAawN&vo#-osn-$jqtboYy(hldf=<16NxNOQst zZBgy_Y96{DIdxn7qiE7Zl?FvQFG4;=EBjH`td-ol{KL2RFg#HPAw^Z^Q~Sw#a2}&_C08o8L;yF4SF!1vu=dl*0fZZrl``b4f z;JXN;qm)W8pbY{Z4Kq(ukol*A6-pZ2BfV%3c8+oGkRQ0D56-eq0>lRMHyZJfZ6JrSR=C4{)SWX01Z{N>oeb&9iuoCWS+KhP*o zCn~%rvs|5B;=PNiSk7%l%Meqt9Wo!$XS~IjMXDYmjSBhWeC%H(>0aONI?Y}xAjd5` zyVK*%_BW&b-Kkk2b>>HSLYy%mmmfW#^hv-1ZABT$js(pu3A{%=apYz7$jxda#^ToU zN|jLF_qb7w!JWo%8p| z@hcpo`UAOs6V4crKv@7i&9|Mns@ekpe+o-Aj#8`y>}oe&l|12_ewZ@71DkH2S$;o+ zGTI`%E%CL^Uy=*T3gsJcdE=0Y$c>(QteH^*DWy5Ha4ktgm_+C=>=Bc4`bQ!$+kyW7JBpC(q4t_fYO8!bC2^G(?i zRp>4CO5ux%L$I^+1lbQO{_$e{DRUOxrzd|m%s>1<{pGO1pIq?t%)jVq8rYh%GVlI3+ux4&cMm!q}S?-VM^Y{=TEQN1E7hq!9P< zOB#uxt|@%y(6}5=8~rk+TTX-hwfb_$YbB2TlAXVexp$5Y(G&^}API+i{}5J0*N{Gw zJs0tsa1qRH3ZIyxU?GEs6(_TeMQHX-ogV?dKxPV1pCzVsi0i$WFXWJ8sD&xq!gfN4 zI>b<*?)*u)M&QxQ+etziB5peD%NE!_#N8Dv`YRzR2#Ve#?8rL!3Zqt%y`dC7vxTUU zq_o$`u9FiEJuWX3X**0a9b`CqK^!uRTt+~+FaeTA{eG11Bj*O$!e^4L`$(H|L`kN zLY+PJzC*x2yUr}+PYff;a9NU->5q33tfiv-Cy@^N>-7K28~)+P|C?>{^z?wG4;qnR zR!*KELK!D5y}T_>inpIBEqvPHFbtIsoswe=G&Ur`0Ow=rzcmWCP3VXWGzgOJ6if(G z0e31smV+Lx@i_fDp50LW6Et@=4Po6XZD#wv*xX6((c|^!`KGVl%qWFW?^*01H$7A3|L$tqZz1EnF?f&rA^4 zGAcq6J*`A((=%V6&z(;2!=gtR90%`PhJS~MqNi4~nAWROP@+OVQpbcuuV0q0v3w?~ zRqVz6aTm?K$%ex+_YkvKEyy{#=Jjb>5Q53QV2Pz3?z`dQJ8LTpvOcK1foGZqS)SHF z4WZSa)Az}6a&so{n8J-!Zu=n-Bi5Ve2g;3q2xLdKW^JGKpz@G2h$kNV-`kwDG?g0y z2lm`0G}zwDZ4@cw(uMmSX0?!`f0 z)3_+n2eaSin9Coe-bI)jjXA#=7lxZSqwSoWv>y9dBqfV6O64rdD$M$j3h|RiYg)Ut zOK*%bpp+MzZCNNyYyRLe{&eXVZ5Bp?PbS)>;iC1j;7ulNaT9Th_Q)hjG<^45+3?z$ z#3~0QEPH6Ar#@SpV}5E}VEj<_RCz6pZ2ouiL+Jy-MC^^j$4~024E?w|`lET)pbit41`-no zDJojdzSGe>q;rCa_unbuX~D8o@-QPlki9v<#@dbc{sXl8LFjl9YbwPzUWqI6U7V>R zOI07sI60>I=yvd4-CRo@SSlCT<(2Yd9b_2bNjwr_;!!zv#pRIfBtc@ z4(@1I?j*Vl##f#EbwoImElN|YJdgdijm)WN73fgYU4)a~Sn->V%5__INe=u>pKfZO z4Qi;My<@W64YAzjg#+zQ?LHRlfbeg*Xs&DGFx>oQ*rCcEF;zrveBTRm)m+iU8=VU7 z%#1TWb6~;3&BfLXo>uS3RQtg_KLH@e2ihisC-o|~Ex(IysC8acyu6;y#k27GCrBQQ zVomcvb6pv zil~uS9dVC$(ZTIuiR&bvZ7q3E%jqjsVDQZ}(!$Sd%%D6~&FfRRxU+-+xa-iqHnIRB zrH+@)oyJhHMU2zY`{CO^K_GI*UQMM>hB@x206WaA5&zXsLEgvo?d|z!WtY!g1+)vX znRN5E)j+ecRE0Y#ipL<}YZu{Z^iW?S+ndX(AE)GO)J06zIjOoBMKi}qAW1!2JE?1_ z&la`kgQQ2KuCyD3ScVT$Il-a^ahHTPetF>OWhHpN`(yzmC73;g-gD+`FD2Ukk4QvuYP^3MX$f5!yM`E<3v(B4;EZ?@ zs`Oxu4fe3MlZK0?`)G|x3kl!}KCS#}oCPH3FRY6o}aA`n9T4VUD1#V2Sxy7I2kma*_ ze?$?Xby9hq$+*Q7R)ypsC+lpTP51UTReLqMufBRCP_9-!ohc>y+-r3(t(!O4t*@1B zXuLURrQkCjX4_En$T-WMN1zRCDtlj(5kz|XBdSoan+-Q}LrVmJ6$Bs27d4a4_M_l- zVM;BaZ)@SF*&?r6g7hBD<;x%0qKX_cMMfy%esFiRgp}@zk&7Pt;!B~90jV>t3AJvF zY{BzeshZH$uAiV-=M%5V9r?$C;lrYPDC>5$7BiP3k+8ER>6nV1i@F-(>T8C)C#3Qq zP7N6j2uS7W5WErD%FR4fMJKsx!8p_F6betUs6Pr+4wP+V03O@6Crv-og{r%Fws0%uM0FA&z2Aww8$ETL?JSd2sr$Y zlw!Yt$(A9A)cy^9svP+JlEZtk?IBv$8fcCFDh!<4){Fihvl&VdA#P^wkn^vkycrQrg z-jbhfxX~bC^neiqp=lv7H0U_aNa+$kRGRz29&e+rQ~TL&%KGHU@<*`5YfJ5n7C7=S zQlLf43Rjv&DDPRN;Ye7KGZ08bi0>k3s_)k=HsCHxqEx`)l8NH5WAdLdiVu|dWbKucX?QY|1r zv2na>?w7nqBHo&=IvqUKaB;64X13Yk&xmLOdjCBt9I$qAF8r7guWKm=^VSL?4+$?vh!5URjsc%7e!{_S_VEmYwvQyvAhg6iu{i z`o%aDuppZi*#IYXO7^iX^&@Nr{cicmv0q&lv9wF%(2P$%%h?C^hIdM?y)iJ?hOW9m zJBn73t3Fh_K0SmE2|gAA`Gsg6bAD3Ifq3#z_S(KY`NP!BvKE2(3vcNOaytn0&u(%*mvFY+WMu+ni_5#XGp%IqRbsu5hhl5OQsXbLi&a+HH86 zN&J#}g;EWslerY`o=NYza@Kp{3KS?4m}8E@@#aSpqWys(r{l25Vy)$K_O2fe9m zHe=fbzRm{^tb6_Bb_>17TCki>{>)n*MXtFx##$2Rq=UX@I7#XlqI>Unkoig(Erfd} zkA|>RG)*{~`3d@vl!`Pr*(vH{aB`!#_CqwlNpFg@ep&yL^-U*U8B33mkJ0U5FC?&3 zDzXp|K$buV-c?)=9w^DJNoA^1JLmuX+~WOBZyL)C6|L%RPm1};qr}7}Xi&`U_sUyi z;S_fmsnJsnv)R6{lHR{O+P3bJvKV*aFtW34AoD{XnBn!2P75}ai3Fo}G8+rAOZo|V zGJF|bC75C3^0_X;U&%l?@DXS$quulI(Zg^j)zoFGC+Fw^u*z}~0W1czY;ZU-%xy49 z#a;2Zwm=+qmK66$^DH`Nf>$ulO!=)DjC)3QofTG7+mi6^>1&zfVMvn~d-oGmIbWB$ z;&%Q;&9B)vz$qGBR+%#sDtC?xyQ{GD{?HqZo*T&F?tWNRl(M>JhPyJgwNa=Ur7(!$ zd;kHjHusqgXNP|RvIq6k{|RODqA0t)8#$r5E;9lqrhNaKNf<$1Ie^1GdV)r>PuYfq zyoAWp7_9=c9bevc`Xvx)pClVNrkAh(jwNe4pQBTto%fx^-WAjd((nXoDaqdw?kqgajuumb zY|5aYWXFiEIw>}IBF7R@hulcgB+q5PWX;W{kX&ff+Z&e&&&IV*YY*h(Z|I0Unv7Mj z1=G?rT|HLEI`J^9cryhp3{AEisM#h+#0qxPs9O64@x7#Fh^q~LoIVFR*wwE;L84c8 zUQReKSogfF+R8{pB;&5>gp50xed}+A+3@vOn6+F>WXAShPD^tB6uO}5JxT}=;?$^4 z?V;Q+oS1s@EO6yw(_2 z$AhcKLTF$YTrbap8C`a1(7aXL@P(LmW<;T;xrKC#x8G#T8ypPwYW|%aCe$NT^CrW3 zzw~BgI!pNKQh_6JI@8nZ(4luT&P=^V^9BB>MV=DL|b+2e&3HHQgx-!Qro_J(ZQ4e70?o|JX2N^FWs(LjMR#fFcHU5e#C{9{ z%g}s==^FY`eu8EJYe)e_qzC_#YdFa?gON;+?|h{B>-C?-4#1Fmo)U^&3`Y`f#@ysN zBxN0R6#RAWFB|;j2mfnhAw2&7?hZUh(cI!}p|TCPrFmnd+2obw%x_|nGtkGe7NEcX0xi2uGMxeI=pCdptiuTqrOLDJvM> zV+j^x-w?J|Z=VzVh#`kD)UDPfVt=@ZxHvaNXs~&voMtHg zT>79Z+CPsqu=dbcc;oYl3wCyWaG~Da0Yg#TTea@nvyeX))QiWVol9m!!0Ra~G@j35 z#ndp|d+uM6+wx0_`3yVr}bCy`sxjyiOJ z_-+FbCXYV^u>#j6xUg zp=rsmR^wmb#STvHaw5&w|k4rHNGORRyHP(0hx3fb=FHU3w=XgwP`$MLGls zozO!IHMH<$-*eu*_jlj@$36Gk-yP$g@ji?d24p?YT63X%{6+Y;&+Ej**GVZ!Nl8dZZ<14xQPSO{r=z_|OH0qh!9vf- z&PYqk%EQXe$#v`2EqWGSeqQc79Nf3K|Mn09;_KH*Nl2+lNvXLRXc@Tw%h%Np01YWY z3gJCMg4=*=Gz5e+1XrB^E&zal7~k8!b@)Fof@_3C#Menk$!?J2D?o1ot`QItUc>hv zF95!F0RDRb5e+fztw)O2>2%(Z+;*WC2};N%<#}4&#-KaA$1D2QHJI!MBNHZ#?jD|A-aft|A49{!KSe|) zCVfs$N&S+Ro|j)xSX5k6TK2uB7Fq|ZZ)j}q=HYa@WOQsCF)=xXTwFpeudJ@E zZ){@r4-SuxPq3$Ff0K&bG{av#ENiG_^T-Wf!LPYX6xd^U#;R_)R5%H}@*J%}X zNZz>6-4+QVrGJ``Tir&+BdWW{@YZ$s1|#p|MLx{mMEf6-{jUiY{J$mH-v#@JTu1-~ zApw5y2x$NcfODb9yI-&UUs-xN@9vGhyk$vaAErC~l)V1Lw&+nd6!L_aUg!T^v=LCQ zEim<_G%RWDG7_mCC+sY@0fm;H7H``y5B0cfSU)99Xx$2K7&_*D%pLzM=*!^cq2az*@nVJ_gv4L* zdjl*wpo*IOXJBraV*IphPMjQ=b;Ka9`B>f3RN|EHB);l!=L$excnbePwz6m0&!$@HzIP(MxxPOj@xn&jensY??sP241A;;R7H8aDb51UbDQr{Q8Plhwr1NKP-Z=)%0>bJKkoL;3P5MSn*a7X#Oi zI%y{)CA1g`5vG_{YIT7=1)WCBWOYmUy=rB(m~&7dZ(l8v)Y=<8urBt#=LK8xOLj%3 z#?)TQEM1RVfYkJf=a(vv?y&Pd3Uy2LOMJ!5xt#ssVhqVUN6`?ATA~hVR&)yBSZqw{ zGSNTvTF%N}rDWl2kh(t;my5noTFfCw&(}JIp%TaD?9b-Xg^TZ~JaeAry?=4j@T2B+ z5)SDRlls#uK=Ks;vhgwJfz8HQj>@p5f;YGW>D6WVDNr2D8j!d6I3hGT=1UgJRIg8H zkANMw<*|_HO3jSQ=$^Y9zL158Owa0j##sBfaLg-fb^Z+~2u?7+lj&ZNg~)o3J5Jq< zbQqY0D}je|jH;0ZXND|$s2=d%H(43C@+*K1_}wX!257|x=eTu0YYGXU+lUxEzE5qv)D0D^Cd90F^W0yD^p#lM<~6y}q5uv{YyHU+SU#D|O&Hc3ng z#0X6HPoAk;j5RA3_ZL@1EJC(R)>3WyE~^D`zcT%?Zw`)RskMBkAxXkwEm{_PTpi>s zCQIrWUyjna4+{9Ql?>yElEzTc=Z0@=zfSqcDA{yjqr$~Qpo4qAUSSO_%iVR~VGnJN1? zD3WoafGu2SKN~pAKlGrPStUJB1hJ5t#_PqwHX3W#j zXSTw3%t^GYT7auZISa3;TFPSl)cx{rKZqz>z9~PXE-ga_)OvAM&*hC+xihso&`qB9 zDkO+y9X4&)?t_>>pjqgF`o&-=0g<)q-3l(^8Fh~ZYU-Ka(}hV|L1}SrE3rV|D)kf% zmaYRO^?Ds82EIS7Z2$90_wW8&2O*{oqEl`h7wU{5ZghIXx?^?7wQMMX5@zQQIT92U zdf(qwIGNOcH_&4m#ym&@5mRq7o_Bq~frZQsY!fa_-&&ZQ5)N>YlU~;GIhNXsa{+1ZoeA|zeTN1Tx zd_Dzno<66~198QBrB3>9Q%&Q&Q&B`UUA9h(cc=K1fWP*;nM1AsvhCTeYx@whkt$)K zT0ixyr=we`uFoqUunctbBv^{|SS?Y9H}0fXIIx;n2i<<~RU|XkP@%o!fZ?zxx#UiH zKGH#_gZG{rYcH)%m|1LCEv)hKP+{_WLqlym?!ObDFKan)ISg-5$P}L@cTa5z%KryftTxxbv)@ttbp>t zqC}X}1zQ33-4aS$AioYRu##r5Nu444(9D;*Y0`_O3KuDDdNw3Ia}Xo3Fdw=l`{ZnS z;;gmUORP2pb{)5_ew^%aw`*W%3hB~D7}WJn;fFA3Um@Oe4_11I0VRI|?RZ;XapVf7 zJgVydnyuI?7vKXi$@?H_?zI>eSA{lltVed&6gxBq)YqBzktav0X@mW@W%u2pZTagS zCH*gmFm^Zp?7YK@r^AF85_%zK^VQhQ%*@odRCR78IfsRxsDv;YRp_&mu-MeXgvyD? z%TUWkb>QyQ9HhUYu`^IS8SZ5!TEQyJaYE6Lb($M;a+cUsl6?Y6Qmz2)F?&^vLugKJ zX_3L>pnSHAsgTU=X_(~6Y|~ubh1y=rxb5EREPukTr1) zP9k}7RwGu$)5sl}i-Fd6xTc!`}o}Hp6kp zkL^>+Pe`vtTk!*ysU{z%z)58VfD3F_0OB-A@#wCQ{FqJhP(OW+@ZB~5m)FpdJak=8 z=Q8lCi}r=&$Qz7u#FCnrpe9;-xT3X#EdBXyJ%VmaQnL3_%QQoQ@>+Wni}w)Cf)&D_ zGCD0dvi&xA5+!+oI$qbu?{jdddJwfz$z($hLG+EV`HLL^kkjU`9-1=z^4wiqjP=v9 zgc_N62U<#x2-sgI>s5H<@z#fBlbSz0yff!Uv%->~CkW(0X{rQo_|)bhlfI(!e|gyw7Rg-) z0PJTkFBs+`{M3WHb&HU)eb-qtJYHf1vKenVwm0Z36*zGruRcQ4IN_lb+< zCtmfNF7$-Xw|R2XOPm!?Rya{^x%yO}h7P{B6jb4rcKzVUGJOg+=3 z50jjI{*o$i@4ni3PcFmQu;$JQt|?G)WPZYJ6+&y5$Hjmx=-=Dz_U!j*dN0kp8la%_ zUVP&7{dj1g0hh!^d6A&m*~H}JcpWABFuaci z{GTjtt#|euW0pGJd%Tec!QMYogY8;Lp(gd=)ZU&w9nx<`Yd84q$WyP`OKkI(a0Wxy zbM3!5{?S1O3qNwU@-IS;?-$ekTuoRwANI4zjb$gljRZh^tZYi2aKmfEHo4n^Uk3f) z$!*&;koiM8eYw<}11$Vx9UQ|Ztgwaw?+#r7SYMmvm2Nd(0dl&o0PtrQc2hoA0EMV4 zKwvm_i1^q2?7qR%3(NCEh3=TY-wpWdmcKOim%;osU;b}*7b3g5qqQe6_49K-<%alY zH~R1ACJ!o^<$O7(0t%tJTPbTBQV{5_#>aG>UA&R%*yMzuHX_De?&B)arHP9$S%NEo z6_Hrz-a!W^2Zs7n>+Kk~XVqgyK(}s)%eAJw#3^K_4fxu9{n-l$*7XXo|IF8PVE)|e zlyizbp^sLbt|FnHqN4a#(7Ix=VYI(s-NX@BSZcav_>#&m{PNiM{#r4^Ht8ZMoWW@dOn!jh-Y zZffzmSF#=mKEv_JKg4`SwuS_NsUWtr#)FjkX3CffC6nu~Nk2LLJpENVo9JB?zF0Zl zzt+A>HDlg8@)BW3{^+OVg7wJ)m0fH#ych-k_2UqDwvDqjR-)G?_&-#xQ-5l{SL~g> zrcw`2UlJd2VmziHze|B05?Aa!dwo8^@3QBmma04M1oAgtijj1v`RU?8oP5?rSCgoE zpDy7i`9X#WZ@Sdo){1&Co=!7rJ{3S#&bRPZujemNL_RCu)Mrt$-+5C2#xE1GYy zDb0{o5v-J?QUB;gr*-^*A}_7aQB_g?yzs@@&r=9?xYhFXDCxiwQ?%1n&Bwrb3SL8K z^@F=({?W*-L>-;oR9t}d#l(f(ANLIreb)2)N9z)OR{;6%fk512f`9!GfSQuZA5G=^ z!w=B>t8mm4+P|KR`9Glzc0~DtAElNa93H1PR*Ncq`pvS-_V#`AylB95LS$A!m3C%paqr{D*C1|7vUa*Q3nMoA+nS`bu`UPnHZwjEwtJn;-sqG92~y5%_Pfjedsq3*BnO^4|OO!EleLED7!5 zxanl8%pQ(*exXE)4;_TEm~NT$#S4~7@1$-M{wR4K%gt0q&%9qiQ%Z5<#zncO>i3bG zq--_Ow4y)dKSSUt@QFdiX(t6Vj%-KIu#b}#8@eQ?u;>+8c_in0ysMv0`fil3K5IGk zq~fg%OKhO7XxqYJ{tFCOTN3&es#sYm$rHRsi^l8;y9k%s0x3LJKL9-zF*CRN+izzb7Lv+~q)WiFBAef|2lVj70R z3Z(q)P+o>JU&()E;gX~?`xaKk1;vcJ?VZQ*j#}O*AEcB$75zNEB0Q0l86E4(nY<}a zhw=L4uefMQ=I{;cZP8QO-J#QH`uU>?gN)Zl+4{H43+|Ot9x!tSTH!MsiH{P!Ui96( zNWj0PRQc&)AYq4o8(X`(1;&EGY~is8d#k$n6aOii7b@BCN9?Z;r7EVu>}~v==7t?^ z&k@I-jB2iq1;P4eiCs}r1Ps@L!uUxt=|)0JII}XL}rjjiKrW?56ha6GFrXQ+LgOm3EzODi+P8dk7i~n#F+}c7!r#n}VzDCs^wBKoz>&9M~NZEuzEqj^F6@3IdccB`mxW ziap{IY2Q?&xGrh!!xvv|9(B`vWuN*N6Awu&rFyP+`BTh;)avz#7}*pdo(7d*)pRDQ zQzPkMY7(BhhjxSxk(DJ5j3yRY^7$n*JwSWMFg2U_MZFuVP-^y#o{q+CMEpM3-ag$w zwGRZg6{`^meOvimN!gmu`NgHkeX~T3){qz5JXLuOU}`Mt*@Q+`rs4a>&@Kq_np|x) z@7LE-5m`@rzh;-2#toEDUp(1c_Vm@A1#*F!$3XpE_1{OU$Qra&A0z;F9>u2d1G1Ar z#?xnL+{@29Ri5;QViIw(_pWCZIZ&3J#ydn0BYhsK3A{v=5$QkRsv98~WFBNNQHZdh zh!+(qziYH|Q*+Qpy0ScVlJV`Un~5`l2Oyz3uCxgqGh8`JfyxfHZ?wrYP}9Mj{)V!) zhTNS$EIC0n+OL|BeYnJXup|9lE~t3MQcZAnjLSZlP2Jwn#0cJ+$M-(2*wI&Kl|)g= zxiPL2Brm7c?y@1kcNq)k$*JuEKK`Ig^9jiic)UPBl8it2%RP}7YvH1+&ADN^Uejge z>c|L0m!v=9QQ^FJmPigz?Xx2JI%opeTJ3XiU7(^P(dT|`@%iix>NGa#o4RREMJl=mS zHeFIClOSn~)SKF;ocAN~yq9>vh4J;)d3-Lj&9#m34uXFA{k?C69(k>_-ByY{PV;D& zUf=QnzLc{XdIg}wik*ta?d@JX*xh!*mV+0Wa08RzWv1ge8L-n)rd5?gRm;MqmL4`I z51TjVr(aWDT@Ov*_@Zi}^qQ1Fwdc2JZ`EdG3gi-O-klXkHPlRi0V?gi%)S8|mlbv@ zoMBRPOx>n6%To;u_*(MRSrrg;!~q<3pCvch8^~E~A?#4m1hM|4Fx>WL*F*)g3c`h! zx*}$Kco+~m`d*hlbWZ3o{KE0<#@)OR|BfPC-lg4NghtMlF2-Ti4k0(SXhG`c3frF2 zQ6I!>{Hs2BPa4%)Q~7%2E@_Z=O4qe4`H7Dfs`mps5PR*I&ehrCr(2k`C&=s&7nWX# zbzW==t`2x4kUoHqylmjYQyg^Wu%kMAW6~CJrS|+9kv@*LP0++KQ_&~G6)%h^uKKYy_J^4o1^xvOhXrfZi}-P9GVD*ntJ{3E<{T7A^e$>F`rR9Kv9m4kbbW*9bq4_ znJAMv6V6-sI02%WO(-P5t=NHX8lAF=z`TRKOVv!~hz55w+xE4A<@w)wpTI7KIV8t`F4L3$U|AK zM%+H*99je@uu+KeF(YQ~*DAzV#!TzK--hV*Bry?klVuPAb31N6xQ`2md*ZLYY~Y^feG(;w3E zrS|3CPt|AdZ_a{hO(&P_zuM5KPTbYkRQc8A`eaiXIAK@rxWD?hF}$Tbyt1#p<0WgV zG$Iyoe@z`jj7auJGLsH};pQ zWKj!DKi2NIqi6f|Rb2wz8F4DoL2lM9XdJb@^vRT|E-az2){U1=Q8r$k?xx;$qPPJI z2@zq)Tp52z?cG|8l_Lx>d|D~f(pu<7U!yu}qQ>}SpX(%I{hpvaI?!_24C=MBi$_r8 z93grl1t07--z!0GvYL070(p7WfWSC$#fjxU;os7+ZawT6i}!s?_iD9h*V8=^@XB@Y zBpolPVq=i<*G%&3>U`$m)fv&uax3x!x5z^v7lnPJ$EJnp%;w;2TXL83*@18#_JYLk zIh_WxFZ10ez*vP$XRlBBmKnpD^fo5?84;0bWJC6 zwo(_g-TA&Pa(h5JXh77&a?W-43NQ`ce{MR9f2o}~mxf>P&asT!jtJcj+qE1M z6OYK1s*O}tjqC4z`iPsIGqf6!YBcO&hy`QrAUW=A6t|2cO}$613rgeGR-arqa`xd2 zYl)0ZE{cM}h4(pk)2;xfSAaAW%*3&>z&oca&PO4FmcxkmxUXPR#e-wyQ?QRvKT()C z5zPUE8T%PxBJ@JRCm%bl6ssY>D&VI@Ay}GdaPU#r=a+x}U44Vsa)4fzZh?`zMR)|r z9k_N~3J#`qD692+G5ufBu~%_>q$Cw5Cdbw5uGj0YjX% zJWnsn;6sT=QJ9kNN?S*Nj&kP~LJe8(i6WY$?|I@HjRecVh;3YfD7X@aKk*8`0w_B4 zVm{N&dXsdDBZis}`ijkXUAha?CcA$CNO+Tw&{e#MPFDbPYFzNR*gYZZVIBWU(Scgx zVO?^dA2n8;du(p{=PUp8(qM^u(K(Vn&q#7*sb?l%aUvW`n%N?hqx+}mDKG3o*_)1R{T=jQJ*x)EE{wtj$r!!>dn2r+n zf7R39I@hyE1kV>;0dB~TGZo~VY{1)7A^}=Zr49beGrWV?*73!|`vNmA?%91M`m6F^ z+W7Bp8!@Y}1kc7^l}k65xRJCBC)1pZs8_=;Nku_uw<|z`T|caH5T{hS{`HUl*z0U3 zoP>UXl|P7y8z{>AK==1abN3%J#^fF#$02G&>-=zjQ3aWIn1s8O!0HY^Av-Q<;l)RR zG;s6*Wx{F-yQAPxLHhsBbqQ9uSY_WVS&|yt(P14?eJQIOiAK!@Ndwvh(+Ag-1HRdR z^MBqvA%7doD#v*KF1*sHU#_b>g`jP;D+~)Sk}E+#CnYV?;{>t#y)iL1=a1|kjQyxlT0#YVl-uZEvfz>`ZZ0k z9OYdY7T$MsF;rXwbDB7?EFJ%e$!OQvbbWRV(m(9oAudO&*=H~$aZscUT1fjHt~P3M zIHWczbo9F!jO@r}GyzpoSe}-HUQ0@HhhQW36&JvthP+wV7Oj05qSIean5J5sn-CkR zM@U8Oru24$slGTIQ@VAOmw8`5X~$^P3{;CJ{JMn?>LRi9QQ#6V+VPIYPpvDpDxSY(^13mlZBa}zHaBC+8XkEC62|r>B(NtN2rGU$o#7b_n4=q z=P|M`s|CpFc9h)qSDwcDdUQLBvS%}3%l*7iS+4Uh%}MkSw_)PtP63=-x7hM&?=c7D z6UPo|`n2Ub&O?@4afObFhZpm+g|Ty^OLM6uie(*6i|3D_WY{i@H+Dx~= zMQ1;MQ&_ACPRVh5LTAJV7XPy}YKpkyVc)Oi<(g!{{ov~={sYNN2OZ z8VW8sQDTEp#u)fyZJN;HMD3Tab?H)h`o=oe#O$KiiFTN|X$E->TA_t#=XtDz(YKLl zZE1xxj`0fJ?!@Fojx^n^5@!`p&N0ONgx3`Sz2T>DNi3mXtKlH5F)=us0i#{t2TTi;*q#gGc@_l+vZlJL&b?O@+HYPad|BS+>^b<6)7u~Yahsv z(IKcXnb8}dYW_T>pOp9XgZ0lQX0{guIZHi{RrKIhm4OBq=dmUhbC!wVtY4fo*oX%> z&JkV=acth|F=h)4efdbR>7})E)Q7g}ALec1YjBg9F&wx3nf=(RInS$>(Zf>Na`d@- zbQd9}{!IbZv?9@#L6=(sR;!bIZ?J<^YV-;)TH*1fsyM1&E0M3kRxoQ);T{Pf$q4sg z&nrSKLxE=6-1{BMe4M}j%SP%1EB@Hdj{Tl?f^0}%JOS*sLd(FG+l#+}=5bCt`(vZ& zb2*Sx;eDB=UCt@w=2=*pZSE$r0vYh#LKC6Wsr~$y(M=1bpFhs?lP1~O)%jypJivfn=wMY3;VK}pZzE^DU&e7I9({D!W7MUyQ!i2Vc~JAEs<0L)dnrU zp#?QFFGV)B!pp1(*BaI6VMuqQ>j?OL@JJDy>c1+4vcuc~(sI9z66ye~IIndXnb(i&RxdVe6(w zkLQ!Y#;j@tp8N#b3)k{_$6jm-9>Gw>^Ov6Y#a-14uKNI;M(N6nvr z)*bn~C2;*=22aS9`2Vnk;eVI`0Gd(e4OT=T?;vW`Db@0blpVJd-=?8sek|1n{@E6Z z@MOZ!TVZ06cgODE7Gij^03cC(Sr3IaJy$RHF4pr%cwWLRQ2OiJ;8SYudq=4^H@-H06TC0Q9yAt8BKvx^XjE*Q+EfIO ze*+pwrzXXTZl#h*q-LifHKn5Op`3hKh z-nf3MVwPhPwOA`2-nmiX?Pb`AsCw|&UZcMc@FUwl5Tm`oT1B_{z+?M{+G&K9le;OQ9l{l9qOo1B$&9 zQA%OIc0jBy^x88H@zdnBGi4*;R?t_1Z9fM&$hy2$!uUsbE^HUn`}Dp+b->HB##0** zT9ax=TJ;DrpR{gG@|#lEAe+SZKw2*!c^5=uuWFf1}YRYp0>i$X?w&D0N%Hr7ZCYuK+Efm7J1>OO;)U zGg8B=!f3k7FRn%wMp`bftlX~EAFsI7%=0Rv<4mHnU%?QYV0D~Bt(B`tl_l0yV`kdJ ztv}QBL_uOsj!J~Oeg!qW!__`V_#N@!oyPt1&Z=Y2RO8-S*9=7t=Rm97%#%v%mJ^1# z`BO3YLV}-?#PlKjf^d^k)MWUm-U7sCP&1YnQ`dylOf1W;=TmE|5Qt+5$XP1P34+&n z1r+_54}c7G&xlesi65N!uEAd{HIu)w$-e+&<}wORx@_LoA*$;3?y8P`e$|d=o`OX+ zFm?H$MXuO%rf84xbV{;BV5RXQtiBqXkc3BgaK7|dmj7wv^xJGdg;i<{<#Psx2) z0{Tu;9k-UfILh(CgYZW4in+Uch3P;;HHgt%&5S()#}&g@JBbI_=eRVme2$LwqR9kp zTO{wrsSPcUUwBk*vVtlm43M3hFp+kSC9Mo+T}7T-8ItH-eaBV}oaHJXM6)yyyzD0y zmRr1;q83nOX*zH6Gb?HO*LR-R3yYuQeVEI|!WU(BDIMgQq0M`drbW>!7s)W#!#mGz zPChM<%aAK~4bP|b!oRr1xBqXF->IB*F@huBAHBVvjEw4yCEjvzeOJHF4UJxNJh`#v zM$;ZDYn^!`FdWZ}q0~KiHtv1}*lKy#|NOgYg#YA9L%u@Q?dnzv%0_rB( z73jpKw*wd7yU%(GysLv})&2PXJi3yuVUaoRi}k^P6mykR7tOqP`&#GOZs_v~1MPK< zq7D}-&$-@r^S3+VTCbIwcLetbW$MkVpW)zp9d&hwmkNsm^EkR$#5xuV$^pooI8c?5MyXQ#al%ag%P(lWE8)OG_*=*Q zr7E#&Z4a^HOGx!z_rA&a>6?`G;`2>0z2_CA3ip=Xdc;fyP-@M4T*0!UdE0TF#}dc= zf_cJc8cF%!f}i(~v;+N9et{iiFyi|m!6S&Cly1EJZEk_*JL7?ZL&){v#1$X8w2ytuy4 zCX+-?+Yyhi0Fs|#QTwVHO};4k!<145wA1KCWJ)ToaT;?45FM&jV4QTwW&rtV?;n0z zNK_T-`u&TRjON$F14&{pDr%PA1^2Q!Zp=yep~7{orB7nyaxccsl$fS=;wwhzVuFHr zcoJO_0sQQSX&V@^*ziT*tV(}IJFC|xA>QC64?cs*u=B_J)&avjv>erKuQFec`Wp>x z`Z{%LI6ZqK9{$*qXYj*2wuq4@HVH<~ZH9L5*qz-*Vy*zxDbtt7`vK4Jk+ds7$hu!) zOMlBsg`q)GkBgH?c&yPE5$SA2B4@>;QU^BEa#OS__y#hq$OIRKt z{sZ^{s8%xkN6qMey8l`igXKT!iT?BbU&-nJYU(cq;&DTNnZ-ZPi@)a8e@=@3E@lBp zw*yr!*Vm`r3gZ*nS8da$r$|&=AkcdZziB5u_1Ug*Jgn$V&lf=TEakkeOpF3^{e%<*^1{Y5WwEZ|4Sb z%C+TlTe-bH{J}wf1rWf&;}sA+_4;g;R;u5_HvRf_2ap0!%boWJO1`CZ4=v}UN-+^EvdxVVtT@J!8BI@`;Ergj`o+n3JKO}lAW~m#(eh@vVOdd=9mRiF<`DIEI=a8 zJ~l2hp+RNL?}AYpp(9J++B>%Q7eAmB?vSz!YTq~g4nJzNEIBJ&!-1CrRQ^m!ife5_ zanXAJ8f|N3o)El{;s{Hk+#a8wL}eA)>bF;b_CwjiUs~n7F%1>k@RD6d;687b1MhrHC*n#770zVFJJk z?+}gAVw<^YbMqcLhMz11pCo%_&kZRT1iiYREm22YFf9eVl>^mwhS@n8ObJegYkMXu z#-b*2m)D}G(x{Lk3h+R=Wky`R2CX*Cyd#sF*r60-P>*^#+Y^w*-_dSZItH=o-2veLt*v3 zH(q?@rOwEU&Ro#vy5T+AV*-gu>Y&3G`IUIciKtcX?mX73Gn%&-cyRxTNKZF`bHgEn zkcqh`d=|WK1%=`8D38Z}TTJ37FSbE0?3=N})iE8!9+Eba>xv7p3UcdpY@*TKG9o{Of@69wMXX4nvjV%2(jheI80h2r5QP-j@F zA}Ef6Lh4Z+wPLoi+cwByWCN#$%R9nBtI>M;AbGYXkPu=Hcd|X<(pfGxn8I_ANo8uc z=<4%h!@!>GZ_v*F-CY31wu;5jq0gIe1H^mxQ~oP}UaBD(P15C1r)|lGaw){lmpcMl z`L0KU&RW@Vhn542j_I^z;mUGJN%3q|K&VSn59|hs?#pq=DJu|nntE@DN(LVexLAJ&z5%7Cw zV^A}>!xS6l#A1wf(`*O=LD=--EqiG0h#rd=M)o=H0#w@O`xjskx|~I5_{fTZTSE7az^+IzhLo)tiC` zbrJ91S2-$-b+|YuG&iGGC=_KeUFIoEb0lF>#j*TZ7xl@Lggme7#*ZY47CcEtng`|( zgL+z#qI2Ca>IY#n5!b=)DP_aao-1E2ebAbFc$5<(HHGPB^a+{$;!1s^%&(e0=WL^& zBvO;#_odi^cGb)wO&ASaFo=HzvM_QnH9P4Y{$$*VuV&<^U;b?M=F9kLvx3+U?6mr7 zJlXe9=EGFA?ur#gS=tmCx16(`*}VQkJDC$ypb8Hy4lG!GucfS~*jufD$q+BYqo}vY zd@vn*Fskmlrlvp!`AXm*LV89mOT**t5rNbSZfK&(_+TuN%(9q1sRd6hH^d*oLl7t& z9D;@<#~C+ZsDfc`QLi0ih)6Z&_F71nCKYwoYhqB7RNnK!o1b1wCps zHoIM=d0h=vdae1SM?77wHLetEs5DBu+sS$V9hjeQ!29~rQ?1^J4=V3J0MPpQkUBv# zA;S@(*iY0RZWAjhJNvCU%zNzD4~iNqZbx2F@TT$d7pZY4das5yT235>jN#d~#&pQ{pc2B9B5g^Yo2)E`#Gb-!{T-vb+t zQ(m^Epk72j_SQFw(B}9YN}0&K#v2s$LF#9-Pjk}w_%B#wnS!*0nBn)M~7^cEB7r8V!nOO&=FC58uyF)(7 z1L8D-UMmN0{%o#B5PuZOJtFu_vmOY2r93>Uiaqeb<@kWb5Mj0{em@DT@2rIa0A*h( z004U2NE~D#LsS#9dU&Cw)Z9`tTCvi5px?L4c?T5`H(t_1QcBPWGa7E~+4OiL&}$SN661N|%D-oec7rL8#=z$<`7 z=(HueCGP2{SU;1Anx*pi7L@N(Xgt!4H3u{&XT?r%JVl&#$6ryTXM#P#tQ?9i?w|*N( z_rZBn<*Df55s{0LG<63D({s#C4CO#+1rS-_a;j~%c>=ZrdaT`&WFA0G$WQ(pwEq*a zQz;0YFJ;cPxE5X;M?8mp9*}qPvL#XNj%hJ*gugBEQxr3i7emh13;w;i2$#nP77pp7 zEotAPH@z&JrWUxvVr7Yuq>{(m(U~Wv_#>?UWVrr=V`_Tw;UG(Np(p%t)9n2nIa~Ak zB(-|Fsmd;7Z~O;WEB$*P3ih2vdrT6~7f!;RiZO&7rY6Dj7EU6Y2!Z7NXQxqjj&#FU ze;rBvcuNAy{W~M^4{qx)e#9&%UQ4#PEyjjdnol~=Y)aQ9lp32xDYcFYHAfVDq9C>k zrd}Xf=_22QwPWmYoYhb!gKz5+Pxra*EBzkXQ-ARyYl28EYy-r_&K#fq5cC(+ma{+{QI);v7pl0Naq+`H54w;UNUfP8$H)l z`7ddjgoSa^;rQe$xkJK-!rPQ@)ydNktIXN!G*-7$Zsnc^zB;(6HlQqOf=4^W@IN0F zi}EwKG)~0(VKzrG`>GR*1qz|5N8K_mM+4VoDF0;(*Uo05v}$mJBiru-$6dURy;BtA zS5ErwT$hmXvYHuB|1(Q8d&$J^UlEN}t^Z;x|9{|ayZQD6zsD1bcD1AQ#@rhqm0gwV z)d}?G%F@?oVuA^{MYiA5ifT6RS>y=LX04_M_~n`*O)f+EMv)Iq2u8$dc}fBMR3dV~ zyuZ(|KRia>Jf5$PJ7&VK%1S59z7ikZvu>;+{OF{BKm(}agN%b#tw+ne(W&p2GY>Y5 zNBw0--bonDBUvNunY=84IcjP*P1SDQire!EQm5>C7CQLe#oX}^n({wU*yUlkCfsW` zR#?#EZ9{E%lZLv^XzHtoTkzn4=SDl@$^g)>7g=y2?NXj-#K%CE@31HXQ-P=q{;^>m zkte?@9m|gHqu}o@a~rxmWd4=AJDagk z;pYkp?1wn`j>knFWtg_S&^QpOEcimWlb6Q*jx_&6!zIwleD4VIsagDtv(Ur&jT@cp zaI!ITetF1==f0jTVMDjTt3UNS_04H)0;{TpSVG=AUBV)fRup&irDB!3;-09tBk6YS zJR|V-@#1btOo*!}Iz=MQ(M!)9i+}!_7J5eD8??Q~W9QyT#`Y^|!t~p-iNfvWlj7 zTluGS1H+&POo%nPd~fMd)iJ@{!f`PU1E4ziyGcO9aA<|U^_@<$q)_4vx10Id(A>)q z{LvCA+_b6>Tz*!C z{h2yn+#vI>QY4J9{A>FCUr84JId8@PkJ>QKYwlP|DJ`|f@$Au?1m?Qgb0EGYXnuRy zd*>zO*AK2QeyoRrrrOd5Fc>9`qrkNOe{u&IR#E;@8+$ORJFl3nA!uvrbXV z(e@Fl>y0dIxLY`_z;z|!M-b1V52^^j!F7b4KA@VPP|rS5@=;3du9OB7qt8|lvBPug zHjF?SVEvAj+pSI;TdmKfa$1hQCmxW_K^ipYO$_liB;-zQb4?8}%6PFQb`|kvIC6$~ zzmK1{SPH3PaZgToncN_?_sB$Gu$3BZf@|1Y{dHgoO|V}3)s(XQVj|Kgahd8Bi9pE4 zhK1q6JO|K3rOP}J!j;;hM zf5!-iRQbyRt3oa_JWtdgrq$mvesWzzk$KQn#!Yh?pF^ze3UJF3jE0?NXDRs~p#~$< zaj*qJi<6FYs{CTR;n~Vs)ZOpWAOX$|#yc+sO86okc)gDHAD1}sfmc@PLsxLH>g~^lzj0&;v30ICCg1Io z$U8}h~Z({b24`bd$tlbXL1#TiMW*Rthq$qP70G`5V|wGxg&ov4u(mti1H3-=`*Kes52)Gw_2GMgxvr%PQ#-Y2?O=6uc~_0G zd6;K=RY8Bygp;Q0qkgM7Z&a684(o-2O`-j(zTDZ3pB@|yO|in__W**<9pfU(?V6s; z9;KT2$0pNF+$uD02@GV1j$hEZ6&QI(fQOt|w{7MoIkfNIa`om7RwQA^2=`E0>JIzU6kFJP z!BUdI4o@rIuUPvqQN8dlu$A0+HiA#q_@1w7w#qk#VTIP;WPGa#@p#tuM~!{scud@J zOiRZ6gD4MD1*roDQr+vC58Y~`g9UsQKE=;%w%!~)%#zrKED5-IuMJKgOFj)Yx+r!T zFl2YF9cld=tZx~&fP)JkSo+Ki8%tB-pd}_VYE^bzlizz}ROl@o)Z@e-MXM#V+va@U ze`GTD;lG4tu3}Ygz!-K4nkr>zH`R=|OMVq5PVSg)85=1VH+g=my$p4uLc~Yv2ZJg$ z1b5St)&Z$mS~5GoKJ@>z_uWBFZC&5NhDcKcln!D81O%m5L7IpZl@=fv9ZJa(S3p!s|LG-bLBe#^Fl_6{5iw@+Ig6UWk5&tCnzEU zpo6Vo)%IChgIs!F35OjN>9K1zyO!5p?`i2g4+vGD+~9&lmF(ooX_$`%HOMT>7Tqit zRHQzCM!D9N?%}(ImH4)sgSecLZH~=G;(!f8u3f*701eiH&aNr7$(k8J#TT0TV`U2YHd>K-OtQuDMAC=Z;RiUN=W|AvL|=X z7a9)-t5EKD*l>;jN||EQOygPsE)85h{q@j|qavsFsblJbb62vX3Iik9D}6q%m4zg7 zk`r5V&Me@hYepr1f@b+pVd9GV47P*$NaZKG7OGD^CLo^I(l5vK#m>yf@wE6^@_pM5 zz1hUKHc^kI^j!2Vmy*`;sCd`1tNUK%}a$gIq|vp zH(>dGRpAUf-Bq-BIs|#qCb)r_f03hkl^*K4Q#cEWQ2dtAT(z`U-^7pf6<64#IOJ*x zqAzta#Z|`_*anwB3u)}H9nf3e0dKNWy`!lPfL#1pD!BCw4AJiGlq~*g+YPKY5L(_i@>StHKIg7ehbuvXrSsH4Vag+ZB77-tMaw zzo|+;6&134HQvmd`5j}ba+o11FoZoM8?x*I*Mb1#R`4`Hz9!5jV2>xZJ?CG2kB*oR zkUW`05qx?q0C7b{X{C@rqX*bWX8sd~f6(*_#$kcmG-61eIU^AqDI6%8Duq7EdjPAp z%FEiqSIwq5g*Ap>@*&VEQ$m2%q0wT`b=3^ zdgp~pWPvzwW#d_a(~diVYFUL&#*6+nQ#T7ObeINGt+E+9{Wkf$Z7Q|yn3@9g>vh|$ zL#$diMM*OJP!L7tNc|%an~Hw!gSFVw=OP5ZVDpR!E)jkMtRqU_tNO^39Ze)^jwMC5 zu#gY&fN(F}g*owMLyb;L&oxFi-A(!VDi0NS40jWH3xyXV{vzk^(E25EW{D_Knk=KQ zz1l42`1Z%4lJxoo>tkKoEsoU`qk4qo@&+P^XBgbScZf+! zegnt_>u-Yrd4ivyI@N)BbkafAch_~;WHUmkX`a^<_5UXnM=uhRyUeM2EwdfRDa&TeAyRwRIl^vMnC!S(G9)ke)h%Vm< zi?i`e?pZWwAUi~VAE=jPbVhT#I8Lavn;cYK@ylKja&3=4V^F(k-4*1(%L3bs5lybc zZ+*#hf-YOL-bj9bcnQL^q{`6H1TYwCB;7B12Cl13JPOkxQUbuI>g;P+F&^INn87Fw zifZg!Jk(;~hfn6DxHgX?QYm&(oG2-BYSWyTcYYM*|G;GN5f)LclnoVl<{PW8&u2Qa z{h1m${V>xEDJvmv?-V&M#2nV*H$y*hPup)Jl)rXH#UC#3itZ5w7ODo!dG9*v~46O6cy32^3-C_GnE9a}R{5!xVY@{=%;a zu$@?F@b_vH{=3d0o!O6(>5Vmk1M<~<88mIb>nAAq)LgJHX+^({yDQ?_55Wecik&f7 z@8eQ?8JmLD^_F>@OKo#As^)FR_V%p!${Wp#$nMF9?7kNVLL~THCC4lA^F+1%8RKmi z=0RsN!)91 zT0h7l#!7=z^V^Dzs=+_Fm~=kpgT_@NrM;wHk36QCkqt&8WkUS#jM(8~^<#r;cfGX7l?B@* zesBu9gF-WSP-~w#oB4|W+V>us0tJgtpk3lGspKYhc1Yw#^InrgYJ^R}t-KfnKD=8y zL9-Z^$%*D3jgsjF^MDx*>kqPF#=|dL+k~PYv-b47XD246?j5vX0@90#fop$##8*5M zT+EqxV`Qrv)eL4hp_)>D(_Bhi^!BnVeEskuiXXlj3(gU*+oOP9b(A2YnGKMq_VgE{;Dnsx%mIX}HKDk=0^Gme5|L z|E6j;L!C*gY9Q|P2Y)YB_c0kcTw9=f;BTgDI}F;j?L}pqZ$G>;vYCnw`>tzA>Qoq% zkcwawjdIuq&7&L_@n=FX@DSw?9O25T{QY%Vv+(@IaP^)}PJQvakDrLZLR!WrGcdd~TfnT##U&uejz z8SdEhdxtT#rwjL9uTfFYodSPk8U2?B{1>;~xJgM*pvjO{c=RdTIeD@<6}{W$k~bq$ zP8O;8TImM#^MRIMzkb}r*dN1xw1y%?UYUMAlW4;B+)_Oc3THZz=O3Z&vrDHY`w)umzIhEQ%Qg3I>AW@1(VQ2oOV)Xg>KgEY zp1$P^&&2z145<>Ext^JA?dr{Cr=*q23_`v=(YH zAsKxWavHV1u!DD!J)7y0IMo#3#ZtaOms8SR=?sef&1(Z<4gU)+&-qH8re-YLi~=6W ztW&I=!FzH;W)mvZm`Z@f-)Y*lm5}c8za~$5yN0`Xsh!Bp4X@32Oxr{KkxsC3p7VIl zoNL4?tBmZ3g3RW+90dLZB{PEeHi43g-??%B5_jKW&g_)5`Dz7(ZSYv`0dKA_&*fwoIS_dic=k$v*m2Vw34iS7vDP6Hoh)jj5y*u!BI0LFaqM$uAZy`Fg;L9TIs{mPV6Vm3IpY*+keG*kW4 z4d1=P+#>afSps?HXgk71Yq#vP$5Y&q7TsrIy*J}78PPGRTk-PiaA>RXx)f`NcbaJ0 zW^-lGz#*?Y0Zdt!Df`YR`|0{Ds#~b);(mLK;+R_X@~R5sZzkoO@~uiLL9cdX>lw$ku=Vas zc%`pLc3qE|7D;$s$6cVLy_gW+c`kml zdj+Mx`PNPGIJDk!_mAiOncvw{;+Wry?zE61%4>WYza0F|18oq9Ikhw5MR*dkDzR<< ztVXj-fZO-@k30HYM;t7UM%=ZZ;c#715SAgh@QcYFr?Pq7zTMNg@CHp0h;{XyW}To$_8V%AUd)hs#`H#%NXIV^%hqpN2@#rWV6Z5<+C<;%>`Dh_+GiUWB#+%ME=_R=+Y;No6Tmp>|-4kM;gwRsH)% zFCgHTw+m|Bda`v}cxSwA#4BKGoeae;84c;VOHL(KcwgQ-X>XxvMA(PAlFmD1RrlAU z!zuUEu@Vjk&N++JKSIXVtCzL$_vekt%QpM|2^h5^CxQmjal~|_uKuaKyM4T{MA`f) zJ<<0YLmQTgAyp_+U(kD5KO(~rMjpp?LBF?r5^-7is*#ECa2v;gH{mk&dyHhB;U4NI z=%eZ2^hggpsy8Dton#<4Yg0?6(2iHwEV-2OB$a47J_)-`EYPh|aOgS@BH!~2qldCY zSF%3OmS|GcT0p-emrZs^j!(NHcXgFf@-436@8@H-KZyLwj<}mtuR->R^ZncW0;9=y zsfvktkaDLTY1EkPC*~T7lhU5+aQV`kS5b&l9e_pdQ|$ssLFIjqs&X5V$6Z8{x+m78 zOi!uzeC2gO1$|>*tE5en2nP&{P#~j|BSTXsC_9w7;I0$!vjQU{3Lm{JBod!+gRL(} zUMAVf^{$7br0=bQcuy^i@HuD!TjFP1X!57(fTuWtSi_eS6E{$p0^8kZb58+?*MB)? zhg;O-EqbdClFT!@w~5Hz(9W3^INL?;(!oHPt*2BINeq&!H(%x2BS`}3soDZ^cj>}k zQ^4F+uc~2n#uPk|e-STpGEL{^BIKel4N_A!2B}JzT%^Z|8=qiZ!9fS?GQQAX2_q3p ztLa}E5~j?yraZ}(x)TvT#fFpHeQ6b{eW`IdH;#VYMW21`ow0Bz=d_oWJCmj0gO%Pe zN#ir&%HWZ=G@Hm>_sFMx$7;ktAwW4<3?lc8sp)#{Tt?ydI*Mcm{5-0ToY0u(lwq*G zB!UhweS0Muk;0=qi-U3oj*I9?!b8{N33s^qx#2PZ*ImKN^t@)d#Y+V z+B;6}qsG^-8xT`tje#P3CB7T_fN%&1h}~%0>bqeLjmeg-3)dW)U}am>b8;%tq`R(7 zx(26EPfDNM0_x~KQR!O)Q?iB0SnOfcoNkqmgVU8{<3{t%eUst>Q0HWu&qN`-z)KaG z_dKWp*ye;oKVDiBLx3;saVbhP9@LNa9we47PTRe1$=pX=HB6jKOm1YgvmE-jGe-X( zC$I5)2B_>rV$4X3g#$7?RGE^;*?m9UY&_NrG%iQSgnxS-A=q&4*ha_YC0jvIm!)6NAlUtsZIDeQTew_asdqz=gCRag5t- z)9>Rl_Zm}O;h1_!v)7$f`mz_^{iOpBCwupR=_#>>-`ZUY2q7%N`I{(3S(l?rmgp_j z9Ba}(4S&=!QNnrFdcw1nI2+Yr%8!7$f%hSWu0@+F$NChIu#!(nNyP&<(!~}?NeqS z9m4=+9h`+q6&zNn+ zt8WRtoBoGb&Bkv{+Xcjnl)HQPutm$J*<6Got}yWntM|)36e~PUkXC-7b5u==OZhPx zesR)jDTiq_m*Bc8@gz;(OxG>~)0YPuqrLoco$lh9P8JtbUP5fI@z%TXi{`lj=28z# z+ApMC;eY03SW_)I;44Yh#XN+PSlJhwhAUp&u^X&M53JIf@6vES)!$sD&rB;B@i+GH z7iuvEMd|Zvm4KH{;U}U>3fMyUKI+DcIvN>rt*gU)-gE z@58G6OYk#=-q?;Y_DVp zth@uqH3aBg?hEBj8mhdmw+ zR$zRY6*gb{0{U)6Qf64LgXzpwlkxNN=jVnTi$kD*ysOGd`C9*P}~xEBqT2)yCu}U z2RYi}8ufL?9g6nc08=a`4ui&tIS+hu%}qYprU|K(nB9W{2Q zPh(q5$=Z!+u;u|P({qL&(jVxTA=d{!fAw$#{`W)S)wThPe+QcW)4%Cv z)VT3q{p$e0FA%ZNBi1K2cqoJDUIPj#ZGklB0MabO>@$GyN1VOVIApzO$r9!!F4KW) z#;0;R4G!8zyCppn#Y@ZXbX{2ueIXq<+)veX6Sg)r!ytoT^|hrI`sW$GiwJ_2yyLu1 z(xWY9#vW7LbD>q{&a&6BA3eK#nWw&Z$Y5e}_1cmePlCc4Rc?VO)|{E7O6gA0#t(nf zQO3fBXqTf_@uj|^@9a?b7`T*KFs5E9jXu)=;tomoSXtj+#m{6zOC9$TUVOe>2;C02 z9H(1bSL#t*^o?F@)0Wv7V6o^wQAHor7DE^_Lk!@A+9K9#EbvYD8%f~=mD*8`PiD7y zQtk(ZqcwkIT+PEd{*u4{d(KYzZ)k@s5D!^b0{H)9Dr%edsozt#&cy_?=D`|g(oHr< z*`S9{(Y6(4RfHF}xaNUkFso^r2!s*Qe+a~2gxycjobR%6$Ne~Vd(Bwo6EQn$R1+L0 z05cqz9UcN8XXgSi6~tztyFWq0h_xRGntQ|EHzBXO_m0)@f4@^yPgR=L2X|L-yJ>vY yZo!lmXe1_don%qthFBHwR%}{c&BJJ_|ET63q;bMAz{j!au%=iHL|vDM(34NJwvy-z1};y+ub$bBl(Cj**?2j)9GV zhK7ZQg^h#r_U+qr%)I=(TzA;HZgc%Xgn)>cn3RN+ijwo%l^%Fo%N-%c4 zlaPQLaE+RPkecAC1HcIY5D?*K`^SX;?+?K>!s|rDB&1|F$ng(U-vV4CASAqopFf@f z{L_K>{{ya56Vcoje?UyD_kx7mjZPvsE}N9+VR26v#YzOw{K*0Yll;LK!8IRzBc#4gbX%O5=7Ao` z3pZMBiC|K?hjH2Etz5RDM{a_yh?H!=`R`d&D-(eSz{mzk=LcMvj#CAB+6%)8vqIkR;I{Z zk~Rggs1}CW@Zw#OO#jd1tgeJQj42GgoSe|~+F!m($KBK-c_r)7EmC>&RmL}xXdf2| z65rS&Gh*I&u);Cs%(yy$;T34ChV9`*G6zumT@yHYRIy*_g=U$yeCi-sXm!Q@^WcjR z14>Qil{X5;8Q4dd-eoaj?BgrI+n^!PX#S|RrfuSCjH-aqDoQnYw19pjfNXTf8As#b zQ*)xL>gBcOd&uipCNpgzx<)7xJgO`-s1*2B6n^n&OTqjOQuKo;!j566>I#4`Dg3^t z{WKX%`!a986H#`S>jPvA5^@Y8N_ZUFJ~3gOVA(NAla}ja7ze(NTow_$AqI3rrW zf>q2W&hEF>J@i`a5{R&WIV=;Q8~rITUapjmyoMJ*UEj0L8-*hKt^`EtuLAgE8^yYxX=n z?vVDoUBnVk$%d@FkI9<&^D!PvgKt|1Y9^1JE}*4fYA)_qz3J(B)636l^NNcqorB=G zHL+xO-h8c8c61$<80#}C9nE7_>y*K1P&xKReQLz)X+>d;WQajrI(2um8~9cbuPGGL z=9jVl&P#_!cS4w*L0dNc@h}d>19|kkow@rp3p$G;!(0>1*lALd)HZ@cJWdwh$WEH! zzfQOs+B2JU&Njvp9=b$&1+a}|cVyKD?S2q7mW6V7Xs_KG-rG|D`E()OZXy3Edd&(P zS-WAMm}fU%R&Q~xGTLco!9h1%9ZT)l5cKIhtoYfhWv?*iX~KJ!>otBh<3Kvh#Y5D3 zZ~@vtHmM=8Mf~*-%R8c3ax>BKl=6cT_eo-edR@e-qMw0LL+^?MXkV0JA~>mLv#Pfl zU)Lmkdr6V>cGUtfEk{s~EMPMVb-sQD0N}U+b68EIOS9QNGEI8A$=m7=+vRI8vn`hv z%+!K#k2_R%5G8P-EKLlgYeuDHQJa%yi=`{&b;-?FyPbW-Mu!q1)-TOhx#C*oH_cOD zRe#-fZJLoOvHPyZ>g-dM!Dp!K`Zyufio#d+?GgNXfb4ME&!ltQ_d+%L4u%lqj+;`K z6tR}8Oi#yRz#=+5v-1i-`lY@CgI>N6`YhFGN;5=bz6pplc#e+ZQWlS=YH_Uca6875 zMqj2T9AH7&_Bj#pZT}Tdjk+ODN0u#<*6a%ss9%x<8M_qRT`YTN97K(lAEP+(F*-11$_gp2NYZyzEF;Nm8Q-MSGnntK z4v7%R6=(Gxt!3WLOkBE)gfl`_yJg*=-?Y81m!xo!tQz7N-YF66BH&7sjpDbp2>C}R zT6|k7(RLkK>^cq}F0Ye*eX{w;p5%~;D~5r;EIAE)Ia>9R!3r%8u|R8=1s6=kW1pyg zDCxb!lsyD9R*to}uraPN4#hBl=%K*wg0@PNCe)nDtM`Gwo0V2oK4Z_l%AiG~i6$Ao z8F=OR&ZMVCN3foNrNvl#c!+c?FwYAYTh8v*67r@ebR<^hVHHqT(b?b)v!E~*hlX&9 zfu;&A!Jhj+fr>PwyHU>%CmIR`HlJ^MgjQgbQOKwDRSlJ>5jEx92PAxF zfZ*1ila-0xg3tg-+hWI==9W)cuP5m84wYiL2MfLlbbRByFBB93Si_1hg2|!MrD^Sc z;HjX=+QCa~Jn?LL;ECLppTT;Y3Oj^}ijf_tFcsU&sN!__%eiZQ*3aK)myV#P6*bu^ zv%oRd1SEb>t24G@TAIyBgF^>jXP>R5yuWzsu2*b0j%>1O9taw*Vk+et{c7SIo5HPR zPke3P=%z+F|73|*l`aVovIr+P!#oAwFyBZ*Z;akG6?r2UfIr4x?}_|8tIQ-(y3q~^ zg;UIG>hLv5gpbIldOh=yS#<}<1z!BP&t}JF$6R_4Av;D1R>cG^?o(`mzS;ZnddpI| zh*)&6Kl;1f2QLliO~m4@+Ol@6%w2K^bjt|)*^y4&^%wh=EC%HDmgb7EqcVW52+#iJLdZy5ZV0Bd^bIFQ_qAl{r{smZd_~EzNcFTfER}vsQBMk~^Xw8@|uRiM@LTct@hn@&Gl$DxE$j$eI!!1E1 z`;QR*(S(1t!#_6RAH(<`oDMl}c>jwX-T(Vsm3jmVw5GdNg|-1rgmsos4U3_Zlc<+7 z9D;aE5n4TPLIaUTW!bvO+yE zBUB{q0ix2r^wZhz)^3GaWUPNtnGY6-u-7q4u-eCvmuC=HLtI(U0D{ zuY|fuczoDA1_JgMxA$3RvDOVuzoq;Y;k3*yPm(MRPjGP6-3Xyy0bXcRCBmiodyam7bC{%)dG=!K!0)uy>%4~t;XO=)Zj;S!K4AJF zar;yQ74FF<0&9-&gV*A^AI~7`IN#17uOQ)w|IJ3rUB3?{`3h5xK~)UMXcx0TIKYpfcb{ zkTAx>6!Q)ky!*PEcPu;A-prII>fsaf+UM{1Iq!CJCO*eXVmkRFkEff&mqkRRn%zZK zANhx98t;ovteSXqfmBDD8e5ZZnFWoTHII+=-n_NoD8?J(`t6IR7XL`{tk%vb%oP|m z>z^A4R)dOWp(DFgBr%b9LKl@ep9bDFPwU^XeHjO&?UY7vgg z3N9(5$e|7NTx!a>eB6=w+&VahQ2c~`49kb9=Indms0{pg~sJ5T$=1p)BU<+KmapP#O^9>WwY+y7< z2AcH)zMF3gR+!{^#Iz{hFXuJn3SBQ1f2?v`GWnu^zWJQvSj`vFF%;nk zX`hwjW-ZkIDRI%s)|DwEMC@G*QP|76E6f(h=mOc3J?G$3Ai=mk`R0D9GPm z5C;|U@$M;dKG3rYP~kJ(LXcJi*`RKE`IWWaGN)Wwf`-fji_~#F8@|_#)1eTgaR-E9 z^I#g|-&$jqR7uOs7bmL$p)+B9K*2Bkbbpy$jyTJhqirK^IO~xfSbig`O6+~9P2DgA z%aLrw<)D;iBHYhimC|Z#B&;sK;qSd|w1}BTf~YXdv-dF{mLf$|?)F`Ct|f^!Syb_9 zs5|ab;C%Az@h;yOM>1S>gGHzdCl+8h*}@48eOx|Lyu)AH__qIUee`rVE2rqB-snXA zr9XZL^iv3O(wSp8MuysDDH+HhvPv;j^ZZWH_3UI8{;8k#N@a?70?E{%+yVCJp$MsZ zu>hh)wM-#_P=t;*?q!iRpDyvksqML}y@;(A8muAYy{pyq7K6B{W76Z&WtxC`-Ev zBAA2@Ak$tGtG{i2cR{DfFDG8{9zJg6S$FNY*-XLM2o<^Q7G_LY;8MMmzxKT7beo_m z>t()?ct|0u_ku<6DTuvNKVvLlyg$A&IYD_Z;tXkl=|^j{8Q1u52%wb1lG41j)l(qi z$qoCI_aQI8To{*vp{J@pFs_;MDOndP+McOWoPpCVJJtxLAkULnamAKrML8`2!+5b8 zq3LAJ)zvzH(FALRDL*W| zFVgf~e)|AtFw*!Vt)`%1SdA{6&NvbK6jLS}Ds9e5xuKvrEV~$R+cJW{L?p5Qt)8Q~2S=lia6Hj#yAVbFr%1={a!g~V87x#u(ruYS zpY=n@b6X>ATO*J9kSJmLHOF`m} zcZ;xqx^bS`%xRaPA^rr{Fy2@RvA&;2+)blP;7F{$-J-k{m;j?J?ciL>i?4gtzkbyC zrcGe3{`Jkvox_oIpZH`DhCn1|^4V6z;X0;vsR|Q^&jT`7jKQn0Xvo@o1!mT`0d>-xuU4>y;?c~fXyv`(+F$)auzky8=!xN76%kCFic%~=q=@W= zu;)5GXf4>{Y5`L#H^rdw5lrZ&OMys_HOJs^z zm?8F`M)hBd$|#Jmxn4sYgy#S8)v2`2EcYVop&nQf3OflwbJROs#yTvnw4jxSYUV{g z7vH?6CCrq>)Lp7@AU+uTE=UTRPxbx>MzI^mUNu^fY4}FEbX8n2u+4pk`Kboi>5#OR z<&@5}%sB^I&9|WA3J_6)yLKUyVr_j{P--Q*QF8DwC*jRN%u^77h6RTj{%~Yc;e)C# z_icCMNNQ?E_6F&9-AjS8ZjEfaidrY%pRP(P&sr zG%oINkp9y;x|B*A(~6ets`_PGl4KUoj_>t?qoQ6M0H;ZC2CNIUnX0h2j@OB*=cs4ZMJM z>tX7F!BVW2tdGq>)LX*nt!u*uB|moG3HPP2pVDr4Sdl}PGF01u>`K6|Ta%GKL1HC$ zGSzrP_WC+(4(9z%a|93d{H@v&s%80_O9PA4==A?cMgsm1ZUp_%D?saS=yq$e+4V`z zS8>y};m(b3-NhbixQ%g^KA7D_D#1rx;%yI6Vn3gJ$!k7(1%h4~`G<^T&fMD2d!s;jOVOCRnW| zv`?^-TEUd`uZkxsBTP!_Pxf_X6n?BA3pP`m^Rp5zrWISuq%myC9T{1uF*Cc9`YXVL z3$-NKON5wEW|Ot|4o>>WE(+I+H((6#lU?|$i|e>od!MJABG3hGYUs)Es;pgSUDaiC za@(+K(oy#(KLc8mW5{hnTbY56S6o`?171uV)deUnQ@v-Ih$H0$kP5x!E3_1RCvjXh!Lw$; zBn=jL5%l`f3F+*kHjY(8mw|^pJoAtNuW!FTvSThL28i=({%Dx1#2Qb&6CO@p8 zArW3-)h7>oRLI+xXP7@oVB`rq{+1_|`TD(YT2Iq;9+_x1@lvUF^H4%mPAQ z*w1FC&BtgUM*!DkHR%0Gi!{n8`$fV0cddNJr<*CCQ0I23LHWzuK?oidHl|`5LSAYO_6-g(-CaUr|x7kZ~;})zmswI07@vZ^(u3Elit)a$2ySY*F_B_wM z*5_2Jn--kyRBu~&P{tjsSAbhv$qlb3YHw-NhKvZ^48JcPro3%jVtxkf=^L7! z9SE``L@`|fI(H^o=3}cbGm-mVh_%ukf4n|zT&m)z4JMt_3~;@cCix-*LrMI1vlizM zt>rhZULdJL74o{HsiLq1rQJDOgKMTdX|4~~_wU(~Fz@AQ%B$2BH^M@!gwgzwwNM-?VE2^3#1>YR5mqU+rCc-O5^pgXhYA=J5uK*Nk`7o#Ssmq*x zR@{Da;*gbiqc@D@T(S#>7t&jD@P#*`GB5-t>GR~ZbU*en=2;&0esyh%=+m@9(}HB8 zw*1w*lh&dd%o`d{GMk0oHed|V@61P*Q2XyyxJ-V z4uCwyM{r`Z)WMGrlQKIWTLcSU$pnP+To`YK_FHK9f1_twc1qsM_9 zr#d0zPPSnaTUzuVC0^`l(Xl? zA$Ynt3u9t7HN-i++kIL6_~Z%@hNBv5qFod?qA>DzC{1$U6?^@wH(bfRk80Bb)&_iw z<3>?MRI?kKG>;a9td0GQbl{C@jV$u0r?Uo}mT;mi8r;izV$Xaaz_G)!aNvQ*`Mb*i zFl^^&-j@Cf;M8L{b`LjJE2q*E-b~esAXCy>+K=+Fl4x!owHaMaT2qT*=9LJ(vs+ID z*dLMt2k@f#CcB|nU-rFJsm`W|#f}lJb!S6ebs6U&&V}O5jZJXQJ`&4fuFvysWtW}DLR52Bk z!Y!BWYYgXfx5DtosVx;xc=`m{pWuzy_l-`!SZe|;Wle*2RllXN=TGj+E*K4_1qHlp za3)*=c3g4{A~jK`9g3t%iqLM4pQdx)xB41M^)*f{0-fS9z`XAKpkZSL=kyW}NI_cN z+iqrCi!au(RzQUr?6_}JN^}V*d4SVQPmP|BLl*6{#F2*-v6}2?VIAYH9xwSyUFBZM zmEgcz;tDcR= z??>IP0KSFRUO9UP#iu*=0qW>S91@qQd}#XSMstzT&W1bk0{!=lnD->8q_Zy+1k2jO zZFR}PzqF2*guopL3X1O5xJ9a){WtFb#cYya-+#%w@T=1xJt1MV*$VS)asJuQ77|?h zctLgM`mTgd!+1)8_K@U9SAY;alH|bnBxB4FO1zA@rBd?f z3UC1B!L>PD0dm6pNJ3j^pb6~=e57jY@1NgW&@b{Ul1)O>_L|PD`wap_rh^SeYgq$x zpad23MC=UJh;)ClNf?~DB`RL&;(;62Vdv9oi3B$_l%l`8lpWcn1=!r9nqm1p?|eW| zc_`~S8<&owKLU0PRb+*!@LgCbW&O~O$?}KvUjbrYws>Ji?Kra0IC8R-B%wG5a{4X8 z=WPCmmR;qj*yYj^YsPSw0GN~4Qk}_lS{KvDlxc53SxihsJ;-XE^lt~JuYFdF2Bvui zvHa^-fOc8Tg?B(~wHbaxt=-ulb@sag>?}s8Fj)N1OB&1TJwD?p2?Qe_Wp`&Vik-Q)5v|hXDTiYo;zIvI*6ANk#A34jf zGQYb=Y#m)wIw61kxr{$&o_8iU#u?q+nF=~Fey{Z6%fj?o2w2Qz=(DH1xvPKX@eEcM z1A-v;E4Pefzv@iv8rygz^4VIf2wBI4rc;k9Q@IG9F7bE5X<5m|7@#MEIw}L9>c1tM zBK%ysI_9SKeu1RZ85?pgt^i<(RkVjMb-;bpTEUXobVPsqd2|C0mc|Y7UyX$&76F>xsm!QQ*{#mLa$**6ZU-hhh;vA`tobbUPH-LeX+mLOKRuxhj zIER(AOz#jtKxs!D+U<^a;FL8cQ;z7$CcAO{frHQ2XD-@dd@@UG| zs6V(5G_#AwQDV|`F^PCrA0BetFT`5o`MG3aX;rh3(S3>Sp4^5;$rDbYJpN&))46)b zLXE~tDz~yEB^Z7T%e*VV~PA=;o5W^i)sUS-VlAB*+#%^_PVvOJk2u+z7l!Sjgtt0oVW*S zbh-rpRh!9z0BSIKd7si^!>r@=NhR`=oac)kTjlp9sduFVnMP~6-9m`f@S@(HF0iL;_j94czSp6TRRo;gH|B)@(^Hz#U0a?*TgjBW_zd~Cym!KnDrkXAV6aS-n;rXNQG zEI$(=3{2kfKV1D7ghNkqq#GCOsj-Uc`ZfM5h~dA38UFeG@36xEBmD3`fBOSd{p?Oc zUx=3X`pcy5QX+s#gb};ofFPFT!f$E4S0D;U>InXet1~VVjs&}0UHXzqha=OU9lJ~d_0pygon={E~7cx z3J${ldFCJa{2!znCf+SvwDTG_Yg%;ULc*yU6GnfO^!4d}V$Ti7qr^1-=dH*yzJ&h! zvmQx?*dES_H=O^;XERAEzKq5H9-l#8^{=25jdQWasI}^4OR7gT!@{_6kA=>xmtY(x)I+^m-`Pl1HYQktGV!`<;F`3P_*AF+wZVP+8%}+DszVVz(UpDz_>(+w^GU zK9z0^4*}jp_99Cq-%!R(p5fpzsR$fXSjEvLaOmMl9NNVPZ5J)gt|Lu{!o@jUFW(%Q z;WfS|KU12^#DDJ^#YM^?m9zl(ZW_<*`#UKtg1nWYm199DPaUIyb$uxFf zIcAG->g2`8aA~pcl2G&ZaTeeyrvxkf&47N-Z(<@Vq@*-FFF^g5OI`j*m3OG3)>95P zmg?ilw>#K-5O#ebIWgOYkKF4i?724l{Lx>02A)Wpoq*#nUF0`WrrsK62*BSp zLGmFCs_qI<>WnS)3pvCoi2}FNV1j_mx_N7yst?%k3h+)eGl}HhS>dQN+GRXE`2}@axo~CW^iy99djqmstZ<4eUh% zGz#YFn?Ch7ewgHJVV*0XxdkAB^qVsH1tr_%HD^t8{TLBza&WW##-#hG;(k6zlu;;l zes88u$s-1%^2xE5w*FU~s7%fo5Fjll1#XF(KD?|qAw7zdFO1Ic18M)~JW z*Y0lxI`uT^)wVapMtZ`@YfoIlYi9frowlDx2DSKSdAKY{d*57}>Sj_oE<=;6qGG~O z+a1)Hpo#XU&6!;?7t%%VJIcwDX_!7O)yo~qBn(Q<#5&Hg#n0d~Ojm&Zr%3Gu?eh)4 zzKlL5PojSaY>`{<*h! zgQok3^Lg$6Vt66yUS`UpC;^HV94SLgg*6RB(M_yqRt?l?q>?Jt z`=e%Gc9Ff#cyld?#7(55>w_M)^|IG&GnkSum}Db7rLRlPtQTgMJh~SaKLT^)B#22_ z(_`wonF~*5WTTaA(IjeUstBwiRrt{^feloIXlq`}Lo&)`?lXZpW0^erfg5mbf72xk z*ui%mBnv~yZm2EoM=*G+0CXT`W73vE{?S@H&hg4Ja;0~I#96vo6XlMD$&Lnvo(EW> zhOoD1l0Vo~jNjG~U2-lHwyia&51al$pg(m5=x*e|8k1S0_B(F{aO<$@qQbL^=DLfO z=TdFwCzB33TxHdy+yT*(`!wR23WV>L#i%fis+haWWf)DP<$h4o+L*(P?Et3PU&k+ zdj@M!aq{yJDh0=xWYS`CPY^e-z+z0+?)gMz;egb=+0B!}!$Ey@PC?P}rTat2h2DN7 zF-oS(1B{lFp5)FPqiUmk;e_-fk0H77+`*r2zP5VMZq0G|BO4{w;ZOB$fo6nJtFE!C z+9_|`)7;rqgrcoy$3UrYO5nlDHIN)qo^Cu1Jh8tw(&gVJgKI_{Dl<$juZNdbl>qe_ z{L=4PZh@!u$+8WceBA#g z(wv!vwLj9n@bX7Mh?=iaF2c1*nP3S-@BWe!0u2=DE&2_pz-50`xD;`b^T zZLT_5tuaa&SK?p{vz8s!_%=ftG)#))ZD)&7NGIGjIe~KoaJts$x1^NLnl0>^l;)NH zQdb+aCNkLzN*4e^?bwi?P+9F)07g^Hx!5f$sOizh`p9}sy|1)kQ>uALu5X37OQ~Di z3MFQ()Fc3iwooC&c;)qf4Qm)aj;%&$tak)_!*)4O&xbFDhV>RzG@J#Al=b}@fP3TM zA)v$GyGQ$xDh$oPrAw@~6fb%0OL>~A;k5_r>MnH7*AJemOQy%TO_X84%ajSr(MExM zp7X{UV@vNX0%HxU4|wCb-PQzpiQL^Ln$|nOHv_bm$#C36HJZeE9!_2bQt_p;2{ajf zu38rBY{+!)60vZV>y5+MXQGupi>#bCH0a9`m@FTg_pZg2*H^B6A`AXq>Jg(OunmWd zVvpFWoJFqyWoI1S_`>#IAc)^Y;bUc&p0QT|ReI$IUbsBib}sCk=?mHRV5yRMp?yCR zQ!NyyG;`m)=$f@5he0`RQ;yJ^_ojrqj-QAxJSyOJkt4o3<*B0z3Il7`QFj*6^nKx# z_>i-hUSlrw6Zj_2shZ>5&o}18c(<%9E`>8v$&|C*JW?_3_k!pX75`){QkTBOXK z?gE?%I($aqpT9D?b@OVkx7;J5~ord*w3pd=U)?rgAm&D`b4Necym$AnvWy6s-9)l{+|+!|Wf5P^ z_a%E(@Eoa#myq*T$TD4=jdA}i*=!5D@A?`q%+21t_0oZ~;Y4abcRPG{JPkMZxP7y* zoX$j+e(3rmrc>4-=AJ^o`Ih|yZBS>Kq#QUATmm0D!dEgvRJ}@_RLCcmswS#aytbX1 zMb~zp{O+XfR&IFb+F~X!)i-yIjL0v2%*br$gJ<~?g|*2<^brSlqVt|`)B6cUQ@*HP z#&|>37v8&y(-o9{W65S5)ksT6@@5aUP zUI79V;hf1mISY5u+!(bMZk1wVkfkc*L^B+Cw?t{5f8Y5~34t8ktw*{DuHvefBQIc# z+YPVEFSDGNHWyf(#BV~_hrWs68Ei1rJBo@X|Z6 zeGHjC8K<(onGlq<%iLijy~`Cq4XyK5MeMid0Fxs_%k7l4nr7OrxS5nsyg9nRI9I!t ze#m&l2zsrK)?~KqmSOhStdb|;OJ!IpNuwu zgL>$XDRJh_wxzvZtD*R=83CX%X_@H z!km0?r`mgB))NaWi(}cuOL8ev3Lhr^@9?Vrm%XwtO?dx{JobDI(O2+I42Wz);_7P; z@OCVE0=OdUbqu~FaH=TY9^jZbfho^uu5^(_1vhSgbn>I8mp>Gj_8445A>KJxhfg?H zQ7EwM^h;W4II;ZdY(a|>?|BRiUsd@f zZ~AN4QufcY{tF8llMW{@`UYP`Y{LIM_FpEV(g>=gH1d!#{*MM5KAs8u>|U9Y(*VJ! z;{jglYsf<|?oRAqI;EpK?TP6F^rNsgS-UF$P?j_G3V@dSYcJ3{>lIt^ntf>+j=B+e zc2xZ`7h#270Sm)4lYBuAQvG1 zAXv8lYwvvb9})ehis&Q@jj!`x0W81bquwwd!$e57>FgZuf=z`4+c)=nRAm6864zzH z!iu#I4kq}BdhK6q;gsABVYc_%v)ivp_O6xW@VXVdeS4%AX2=Ba zyJ7Yp-!c7LFKQ#F-hBS$6<~LiSJGF!YxP>#v)@Rih>;9=1Ml}~<>Pu5kdvVBEeujgY<1ir9*R4dt6!t{=t}DQ6$E?G1#AzEWjPp;l#sx_v6a|H%aZ}^K z^<(({TRdI{_$N|@29!452F9%aHYYmRpC}o8W9!-ZRw{d8ZGbmV6IXy1TCBjIX{mhI zm5-bLdk*OW^}l%VROHkl{xs>oP&?1N|BnRz{~!U`JjdFKE%Dho?X}z#wr@n5*G~vX z8Xm8u^F6hwVDZ7%^S-?JcR60@=`LxxY;cufCYdO=!Y_j5_cRBhy%Jy9haTu*NYqhM zR>In`R9JDe>^o_u?6{nkapyHnMxmx*+T*bkGofxJWi)HI z*o#Yb{RVfNaMWw&OOJ6IlX${N2!?C5>K&0eDo7Lo@G#9&C2kYnR~-d`ti6dzm` zlE5F1l$j!Y3Hl5QO<*r8Lw;7aT=2AaF5J3qGh@NX9kfooAk^1!R|i9c5v} z$F?J$m$FYrbJ1)ct-9%wS@R(YFU~UR_!YzNFS!zV`SI;0w`Z|AqO71kPePnI+jD$v zM)T?+;*sAE#`<<-l3w&$#9HV--A=gzSnam%+g|$575x5W90uh<2I88L6pCu&>akL0 zIkm}`nYCnmX<@=NU@0PZKU=vW`O<_XpC~0?B$T+iaK_$yhRNY}XG5PThnmtYa(ePX z`E~p?82aHYyjOhtUrN^xeDN2z7&(sz;E5nzD_D0}_oWA9^*-&SP_flK%(4H5g%+FJ za{^ZSK?An*K&Qe|Sv)57BvA0&AS=r2KMz=a`dfX8zH2%3THC+D8?2aypIm zM%U99pNDEE{V`H)`6k#AA0TA)$6jC&NR62?;Q9d)cLk8eO!DPHPum*C=MziQzV!-$ zi=>O1bB8?~Z(!oX0?)G!Oxry4-XJ$iRba&*byYfv5A3>wF43^1AV^bG%Ag=#C<&}#Q34uUQv-d-k3%0QYA+&RC09^mIG z`&&7qcv7P7Rp75j58&R{$_CyL?}50h*U(1s6%Ms}+YDEL7fqF^$ADU27W+8E$fD4& z8>}B6@bfUWeqa6SG#$hNTWL3+J;zlm!2WHVuYXcCr^Jx}kEKBOy_rd!F)NKm_4w)B znk0d}hnM>z^ACG8Tyx_F{aAA0v`x2+?gDGrUnHrA@%zh9FvLB$BYs<_5%=t1-EEPe zCm*TilDx?HdKdRMytzzvaj-XxN>iwLadJ~gEg$Z>_PU&4iO)vVjF_)m$N0ZWb3g(q z7t9w1*jLH}!>Ou4>;uIU2gP#yzo>g6cA7Zu^C)?JjgQ!X1I9L6{$`Y??cJG-V|z3U zT_?UaNhI}eS?`Wnbk)th}r|tr#;H~CxW`e8WjcD zqCN5o$p3h89a#iU@cvt3V5_&z-|R+JHIBZlgR(l&-oFv)H~X*u!VA%~?4LH)@Sn&@ zQ_%Sf!unbk8}IztZmIlfiL!HIZ9!+obBs3sNdh^JK3;aj?~YCVhNg(9($(PW$YyWD zwi#IWW!a@SJ|X&$e%?4aG9qduq9#0U3Lj}81^y`Dp<`oH!{K%>mKtGHj*|^u1M{<; zX<7?B{C)Q*Mrgcx+)B3;E*fS{n3ITgvS9vfVXas>emQ!u zJ_;D)nZ@9Ez8@^@%q>01rMb^FHUXOJiJ;SB<&swhDcw9$difR0JMO8>-!aiy~>HYU4Iyad${s#`;8(;{aWfFt`^>JEuH(iF(?wI_}PjblkA%V#;Q&R7&L^4 zWc;Fjkf-CZ=1Wt9UcJq4&&&yRy+5dEGzMelYa0A7|~=j0E|cJ+$qV=&@js+@Aq|9{ftafMhFRs&7IZ6m>@HojPheq zlN}EEn73QMF-Cn`7dr86BkZgoO=~01*0|M!j`Ykz3FU?xDR&kplQ(g&N&SiVhJAdA zDf#&Kb_>gbB?5c*w-}@}zo8-Nw^YKD)%igXUo7urIEHE&_?{aDdw&GG3Q}@izYL;qQ->z#E60 z82yH@?$!=e_3C{5_C&3_rRn^m{Z-KeiQ-wp=Vca@U%WaEEgcPN27=)E%LTbFGtXh* z?7Upeq4}^1Eyn0rN_&WUVSXmXMYPnVv*}*px`@cH6y5GO1WJcP_bsmg3hFRCMp6>Z=Q`s!iCf$ilDtrFlVynZ#W`q7Zdb~-K9<&#o zx+)&w8$aE@mN|IFz766Y_2i`7gaqdIUM4IP7Ai&TEDw~H!Ap`B4Oen z;lMESG?^pY_q*wx?9~OwTT{H^_xi%)Rip8)ElxgXe`%st2~IsNT6`b<$gLz3&z860 zjV#GkWSR4LY*7H;Bt`eTV@tjO#lUZ-4tkr(NeyEZ%9Woi$Y@vjxsDb+Pq`~5`d7~s zaWX<`{1D)PISM}KXB-+}`~nHOVYYo90HO1+wYn>BKmU~3T~6spxl6&bG^8Fugb9M& z#5|qUZcG|6FHaHW7#vZwkIZb;m(~mZIVj}Lbfj-bV)ktWkH$yZ4^-)9KpYW9HdGYXp3?qi%RXMk=t1NCXu$w4IUT zHcMDuMq<-}s!+e@=l8;4hUx3%b%387zZ8y38QW@48m#J<%Bbwm7ZR5HNmo(@xcxz5 z`Xk(=zV1|g#4<7~(I1}6Z<;FbjYrocF3BHjS>pzWtLIfObSy$@B$^UPIc(RT&p}`P zBns}?w!{r@UV4Go7Zw8XsZg-T6+jFuiko&Sc3^CH<~ZS3k};T>ol?4-Va3I`&%TI^ zVms`7zJ*g9-oeVuEJS+Qm9{18n!%?!7`4CE`mB)p`x*w%wxi(UYyk?8lu?_Oew~f zx4nfP!-eSa_pT}=f4|DAg6x}lZDN3!+s^n3*j9I;#y5w9ElG!Ruz9clwW9vl72o5f zmB~fj33hbwsc@a8<~y(68KNoEUI^~qOqO-)Xy=M+rye7W&2wA0)>MgFF*|*Ce73t= z9jLHWS|+yUngxka{nYTXJL+;oGE68qIN0>S$%=LuCyuEBQO}u~OU>98^46M=^FjmB z*Zh)@D{M7#By{uI>SFLS*>m%w4F*I%cH{~WdTDW#-$G~_@>9#8@e-OL0r~iQ2_TMEGvLLxri%_ZfR1GKwlUNM`#j z`Zx=M&%g#B=U!w&r=3ED!OBE5|9@-mJ;R!6*KOe-O{FOU(m_E%5Rfi4SZE@>ccn-T zp?8RYp!6o7RO!9<8bFFj@4bcILk|$*H(mSt_R{yPckQ*WeZF&D`|S4z7rB$n%$X<8 ze9E}T824G1HwF4dkY1N~6*>)&EG5mR1UgV zE%z&W8&lEu$D+upX$mE}u)7!EQqE9D_gbT`%M4GAy{)~lL$6%+ zX1q;4ww{H%f8`O|w2qubtRy~YA%-RK2JEK6gN6JAuX~;}1y*r4b=GZlEd>T<^d4zJ ziioy>-B5o@+;5;_5` zf`;04D>lvh{Q$Akhf9)aGy`;#e{)*O?<9sx=7>Y*(Q8!?!;}xK#F8E*__>s=vY;>b~5@(6LoT zE*5`q)`{1%gx$KWUZrjeNqHV{?+x42sBbML#Kc%s9X!1Hy<}09Et_sqaY$!*2F+nl zNmE2FZ1GOOu5QBC28RpB`8RL#DX}H<=A~#~*`u~{^qt!};X$NJZDmb?hzHbe75kP6 zX$g!4!JG~UiTgg0ExqnBWV+eMmlg*zE@Nv+>pwswo=>cxZWN9CS1xo&Eqb$cC6~RD zud3zh?@-s0KJK3rJ&*3VTaVH_DfV+tAqFzE&R$7=UiI6xvw;LZK>72XdS07H@odTP zame$=S$O`s?NtBQn#y9DDO8Y`IwFXJQ=eleJ(zHFb5l=z?_=ntKypkE0Pf@N9d#EI zcY#BbcS%TQ-AlW6iQG~$-YO`onr~T2M?kE8HI6#S{pI2 z<8{sUkvth{ydI=s=npTh$;Y^y&8@{+z^+$*@YGJV!Z7al#BU5DJX{x|T8uOT(^+r7 z-|D&-hL~|zJp%jdWck4$R%S~(3Sh#iS^g27m)vLaU40#&bsg@z7d>)YSFjpk&1@k_MCs5RJ-!3}}qtPwgD4 z@@7DZU~U**EAqQczf7&NxPRD?!oEklWV5<)TvQa~GJE<1B!V#lZUw+(1GvG+ao5nU zda!W;jJnt_kPApr&!+ST=uUlc9-#Ck(2ud3YGyB-SvGba66+WMr~Vt8t~1!xMP~HQ zs3+|ywf=||B-e`PML#wcX?<5|0@K?`N|qwmydm@R5$dAM0+`91Jj58Wlp}k+b$Ye> zf+zbk^>MU?5SG0HF^?4c#Cox^N@cu#9aX~{dW=XDT=WA^gb#HPr*QqPU zrYH(=w{!UuTJH6{rUb{3C72i`__QcTJ*p3NNah_r=DO91=yi}AbYdtIkH$+Pw4ahC ztB$(X7V`XID)P(HJt_N%Z+MMqz!q??*yYeF?tlQ3;#b>AKoE}7E!|`=ir!v&^2jT_ zTLk-TVS6?NpuY??05;PCrO>59I+h{mT`MR-Pc(b;cO$d9I#wDc--*Zg#g^xs`S<(_ z+%wMOC4=if82ic!GJIw-GokFmBP{MWa9d}MVb6ER2>t*)3SO}|_XajlOg*oM`1z69 ztqFEnGa0eGx|Ks$wP-wbYVLK28-7|?qm5syeCCviel*x{%Oib0Nnu!{DoA#2w2ksY z=`~xAROf7sZAO*WG9mS8(CUsT!D2AYHycQSsWOyT@0rcGgIEI(slu{PV#oW3GOZzI zAxaBpXK|Xq`Uy~%#UbuxKvtmr=)S0i{tk+6Gla;cu55HWwRp|gYn7#!!@WC&XP|9j zA7=gUuH9~CL@k|6xiH-IJth$Yt1qQp)5U<_36=mZWK#Rj9pm!D zkcutVhJ0PEG0JE=NKQJ)WH}k%y;P@$g%c`*VgCV&1ZL9}uR;{~&@2pCa=P#4=D1#L z3usEn*=5eODT4$bTqU~Op=a$(xo*$<)>1A>U{5<*Yvc>`mSs4FpOba;W~_y|+&7*( zG8%J&5$M|4s4okIQFdEL8l1j%c7VM@UTL;K?g?Fn;OT}oy<{Yq(LjlNo^zLPYXxsuf0Do1;=$H2i`!lngU@FiA@+|zF-FIen- zAbyI5V4mMIiG!lRs{kxY_;B|KpodP8CtVhd#c@A<_LYasQDoYe#noj*PP0qO`Z>MXHO3^mm;7jX8z zKZ1Tj7EMzq#risiDxm$Q&2)va&{?0oqD{;?>`zX@*Hq82LTvD!>Cdl&4^vOy^4*?K zQ~%N*(Eat-!{)~Uq#9gO0Y5v1UI2URCFybF2_Z$H(IcTsk$kIsh=A0Y7^0E#z6o1brc z;6L~_sPFRIvzS(3QNK0|-`n~D3T4m_f3+e+&0h5Tv%g&VR_Qiv_CIS-;8OkmrQh{W zzwIETgYpapF!_pJ{q6Jv1GXWd;x4-?df7-7OJxak^FR?uD5mcG(wXJH_Nh`-=>y4s% zPpK-Ex)gd_akN1&8{v_T;A!piaMB0|J(y`LVZ8B`63;)sY!CWLj5zskOmp@mK;<98 zH&1FAznfx=+hf084K}UeW%GAl`}mbM{Nr&uyAPl&JAEgrpM@HK=4B}7yGlvwQq69k zS6FKoeNaldHdaUdicC|i*cC31JgHALKP}PgvMcO^>`alXRIhy=9^_+iRI#LUs5N|G`N^!R=Ev z=}Qp9R;4HQ)l+JA-F#trcV8{stO)254OzbK1v$h{{o^3`cM4YS=HJx~Ial0+tgNhj zMK4@eI_1}C7?R}FZMZ0?1aM|N4ue48a)6U|hO7ogGC2$x?9Ijx(BUHV2go}P&2}f3 z@Q@h4Tz%!$PsaZME_8bqjPc|E%&CFf%%5Sh4u(eQ0(v}Pu(@6-2~x-O4gpbR? z3!qgbWCLT6Km79C5Sg#0glqWM!GAT_f6z&AZfZ|Gy;!Ua5WpNT;${CL-&sQ|E`f<$ z0T^qkEk16-sMaV_Fq%2x0~OP1B^u@`KLzqVoG}m?gP=-+BEC z7x(a(JN4s`^s*R-03Qwp3(d}#w5QmKE}^H>uX`#g#QMO?!t=F1=yP9);wHxH#(KP|O2MZ`y>;+jRm785@y$(_QKP zC(tV1wDOm_EcQgRJQ9>Gn~IFdtovp`N6`0U4z6)ZB~hoUwZm(TC7)BRK7H)KPPA3H z23k1m*BdE>tYMsqDlt{HM}v=Xl4D{3ldPNOa}S23^1sY^74_6hF(1r|n=XVr!apiz zi2bTLBL2Vt#c4>tHT5Rxiv_zK4&vyVjoywibC2{MXx8^?2fmF%;|2H!sOx_4DhcK@ zxJQ^Fp-@e1>)dd^M2zFov37LMQwnL5VwyXrzeTS{tv^s!4=w-hnH%P+6+?r~*-3~rr_ml$Uz-8do(T#aZ zm3eyns6o{WkBc`m+A*C8)u??;pR-w&-3#HI>hZXJSq$7ZGu^@&x(h{z>jMMjzZ2Ge z1#i@D8*XZ1>VB$;f|9?~{Q#-JkB7jQgi1KaDNrk@TUyCtV_QTR0NiW1h9)E_@cqHEY#O_3Jei)zD-`P z?dj&YF5LH8g&oe*xw!``2P0CO$rh13*B)*Y(?V!(?vQI(9h_}ojJBX##b@NOe=;pm|z3o|x-Qt@b_GeTrV z(lD>uaR1O4po4~Eg54|sq3Hp=^!~xsB2T6-x-aVyaeCF#hDsU|l5V|~O{I(TA<0BY z`rIZf$Ze%qdEu4wZU`%`l*d9YeJ4|;7nfI-MO}unWbVev_+UF@EPqX)$)anmEy7SGXJV4`;tm-7oG4)@7h<5ot)K z@b$={kb3V~s~0f!WHHQcn9<#+aR^3?^4`)6*Qy;jIy+|l{;@u4l-iX2RK}i%8?eP~ z9_Aa&t195Tc%8%NEn9z}+4~@IXFg=7-x`rMw*xPXhi?MKXspgh!9(-By-inU^yHB> z&&1lIISRK2Bpb_=@gAj5M{CVp+sAvqsK|hpt=zv~Xq72{KmFv>(B>1WC>|;wy~|xn zTOK#^Z5{8=SsMZ!<8s401&j~%+9B85GQ(BUy6cQdPg$u`}QiGdx@I4 zSzj{^q#bjr7Dq?%a9-Icr8DTcYf5IB*NF!cMy#L9Cnu1F)(#Ef25KF3UB{CbC`##t zE$3QY+K6nX9PbPM0AUZD#mSc-#Q=|C@~%bwCuZ>4cp)d&sO9d!N1r(}(4k3RDQT}a zk5}r7N$Z8T#~Zgpa+>O^`|3yOA+jZ|?9{k2i`bwm1ca}+$&a1j?>t$|?C9FF1Nai$ z(xQ9AWD3$Xq%p`l_9TrDlW!plhGu#N0~~Xi>mlRBC(6;>ecQFuhqQ1pHEGECcgq%&SN@ zuO{ovik0!@)i9ac^M(Kd%+)WI$YTHPmqezEjhqwH-`>3YYDVp5BY_)-?JI%Jl#Kga zJxV_Y4n9QVgWbSj6vGNC<^JT8#jDEjku2>9w;%}_Kz;Sl#kkme zbk?$Zj)(#~nG;IL2_*Rbg(GARk7saiia6 zdNJlb1WKE1w$ z2q43Q{o8)@kNeaALd@e7PPATkJeK5?ukDql&tvCcIcJ<5$Jp6>5Si@f7pc5SPd31> zc+&!Nr?F%{Z)1{T`~iE%H!pp3)0Icd9xWJ8ctY)*Kf|x3<6SDB_TmZ9x;@At22%GWPyG zS||;rDWlKwr0jw&s$S;qAsw#QU2nBc<&5%yNhBfedFpT6Og?3~@67d9oP29(VQO^dQ>vJt z|8vKpzl$t^opJFofV}E60ZNB z@&hEg3r12a0-Bv)gSQ;Y>fZDC=tF=l+H3(v#f$$MfGQ=`FFY9z`<8xyurhwiYkrTe z{B`30>zf(`jLG2%4CmXhBi+%w43i7>(b6EHr_Wa=lLZtP*~29I=PucH{&ALElVz!x z3f6i%Yoj`45)Qp^P9+cP7wHCSaLguUKb{^AFQjMQk3%zIIFU_0mkB2+I~y6neTP+U zG*=RLrd-TiayFihX4KVto)W=%3(`tSLPVKabR7_(j4y{iQSf?EEHN^Yb?h}*VZrpABg0yC0~jjt%-0z+-4MQwe5rz$o{3Vbc8^<{ z@r#6t)};13-}8s#O}iFfJY^>mupx{qdnm5DW+BDAK)XL4FQ*RM(hoRt##GE~uom&Q z8v^?L#bW#v(q|r!{AWyO8XHzlRJWRJC9IS2JxzS3sxtRA10WUC@-Ozdy)5?*=Eyzlb*9vgF*W51`ku&RG?#k`eEE=U<-UHfRgW*$7^ppE6xg>Xpk4sVBG`+UC!{3?KjrL(>l8cYGt7BBJR$Sxdt zvna*e<2Lh{@n}QCrV_&0*?-}jX=Qcd>OCx&#FHIEA#+H>;{OfIy%Yp;nO^t-N_JsD z5wZMKocL%(yh8=581$DpEMBH?>}e zNy?qkNz{|HaH8$K*2VDn=Y_8gz2&(4(+hvm-!4u$!k>F24{meUpUbt;k~hU&hVq#z z(AZ;`~kK{>4j}!syr)oI+zKS_F?n==8M?TlaG%T=<`UT%I;6 z`fFWSsYANOIVQ;^cWSM_+;>wjo|cyG8}UjDBW+lv`@u=SLTUVk5?~EFgv<5t@Y_u$ z<&koF&?%o|jT_oG_k#!TYr<{N67Nwf6D+7PriIJ)aa#SloCqO)9tb z(MP{D@yhZQTVXX>L^zS`;>kWCz{6yaQf$oOn0YhnHr?}idOWPr{L0>M9pU$GA)9UK zZd01wp0gqBUzKXg=~*AFt)VrKk58E4_w8=s0Pdep@P*0}cP63u6VBoqc4W1l2vco5@#2mGEN7Lj{A-+&C1` z-3T!brbe8pasw&c4r1|VDGAAsd*7hJ`{8I7gIoF@7a|v6$DwD-XLHcm$9+5b;~P%_ zK^ng1{~{p##nkoBnY4qF4*RHhZiWxko8#L%Y2`L5XNRh9R&4xe8ilf=T}tS1$vfMZ zoT8hDTt94NavCRW?-;#V>zyOx+;$kDk15TtGE*C=^kA}DP7=1mTfD!=%SI!HCwwtl zXRkR7MKP@UdvRUDbZE#l1(MlR)2!m7waGEvb+IE-%w3=3Kn`Jo6xg&Fe&STb>F`d& zGv;`6v%x3|(_40c{E2G115A6Nq7;pR7cB|rvBxEJ2*8nkTtOU=kgWrD-MEQwE3G`y ze!dy!4&mgM{A9%VRwyvm!KR(p};q8jBU6`XomH^=Uj zvUBU@D_Ix9y!Hcu!|*S(SF99eM|O^r=*QJ62=CNNY|_4dUy8PPTv60qFG;5M_E!}A zf5T&}l^-D5hr4S?v4B)7EB+pLjclUh*4Bhi&wZ)|#LA;Lj*8s(+Nr^9;UVJJpx5}O zLW@GoY8z?}m_zRnrkjg=bci{p4LYS}4X+#C-aD*>OT^}{7%$&(Sm;MdHaKN&Qp?uv zt78fux*Hef%QC<3q0~xzF!hAFZeOQ)Zc=`6f&-!hlw0#% zeEMF3j3Gs&wiDN9NvPNwS^Um%{%T9^v#fpxw$0n&UR+aDTKP>px3525YEo=;PK#q`)OvgQ?Ljggh>DJV%ksgIRU?3)L`08@ z&m&L?9~#{hej8?JH-qQaXX{{aii~QN z7hH6Xu`z3mze_LUJ#EdgqBR+)q$IN75P9gxl|VmR#gpTbiov5W0pazWip;jru3dH@nFD^>t=kje!){;576fW+{O?nQm*5!u3?4z z>mo_E*ovE?GVM?7=)sPZ#1hS&botLZ6jNthzmIF{YY;KCy0|O!vMpU)gEB%w1MkWt zNrYDK3N+@QzUl@WY>In?fsGQH2eX1${VJB~J6S(K zv5^2!SvPxB$W;Uf((7P=)g@dqqm5eYh`n`nMcA~;?r&l^+ANO(GX@RbGA1yzvkk!uR=A=7*wllI!Nk_QDqC z`-pj+)|s!I0&Yg+@1B3bdN(0{MBz-SesP#(4GmVqI}b2w2#m zBDWu2j14x+)$O9s%&m&C@|+573L28KUaS!k8L>WmL>YHgFUL3n5081YiO#~k`fXfG zXuhR$ES@pnQ1iZ9HO@Da*Y{DA+S&=skhRn$#`+D%y7}QnbisFb_?G_sk`pS~uGnDK z3K*f_AI`~Cv^Q><<13ccDk)b|g!gdRN6i$PFSUq${>yGQL zW9tA?XGG`rwa95lbLmtn^6?3jf{b-h#g1-Ud~9RZ%rt+#w&64LNE{{{lDk*?XTNpW z`3;pHg}-;!kslFcX`}8-y_b|QvC(m$m2x30&@8UOL}iUjlQB1;#2d1r%|S5_a9ENs zt8Kf-Tg6M?<7SONjquIhJ#0_DiDdD0Twkh2hHkrzS1aEtR}5h?B3fR_jC1MXQJ9I{ zBob_!!f}Q%pz(`ja}DQa=K9@(>DrpxA(WM1W|=RzI0v%bw?-1LZ-{auH_-Q>xXCd~ zUY?WE+{too>7}o2d!|2q`vH1G%56MaZF5@Wr-mF2D@2G97}Uf%)(+BJaEu8kg_(pK zLvcu5H++STvns}m09_;C6^Wr$)CGWbXSAHoSa6o>d&!!?;{<4>mfqX)r}`fsmZx5Y;booo*dC(-HUoqQ4Qb$xW1>qi5zkv44vAkcw3YeM69V%OD1k zLL!NP6BxR>FDW+-e`!=?(=K3Ei+kgyq^$*##t(ZpN=MM@LQO4c>8YN(DQx}dGKudZ z*n@RJtpjw0#`PP>7SC=+yVCKJ0TF*Gr!aPmj)!F*5BCveRz)u`_zAkJy@<}d43T3y znC83#6*a5zjPg~L7&0j|`u$)Pb1I0aI38NH&=GCYKp&$OR28Z| zV|ZNmq)Ka38uu8RCJG zqG*;yQfLEny@;6usVws;|BS0k>q!%Rv{K!L*J^Igrpm)=&GDW9ZRes9J*k|ayvJB- z#Il>R+2&1DWdk<+-N7`$DZDz3R%an0+1-(ms>^4tloGZMeU=(2PH-}y=unXN={&5Z zxYHqNpTXZ#KL;>_a1RSFv}olZWe*qFQm?XDiPe*wR^e zF5#9$d}VP2OS}NKyG-HDK))M>;amZrqN%KTB1bNiv^8J7NAJ_A&DO&UDLVE08ub^- zeP^GOUewz5Q1ZmIG%JCcD`4Y}d#8rgi?;6hFpYAZES=m&deF=msO1O+5QbMR1(YUSspZ{=j>jmo zs~cEbRndgW+SA((eg;00pf}f`Zw5Kuj6j&m>)q~Hyb6Qz8$-Fh^-(lUHHE_YFkrgs z0x)hsJv11sk@NqV4`O#<1a-XN>PYhNsUi-~OFikeY4I-OzQJ0Wa^jAXBQH)UJ{l4& zw=a3QTI}Ryy|vhDtWxLp@_7IrQS1x8Trl;(D&ugj(rz*IHli;z*Ym{? zCvm7t##j0%Cj#eMt&_C9U{ooik-fdGtk7ARTRk1=PQ|=GfVMm|5vZna{QAtonMbnL z{Cht3#DT55-@4Ui5UY-EH+t{%EN}<9WyK(liW+Yfr$Tjm&+!c`LGboub-n2Cl^)(D z76=HtC-JmNwiBDCE+pg_R(>*%QY+a}$v^2rk|+sk<_{{6#DK-XG+{b`m&M=8D*$Ve zf0!%B{qyvLffeFHd$>c{0-1UsDn~1D5VI+oiv>dm$ov2uYi25IUbB~#q0de4<>D|k z4BTI5^ReD7LX1h_Gca2hfN!fKip_=9i&7EA6k=`FA5_jHF2t4xNREwjLf?WzT`Dw^ zN2lgA&~V9D7$BKgyGqS$dDxXIbzmLc=FoF7oA_z*I=YlOy1sk)P=22a?T(fN43V8v z&Oyb>X_;!}isu`cCu3_-uB#nuPfKg!d*v*2roXOrCNtI&7dCkC13;0x~NX=N=$Q&TwC=p z=alrb7^(P2k*Q*d5emb;pw-XhJ5{w73$yn-WgG`&5mB~9l^h8%6xO)1jbfnW2nI_w{Vmo(Qi9~`o4{p z3(|ck@fdV-A_!#2s|@g$bYbYLP|V%%-vX|mujIqf_)rXI_^-iRlHcCA1ZfJ44!H)Dn)n@aWy+wMxva`oouVOs6R9_*W&Uf zi?7diC|Yh{m|PW=_q~I&v@ObYCGTZr5-lYJnBv|N!oKdd1_Jv2I=T$AxJ*&dz14Q+duW(s-v2ZLOTuV*;G!!@!lI4h!A0^z#~@E9E&o zY92-_-_ZTmLi;Y3=N+%fD}e=k{6zH>-?{tyih+C(71)g_S!Sbyr*T7i`McI{U*GgO z@L!5-=_jZ6M-Cedp`R_tKSk`eq#=*rRaHM>w(sjsv18WMq;XYM==bs*>|9so8FI5!%JfK zmpZ)f4Q(GS5-A!ZrWfD%CM?r{N7+`{@NRBn6Z z2TZdeks+i#4nCXGymCOAE|6NfE#(F(y|o-=u`r4*EmyVZW|hQFV+E~=^{R}BlWb|G zknqck9d}!xrSmth5$zPF{5K_B)_zQ%f)~1gN`Gs&pvoR zvJx)xK}-YR@m_Lc`sC+kKh=OuKE2l&b9h6lMSTvwk44qJSP)~W0HhW$N9*MvEvVC% zc75tHTP=vcF7RozXf*idnjJ_`h}=v9rHUZnkZv0n95NTM+nRbdaVD(BMW!)yvjXx| zNRKc&LY5`$_=V!TIqq8Ie8AX=A>qvC9G!E(9LFE!849bd|U^Y zum#VAg9@NRF***-kkWGm#R3-EojUxzGXikqy7I*7nd!h-M`^kt$uoVK^{?|2$#npE z3E2^BTUULe1h4@4;hckQ^jGjr3I85okHRY@4A_O(WK1cZyg$(%^OZi~c1Wrx>0dR5 zb-~~C&e-f}*fiL5BfR7!h8kE3wp^%ReVCPdGZskuMsgb}@Z&Rc&$MB5p@Ly079s<0a4lSmN zI+?gGMW&T7wO2Xm?lrcy*K!-vd(ORur2%RwSCY;_*%9!d`%nz5xqm+)byjP76L;xC zr}sWa;47_ioQp#;83>g!VK7w~oK!jXG z22zG&O}pe5(s)}f{-Ukg`~G;E)$1?oO6~T6G~j5_Z`HTi$gaq$%eYdph;8v|*H=a( zpl=(LGq;F}+Y3MMZ10#%u1rlg(99u-f(j!`pHT@SmpyCqT!O29fQGB*(+xE5h;(d? zA3%4v4$h98;kWp#8l@(ghMn#W+3e{mRFB0!#&q#5#7v089$opa#x0Q%};A3z3zCC2qG@&AyL((9V279%-xKQYm%Hpox~gnnGyT;S;`!` zmmiPz$}f(>5qsHNW69@EXnxpA@#pev)Sg^Tibmz=Hq=wZBV#&vIsqahU88$LF|qJg z9gk-LF=d3BFFw_KNt9o<<#}jfQb%O&`n*kr)fSZ#Ss>{FdCQxpQQRun?BuqEeu=hr ztth{*O#lkW;CkAjvy!iCMO_tiGUl#A*K2GU)W>8bepDd)rW3R%{bFp?iGU8;$w0u# zXO)xfqq3#~

    }h-_FENbky$)K7PC-X8`O!0h;J{pk69h-65LetZL|tCLY>0%dS*2 zq&f!ow-7G2a7 zEw?{8!CrLA#~Y7Cq6c1)3c22^K_wxQ1l1~t@csDM`zv*4ZU&6*Mv!YL%G`*02BUFY zFzG}T3d)zFdXXoHPQ|Lq_=5wCZs46j)J zdkV?IYE?tO%e=0kHIAPfJ%$KA87w*uHP{sqA&}`QmuGpdjP8Gh&x~a6O&>%*K@1k6 z*3`=4|VWV142}bN+U!_2rVqU zJfmL@zlE?5m)MC0;NsZy1$tkJr-*r z>%WE?m)Nh+$?SY@6FOUzU&GzAnb)4qnAClURo_I+^GJ~^b5dsuMlEX3$p}ne zFEBl&!@FrQ&m%?Qjn1JTk+xwOewX`O(q9RzT#vyYV(q3oV!II!n6%U-BvRhIgrvh^GZ{c-q9Ar8{vhB**gh-JxOG%eFYxZw}3q>{56GT2TuiA*M{@tvM>B>1k*K zcjoM-PFS>?nW=5vo20Cn?$?BoAfMI-5d}4zGxAQ_9Y#%j3%4A7t@XG;Q~*svFGIVF zu(yvxo@h8lA(qs$TYW*x0;0`j5%z;VUCaZO!|=1r)5}W_>_Nlx#)ONCgG)tY0MZWR z5S6Ho%q;9nfxYI6c6seeCU4Vbqd!gcF+k<2snONF2#Kj;HWc)JvDZEraX&xTD-O>} zgy&&~#hoy%G{}B_iOPyg4o9UM^DCo9jg&W>>%iRf>|dkq7K8W4qW5{$l*?+6TtUWV z)sbT&30A?b+C~hAquLRrr+SyH*i~>KVFVNzEEg|DBR3>LD&jQAjeXGm%>llp0w13ouh^gbuo<^cv!||G!$FWWe>8v2)*~yO z_wOCMdllxP(QaZH_VN_NF;mMnl%gT@YFS#Kj%DMv z)~J8+5by*e1r|U}fXoHK`iJmJhBpmzTjv7h%Ym&R|GI-lNmr}=E1~gc?iwU$Ybdy% z5aj@PcnuztkZe@PTfd|i5!zvjB72>9_)T_=hFbTa=;F}8&AiB<2pebpg|DvWS8CD zihw4eTemxy^?q%|L&$0rzuCKzuVh9%wY0QOWGSX87++0>(;gUFlHr%fAVJlkibgBN zXoWGpY5f=9U*4{+_cskKvF9nc`dD<#CT5`+Z(Xw$C~1R?4b7bOf3P+=AxW5^s9dW? zOFi<3_WeURA;_i;)UT~`E_Eo_ILAw}$elIoZ}1)Ci?>cp>cd;@0wpF_@|xF)Y>c}* zSO`E&UHeW2R&lud`s`Q6DUCX#lN&b;%ldzSp0I~stbzg1>bHRLkScTiT;ctzI`81j zDT`RkcK^miKtht7ZTXhR0=ZG=R6T|1e+?m-X6BhWvtv8kmB3BGUS$UHcwqhBxW7lw z#%(9EJr=`>EOo@1f^$$FFB^tAoX;p6rlgsbwM;-+1tXPLmlt5?P$*HgC30W$iFCCnM1oBxphTl7VM2&^!ClqAj}@}ji5 zr0m^Iy2c7QGCN;;+dN=(=9;gr`P=*daP&_W`EQN!Yw$M~c{lhHrwF|F=?4fEB>rpg zHx~InzfAxh`Txw5gMObHw5_|GEQ+!c@63>&_@o$qyk7o)=XAitYRcAp!9h7rKF^}6Wt5$xh*eo=x{S^2DM{RilD2i_VkB*uWbtVSu} zd{pzccL!fyK#}Qvihx2J4#ALN-6Lm6Oa=x??`bsaVe}wiL@^EX2gyqQ^|607!e2e% zuiN3TG2yR)@t@8PtXE$A7gId{8o=;>KK1nf_jNrE|KKf9gY@!GnJ6?)-rY}lop6s_ zlco#{C*_lIiq2s;O5flCzz!f{$6Nx!*G_h`r8so=575c}4^TyZ$JWGGDq!tKt$BGK4G^F-@lDgLgg6){2vW|Ca_Ll~uc@ls?*RTC4k zJ+`dmjKN&BPIS$Rom}+XgnE!jG&98dgHKTCcdbNQkDwLt+psR~A@EK$Cd_?{13oHv z>G;!2@Vzo?Z|2N^z$~oa9KJURzzjLl0DdP1kh0(avJsTg&`>_Soz*nLnOafdBiAi@ zfFm>F^sw`-Sg(nNHy_fw*7G4BkhPdfnpD9^CZSbjE1X2s1KZ7NdPA!X52v^;PGG3K zUp_v!WL|qle`d19g|J#6^EooZCzDHm*8k?W9=75<^&hMba_6 z?2Vv)vqQ*oNc>0FdgaJUtQ=jP%^QYi-qyGB*|_3bArs#61xFjw+Rk_bzBpB~=v;8=FsAP_;U^}Ux zQm;=;THb#XU?n25QY)orYD(#1irK(9p<|CNl$X|x$8^jq1`W-%cHmi1%uNUkt>u?G zzcCIWRs`7vbr&wg>jb9Ap@C}6QN|gtY3L>G@t7_w4|)!4O3rT_mp1wJn>5@SvYC0z`d2dvS`i(YbH#}DMmi&C+5zawwZsRvvGC<5nxTHI)Gn8m}} zdizq9#o87J%mZ3;m!Iz(-rD88`Z}a(hzFaL*Uwj?V5$Dh`!*(0(ew~7WYtNmYDB&O{XTJO-u(g2mzN`aoc^myga}hUlN7xp%nf3n`N7^ z?k3N)hT1ddV#jfB^Ga7SE?nu!kouC$gW{jnL*4I#JkuV5RC;MDG>&FfC#{v&Tpeg& zuXGO0;E6nq`I>u_2SJWY)|HLj9jhdg)@~RLxo>rm%OtyW;P$@zK$%=XKY>wU9IuRH{!P0Kt^Sn&E4gg$x!otrZpM8j~IGaB=*3dZfc1IUpGU1J@?1%I& zG~%KSolfRSb;UE?yg4{pD#IQRh6rq}K+fVNcp2?MV&C#%*CE9PXt{mjX_XOh1*fWx z#P~gOYULC2s@UsS0y=o#;yJt()>O?wF)1_+SBSVm_bM)Wuc=$}(`Y^sm0*;@x953e zO8M&hlOr5LkyZnOQl!slM&*bT(Niy-t(`bk!*4}9oC6u5d0((YmMG~;9^sAa4O#Uc z%6k(WZ%U>-R6Rhaoc#c42wMh>V?@6IaJ>~e@0Z8fRVW0|1D-P z#Owin8z3RY(468j^YpDBpjk9*0slc4`f){V8OkAJdbV|-yGojM2?sCollMF7^`&^$ zXPtb(H2B5=kH0aeY-yMm3#hC{$Ju}L9<>6LKHRW*qwq={V7<~~csh}rlY52X-=p*$ z4fx^V?aLE3OV + + + + + + Edit + + + Create + + + + + \ No newline at end of file diff --git a/web_edit_xmlid/views/assets.xml b/web_edit_xmlid/views/assets.xml new file mode 100644 index 000000000000..00765d8d6973 --- /dev/null +++ b/web_edit_xmlid/views/assets.xml @@ -0,0 +1,10 @@ + + + + + + From dfb372ebbea05bf7de58c1d3d87bab091051d4bd Mon Sep 17 00:00:00 2001 From: Yann Papouin Date: Mon, 19 Dec 2022 14:53:04 +0100 Subject: [PATCH 4/8] [IMP] web_edit_xmlid: pre-commit execution --- web_edit_xmlid/__manifest__.py | 18 +- web_edit_xmlid/models/__init__.py | 2 +- web_edit_xmlid/models/models.py | 30 +-- .../static/src/js/tools/debug_manager.js | 211 +++++++++--------- web_edit_xmlid/static/src/xml/base.xml | 9 +- web_edit_xmlid/views/assets.xml | 7 +- 6 files changed, 150 insertions(+), 127 deletions(-) diff --git a/web_edit_xmlid/__manifest__.py b/web_edit_xmlid/__manifest__.py index f80829e3b3c8..1ab3cc7a5714 100755 --- a/web_edit_xmlid/__manifest__.py +++ b/web_edit_xmlid/__manifest__.py @@ -1,8 +1,6 @@ { "name": "Web Edit XML ID", - "summary": - "Extend development view to allow adding/editing records " - "xml-ids", + "summary": "Extend development view to allow adding/editing records " "xml-ids", "version": "12.0.1.0.0", "category": "Base", "website": "https://github.com/OCA/web", @@ -10,8 +8,14 @@ "author": "DEC, Odoo Community Association (OCA)", "maintainers": ["ypapouin"], "license": "AGPL-3", - "depends": ["web", ], - "data": ["views/assets.xml", ], - "qweb": ["static/src/xml/base.xml", ], - "installable": True + "depends": [ + "web", + ], + "data": [ + "views/assets.xml", + ], + "qweb": [ + "static/src/xml/base.xml", + ], + "installable": True, } diff --git a/web_edit_xmlid/models/__init__.py b/web_edit_xmlid/models/__init__.py index 9a7e03eded37..0650744f6bc6 100755 --- a/web_edit_xmlid/models/__init__.py +++ b/web_edit_xmlid/models/__init__.py @@ -1 +1 @@ -from . import models \ No newline at end of file +from . import models diff --git a/web_edit_xmlid/models/models.py b/web_edit_xmlid/models/models.py index 4e2bb5b0fa1c..4a0af0a4a4d2 100644 --- a/web_edit_xmlid/models/models.py +++ b/web_edit_xmlid/models/models.py @@ -1,29 +1,31 @@ -from odoo import models, fields +from odoo import fields, models class BaseModel(models.BaseModel): - _inherit = 'base' + _inherit = "base" def ensure_xml_id(self, skip=False): - """ Public version of `__ensure_xml_id` used by DebugManager. - Since `__ensure_xml_id` use raw SQL queries to create data - standard ORM fields (`create_uid`, `write_uid`, `create_date`, - `write_date`) are not filled correctly. + """Public version of `__ensure_xml_id` used by DebugManager. + Since `__ensure_xml_id` use raw SQL queries to create data + standard ORM fields (`create_uid`, `write_uid`, `create_date`, + `write_date`) are not filled correctly. """ res = self.__ensure_xml_id(skip) xids = [] for record, xid in res: - xids.append(self.env['ir.model.data'].xmlid_lookup(xid)[0]) + xids.append(self.env["ir.model.data"].xmlid_lookup(xid)[0]) # To avoid having our record manually linked with a XML_ID to be # deleted when the module that owns this record will be updated, we # set `noupdate` to True. # This is done only once since `write_uid` will be set there. - xml_ids = self.env['ir.model.data'].search( - [('id', 'in', xids), ('write_uid', '=', False)] + xml_ids = self.env["ir.model.data"].search( + [("id", "in", xids), ("write_uid", "=", False)] + ) + xml_ids.write( + { + "noupdate": True, + "date_init": fields.Datetime.now(), + "date_update": fields.Datetime.now(), + } ) - xml_ids.write({ - 'noupdate': True, - 'date_init': fields.Datetime.now(), - 'date_update': fields.Datetime.now(), - }) return res diff --git a/web_edit_xmlid/static/src/js/tools/debug_manager.js b/web_edit_xmlid/static/src/js/tools/debug_manager.js index 827164676517..5ab1548e4550 100644 --- a/web_edit_xmlid/static/src/js/tools/debug_manager.js +++ b/web_edit_xmlid/static/src/js/tools/debug_manager.js @@ -1,109 +1,120 @@ -odoo.define('web_edit_xmlid.DebugManager', function (require) { -"use strict"; +odoo.define("web_edit_xmlid.DebugManager", function (require) { + "use strict"; -var dialogs = require('web.view_dialogs'); -var core = require('web.core'); -var Dialog = require('web.Dialog'); -var field_utils = require('web.field_utils'); -var session = require('web.session'); + var dialogs = require("web.view_dialogs"); + var core = require("web.core"); + var Dialog = require("web.Dialog"); + var field_utils = require("web.field_utils"); + var session = require("web.session"); -var DebugManager = require('web.DebugManager'); + var DebugManager = require("web.DebugManager"); -var QWeb = core.qweb; -var _t = core._t; + var QWeb = core.qweb; + var _t = core._t; -/** - * Rewrite of the method "get_metadata". - * Two buttons are added, one to create an XML ID if it does not already exist, - * and another to edit this XML ID using a classic Form. - */ -DebugManager.include({ - get_metadata: function () { - var self = this; - var selectedIDs = this._controller.getSelectedIds(); - if (!selectedIDs.length) { - console.warn(_t("No metadata available")); - return; - } - this._rpc({ - model: this._action.res_model, - method: 'get_metadata', - args: [selectedIDs], - }).done(function (result) { - var metadata = result[0]; - metadata.creator = field_utils.format.many2one(metadata.create_uid); - metadata.lastModifiedBy = field_utils.format.many2one(metadata.write_uid); - var createDate = field_utils.parse.datetime(metadata.create_date); - metadata.create_date = field_utils.format.datetime(createDate); - var modificationDate = field_utils.parse.datetime(metadata.write_date); - metadata.write_date = field_utils.format.datetime(modificationDate); - var dialog = new Dialog(this, { - title: _.str.sprintf(_t("Metadata (%s)"), self._action.res_model), - size: 'medium', - $content: QWeb.render('WebClient.DebugViewLog', { - perm: metadata, - }) - }); - dialog.open().opened(function () { - dialog.$el.on('click', 'a[data-action="toggle_noupdate"]', function (ev) { - ev.preventDefault(); - self._rpc({ - model: 'ir.model.data', - method: 'toggle_noupdate', - args: [self._action.res_model, metadata.id] - }).then(function (res) { - dialog.close(); - self.get_metadata(); - }) + /** + * Rewrite of the method "get_metadata". + * Two buttons are added, one to create an XML ID if it does not already exist, + * and another to edit this XML ID using a classic Form. + */ + DebugManager.include({ + get_metadata: function () { + var self = this; + var selectedIDs = this._controller.getSelectedIds(); + if (!selectedIDs.length) { + console.warn(_t("No metadata available")); + return; + } + this._rpc({ + model: this._action.res_model, + method: "get_metadata", + args: [selectedIDs], + }).done(function (result) { + var metadata = result[0]; + metadata.creator = field_utils.format.many2one(metadata.create_uid); + metadata.lastModifiedBy = field_utils.format.many2one( + metadata.write_uid + ); + var createDate = field_utils.parse.datetime(metadata.create_date); + metadata.create_date = field_utils.format.datetime(createDate); + var modificationDate = field_utils.parse.datetime(metadata.write_date); + metadata.write_date = field_utils.format.datetime(modificationDate); + var dialog = new Dialog(this, { + title: _.str.sprintf(_t("Metadata (%s)"), self._action.res_model), + size: "medium", + $content: QWeb.render("WebClient.DebugViewLog", { + perm: metadata, + }), }); - dialog.$el.on('click', 'a[data-action="edit_xmlid"]', function (ev) { - ev.preventDefault(); - var domain = [ - ['model', '=', self._action.res_model], - ['res_id', '=', metadata.id] - ]; - self._rpc({ - model: 'ir.model.data', - method: 'search', - args: [domain], - limit: 1, - }).then(function (res) { - var xmlid_id = Number(res[0]) + dialog.open().opened(function () { + dialog.$el.on( + "click", + 'a[data-action="toggle_noupdate"]', + function (ev) { + ev.preventDefault(); + self._rpc({ + model: "ir.model.data", + method: "toggle_noupdate", + args: [self._action.res_model, metadata.id], + }).then(function (res) { + dialog.close(); + self.get_metadata(); + }); + } + ); + dialog.$el.on("click", 'a[data-action="edit_xmlid"]', function ( + ev + ) { + ev.preventDefault(); + var domain = [ + ["model", "=", self._action.res_model], + ["res_id", "=", metadata.id], + ]; self._rpc({ - model: 'ir.model.data', - method: 'get_formview_id', - args: [[xmlid_id]], - }).then(function (viewId) { - new dialogs.FormViewDialog(self, { - res_model: 'ir.model.data', - res_id: xmlid_id, - context: session.user_context, - title: _t("Edit XML ID"), - view_id: viewId, - on_saved: function () { - dialog.close(); - self.get_metadata(); - }, - }).open().on('closed', self, function () { - // + model: "ir.model.data", + method: "search", + args: [domain], + limit: 1, + }).then(function (res) { + var xmlid_id = Number(res[0]); + self._rpc({ + model: "ir.model.data", + method: "get_formview_id", + args: [[xmlid_id]], + }).then(function (viewId) { + new dialogs.FormViewDialog(self, { + res_model: "ir.model.data", + res_id: xmlid_id, + context: session.user_context, + title: _t("Edit XML ID"), + view_id: viewId, + on_saved: function () { + dialog.close(); + self.get_metadata(); + }, + }) + .open() + .on("closed", self, function () { + // + }); }); - }) - }) - }); - dialog.$el.on('click', 'a[data-action="create_xmlid"]', function (ev) { - ev.preventDefault(); - self._rpc({ - model: self._action.res_model, - method: 'ensure_xml_id', - args: [metadata.id] - }).then(function (res) { - dialog.close(); - self.get_metadata(); - }) + }); + }); + dialog.$el.on("click", 'a[data-action="create_xmlid"]', function ( + ev + ) { + ev.preventDefault(); + self._rpc({ + model: self._action.res_model, + method: "ensure_xml_id", + args: [metadata.id], + }).then(function (res) { + dialog.close(); + self.get_metadata(); + }); + }); }); - }) - }); - }, -}); - + }); + }, + }); }); diff --git a/web_edit_xmlid/static/src/xml/base.xml b/web_edit_xmlid/static/src/xml/base.xml index a28d9bef7df0..0b57fb3c20e7 100644 --- a/web_edit_xmlid/static/src/xml/base.xml +++ b/web_edit_xmlid/static/src/xml/base.xml @@ -1,4 +1,4 @@ - + @@ -7,9 +7,12 @@ Edit - Create + Create - \ No newline at end of file + diff --git a/web_edit_xmlid/views/assets.xml b/web_edit_xmlid/views/assets.xml index 00765d8d6973..c87023b0a459 100644 --- a/web_edit_xmlid/views/assets.xml +++ b/web_edit_xmlid/views/assets.xml @@ -1,9 +1,12 @@ - +