From 05f726e3789f81ad3238ab3f7ad6969db322aeeb Mon Sep 17 00:00:00 2001 From: Dmitry Borisenko <49808844+DmitryBorisenko33@users.noreply.github.com> Date: Mon, 4 Jan 2021 00:48:44 +0100 Subject: [PATCH] doc --- doc/1.txt | 566 +++++++++++++++++++++++++++++++++++++ doc/2.txt | 85 ++++++ doc/3.txt | 32 +++ doc/pictures/008 flash.jpg | Bin 0 -> 160088 bytes doc/pictures/009 flash.jpg | Bin 0 -> 47909 bytes doc/pictures/010 flash.jpg | Bin 0 -> 54163 bytes doc/pictures/011 flash.jpg | Bin 0 -> 99277 bytes doc/pictures/012 wifi.jpg | Bin 0 -> 54365 bytes doc/pictures/013 wifi.jpg | Bin 0 -> 58767 bytes doc/pictures/014 wifi.jpg | Bin 0 -> 81691 bytes doc/pictures/015 wifi.jpg | Bin 0 -> 75763 bytes doc/pictures/016 wifi.jpg | Bin 0 -> 58501 bytes doc/pictures/017.jpg | Bin 0 -> 21833 bytes doc/pictures/018.jpg | Bin 0 -> 12275 bytes doc/pictures/019.jpg | Bin 0 -> 20725 bytes doc/pictures/020.jpg | Bin 0 -> 12525 bytes 16 files changed, 683 insertions(+) create mode 100644 doc/1.txt create mode 100644 doc/2.txt create mode 100644 doc/3.txt create mode 100644 doc/pictures/008 flash.jpg create mode 100644 doc/pictures/009 flash.jpg create mode 100644 doc/pictures/010 flash.jpg create mode 100644 doc/pictures/011 flash.jpg create mode 100644 doc/pictures/012 wifi.jpg create mode 100644 doc/pictures/013 wifi.jpg create mode 100644 doc/pictures/014 wifi.jpg create mode 100644 doc/pictures/015 wifi.jpg create mode 100644 doc/pictures/016 wifi.jpg create mode 100644 doc/pictures/017.jpg create mode 100644 doc/pictures/018.jpg create mode 100644 doc/pictures/019.jpg create mode 100644 doc/pictures/020.jpg diff --git a/doc/1.txt b/doc/1.txt new file mode 100644 index 00000000..d08be432 --- /dev/null +++ b/doc/1.txt @@ -0,0 +1,566 @@ +*** + + +## Возможности + + - Объединение различных по типу и назначению устройств: управление, получение данных, и настройка параметров - всё в одном приложении + + - Взаимодействие с устройствами осуществляется через "облачный" сервис с использованием протокола mqtt, позволит контролировать их из любой точки Мира (при наличии доступа в Интернет) + + - Поддержка нескольких профилей и их переключение "на лету", дает возможность объединить устройства в группы + + +Настройка (после "прошивки") производится через веб-интерфейс, чтобы получить к нему доступ необходимо соединиться с WiFi AP устройства и набрать в адресной строке браузера http://192.168.4.1. +Далее выбрать типовой шаблон автоматизации, произвести настройку под свои требования и задачи. +Основные разделы интерфейса: конфигурация и сценарии. +В окне конфигурации задаются "объекты", "элементы управления" устройства (dashboard) - им устройство будет представлено в приложении компаньоне проекта. В окне сценариев задаются реакции на события и изменения в параметрах работы системы. + +*** + + +## Команды, назначение и применение + +Команды служат для настройки и управления устройством и его взаимодействия + +**`buttonSet 1 1`** Изменит состояние "кнопки" №1, установит его в значение 1 + +**`pinSet 13 0`** Установит GPIO 13 состояние 0 + +**`pinChange 13`** Состояние GPIO 13 будет изменено на противоположное + +**`pwmSet 1 500`** Настройка pwm №1 будет использовано значение 500 + +**`timeSet 1 08-00-00`** Установит для элемента ввода времени - inputTime значение 08:00:00 + +**`digitSet 1 56`** Элемент №1 (для цифровых параметров) отобразит число 56 + +**`stepperSet 1 100 1`** Шаговый двигатель №1 - вращение 100 "шагов" по часовой стрелке (для движения в обратную сторону используются отрицательные значения параметра) + +**`servoSet 1 180`** Сервопривод №1 принять положение 180° + +**`timerStart 1 60 sec`** Установить для таймера №1 обратный отсчёт в 60 секунд + +**`timerStop 1`** Остановить таймер №1 + +**`textSet 1 Привет`** Установить для элемента текстовое поле №1 - "привет" + +**`push Внимание Протечка`** Отправить push-уведомление с темой "внимание" и содержанием "протечка" + +**`firmwareUpdate`** Обновить прошивку устройства "по воздуху" + +**`firmwareVersion Версия прошивки Системные 1`** Узнать версию прошивки устройстве + +## Сценарии + +Элементарный блок в сценарии состоит из набора команд и триггера - условия для их выполнения + +**temp > 60** +digitSet 1 60 +stepperSet 1 100 1 +textSet 1 Перегрев +**end** + +Условие: когда температура превысит 60° +Запустит: команда шаговому двигателю, в приложение отправить сообщение и цифровое значение температуры. + +В сценарии может быть несколько блоков, при необходимости из приложения есть возможность "выключать" часть из них. +Неактивные блоки сценария будут проигнорированы. + +Для взаимодействия устройств между собой предусмотрены команды mqtt и http + +**temp > 60** +mqtt 154348-134 digitSet_1_56 +mqtt 154348-136 stepperSet _1_100_1 +http 192.168.1.10 textSet_1_Перегрев +**end** + +*** + +## 1.1 Объект "кнопка" + +(эти строки мы пишем в "конфигурации устройства") + +### a) кнопка управляющая выходом (пином). Пины нумеруются по системе нумирации gpio для esp контроллеров. + +`button 1 13 кухня освещение 0 1` + +**"button"** это объект создающий кнопку в приложении +**"1"** это номер этой кнопки (необходимый для ее аутентификации) +**"13"** это номер пина которым будет управлять данная кнопка +**"кухня"** это название кнопки в приложении +**"освещение"** это название вкладки в приложении на которой появится данная кнопка +**"0"** это начальное состояние кнопки при старте модуля (выкд 0, вкл 1) +**"1"** это уникальный номер и номер сортировки данной кнопки. Этот номер должен быть уникален для каждого объекта + + +### б) виртуальная кнопка - кнопка реакцию на которую можно задать в сценариях: + +`button 1 na запустить таймеры 0 1` + +**"button"** это объект создающий кнопку в приложении +**"1"** это номер этой кнопки (необходимый для ее аутентификации) +**"na"** абривиатура not available означающая что эта кнопка виртуальная и что пин не установлен +**"запустить"** это название кнопки в приложении +**"таймеры"** это название вкладки в приложении на которой появится данная кнопка +**"0"** это начальное состояние кнопки при старте модуля (выкд 0, вкл 1) +**"1"** это уникальный номер и номер сортировки данной кнопки. Этот номер должен быть уникален для каждого объекта + +### в) кнопка включающая и выключающая все сценарии: + +`button 1 scenario запустить таймеры 0 1` + +**"button"** это объект создающий кнопку в приложении +**"1"** это номер этой кнопки (необходимый для ее аутентификации) +**"scenario"** слово означающее что эта кнопка для управления сценариями +**"запустить"** это название кнопки в приложении +**"таймеры"** это название вкладки в приложении на которой появится данная кнопка +**"0"** это начальное состояние кнопки при старте модуля (выкд 0, вкл 1) +**"1"** это уникальный номер и номер сортировки данной кнопки. Этот номер должен быть уникален для каждого объекта + + +### г) кнопка включающая выключающая определенные блоки сценариев: + +`button 1 line1,line3, Включить#отправку#push Оповещение 0 1` + +**"button"** это объект создающий кнопку в приложении +**"1"** это номер этой кнопки (необходимый для ее аутентификации) +**"line1,line3,"** это блоки сценариев нумирация сверху вниз. Блоком считается выражение от начала до слова end +**"Включить#отправку#push"** это название кнопки в приложении +**"Оповещение"** это название вкладки в приложении на которой появится данная кнопка +**"0"** это начальное состояние кнопки при старте модуля (выкд 0, вкл 1) +**"1"** это уникальный номер и номер сортировки данной кнопки. Этот номер должен быть уникален для каждого объекта + +## 1.2 Команды управления объектом "кнопка" + +(эти строки мы пишем в "сценариях") + + ### а) Команда включения выключения кнопки по ее номеру + +`buttonSet 1 1` + +**"buttonSet"** команда управления объектом button +**"1"** номер кнопки которой будем управлять +**"1"** состояние включено, 0 - выключено + +### б) Команда изменения состояния кнопки на противоположное + +`buttonChange 1` + +**"buttonChange"** команда управления объектом button +**"1"** номер кнопки которой будем управлять + +## 1.3 Вызов событий объектом "кнопока" + +(эти строки мы пишем в "сценариях") + +объект button может быть равен либо 0 либо 1 + +`button1 = 1` +`button2 = 0` + +Пример использования: + +`button1 = 1` +`buttonSet 2 1` +`buttonSet 3 0` +`end` + + +*** + +## 2.1 Объект "физическая кнопка" + +`switch 1 0 10` + +**switch** это объект создающий физическую кнопку +**1** номер кнопки +**0** пин кнопки (при подключении необходим подтягивающий резистор) +**10** задержка для избавления от дребезга с мили секундах + +## 2.2 Вызов событий объектом "физическая кнопка" + +`switch1` может быть равна нулю или единицы, ноль - событие отбрасывания кнопки, единица - событие нажатия + +`switch1 = 1` +`buttonChange 1` +`end` + + +*** + +## 3.1 Объект "широтноимпульсная модуляция" + +`pwm 1 12 яркость освещение 1023 1` + +**"pwm"** это объект создающий управление шим в приложении в виде ползунка +**"1"** это номер этого объекта +**"12"** это номер пина на котором будет генерироваться шим заданной в приложении величены +**"Яркость"** это название кнопки в приложении +**"Оповещение"** это название вкладки в приложении на которой появится данная кнопка +**"1023"** это начальное значение шим сигнала и ползунка (изменяется от 0 до 1023) +**"1"** это уникальный номер и номер сортировки данной кнопки. Этот номер должен быть уникален для каждого объекта + +## 3.2 Команда управления объектом "широтноимпульсная модуляция" + +`pwmSet 1 500` + +**"pwmSet"** команда управления объектом +**"1"** номер объекта, которым будем управлять +**"500"** значение которое установится после выполнения команды (от 0 до 1023) + +*** + +## 4.1 Объект "окно ввода времени" + +`inputTime time1 Во#сколько#включить? Таймеры 20-30-00 1` + +**inputTime** это объект создающий окно ввода в приложении +**time1** переменная в которую будет записано время введенное в окно +**Во#сколько#включить?** это название окна в приложении +**Таймеры** это название вкладки в приложении +**20-30-00** начальное значение времени после загрузки устройства +**1** это уникальный номер и номер сортировки. Этот номер должен быть уникален для каждого объекта + +## 4.2 Управление объектом "окно ввода времени" + +`timeSet 1 08-00-00` + +**"timeSet"** команда управления объектом +**"1"** номер объекта, которым будем управлять в данном случае окном ввода с `time1` +**"08-00-00"** время которое хотим установить + +В окно ввода можно вводить время в приложении но если необходимо изменить время автоматически +по какому нибудь событию то можно использовать команду выше - **timeSet**. + +## 4.3 Вызов событий объектом "окно ввода времени" + +`timenow = time1` +`buttonSet 1 1` +`end` + +`timenow` всегда хранит в себе текущее время, и поэтому исходя из данного сценария кнопка номер 1 включится в то время которое будет введено в окно ввода `time1` + +*** + +## 5.1 Объект "окно ввода цифры" + +`inputDigit digit1 Через#сколько#секунд#выключить? Таймеры 5 2` + +**inputDigit** это объект создающий окно ввода в приложении +**digit1** переменная в которую будет записана цифра, введенная в окно +**Через#сколько#секунд#выключить?** это название окна в приложении +**Таймеры** это название вкладки в приложении +**5** цифра по умолчанию, после загрузки модуля +**2** это уникальный номер и номер сортировки. Этот номер должен быть уникален для каждого объекта + +## 5.2 Управление объектом "окно ввода цифры": + +`digitSet 1 56` + +**"digitSet"** команда управления объектом +**"1"** номер объекта, которым будем управлять в данном случае окном ввода с `digit1` +**"56"** цифра которую хотим установить + +В окно ввода можно вводить цифры в приложении, но если необходимо изменить цифру автоматически +по какому нибудь событию, то можно использовать команду выше - **digitSet**. + +## 5.3 Вызов событий объектом "окно ввода цифры" + +`dallas > digit1` +`buttonSet 1 0` +`end` + +`button1 = 1` +`timerStart 1 digit1 sec` +`end` + +*** + +## 6.1 Объект "dallas" (сенсор температуры ds18b20) + +`dallas temp1 2 123456 Водонагреватель,#t°C Термостат any-data 1` + +**dallas** это объект чтения датчика температуры +**2** пин датчика температуры +**Водонагреватель,#t°C** это название виджета в приложении +**Датчики** название вкладки в приложении +**any-data** или **progress-round** или **progress-line** три разных варианта виджета отображения +**1** это уникальный номер и номер сортировки. Этот номер должен быть уникален для каждого объекта + +## 6.2 Вызов событий объектом "dallas" + +В сценариях dallas можно сравнивать с переменной окна ввода `digit1` (>,<,>=,<=,=): + +`dallas > digit1` +`buttonSet 1 0` +`end` + +Или можно сравнивать с постоянной цифрой (>,<,>=,<=,=): + +`dallas > 60` +`buttonSet 1 0` +`end` + + +*** + +## 7.1 Объект "analog" (аналоговый вход контроллера) + +`analog adc 0 Аналоговый#вход,#% Датчики progress-round 310 620 1 100 1` + +**analog** это объект чтения аналогового входа +**adc** это переменная +**0** пин аналогового входа (для esp8266 всегда 0, для esp32 пока что не доделал читаться будет всегда пин 34) +**Аналоговый#вход,#%** это название виджета в приложении +**Датчики** название вкладки в приложении +**any-data** или **progress-round** или **progress-line** три разных варианта виджета отображения +**310** начальная величина читаемого диапазона +**620** конечная величина читаемого диапазона +**1** начальная величина выводимого диапазона +**100** конечная величина выводимого диапазона +**1** это уникальный номер и номер сортировки. Этот номер должен быть уникален для каждого объекта + +## 7.2 Вызов событий объектом "analog" + +В сценариях analog можно сравнивать с переменной окна ввода `digit1` (>,<,>=,<=,=): + +`analog > digit1` +`buttonSet 1 0` +`end` + +Или можно сравнивать с постоянной цифрой (>,<,>=,<=,=): + +`analog > 50` +`buttonSet 1 0` +`end` + + +*** + +## 8.1 Объект "level" (ультразвуковой дальномер JSN-SR04T, HC-SR04, HY-SRF05) + +`level Вода#в#баке,#% Датчики any-data 125 20 1` + +**level** это объект чтения датчика расстояния +**Вода#в#баке** это название виджета в приложении +**Датчики** название вкладки в приложении +**any-data** или **progress-round** или **progress-line** три разных варианта отображения виджета +**125** расстояние от датчика до дна бака в сантиметрах +**20** расстояние от датчика до поверхности воды, когда бак полный, в сантиметрах +**1** это уникальный номер и номер сортировки. Этот номер должен быть уникален для каждого объекта + +Подключать дальномер нужно: + +| | trig | echo | +| :-: | :-: | :-: | +| wemos | D5 | D6 | +| esp | 14 | 12 | + +## 8.2 Вызов событий объектом "level" + +В сценариях level можно сравнивать с переменной окна ввода `digit1` (>,<,>=,<=,=): + +`level > digit1` +`buttonSet 1 0` +`end` + +Или можно сравнивать с постоянной цифрой (>,<,>=,<=,=): + +`level > 95` +`buttonSet 1 0` +`end` + + + +*** + +## 9.1 Объект "dht" (Сенсоры DHT11, DHT22, DHT33, DHT44, AM2302, RHT03) + +dhtT DHT11 2 Температура#DHT,#t°C Датчики any-data 1 +dhtH DHT11 2 Влажность#DHT,#% Датчики any-data 2 +dhtComfort Степень#комфорта: Датчики 3 +dhtPerception Восприятие: Датчики 4 +dhtDewpoint Точка#росы: Датчики 5 + +**dhtT** или **dhtH** температура или влажность +**DHT11** или **DHT22** чтение DHT11 или DHT22, DHT33, DHT44, AM2302, RHT03 соответственно +**2** пин датчика +**Температура#DHT,#t°C** это название виджета в приложении +**Датчики** название вкладки в приложении +**any-data** или **progress-round** или **progress-line** три разных варианта отображения виджета +**1** это уникальный номер и номер сортировки. Этот номер должен быть уникален для каждого объекта + +## 9.2 Вызов событий объектом "dhtT" или "dhtH" + +В сценариях "dhtT" или "dhtH" можно сравнивать с переменной окна ввода `digit1` (>,<,>=,<=,=): + +`dhtT > digit1` +`buttonSet 1 0` +`end` + +`dhtH > digit1` +`buttonSet 1 0` +`end` + +Или можно сравнивать с постоянной цифрой (>,<,>=,<=,=): + +`dhtT > 50` +`buttonSet 1 0` +`end` + +`dhtH < 40` +`buttonSet 1 0` +`end` + + +*** + +## 10.1 Объект "stepper" (Драйвер шагового двигателя A4988) + +stepper 1 12 4 +stepper 2 13 5 + +**stepper** объект создающий шаговый двигатель +**1** номер шаговика +**12** номер пина количества шагов +**4** номер пина направления + +## 10.2 управление объектом "stepper" + +`stepperSet 1 200 1` + +**stepperSet** команда управления шаговым двигателем +**1** номер шагового двигателя (их может быть не более двух) +**200** количество шагов (обратное направление отрицательное значение параметра) +**1** интервал между шагами (мс) + +`button1 = 1` +`stepperSet 1 200 1` +`end` +`button1 = 0` +`stepperSet 1 -200 1` +`end` + +*** + +## 11.1 Объект "обратный таймер" + +Прежде чем читать этот раздел запустите пресет №3 на устройстве. +Нажав на кнопку "Выберите во что вы хотите превратить esp" + +Можно использовать цифры из окон ввода: + +`timerStart 1 digit1 sec` + +Можно писать цифры прям в объект: + +`timerStart 1 10 sec` + +Можно установить часы минуты или секунды: + +`timerStart 1 10 sec` +`timerStart 1 10 min` +`timerStart 1 10 hours` + +Используем это объект в сценариях вот так: + +`button1 = 1` +`timerStart 1 digit1 sec` +`end` + +Смысл в том что при нажатии на кнопку один запуститься обратный отчет, на величину digit1 секунд. Если напишем например: + +`dallas < 60` +`timerStart 1 digit1 sec` +`end` + +то такой же отчет запустится когда значение температуры вырастит больше 60 градусов. Таким образом обратный отчет можно запустить реакцией на любое событие. Итак теперь обратный отчет запущен, обратный таймер уменьшается, и нам надо назначить действие на тот момент когда он обнулится. Для этого я придумал выражение: `timer1 = 0` + +Используем его и в общем получаем вот такой сценарий: + +`button1 = 1` +`timerStart 1 digit1 sec` +`end` +`timer1 = 0` +`buttonSet 1 0` +`end` + +Когда таймер закончит отсчёт, кнопка станет "неактивной". Используйте преет №3, как пример подобного сценария +Например: + +`dallas < 60` +`buttonSet 1 0` +`buttonSet 2 0` +`pwmSet 1 1023` +`mqtt 2653450020 buttonChange_1` +`mqtt 2653450020 pinSet_13_1` +`http 192.168.1.32 pinSet_14_1` +`end` + +Вот что может произойти на разных устройствах по одному событию повышения температуры... + + +*** + +## 12 Журнал (лог) данных + + +`logging analog 1 100 slow Аналоговый#вход Датчики 7` + +**logging** объект для логирования +**analog** или **dhtT** или **dhtH** какой сенсор будем логировать, можно указать любой +**1** период между точками в минутах +**100** количество точек (старые точки будут удаляться по мере добавления новых) +**slow** или **fast** метод выгрузки графика в приложение, slow - выгружает график по одной точке (меньше расходуется оперативка, лучше использовать для esp8266), fast - выгрузка графика сразу (больше расход оперативки, подходит для esp32) +**Аналоговый#вход** название графика в приложении +**Датчики** название вкладки в приложении +**7** это уникальный номер и номер сортировки. Этот номер должен быть уникален для каждого объекта + +*** + +## 13 Взаимодействие устройств между собой + +Устройства могут между собой обмениваться командами. Команды можно отправлять по http или по mqtt. +По событию на одном устройстве можно вызвать действие на другом. Например на esp01 стоит датчик температуры, реле стоит на esp02. + +Настройки esp01: + +`dhtT temp 2 dht11 Температура#DHT,#t°C Датчики any-data 1` + +`temp < 40` +`http 192.168.10.25 buttonSet_1_1` +`end` + +Настройки esp02: + +`button 1 13 Включить#реле Реле 0 1` + +И теперь когда температура датчика на esp01 станет меньше 40 градусов то на esp02 будет отправлена команда на включение кнопки: buttonSet_1_1 + +Если вы хотите отправить команду через mqtt то сценарий будет выглядеть следующим образом: + +`temp < 40` +`mqtt 12343442-12413131 buttonSet_1_1` +`end` + +где `12343442-12413131` id esp02 той на которую отправляем команду. Id можно взять в веб интерфейсе на странице конфигурация устройства. Или в списке устройств в сети. + +Теперь рассмотрим вариант внешнего управления esp с помощью get запросов. + +`http://192.168.88.239/cmd?command=buttonSet%201%201` + +Разберем эту строку. Сама команда в ней выглядит вот так: buttonSet%201%201. `%20` заменяют пробел. + +То есть что бы составить get запрос на изменение например pwm нужно: + +Взять команду `pwmSet 1 500` +Заменить в ней пробелы на `%20` получится так: `pwmSet%201%20500` +И добавить ее в конец строки `http://192.168.88.239/cmd?command=` где указывается ip адрес устройства + +В итоге получится http://192.168.88.239/cmd?command=pwmSet%201%20500 + + + + + + \ No newline at end of file diff --git a/doc/2.txt b/doc/2.txt new file mode 100644 index 00000000..529f22bb --- /dev/null +++ b/doc/2.txt @@ -0,0 +1,85 @@ +# В этой инструкции будет описано как с esp отправлять email и push + +# Часть 1. Привязать email и pushbullet к сайту pushingbox + +### 1. Необходимо перейти на сайт: [pushingbox](https://www.pushingbox.com/) +### 2. Войти с помощью google + +### 3. Перейти в мои сервисы и добавить новый сервис + +### 4. Нас интересуют два сервиса email и pushbullet + +### 5. Выбираем сначало сервис для отправки email. В окно `Name of your email configuration` - вводим слово "email". В окно `Email address` - вводим ваш email адрес. жмем submit + +manager_modules_firmware/blob/master/push_instruction/Screenshot_6.png) +### 6.1 Привязываем pushbullet. Переходим на сайт [pushbullet.com](https://www.pushbullet.com/) +### 6.2 Входим с гуглом или фейсбуком +### 6.3 Идем в настройки + +### 6.4 Создаем токен + +### 6.5 Идем опять в сервисы и теперь выбираем сервис pushbullet [pushingbox.com/services](https://www.pushingbox.com/services.php) нажимаем add service +### Берем токен, и вставляем его в окно Access token. +### Окно Device token (optional) оставляем пустым. +### В окно Name of your Pushbullet configuration пишем слово "push". + + +### 7. Теперь наш email и pushbullet привязаны к pushingbox. Далее можно скачать приложение pushbullet на телефон и войти с гуглом или фейсбуком сответственно с пунктом 6.3 этой инструкции + + +# Часть 2. Создание сценариев отправки email + +### 8.1. Сценарий для отправки email. Заходим в My Scenarios: + + +### 8.2 Пишем слово email (это имя сценария отправки email) жмем add: + +### 8.3 Нажимаем add an action + +### 8.4 Выбираем наш email который мы зарегестрировали ранее и нажимаем Add an action with this service + +### 8.5 Делаем все как на скриншоте и жмем submit + +### 8.6 Возвращаемся на мои сценарии + +### 8.7 Вставляем токен в веб интерфейс esp + + +# Часть 3. Создание сценариев отправки push + +### 9.1. Сценарий для отправки push. Заходим в My Scenarios: + + +### 9.2 Пишем слово push (это имя сценария отправки email) жмем add: + +### 9.3 Нажимаем add an action + +### 9.4 Выбираем наш pushbullet который мы зарегестрировали ранее и нажимаем Add an action with this service + +### 9.5 Делаем все как на скриншоте и жмем submit + +### 9.6 Возвращаемся на мои сценарии + +### 9.7 Вставляем токен в веб интерфейс esp + + +# Часть 4. Итог + +При создании такой конфигурации как на картинке: + +`button 1 na Отправить#push Push 0 1` + + +`button1 = 1` +`push внимание кнопка#нажата` +`end` + + + +Если мы введем токен для email то будут приходить email + + +Если для push то будут приходить push в pushbullet + + +Способ описанный в данной инструкции более сложный в настройке но зато очень надежный. \ No newline at end of file diff --git a/doc/3.txt b/doc/3.txt new file mode 100644 index 00000000..31226847 --- /dev/null +++ b/doc/3.txt @@ -0,0 +1,32 @@ +*** + + +### 1. Скачать архив из [релизов](https://github.com/DmitryBorisenko33/esp32-esp8266_iot-manager_modules_firmware/releases) или из закрепленного сообщения группы телеграм с последней версией прошивки + +*** + + + +### 2. Для ESP8266 c 4 и больше мб памяти (все сделать как на скриншотах) + + + + + +*** + + +### 2. Для ESP8266 c 1 мб памяти (все сделать как на скриншотах) + + + + + +*** + + +### 2. Для ESP32 (все сделать как на скриншотах) + + + + \ No newline at end of file diff --git a/doc/pictures/008 flash.jpg b/doc/pictures/008 flash.jpg new file mode 100644 index 0000000000000000000000000000000000000000..65be639fb0f053e3f58f1d956337de1f09298c39 GIT binary patch literal 160088 zcmeFZ2V7HIw=cTr(nNZdAVs<;(nKIC(nP8v0zy
Iyzb!T3Y&}OvmVtG9IO+ zJ;rv7k(q^+m6eWxor8^qgNcQe zq+mL6<{~At!5u1oM;2+H$mAmemx>x#4ZAUdXYW3FK~2NP&cVqgbW&JER7^%zPF~@h zqUvQebq!6eE7z_Y-7vmsVrqHM>b~^@n}<%$E>B(E+@JZr^z#o03<{2le*GpU_U*g4 zl+?8JjLfX;oR7sNrDf$6l~s*R%`L5MpW6TE>Fw(u7#tcNL7}H-X6NP?7MHN=8=G6( zJGkAwL%B!*vL9momh5kGF@kcDl9Q8>Qyt1hLh1@$WQ^n#C(ckZT{NJ&#pP|gTRhuN}g`rmlbI6NPze~gy(f+pwfv#ZLs>M%bG=*kp~*_%tbjR-JWRPWQ) zt%X)q5P>YZ$vp!H*i++`bMq|59cLowb>nOVSJ(Oo?x-(xP1YO~A=ySPW&Kg+3>^$O zBiJ$Mf+|*?K)njZ1w&Cro)?KgGDGtuP8fU_T6{|-c$WxlO|udKmDHW$B_x_>iU`c( z>t?)f5`o4XoDUJW1PMZ7^c;ym^EHh|M4$o@i2TzFE(JpeLyhr!5fe>>6JHnz@QziD zS$EtuEC6<85&qRx- =vUd!xM+9DYL=gBR z4&Ma_wFmv7y#s@kh^@&Vn)*Nl0-bz`0AhVVa@U*)&}5<+4vu&W{}N6Q<_AA!Ot`1V z44+Dz1{)XlEr}rq-~U}vS-3mcBk<2b=tuA&-otj85Wfi(#|<~CX5=q^`9XeL#R*;- zYj^)l_5S1$yz_JfsoQ&q*Y~bj@l!hygPA@xSG?oY4p9Tkkuf0D+(pj!d2d5O1*?Jj zJ(M)Pj>+>9Wa9+xEfE;wKct#Q1pIWcRD_pO%tYWP!~M@h;RQIv?gpeb7Sz+)FFn1- z3*kV?FR>q5L&ph(g#jpk?4kS?hw{sI9g@yvF(6c b~! zfkW%2|LuLoOD!xQ>0j3U{L8wQm{>GBsAUnA$)Q0gUQGt% njj{Swl-#jBg zmQTPzjw60@9DtH)Rw4qQem`N|t5kz5*L}B zzCqEvhkm;W`Yj0G#xz_2Xd#AR=sye;eaMCiDB({7<^9D# z70}%S(D$N2`(zPLfcEkEEiL3F;uw|)@KgPIoAENmpUv}47*7CwuYC=79e#`mEL^~9 z5U2~_htb9WuL^3NtOfEz>Ec`dV6gD~?gOB;z{b>|@1=u?bjAyO=lC}bLwI8f4g}bx z-%pH}kN=q}{wLK2ObGfEbmlKaFaMQjcrg5@{~Y@JKZriU^Wy^HbHBUl;jTj&p+ESy z2l+p+0{#7aWVGBV0$~nqgnu{8JLnN_eoMk-1{U~K%pr0zK#eCIatjh}f#QS?0Vckc z@*^ V1c+83@-190**-4^Z^vcj3zqp ;LHKi*ZHEA26@6 z{?vEjAQy;Z3&$Uxx<&g7MW^w{aS@;u_FG^-jBx1X=dln%&{{AOqvZrLZoHhpLIe)u zFlZNWxX{P^5R|{GVKNX$1fo39g?Og#aS4IRR1p9*u8cJ%P=CjR3n=LPVf_D&hpe}- z@1}`_{kzJ&@R7wMl^H ;$9VihLm(6k9{-T@1Qey?srg+Y$e+rc#9f0ifm{l1{DbKBpNOX3 z`9btTc>^LykO;K@rlE(s24R9PB)S!X9u#{BA|x0;HxA?Hnf+n-k_tP)8%#l_cX4O1 z!jN@6C1X&x+MsTu2`p{Rh&^F%aWDo7eIKMg$bgVM#L*m>fowr&!DwW)BY@rir ?NF*JFbs%hPL($o{vtYfI5K`H z0S9GpWc&;c%3A`zXini-aIf|7(Oqotsi@_{AsI@cA_VU~kF_QoSw-T;y_*ewi#bFD z`rgaq58zLr$B6*yiYMshAa7lG#_v#oyg)D^7ZPyApoUxzHT1Wxc|W^GH0TAHfFN@D z-E$Bpij^P&or>S79$GZyFBUcYFuAb}j;K6(U|0C2uBREO-1CJ5`HNsjDd_q?9>9wF zev4_m7wZq2rx3JC1YY#-9fh%H2| EYP#t2pM;f^UM2@xFN8ePS;_( zX+pg#3~wKSGlVfag2 HvJiiz9UGU9z+mqETXmWkceg*UL3)OC *1c0Cdyb`}5E6_x9i$eCa7S!5di#32mE#H&4bxk1E~rqS`(_Kt)hZ!ZY9! z%BfIoA@R^HvZ`q!aANRV=bwblM1f=fp|qd8DLr+p4tX|5?30+ou~n*=^Jsf8Kk{=x z&qBT}7=s!>T8pIqin_KhPcIWJ4#`3>sVc%NAj=VKpp)y17xwNr2TZv(qq@LH96Xyu zAc%DU4jCW(b^ucTk@2@ys51PNm;@t__U;8onaP&a#bk3QBJgSvic x<&fKL>hk{o~}P8 z0vlM+Mz^4(1YtV>FOPNYd%zB2x!W0mNvRVqgM+U_W?oAgKV)QiJ1V&FSL6oc(sl6q z-rdx}2gckw<|&7DT#5K5UI^y7Cwdrs;LP< !j@K;kU;@kb$H#{siZ1O<-=<2IBc9 zo(7kqt_OCW+9JDnD53Kt&H%yUSWaLq4Ef{eV`o~>sbHmGHv2nN7zW_+pu@9_PQhCE zRUG`irP>}nFxJ>yUjVJkh*fKY(tF-Itr$kR06AcXmA<}C1b)tt-Vk!Wg8mn=s)3Hh zi$nyQ(5Z0YYU_E(lFdb_2nQS5V3sP3_6KprHrj%Jr7J_5Oaw}nw?Bfc|D4(#7=e$z z%MHO9Kv=W{2&|bPWYnDD+X?an7HG?<5X@++nAawE9( 0EuK-1`ndag3DWT11BdDU0j}|h2Ne)>mW!MFW zW-_d79U1;Q85t@wq`pn>8+R(m B#X}p0w)e>Ls<1al*N1GPf-@0v-yMZ*GLkA=m*dd^f<7s zx<1Ze!tu$u8^er_LhPROJ|ob(Pq_x!JB74c_>C0!QteN!1qdwiEpme8O%M*m#RFg0 zhy!*_Z&LjAQD00~EBz$d#p>@d$nnoy-w*-0#z6wxrXVeHstEtYGux0Mc26QOqv(dC z#%cvpp)x~R7*-e95B=FL>rcvR`9T(Q?%p4CjG+XGAFFArPRqIR_LUVi?@q2*W9WIu z;-WpqeQF;3g8}F_GI_#lv%v`?jKen}A|RA`lL&nHvBcnRJjDaXcLA+u0xK2lgv+4U zu!Pe#Pw@3SSC>c8u7B8Vg^Dx>INZ8DJzDz+Cx5f5f4WlMa5r7fZudf~Q=;!k#U$@7 zlCv48it#8)_xf=He;I-27D923=P@>*E8{41`yt_3{q%CplFa-KUHVenva+W=2j9Fq zOkb*G%%l`%s?E5%yg?~nnKr?cg=Lus`t^^$KKuEEVb<|iXYI(ND79L(_6G8A _y)&7b~IL7vn*Hzd!USe@E>lQCR 1mvF71q!)cr}n3YROb}T*XC)9mhQhYzX6D#c%zRUxsky10LhlF`Z znv3e{8)owwkL;A=c?n(?b1td6tUNZ_apL*;@L1awFS{x;p3ES;cGg1gC%c~EmFW?V zEBO`HJTs@Mq789o%{z)Ky=^j%{CQRz9DMV9uEGN!yiaI pY%@6d2trmG^a;9hgjBWHEp#dJl5Jf=ZU{n42w_ zaUST1Ao(aAwpf=8oGV%-6O~bB9L=aRGpZ15G$}wWWS7tN?fyyG`yrdf^ARb_;w^D+ zTEkFw*7_xk+_~DKnJ=%Vzp6^M8Y3YO^?A>@m6HfyHr$LGs&wCpjcGX2oyZJdHmMrm zJ$ExUl45pnEkplXgGv4QOJO;H{u%`SDF_YSrvx*dg^VQnr7svlwo~4s *2X`c$~L#~90u;fWk{$6iEn`qp#WrNaiJGrhaQQ9)K9#3Df zgtuqNlZgigM@PI0Mq-Uo ES~pkScM_M!0^b2IYFO6d9k ze6sT$?9_y%RoMCM?r1|^R?H)vESqO~FJ=d)^_VAZ r4ZnWgIx85%YeEg_9_=c1;@Z>e%sY0_D-4hP*3 z Qb9|T1;|CI6*3f 6?9t*g aITJEUranHhtbLEkgXXlaN)MTNUJS)t>|79-z|49 z?v6+2HMDEBQJFz?{BFG_z22Oc>rV8Ptg-6l-?Hg)e7JL3C2q&`h0GImA%DtI`FGsf zA5VWK++hN|ictBc%jVsZ4u#HUYe&bgQhS{>bmK+SF`b^HwhE07#TSe*PVzk=0<46y zZXQ#!1wN;$?5$#N_2-v(h?@zT2)SoO>Yt;CWz3i|DXw3Px}X3nX3NZ3nxvUV==a%g zB`7?U&rV*7^DT*$uQL3C{$e9|o9j}y9l!eQpe<8N2!#G14KIbg)TKXAV+2of)4N$5 z3;X)b`FxO)mJ?l>oNdnV$CerTb8k#-z#sDb=gcHE={JCVv5)v`Xl{oiI7{O}2PP9q znd) fVCO{`Y&N z_ 8eW4MTOKtq^RQTfuxPq=jXDVF~7JB}B(#t^%< z(6zbGg|QB2KDItr`S8^x&{H*eaU}oar vXL<0WiOJRimQ)mSP=+xHpkak-l?8(Z#oon3)i9Vy16UVm%MwOqLZh@=Gn*SYc# zEV%n!tz4`Fk#M b-<7NMXr{ zz)@%*d{^ L$Y_4OP8 zN&W>27K85>80dD;U9FHH3ji}1vf1TNpz_rj-0ZNsF(8gSZXwamf|bZBVAr_KA^!Y= zptXW dHyr#G*&;2`P^RT=$?aUb8w}@ld!2V_)dyX3TW5ss-9(Yg zd JARnogSo*WoWC@4}3>s5Ru zm!d7`)$h5CiEfJ67g;*yCV#8CdJumO%{{YE6~1+H!(qNpkd|xYVH6QyE@L|HUSXJ` zaK!j#=%kuHi5iPO)dmr;ky>rl5`efs6IeziZr^^PyimCG3{C@Oh}($(=PE y@+)Np%+bH}39Zp5-zQY8xBuZfIiz&vxBxF7i?hI~WopX@h?hzW{d<}Wma84lf zKztOAnnBWm*#Q-}tU+D|=FGu(ry%KX7H7{STwxiD(z2Oot8N&MVWxV0DUm-V#IDxk z)}9Oge5Q_z;D)K{<5j1i)T1mr0s^5sdq%l-ianhnW+P2xjG-+Y*CKSqXCrX#Qcci3 zlEdW{5=rDPxUl)R2X%@(@*x>(JhF%sl|?Kisj1SX{oyUIYdtcbO3Y7o==mg|N_-@{ z)A)*v^poBLXMGl7r{GQP-kjjNJ3|WsM{Nf#c(MG`6V~2?fOqh&80&+|7;qlB=>@yR z<~xO8#<^ZD>RItrO|7kcFHY_t7bf~7=d`ri5GS6(%>l0zi$WX#cyMm~JZ2Ifsqs$_ zwoh7tOPV*~_EyM^1Ku^^7o`W Ns7E8@*by|G*#2VAvyTvIT(ZTNPwX(K{YA ztKzc^f0w!zoXM>SqYxwP`%VPLj^m~s`vRXpQ (ktKJ*!_=&kC2YosANwzmMs3^LP71-fZ&Po&%U+996nr1^1Wf z6tjvM82uyC$#?EdtNQu4{**eq+oyvwOScW?YS*khcIxJ #9$SHW?+>CyJOVD=}@ktPAY876V=dT>fn;t)`5-jP0m3tlXEbK_!xTfAZan@dsZ zE!7pT)!k>3$g%IIjLp>m)-Q!VdCX{@MCrpNcANI}f>(FP>hz+DWs-}^pRRmXceUi0 zu64ftn-411Y1m6s_J~r2!maaQ;$+&zbBR@ly(O;T4Yj^jdvMR3;Qif*&)3UNpM8F& zcj1{5FK>^;=BUZ3^zzc6yJ2euv(*W&kJ5IYm5GwiJ rR5vgp%Rlyv-KcXr&CXF5sziIKzeP zJ?&j?&TWmrJ|qGmM8Ga+okMTuib@3didRMn(5p55tA3?nX*=aY=FM{0cRV@S_Z5Km z6oy*gNR)F*y(ITVmo|iadN=7UCN&1tT2qyAwnN`Cs>&1}y%>EIzFceh&ioz8uC_p= zpG1YFc#SNz(UonD+!sxGH~3lZeT!GIDTr@`(0l4kFBIIvY)7BUDeKWV-u9~FE!k>w z6zP-5uuSLtmoW65NDCs6xhRTWV_B}6duvy7(Zk9i!(?g4)WP2luPW5Ce7SXQO6`1_ zIJMg+kI44hM--k4rv#ufeM=lT+ G-hG#>5s$hBRz?8|&z>9I1wzPTtoZ~LTr0UxiT7;~1ckegNFWwuCz zzeX|-lJADIndUb+NOBu)7Yo66W_e&YQ79M z)}6%=f$);KJ|+2r#kvz8wCE&V(k(Qcjy)z3Goj`Ld_(6W&17d`Y_obSxQ+&I>hgXU zZY}GIc%wda_m*g00maK3>q%0AN2A1Kn_rQ qBEbnBL&l)rXSRQcG(DPK1jA zjAv;=rP?8Uq{fx^WEAbEtxiTe=Vb@Bami&hq0)FQ7Oqp5nVV;4CIwE5 jraBLj`&oZZHmJl4!$eZ z^z}`id#o*i37(1e(pK}doGJ{tzu&@c%w{2F4pHx`5zbj+FAr#m<-*4>XTIw0RIcfk zkTYfsg2`dZ#-ge(To>+!TC1Y9r2^w>W2)`47SD8{!lVo$t{|~G+ZEkPQR9@Zwn=o- z$Aj~^tkfGexcK8s_u=a>d<33EYxtbhG77fuy5#~-$w~=UJ z>m>p(6-gq{6H--=-3htTy4+%$g)6@CwZ=SiXc*qem} x{vzkbdLr#)jNpaTXGziJ1Xij>rKM?C% 8KX(KJ&!6Js52tBuCX%3VqUGVkR9PdY4 zxzDyM3*Cy t@4|ploUdkSNxywwTxaY`Bc~&C@+5x?Pk8?O7@GQT9Ht{{ zWyoDQ#ICrc`gZa7uou>Nb0>0Zg>^kPP(`u>!_c;F(w1fR@YzjFSlGIaw=mZ0Q%&XD zG4pp6ai610Kd<@e$495xzB&`WsHB}{fw%3S!a4*y;FYt@wC_!DcSDR~8qeq6_p#7Y z`BK2P@Gf-m O5MDC|$x~yQT2`Do z!Rcw0d`s%3(V5%{>Cu~LwD87J{t#Z<2*KGqkMCX3BKKMf2KU`Mr3MMy&dLI!PjwKt z3}8YwP$rjlC8Kn6*z(SZtN*4$pkix+my4?#w&}5t3#Vr#XCUPf{$SE`L$r(y5kZ7w zc;l}%Fl=#?@rY|PMSnV0f@}73oER=_Rlr|1acrpd(dYCNuP+GN XX7C &D8bkTY!xca8dtR>sF6oGm8d z0;lS;Q3>x83Ws^YO+b2X><%h0zzi$f84 nF^f*=8xYkH~Kb^=}1C%r{Unp&HR#Yq|F6!?)co-X+j40xrlN}^Vo<|e9MEYE7U z`oBr?#2UV8ps~)o&HO?^X>bUE(W^bR-85xB-qKTLHo0ufF6ZHYmOYm4UWBFK6XW9M zcNV y1an0lt9nRUfD@vRX!jmmvE<7R&*K5&v5{*8=^kWjLR72DU?mcvZMqSu0X`FdPx zRYr|^Pswn4E^AjbM{1QV^~Z|2DOgc0QFyt6vuG5im=LrR0L7TG 8Oe4dzl^RwJC~kpCxcMp{&6wkE8IZGAT^zUvCS~9yo$K zP%4Ot2=Lc6N65ym*Jr#_3epmadauF;?^eOg6KKKO3YveqALN2;EFLUC`^Gfz1eg<) zXQ6PY3un#XhX4yN&Vl>aL&(O6zu#}Q2H^ML<Ak8Nq$8*s-oQ#lPkxFasjcq~Hl| zmZx}uTcm6)1lC#<+^>!aqcH+U@qCpiVJNi&$B&QG`||PS=Uu OBSysJ$F@`m84Sec45^n?<)`xq~69Lk6u;d`?-}mW7Cx<)M @rS>= n65JbY`AXTz8aB5G*<^y?PQwYOBILo!k0dblYVZZiRGdl3aI_cU zv=0e9wmb_XMb+{#6V8ZQdEGU~4g0a`IAf?NM;AwZ>pEW;E6bhhw;3LO`ZH;bKa(X{ zMs9f#Htq+v{>vu7a7t0lpSkP)6KBum9^^Uvl{@z;jRW!k0v!aL6C}~ciF0@MKo SI-ziPc#bK@^ZOp5nz5K&^`g&S`E7jbt(5pKiRUT~tfu8@8e?r~C|E}Wyr|JFw z68`@U;{R9G|L3W?Kg2^@yhMuPb1|QS U g!yi748;|Ej Zryu zT<@m9-C&U<((hOB+}wEuQxmgCwxREt!yl^MUgFfW65tE>f6n&1jd)jEn-n!95P<== z-5)TlNZ4&utSfyZ0@;%Y Y0}EGaTJMU(S(-Zpljdy6lfztX{5+?=)b%EhjS1_mp>Q zV{-H@yg-6oqB6d8vwYq=AsnREw{0=9G&vYKXrOl6Ewgpc*jKQZvQT`a3GTT4VD;*~ zChk|78;}&TP*RV5QjM?gDGz?`iczpOd#d9y9WZ-qmwWGgEsbEc-Rp}=4-ZRDgFJ}j z*IECgOQ}eW=K;-&F8-M+k@nl-V$iU~Jh$`eSSo)db~Kzl?DFTr%*Du&i;j0OmErd) z +{ zQbfg5)b9=pzwJ>>dCgaLWsXpZedOlU^h|OVto@Q*z^mqcw)^HOz*!u7E$#y6yC<=f z 9nDawovv%CN^KF1mi_*zL%G)7ldEUY%X9 zeyri?^9kO#_7#Z&%XJ&O_fMuC_#7l0WNtg0f|j~l#JjGHuON9hNfw+9#i{h0k~z~s zD9n39+~%6l8ZTFrR5MhaDBg5*a%nux`AEi6$b3)y^nQ2LxyA4Vv57)-r}(7-XC1M< z _68*EoJv(tSBWzuCGA>^G>sp3~S*Om; zk#@m*ssf^rYKC6-FPFdy-!BIM%MBN>dc``&Cg#<`PWe~!k`URg>iQEOX{vp%@TxuG zz^8T?pM#z@=zQ>%MD5-K6^Wi29j83A#d4TUyk@PU*V3+i;&rsltBjlUlM;bXDtWd( z$rk?H4>e>0+NbnMyDjvlx<=&Hu$h6*)kjJgj@iWBC>Q#y$Q~$rgwO2wohiCo7ufE< zdlDp&94FG0!gi^NvoZ koF~#-66oYhEH#%#3yvZ{9zO ziB7wEU7qs>K-Mc#K-P$4YYVH -j6J9)A z0e6Z_yoCm-0!o5THJ@C%yGX~jG 0yAFBqWWGXVo;WjMS^w?UtnJzUPb@WXL`-% a7r&Y&hy#mFcG-F zq@fpn;9NfN((xe7J|586!8dJu%$V{c<6)bcGOeckW8OyXi7}Eb+n z8n$B(Hw2;gqby(L`kZ*9dRmM#l}7hm6X~-Nd1Ly7;2RL^RyKSP+&t_y=pRYHLj)kE zu?L VR+mzpC1#9%X^Wa02 z4hJITh1JU_h9P5uwt5k`Kh6p6k5AOC6*elA6V#(NHHIGx e&r~mM4#3@2c4J2W-e&3PZiSO+En|k5X~xzMBrs&d$LFj zV))p|qv$8E_P<6wCZluSEgq>h1)V8(qDcu$QC_((?%(d^v#xylVG9dMfQKF2##S); z;ch4$ ;O(E#B_c@-QW(T@Pm2k@5=2X)fTDjwa*_ENiH^%VFSAKKQW!or znAuMRL^(xQ_kk8ayLBMBRm-%m7rs5M8#TukWWS=x)U4S$E1X;iKq+d(ybp^rk8ktX zfFr(pqCFfwe^7qlO$2rq*Kn3R#@$ ~%?4NvO@S7=^!79MzXf@jn;j32&6u5*@x zh1%}OO_2pMe_V({=tMRj+nMLoOWxNE@aL<}EM>jziswF|^4^{Z4BJ*!eSPFmK Z=id`pjV34mF@LfA|Pxz zvbO@w-RHGHBtNV`1QU)A)L5ZrFxxRPjw28CW|r7vFPtm$<&@;PcjtZNbEoz95XVsi z*b}!5c)+Hnl6>-z&5c5tnC-`TjJ3`FS~OYp9lV+NP#O$;R9#0CEZ;1WOHN-@p^b%w zDd~9?*z`;;7LB~MTKD^Qrjy$Ce#JUjOr*Y*_N+YFrWy+g#&7K QT zaEIEAIL54492qc^V g&V zQ9e^MZ;u-kcuq<{hrbA}U%BgW-o8tG{>y~z$`uhZG%`>c&*nSr&{{z_l_0Ib7I&xD zZtJ7TJ;yu#gf4Yd;W>aq<2{*1_>qi7ZB#!N@-iQ4@+ht2=zVr`1Whlu^^=nER1hB&j}~K zT{LF}JgHKbz1d@@pbbb`xA3k;wkp}ZhdYmLC)p$|w*MH=EaWsKvyq5&-}xw!AGV&F zrKNdP%a8~hSs)zgQzF}!ck@M`Oh~pcF t=+w9fct#3ciuqM z$T!${{hjrhShu@^5BFDtMaa5T#BdNJT(nAT5)nupakKu+ZoHG^Uo{p=qj5xFMtFbv z{XGx)Bvqyc8uj$x6hDfgqWUf2D6dYHU;v8@&RFzT#EZ*a3412tGELgPa}{CjYwuMY zygOaLI3?ai ZN#{I)>$)x1qd3A>_T~`i2=l(#%J2cMY(1>L8Cf}Wm%1UiZaL+- z3IkT&w~lwgg7qM^ %<(i!dE4mm#)`)R75q0y=7nsGiyu z55TSU{6FGhxMbAERHvYuqY|fOc1B XBt#ls0Z+ix0wo>$Sh^Mj!QQl^tQIMfU|B z`T7LiH4~f=hCm>owL3-&8HRL}n?IY(M&^GlKBE++B^Za>x$xBztJh*Xja~~>A;*-r z+*EqF;$Z8AszkKB7?zSZZL)si&>z=hW*)L%L8o#nYK`u47|a}(IRy{!yi;)N;ox3u zC|?!A9=D0)T2}O`X!PU0U0xk7I7PQ&5FPbIOLn4xX0(at%FP@Ree;eYz%oWK%B#H- z@RYTadRfxNCa5uv!GjLk0`CzVf=R=epTZkx0pGAxF90Oay$~$uZ4!7jBzr#ia92DJ(A{(;Y9!yE`6lS(r`ghNrm_8=8D*GnuiDXgB42~ z%~M7!A`%zK6nLg+033X(D^w<81>qZJiB7``2i~czj=h1iXP?Drx(V-_rHK u1#5H_+{V)F A`bhcKmCs@+R>b#ZDQx-bUA|&l~A)-s@`? z*Nk|`$39@X{#;GEjWhaLLeFlV*{WD}&f =TxWy?!1L7M?*WGYV%j8M$gvn^d zhgmhxglrpLK3`PZ3N>owTGKO#pL3u~EmJ2yX0B4Xq4W;r8!k0!Tg@XEkEt_R-ITk2 z3UJ!$^7TIYK!u|JOM1o(YNOppVn BCKIxFHM6n3S~?7ma_T&DVFhHF0tjM$K2_48>s zfizCGZDq-VLfGX913F !e>v2z^H; z&P&iL%H)XH`q*RY 6H|i zPO`pxGve+8vecY^BY6k72Jt?HL|}PB?|>Xk?DOHDxQGCub_Sg0>6j;xR&)ijOXUVC zLDNZ2RrNHvMGygrZ!zb{BznM&!7Im@bKm u;2r^4_!bTu+#+a5<=9M!VsE@1QAxE)UyLypyIWUTS`+2!7C{%8 zdbvVEn%Z)G{`t6Vi4hGz20W&aWC4sB*xwAa-ztd4imR*3lu zPKF4mHhSLQ$u7j}%7r}n`cCGe*Y@eTJJ!+L3GphAcFhQD3SZ8p#X!L&xCge jXV{UiiM5o)V+Qnwn}@ulX7-*K6EM+pt)#e0OqhmzN5a z(TCSTLjYWXRm=z{ldTSKqi5DJT2bmaHNs|Ijz)@@vrtar3(w>7P4q^yatv7E{iC?0 z*4xOD7jRKLRvuq+gxha?efs_cc;t%3sPAB29)X8^+1pv?N38C8#^Is)&};K+RPCst z)O)xn0T|nP6R(6ZWUNr(d;hPdk9KQ{_#!?Zcb#cpe^aQ1OWmmfH#aTmGuNN3isZa5 z6gt%jt<2o1e%NkMV!9f)-(R=dG2=O($8dCP!CR86$220ib$e}JMyoYLkV$^XyB#s% zZswWCLC`~1Cu|kwEm}Z&mEhBZRUdoul~i3(74v0IbT~EUVZV7+dEQXln{@pB!#M=A2SK&Wr%5OnH;uIS&W_V}$*n68B}CEh-re4H#HSGt+X&!g;&9aNN^r&r-TO zXgQXRzJE>N!zpU=`45E`aAI|OO{3aYk~1UY7N+%iEoExQ`?9%6-5YaqB5sRU<{gJO zn8Jfj^~|kK8~b0@laTZ;cEA6&T`5gECA!P-Y;Pikt*H6p{BHT)(3dkMhF(xq1OxWq zHCK6rk~vinUKKS?`uMInn~uZPD37eE(*;5wqE{Hvdh(w?g=w$RzQ;dz;OlYj3N0ht ztAd8O#OG$Ayr%CLrG6YGsl7fEf4|`_WqpR>ll>3M2;C1M+C?vV*xsT2E{WgL-T0)j zuRBu=c`Dc+_jW(u9S*|~th6VPh%K;;Vm5h$;Uyf!8rwL*uEWy^9+f8oWtNO@&h-g| ztX#c6j(Bh8&T9=>!l<9)FSM}L_bS_enwE_|gN_u#QQ_`eB|OzDK6q++x}5j!hXCjq zRe#|LycDX#f%?IXDxLTaq1w8suyYh&<|Lk6Aj?+Hy%D%ywoU|m2rxJ82_3jO{4;jg z`-GcQo3}JuRcx?~m#}tsDfATmNsoop8e~n-c5YQMX=I-7%mwLLRVH?t@jP&2zDClH zuBSc6E}UcS pEN)^)rl_DGRtsDRiJ!DNVA#A+N;4KUpI1ph|` zeH9U?OF1kB`0MS`3JZz$3RvjyRc@KE2NqX`r2geDw?v;psvKO$zc5<3za$0L1N`}> zp!)(#-6ZsY%pSRxg~U~<{ORxN|2)!(bF+2=N2gxts+i^<6jSZo!w2BLlKm@29kxG1 z#-rCE)5Zd?uOx*|W!ZZzkQR=D^%zNZg9lseV9A8WU+#<_B+ z-{vXLMZN0adz9nwNdq|6`A>hlJPiiYw|Bvl4cuUfqn8?3Y|;JK+x`&|(%8R{`mav7 zNXdBGoV|hV@wlyVhZSAdZ04t)Gkk28r6lK#RL{%FrR1JHmh_6m<1d)|8v+fkM7Kt% zFALg}iD!Sh{p^^{=6^rL{s%itUX#c>S`j` 2`_rHa3HEu+FI4t+0y=GJ$=W4R*+%ama?E>Tq zGT(eR9${I922u}*z{C9lB!GUlxjgqqIUXq)y`{N7LDO`-X{Mw$rCfHVmK&_72M;HC zChwd83z!d&Vf}kA3VLgTvhe{HALh2xG8rBx+z2f)8yg*4=BgcB^N-DZzLB0|l~HjA zFB15X@x8s6`h}zI-xRy>&kFaace$oY-~m-9gQg`tTJ%lV23-)M_NQh~yc5vuW)s2f zUfa17xMY@n;<^ZBtUq2W!wsogJm75msgz!N9V$&57(u7V==+K91 wY4$XI;e4)a-fH*qUZ@0+}`!KvD-<74D!#JxZz%Ov5Rpt7@(D`SinjE)C7GmH_ zsYIYa>)-)t%V9dkI)`9(sg|P0EjPrKr7DizG`W~Prgzr)ve{!Tyx-$Qh~k$>EW{X_ zn9mtv0UpS3&pL%T&!#P68F$vf;km{MZ|hd+Rs1wZDQ}^z{LaZ0oV3}>xKwRA&K#m@ zV8Nb;_ZWDja`dL{tHlATmbEjb)kSw#9LUr*^iGo559w3hD#w?F2+qIr7RB52<2mzi zFD8y(YpUYt74XR`Ik2blNU(OJh#LzD{E(FJmiok4SYl(z_Sw1Fjq+KX?ZM5ik(Rc2 zaAyRu%R8yYa)YwrUm4UyZi4e;IhJ*zqG7(TfZxm|=KlE1rPEgpjt1s6d056Mw4cyF zRmwsVjY855yXm%SAD2;*qr4HrZ8#i0BzKla6=(THQ#Yi-ukm@R>Hk>OJ85aa9$36l z@DWU%>~1{#^PPp$bQslD>{^RC)#d(@4js#@J)70}SI{GS BuvcZd~_1W2L1!s{e2qJNsfd ze^x77p dy=)bk3iGS7|1HkC3v?cv8oxvw2rHZgHRE6sVjwC{w2 z)wTILqF&s_)5QoVY&smr1y47ruvGR-GKmU@p^Qv?!~@ D#FX&V%UkI)CIOOvMV9Fm5NWnC8?13PgddQxM|#dOm%9We2#cQN! t{mzUQL%6kC&(SOa^?Lp zS-9k3#X4g;*xK =B>{GRH}9M_*FIj7t+g^ hR zr7B&z)F{$Il%~{BR8&fY&^ts?kdA @UTe=e#+YMj1xoaVT9K{FosO}&X5kXrBOJzB(|CSjk7B1q-*w)a0$4qT zyiKY+?UyE|d}-5O?tef+89|O~A~D||%m}8Wrn@2I(^o^+AQcl+Yp7GnNgI^lu(AyD z6 glzty9#1K9cQmG}y$+(oL=JT=+FV)h{(S=tGCz{n7jHiYNe<8?)R3 zD7dYBAf@B@F#<;&9V3s1ftf>NP_aj~!67)*8(Eb-0cYU*kPJU}O;c+5J~ +?^<|wZx7@Gn@0DP2mPO%GA7! zJ`v29?pLIfh?eEq7>#o9hH7~JaLq5ueivqSucc!6eGSujCKhFo;ppi8;(C7Jw~SCB ziRS-F=~1Ww=(L!Dll_A1-Rw1tBC1FN8ZN-mE&2D=B%xpa(rw?KEP+9&5Gf?El=>ZS zfwvQ-g{xxfbYi0G*t`MHozikDt7mw>c{qh8>Na))GhDnfSf2V6S~I+7RWfaQ_hnht zXXt)DrMk|SECIa%SKV3+fOXJ}{r)5b-l|#|8a|O1>bQ+hT}*XZn2lJ3%9IR-r`uH3 z8~zqM;`a$&v1uQFX)}ARKYrWPvaaUYe87`rv9QS!+^2xIsJG?IgVMeHLScnru=lbP zyDR-)@&!vE+%Lo5y>ssS$j0K|Wwf&8 !Sw>-7Do(?480Up7xuqFHZHUR_W!yTb _Lb;X@kQ$^ UWmTVNH|hrvF&K%V zYCSc29`d4m CDNQdw2 zT8+K)|6+9X8XU;^p?^_%@gnR<;R3vv5PCQv@-RS&e@*x2aAsV*Cgqr+fD<*@6>uC0 zNt2~W?e3{Rnm9R(TqAA)6=|~gu`bI}4Z;^40F4^I3IHL+qv&s_wLbpul*-n6k9JH5 z6K6D}FAH9lnri1x)Ei}p0=2|;U;q#Sa&%-e!RGJV8W9BS1FHV@f9zvu306OiR}wTD zYO2#D^cCDHqG^}O9N6la$f-SEG&SB|t#hmv#7{Wuh9U3dqOAJct+3L*8M zP?%rGoI6DtMC2}J?*JLWIb|9}_yYpagw;PF791i7$#58E&j=lGYk0Z8)#@_ygmKUQ zPIUI0)GptyK&Nulqd+!CGIpJIOU6x(OL)sg@C{p`w`XyI`SH^h?Sqdnx2ZONWJP+D za+-Qhv%jS>(Jx|1a+s9%Q82g6WFX=E)MKOGaGgKt$!2OX%Gy3@GwQ+LufV`XMIPW? za4~j4MBs|aQ~_TVi*AGAdc>j<1z^Bc)U#0TN4nVd{n^#jWWSjvr*cO+k`CX+3O6w8 zdM)_FRGVx9TKi*Vr@I3o7cq11D(t!b^e&r~;$bnT&K7dt`g ^c=1S zghS`3bHdz`#_=c+>w!-!PfjuI^;6AAwtD&{zn2|P1}bcet%pS>H=Au;&%cVGmUMr# zPcCYX3Umcs{rI-c>lf4g_40IPo3p*ZPr=&=#S5l3-sZI~x6>OxUCQ50(>u)Mch8KP zk}Dra4{rc?X$2>M4*_!o(@T^>{{23Lch^6{G3uhjpvjH *jlPFB(#0LlQU>i~w{VKlOmom$ zsJm+fpDQdrSfwYQTin1|eWC5yPyEh&5w!Kj2E$o)3sh;!7HcV!=$hnvB52HH)nF4? zALF2I9>&EN_k}V*K*Zi5)7#>L2KrCO9VLgsk1QyGTRluUC*6dm&LN6nK|`*vsb9B~ z-v9~DS`cH%>&a)q-DC=%t%Pg(29P%CSKwpz2!vBn IB z3p*80N0ON0UW9bl7>HCnynRDkmU0rS(Rx9$NZ*%hpCyycKAXJaS3G7gD0(=Nd6QH; zU3B&CcmVy+2Rxw+RaH7$M-L7MQak>BpGEy`8PLyo_pg_oyO;O=fBLSJsN0ST)lDzM zUBl02s^5Nj%+r5Pap?a>DC8vGoPiMmY1KXpGSCDAK-S(%MD%wc@Zc- IV9p@3)oXIDxDS$)`3j|( zWcQDy2L`lvM~?^w>GSM}4ZH%X^`H)*2>jWH`9@xOp`t5TuM92IcD>_%&tyyYwlRA2 z8j1KXZoWpgH4Rg|QMTtheBz!1>P@mmkdSSTX!6c{R9q-$EO~O6cpt=?H|^{8dZ8Qd z%&y8u{nCd(lJxqY!twtdp8pr0>3@KSWiQ+k020scV2U$PevH5?PppxRlung7e^!0F zBUj@kj;~ab!m}gQZo5t|^1=P-9%q-NLzr>6cxlO%1ox%iB|N9Y!$TE>){*|Z*s8|U zLn^Vy Q;uEmyYnz$ z5kFy@^m*jA*Bcrk%{#Wub#Z(NF0}nU8ixJSlLLmEkSR-W5>QQuDn#TfhFK~Q!C0w7 z#l1H0RjEDtZd6w7YK2uUJp0wK)Re#r%{OsY#-mSqX`{7yqE@JHY%}XqkPP9+nvVVD zv8e#FvX@&^Ro)P;eqeeZ@`aR=yo8MGwoB+tMs{a;>;zqm_LfUb>_TxOond~Cnfba( zzm^~O?~T4-`-L|VANW@gDNG4hmfe2I6$oHs`WB?+q|FgVW6~6d0nB21rdOi5Lv^Hi z)Ixb9)Cn=}4hl7jlpd~6*AkFh$l)~29mIx-SSK5sC8-pXv_kj#ay`VsO;cJwLv4b! zjYq5G+f?ft2%ocjd~^-lrI-B+;iiTaPF^{lpG*f2&y(kNt{=i}xz2fG87S98XyfR| z9bQA|AtD_;6FYamYeP{-xu;^)4g#BhK!CQS_hOC53)>HEz|IAiYou+PZYAi?OxM=# zX?)Iq{>cG!sxCqGsDL05xo3eHah `eGhaxT^0a_wm-r>G zt^frs0Rd@**w!H#-5x+rP`hl+*U_VK^yBeMJ!9OFte;IB-}8t^q&Pb2m>n1&Taq2J zf@wYBCRT249t%6tuHE!$YT^a&%e9`}?Wu!O&4An+SL*=V0oxhyX0QK~521GbXA{KW zWnnbaM!bhNZ_eueB0Klu=I-RE^&`e~g*s;At5-_BVgy~@v0-(jOBQq}P4VDIpR`J2 zZ0#3gOh~jF(XXPj-hKvcuCckc!3Q42+BIgx{uK!F{inqjeKBTi0(itf1;`a8le{;< zoqTnd#aZL!4kugAhKDb;La_;&2@5GivUBq@+oxoti*g1IMy~DpkFGXyMUf$N{OzU) zk^_cJw<{rU?Vk^<{9dT46wGI@PnLZ5@bpuBwUYcY%huhTDGy?;^r`GgXeX?jFhm$U zk91O`dLHX(p(ow9N1e&{ZMxd=#l3XNm9-VQB{rhLz<`<@q;n=zT+a}g+0VZGPqsVs zrr^_S025}GNkkah(FYez$1K~wG9W=eMBwNyrRICS8GAN%Xm4S{4@(v5+t<5xZPxCp zePehU850lg#~!^Wts=D0cJc>Hd-iubcX8+y4{zI#Wole1xYAy>umGz^pGm0dX?xx1 zo<7O>`ortuQ#1YVa+rva3Jwumt^l v&m#IF^9`(DfQeaLFM8y41b zU`vtHcv7jWmis6dRxU}xR~>38BNv@&d|H6F?@)}4n;kIdzjNUYq( O)#~uT2^sQA-?!T zPm^11_;uCC4B>B|(;hn(q%iPB^*GASlOLW59CTLBW-J>*T;;^52nwH6#+FA>(y32d z< )!hbl(B((nq(ScHUpwP(vF3 zRfi-@ dF~y6OF(FFn%QdR#5N$SXx<_cs_=RjVSk0efnyh^ z2rMcB{77QY(7Mv?oxtaCs@`&cAK0l;zbPsZa0g0-nT<(BuzxG*<36`NS4^0?FCl2p z?6KW* (880H4Ej(WN#SC37sNYqz(1!t;M!@olAfYLWQ&)5<(& z{3`&aK%MW;EtnbisFqZ08l~;qpH!T|2i|(jJAQ6_k-w0?b0q;jfygzgQ-%!^Y0aT1 z{3ktZLW>yQ!22 !}?_B0!}*dPkv6urYe#ulMSfud)#)7R+fMI}5`ueq{nlg^d?^D7oF7Iz>D zl&uV600$D$j#mltWkfV5QO*BOu&oS-ARd8}Y%iPgR5@rfwG6Fb^;4%ZY(E|am(U`p z%37Sux*};6KW`3PhfufJ+;&hjS}1~Q*WrhX%wS&L4!H~CJmu-$>EaocH8-igEn9gX zk;pA6j#d2u{cX?$g-}%HmZrV-F4<3<>?N31f?&?SHr2_0@?5#$`0$5a({R>?=qN!L zy@#pE;_KFX=En|*$Dgi=U9z1O#vN5Pts@AxiL8UZLX@VdeTC99 e8VE;WgRbi4=+-;x9Z#MPw9!V9I2=HK4;qYVjj1^Dk9rD$UKmp_|3k( z>2is}tCu9zU0+9r*{XR4>uK09*U>a{({Mu_hgzszQh0o28+(0JdB6O}7W>Zdd=eh! zrjGkZI)B?Y=Xh-t0dJ0+iwDrMJ9l^o2X`>Z_C$mZ-bsb_!;`I737xzcRy$zU^6ira zIrthO77>>=EqJi9!BU(%?67A(z51{s8O@jJdQ4Tut+EInVLMt`I ?OVE!o-%`&&Ce5(c cL2e^NX2aVqc-_efSv;6x7>c(-l)LAkai$pdo1iRJo#aYAbHFOwhL+Dn_gz{P6 zuX~3Er4}&)rqe=gb1Pj%7pA)@HA!2&2qmOKS)(HBeE$u6CV)!@5TH)EsN>a|#X2Oz zW(k?Wxgzxso~P9Tj~yvoZ@*g6zUplqNRZCAonxqX`;RFB&*`vLK2o+)Eej$2?JVBl z{XPYk1|RqX`loA}`e=b**U8}kFIwwvr`r1R?#@{ivY|AN-sA6!jmEJkkZmh7TAr+6 znzR1pU*8Gn8U51*;qK*swc-Eet3a4a2pi)(I-()I7jYRG+F~$b@aIV0xdA2J%5y&r zHUjfDNSd{Q==VndlL&%0!sh^0(FlM_n#G>|z8d;(1xl# I_B_p zEwNc6l;9mbF7k4(tmFsml}Gn?$6N|&g3`DuNYU1r1IFlE!?`0;9Z8Ei5)Zk|c1XfW zrnZbKA}od;42o4iPkqB!?{cgznrBz4hnggVZaQAN4@%l;S acj77n#yJ21oEJ}ozwM_H1+7rJFrWG17@Q|I0}t{irm3BEOBjT zyv`8z$XE~elERo9Wo@?v*WhkE-;2OEJi~Ob=#;U^FRQGMTPz Ue4gY+}E0N zRTpxY*`pXCC?wR9c4x@fB)4KW(Q!y6rv9dIw4#I>cZ!6f1O33KOpq5@b!Ll&z+n9g zAPlitKMC`*TJ5}+N*|D*aTouK`O=sD`$`YF-$~mP!!__>-?oyPZQaKh1-t|me~OHR zA8$AZtFHzwtC>8Q&b X=W9s4-gG)J1Gez>===sI-C4ZAP znMpb5oxHbD(g2ZrU4Hdvl6gg2mxWf8Fom0yQmt7AZOwNtT0>n~fi8ym4?{^$gcfx^ zxivW2%6RniEhVa|?YxO({Xp9qz?^u+IZjDM(u(Z&K=oVKVMC)3-=|rgvYN@y#-v&O zM4QDLlzQH)J8BQie4SrVhip?BjVjt^ue-+^$&&87)|+GbA_Ci{Bdf1eC6G&A1p&T$ z%q01A#TCyT2A)Y>IJX!Kd>{F-8?&aJ#Hp+hd}{dEng^pj17}pn$7aHhpIR8V{ealB zV }aR-`Ofj;b^yKXO?h%3nL4sJZc;{K83fG%=^cBiuowAFdG%tBpXb(3 z;*&G=N$%NZ=spn6L^+xNce6{AGh&0)LIlg6!Elbuu}uEz6Ylmwddt_k#up&|cT#tY z<-uXf9PlY26C;zdn0?oZ_o#B#bDLSi`v!Bog5T1eg-U>-5BLXpAecC^Ls~3_k-fOz z=%5PIIs4h D&v^&uF?3Hjgqh{_FK?S?_;Z7vGi@~SI@y1CuhV%C%18>uZMa_bF zPHYq8*qrZ@WMm}L1=z%>QPRJA&a9Q@_i)*dO8MW-e*aOF_#fuK|I26a<+pg%ejYZb z{slG2s~@_cZ #}>2hpfj;fIhJIZ~8!?1@O2P5h{cFM*-nBYK ;9!^9{J>>6Q!?DW|C%oEi8aDJG^%T&x@<$5p@43}T*{UEc8s0jl`H=T^9} zMHTJt>mEcfarnY0qZ$(cFPrawmoW6;C+DdcyKgS`X?whBaXuEUbKO^M6hO^L4~%Q0 z+LCzi8GFV-RQH()V>J~qCRU~6-3~m@OW1pEFi<`tKGj!@YlsARqKXUossYZDq4e^M zLeoi0Y(s;OhxIg_(T8=*^1W1CZT~`Fh4q3D{QOijqpE5^(S##Ae^OCA@r&hzmw2)t zPUwc-%B7!Kgr=x;UmkqF-x4QY&DU>foOpX;-Sp@zf@3?`9NbcQQ-?>xp5oD!La%$z zt-?D!V;&5C#(gnTd8vF ? %OnY zxCRU_{Mp+}uNj_OABR?alzq3>t*oo;-WPS^GIuGvw_xWlni7-MrRQK4=7;tH*P$G8 z%k(V3OHq@8Lyc!15&Y?DNyjIu@qI(uLq)ly_7=OVSL5&Apl@bNVUQy)=yRk4s&G+l za7%hTQghS+;Hz#B>ufbcDdsLB0fB8Js=?pwxbMph+qi~zQp$U~+3N}ogUg@#y} z=)yTXtL6t7j^oGKoljD5nwt=( Qn$w2NrY z;5#&N37@tJvWsF=wm7>3wcO1J 3U;KdN34fl`;K``* zu_2eg_Op?cS&>6%LU4tVbV;OVNm{y>9awwvh5zpTE+9)a{;S{2NMUJ@zJDG?HEs9X z*2Ql2;njtZ=C|6r9arW(8o}{TJavNVAxmOm$Xlcp8DGn*w|TDlHk&ei=S>&EN~{Dc zr%H%N3aD=`%kggefZKFV83DX$YXf;mh7v+O#b>AEHSEj6FY;ZYPB`jIvwr>!bG0C` zxUeP`fX|lGN8btml}{T*;M3+=3#BM!sg}bJq7n#HK76k`7E(pbXSScGeqELt5Q^h? z7oFnKQG@#0w_jV6^@7|PA_OD|V*5&L9Q^mK1t4Y}crRy*W}r7rB&Tu>uw+fxrZZud zqw#Y<->$hc?W5r-6WBx$16B>>kRe5p-WArZ;HTc_1Fhz%tw@szHRgY?!F{hqNMJtT z`W23fxsOdcH1CY%x_0 =qTMLz ti9#I8&7p9w<*jj0zpd zBr!3uHU^@Y)Sy4J1MsjGIZ5VI@H#J{bu{!rMySBw!IS^<&qitZQ3#sH%ubnn$iT2u zvHGY%OI!6?BRKjd;C0 *S)i;l%;48 ziEtNW{!)K7yT &~_CeW(v+&Ky8Aasgyrb2D!8D}&t(%
L(G>rZ8hbb>&yuDs}@ z*N|J#$Y%9NCLAq`9PU@mVstw4mnNe}_Xv-clKn_D8-@>4p~gW|x-~=m@A)*B%0sM; zd&<;h#iy8`J6F4$yery!e>PK*@JVcY*Yy~?Y&li?QRcG+)FI>1amd#;rbzWpHT`QF z`!RLzdc6%3vc}ilZ;WqLx}W)d;h}|@ww7ox^*I)NyVQ9n$~25fyCZaBi4!in7~XT^ z+`YA&c!K!s)KYoe?WPdvoy1s|v4iL)RIby^YF+FBoMF;=B*WMa@|GKn^A=29#FbrK zlvC4+h$b3EWE}LLa8JUXZ=O=Rzaw!zqZ>`IAjJzHURj+#HoB*2r7x?_T^{EEb!i{v zgAIHo=|n+?lo|1|YQtRUAp+lbV@s8(%$mxf7m=z;5 2##f=Q z;qTZ#r!9`zB-@W=&7?Kes^WX6X#dinf%% G %T;~m!RB4}86aKiLRe0~$w&tFZmAU>> zv#Am~EZ=ye_JgVFIjYEXnW-5xrT04gL%d}&FZKLttwQ&GX$nY@!?(!QNmrYdpjXr} zTug#pp0_^)P`!btQD9F(zEyrO{_Wap%KBWDcFv?jqOFnh?sF9^na;zfh_Jr7z(1fK z54 7@EWsNofP!4-@v>E&`o zZn1jirEW1&{yJq$mT1WFN9gzhBZKm@5Vq@|FWcCa?RZPm2;#XddDF<5LUE}Ce4 zH*{v_hT=7Ml}6IwSB@VA0~)Bwveo`lD%qsn3NV&>!qK80WH`s`?N{)ic)VTn!KM4a zWyR>=ef-8S^EyzZIk;;sq?e%dVv*gd)nDKxFRU?5YIJ2p1*^{|^;@i-NeWVKx2HmkOGL%1Bi;qQ9V ;dc0OBzeK4`3OUTNz`H<(pQD5Jpk=jyP?8fK33qj?ZUlL~i%JK9 zB+~+71~fXwh6tFxbDAINK7 wiAh` ~yJB&P59?D}JUUVpR5k{=(gQbvYw ztZ<><3S9XB8}OuPxo0O~M++QPBvB>&1Y&g~E|mT*)V_1lK=V*ge6Ru-^lsCiNgaCS z0mQD?Qz8|^P+n&mb;B#PM>*x8=IN)lcreC##4qP~a4roagsS`gNMnc#yBqChpF3^7 z$pKXmoSp6T;6_XS?BtO=bA+_}iCZd)^yEIYWT^_Skj60*xJ&JV*3MNd1rVw&7o5Ll zR^HN_qlDf_P9dca<0HOrpxK9(N(Noe%_Z6;v|uL9KijiXQUu?TLV8{7v6(HXr4^jX zz+ss$7mw4=s2<5Z$~y<*sq>W9s0NB9Z2+B`ls>IExqU7IBT@rWJBuF&oS|vL!xlrW zrn6tg%BPAh*=MG0uC?Brd`Q)#xni7Au4c0 B> zGkcV8) `;%BZ;|W;(lUM8i?qzmXOWZAlcD1rsu%g_8? P}2< zG1V)JtttSU3^=s0O4p0kA0i0Z7g%gcddB#PUQ>-u(dxb7k!051aZ}&{*&X4B$LBg! zHfKK5(#3IBZ^y)WZ+*2Npe)JQQGH93XaE6mfaVS0C=$H$*%M`GI?aX$P3~ 685+32irQzMl z$@ZMj2Kke92F>D(zd^p!_5k`GrB~EFE?tF!N2CoF-((C|cSP%h(ZkVS -%d$n+8O{m |x zG$1P`(;COFZHM5vo1NWY{p1!+`!9rdcb~rqxq<2VeP1qIGc%GoE^ $K@e&Z7wo52mUhyt)9CFbJ;?+o*Sz@ z4Gs6^1YEr?5&-F{x$phTYFu_;|0l((d>zLYu{n5O6V@;Blg1P?oyQ@Hoqs?+)m>pM zB@(gBqU7eK7b()!QahZ@j2tpm=|ID$ys5c~b*J@qCFtw=W*;9DvA`zvAUS=-mou*f zSn@xo_RQ|7DO>mUjuEN$w)`_IiO8`{PqmZng`x k yL1WI! z$odUttG7XcSZVTcLl86eEmPLIyGvUiUg| cOY;GL*OUVL&no_5pydgt_ISbU~+; z4Y+T^40zw*#H(&UorZ9gGeD8aS4sN!@FF~UV)hYZJhOx7>y(_Cj@;xbxi#jc`)pOs zoPo+h_@{_mPgl>rZbK|X6p87E_uC|{FuhRPR@x_?qU4$-cYet &94@P}QsGS@ym#gi@S+}uD5#G2uz1p&bJY>r@j*G-q<{=paL_ zdywI|YDd2pUyHK)3j>WRJ*~O1qYH4d;Ew4Gcwub%$ULnsMK;i%v28&o#9s(!##r!t zbX#hR>2SGfyt2@SAM|P3gY=f`q<9tDbJr##zw+o+R(voJH2qt EHBMN%cZa8bQduCyC-?<{Mns1hE$gEDCtE zo# E zQ$8j~8d63ITJm#<^o` 7Ym@J|RV|LKCX#Cz!chdd!x{SdL4pl}7G`^99b7N# zmWhwm!4;){I%1^~vrOd*unsqSByXk~E!{(NOSN5qmc&7DtK(kPj%2Y~-t=t${QV*V z^XtW>1&W3@Pu@~QOPYn*6mwVZJ7N<#r2Pgn1w;ZJ>q4W@!-jwWu%e2Xz=;_h5py#K zD&-l08;Q6FJ-?tope{Uj#ancD7_pdF^ncuSg+KA~Rd6izth{!#T7A$~*G-+U63Z(f z^gLEj?wN=2_?5ZCBMRgEqI3e;*@r=GF+eIob@rdyqW}B5(N|ydG8VUL%uq#ysTjjd zFP*7$T;=zBp(fArCyrmgV9g<6W*%OE-fX U zu`PenBSnh4kr0@0C$ogOJ8uCsq_L#ji_Pg{j zgf_e!2z2$CS=3k!@73u40f~+*3AG&9C7CC*py(h!>=+Yfd8#9o^k;qYUsbqO2d?O` z@qP*Ge*GZ(GU3~9-xCVMgpAY5LBjhDWb!GW2cBa@&2f%}(Ku?Muf`*D%X!^-!o+L_ zB2q6nq Fwo9`W~cP%G?bcYy(pEqHhqiTMVH*iSLnR>a@O7z?iz; zYxh4WrCts}K$J%b2;!rPqBUgm+^UDGQKYT^eH`g0tPo@*vnp0EPEnd~I;mmimpe2r z!uRL;oD`rI6-kqE88$%PdbCIrbfO3I^m#fWoxG#-0F4yVt%=80Y+s9D8z_t)hxr7A zeFWd7XftaV9oj%P{{gMwi<7V$g@zxl4Cu|BdA`_XVG5v>7aGe z!H)dLgl2)odvVTvI$xGG7cy8MocgORHY5cVU3g6$@+knyRLvLvDB+`T_qD34{)x9* zWZn_AF0Y0nVti~(J9f8k*X1O2tq#B@>k+v1*3buwzmgwq8 z&D6-{SMhK3sTD#8$Izmjl=#VRRZP|3P1f#TKNcgTv+SWaee(s%_d9mGanW42eaGkD ziTOAj6EHm-$;X&AqDJO`h2;-lL)=wB1b+lWP}x?o$b@ )%1`0EPgoRVyQXO3SP&%lUv_{lYu^R>9%IHf z*-f{-sp!{O_S#w&P%Pu?NrC8SHlu`SQw=unL7B|+{y09FAo253!YjGkzEj@s2l4%F zxy`?AaWFuTY-?AWIyf;taf;UO g% z9zazHNOj&B6Sgm}`#Mq80e5$JIW9-Z*8VB?WhT?!X#Hnj^D#~{om*75ly4GS{8Uw> zd5(k1Z_ym4^K?&Otb5CP`i4%*_J5=KIJW@By3S^gyye-9*w|UE5<2t%5sYLqS|H$b zoT#Jtzu>aE9Hg@Xj#sX;PEJmLzqxaTjZt6w0lQ=}POR02x jexT~<8oP* z$pc-_kK)-SiJhO-xL)34 TP)sZSA=Od-rZGv{&Pck^z7 QxnDbW5a%)O@Hg%Nmo}BE`tsQ)sXo9 zD{<`)J6=QVzSN2z!GHcuB>2DK+?Vj2@b@GyN*Z?tL;XIVQtxWmUx3Ml&SqmyXz^Ew zJcks=%>R{tt=(GC8Mpo~{OcBKtytvWEn7}}|KeZ&VcC*#mF}t8PxZ-5Zym2U-r0J< z0mEUIJ`mWFA4N#1jZ)`SQN`DvgX2~J2h!dX>)zvbg|!d!pE}6!9Wphn>+sA}ar-GD zuj44$UWq@TA*rb-p*gvoNPowRY=5pTWnr9ldKMhbVo7Cb^K!wxXrl)9{CKInpx2bMAh~V zg(0@&UPK&4s_oeO9N0P_EG$2r)nGZN;=q;4sQ&Y!qVA$oKRLA6X2*0~rzdpr _ojzPetk0YzC1h0e10|z;hG@(MXQmT1Uo>kDYQJ+6hxIEww zCh#S<%5y|5^iysmcn2jcB$l&&a1loFg@4p=E~4We ?*h-sA$t*TYV ztTMae7bpBf6^k-=Y?=nDNIMN}GH_9?N 8eON!njMb7PEEqpf>-Q%j_`-l|90SXR{d^+Ur7BbdKwr@s>% zdMMbBI;uK7s =|(r-^eVfcJYZ{hIZ0^mgA=R9Nu%AVw6z4;hTqYvj$Ux#Y?- z2doMZ24QxQ$`9&jKu(QJg?hDhlFntNN*#;2gfQUXj}9?sBx7-7`2>AdUxl|4+M)@l z^C$}wU7P 9qJNo hMtBW>HWVQ|4Y1vCvNqlrbyEicKmHtlF==nYL118_mG21(f#(6UoPXg^JYoH{^T2 zj50!R*&{_&1*deZK796rdxvhcEZDxVDWEgRs5L(t^T df!@2GnY_YI>i)=B%FE;6EA<+S$*E8E zas6SgJ8;ujmHOXO6H@lHhv%@n#Q|RX<@)B@gI(=+YYymDI^KPYzcZd!oX97&Bmzt( zdg}u?bPp~X+$YkM%PvyYeYij6zkSdkxxjgh2qAL9IVWeW3EbXPqan)|$((ivf!_{1 z5T`O1vAYXpn7pZehB@F;WIvkUilX*h6cIAQ_T~QA)a`f6yvUi|I#;pf6@PLgl_}%8 z=IJZLmj#U|t&>o}wL4E2j|hlU%+O07db*5Cn7>B2Ex4?=M`m=)yDFqTf6=xcMib^{ z{zO>ut3!4um|wy3g+xgZZ{SO{?qB{Yke98)Nmbhi7y0w%Pg~Nbh(=TO7HLA~I^$(! z4w>wG6UV11e?Wy37@p#t`j-unp@99FmI7)h0kDIPnpxe`0TLS&;GXptd=bTs&28Fa z@Kqi|h}26i!70F(XW=)uZrW7UUaxL=pOf5I6F^bo7+eAo(wtMgDREj%;x~h?Q==2P z`QXUGy!jturT?RseKj+IY7vHHu_N9dQhb=jGY5=kZG41CPyFwKs2QH3;pbd_ed@DN zmlX27yv(AOUk7_kzO-0WxbU*1jXbaXkFk4Z{rOaa{4x45SuvM&dJh6$%UQLst$nZh z;j3Ifd c_qs%+RD*q-4k`@a>g;j^?;j;)*6Uh{vXQGE@;$oW62l{=UT) zXb9j6`|7ZYdlHne*kE|PQM@aPl3MS1(N!SW#=19N5FARns4W5E&%~xTR}-$2#V(u| zDsjtI$n6!k6(`>G%V3oFy3? 7I;@7Q9%$ESXzd zlQP-4 +w~li a)NSCb6X`^|XeeM*XTgX`h52?c-x zZu$d~QP{aaAoev }Wmz->{hC%T>i5l<8j# zb{HFz+A8xo@(Z^{C(*f9FOTKlW@_Kd;yO- *^Peq(RHv+%~yFK F82Fx(x1ZTq9sn4-9wfnMlZjpoD1GYb)a76*&1~RqjK1P-P z0a@F*pGBQD5UsyJCWfu#w)&K)oR;Qy2rjIi^$!uGQ5Ut+K+vTm%P0w53kiK9oA}A1 z@uMN@Q{KR)Bl5czTeW-0wDe{4y#Ia~u?naPKS@zKY0;_l)M;Z8JC5()sp~8Tp6xu! zI$yiocV-T(5N44Lf;olQ&*q+)PjS*gc~WyXdKD#2XN%B#d^e>c=Hnhk$=|siQ)9+< z;~{A5`v9~mKHbsd;6g|E)BI}oEs<&*eYv;s7^8*fx4~l_#aYk9c$3Fj@@rg<-``!2 zY0`ASw4-T}bZt5Pwtg20g|;3l`(4;(epSC8;V2IE `Q Zcgi?g7f^-~FTK0*0ou*lwvMT?!74Zy;YkZ|PE%a50_R3F-T zIqF;33)U(tDX(X!+0U)~3}HL>*q4xdeE6$hYJx~E=;;Ayq^0wPG3CNP?73_1k;RZ! zb{^>T$d=uT9U>cTkO}3;&mB9$0MpFyLBnX$#ule^~as;{TpYK{CCc#8S`_F5N~ctY?MT9s5SVFSoRT2 zfEyd)&9jH6A*upx9O(c$38+|7{R=Es`~zCzY?={TJo$v~c2!F&e9Qbpn)h)%wRZqG zgq6hkq><;!WttD^WKyV)931B&`HV>wzYH 4jRyI40y8b;iudxrnoQ@*# b1XX;uq} z3Dm;c2e%ncMNqy-mGUE7 zptPVFqr1r1(v3A8zJonl=}QdT;Fr90<+q}9hPqb!*XQo)-@=_Nn$*Cu7jR@>|Hy43 zhQi;-A|i$116Hibg0-SFs2`HJTrr|vS(Q*5*gG;kmLU_YBi&jmRrWI?lt%jNRdP^s z9=$N&=Kd+ky&=aA>*?x;f{utvrz*>diSkyJ)~9MF8Q-?0)N`2bt)LS<76rXDZQu?C zqq+$R({)_Ze*aOPx>qN0Xi2$&=BOU|e>i*ZpeFk^?VqBeB2Aifq=-rrsnRWU=}i(T z(nAQ5-id YQXlv}TfhCGgIK=ZrM2rpM+iB2T$+IFCw(=$nWH=ZU$r^#9%&k4 zX@<(sxMIxZ>*1cWH(TIuP1S*z3X6=|#bb_=-%KVaBSS)u)EJT~e9dXec}Ylw{J)Sq zIVvvtN-h1LYVDE$qrV5q7cQHD+Dh5)pq@nVUxq5M@31Yv3H@)A +}yLhS+Lpb!S8#s__qG9UtB-R;zwsqTU~8mZ;iy* zc%v?-{e8ij2C%KdZSSlruxW|#%M7lItI)i1@DHz3uNsWlY`YL;vYnY8N`3?N%a|t4 zf&<%ViF4>? RDD$Q*EdoUBB&X=irlONJHdHik+*<8sA?XN$i72m5ul*-2--Y zocv3p?;_H}O&3~O90bfFoO#~qB%LOPsDPZ?T+Gy@k~0oo`mM~z^+dlX{^~1^$@9XI zv?X|qA{o9bxx^`p9p4fz|MVLK+I)GcHICeSQ*B;QC773RXS&R- zis<$rYJ&H&u)>i{brNDJ)3CjAYu+XM>KKiCK|6mNpLj|X3%#=r{t*dtdpQ`-u8R*h z!E;3r`IoY3K~s}NMXUt47_Cb)4@qS{WhP@nqoXK4=cT~1j0WnAiXMj=Xg%UwQ|q~* zDLa#a(=NnnNcN%^?2lR)`FHslg+<}XyM-l9C(|=fxVvR6f@Tekr|RI8!L9WNaYPS} z6JtShfSCvTg#}P1>j$Z&R|;G$ue3Ot1xXUz+gUGS6mN&&miFlfB#^uG1`yJjR} z!WD*Y1!Gzy0WYpA+GMBH4M_j+wqPgZ;0n(L+N)kcq%3JXg&(f%mT9VxU#oBwo(oNQ_#5Lr6aJhS0sp7EeFt<08uL a96t zedaW=zQ@86{7_!*w3NwC?|P3Ag&~-tOO~VpI$93N?SUhzVuz+z4mz=!t7mLg@!|s) z^FvK7Yh6C5*rW5$9)P(TK|-V~CNP6XiEoy&nKtoG(#-Wj6`+|pp>hnf-n?vtOTfuv zDJ$PQky <|C%W`zn+W^B5P~!4}T4ouucB*C6kvVdHfqzVmC+vkg z5AE8=hjM}+jPmpR&u1}U$vvlLL-?>|?dtD^M4dU)?v}v^e!X+3W5$+_mg^SKRFDv- z;IP1iFn7xOif+7qX!+eR0kJ;bE;hFknfv{!jA7JNa;-{qjRJU4oh+b& !|bqOI%?`diHN1HrSwBZA4N~+fW}rK3M7vbAaBS z-}VdeOVr?L!`!s_)B|U`VtSP;l)IERkbaRmv~b>Mw4+%#+>#KwOr^QrHl$PA09*pR z!;Fd2X)Ef>OiXZIfzM}dWnb0FF!SWH@T{A }$lb1G%zM4Req94Vd2b?P7pLniY5 zs5ityd-=jwa_Ei)gp<1x`vy0W!S^zyMwVl3%&+V-O}&P7B(~?7@ G@bp_H31{V zn61mZL=6m%!B3M?bqp@aRtp=Mm!7nVTvMO7myt1k%)Qn3I8HnvZ$*?*V<{SXeb+fG zuf)j|YG>y-a;AR3=)gZK=&bU>i|>Jq1u36tI#CtJ9JR+Y?io!5>eGX1{zanWxSKyL z;Gf~cTOXPDNaZIf?OwuPBwjbp4oriaD5Bx$8=l&fhO#DkZt~(Kp)HO=;EQ`tU@WZu zj_u;=QKKS8F7V_Zv!)3Fvipd3-NW(A2=m?Y?6?*zk>0y~ftIIf)N{+T!KYeo;F^83 zLG&)ChuHn6JU V7uyxd*6zhv?`}{QsvI R`$e47LBq$DjU=AahJ)O1HyKRmltrEZ@TfQ-m?oK(}^emphz?D8ZXFul!Z zD&75!Tmb6(zMz(@-<&cNLIK(ZTlFU)@Nb~)X1A$1(Dt>p -)zvNC>9zm0OSvXjg;m>}3#`fLj5r05^@xIHa9T$h
qM0u~A0>X2^M z&iKgcCTWXbu%kY6(?PIYsk!oOWg}$WIrEk}?WbFAvE020Ss#A=Y8Eti@=m{X>c=`s zKy*Bo2U&a->FfW^n5863&w6J4Le=i>LWRt|3L FV7*TEkE}!c?c_)jKH0*-1AMoB~+Nf zO=H!JyX`}4zJ0=EXe`O|o((>dJ0Gc#hMg1B(jQctJlU=|@+Ju9on>iok@D#7i;F*u zH&8Jq6gVj6;D$PDYAQ6`-4&C(+4b5&=hYrn+$?#*m-O!Hn{A65*yE%n{~ckAu2zW# zF^uk5b&rVY?p3n0LRg38<8mW1YH6{Z82g#(W=kaCw303q1k%OM(q+{;IUeu)km9^I zmM$z-?(uCry?yYu=69ZJNsd26G2FJ)`5ptdn9iM8l9!jlzrw=VAO_nfE%uG)h8pb3 zEY@%Jr8IL!*RForlW`GD9BvdYSs*fv28ajd1MT-Z+**f;clK1+l}a{VvS|lzq4HhK zc}@*|H4Hg}5?r=udE@S%>r_+EnUOcIQv4k8MqZRJspLVh {eVNg!Pf zIp50`oMKQBvlif)2m%~>>RUv)6?2mvOU&@`1vLlL-boLtYyf>aoiNODC86$M)H!-x z^{w=SD@$>Lm8iRbK}tlDi*xHw+k#J$!N^gdEL6sYsO1c^_2m-_h@^|UXI07~%$p zF1fT`%~}Z>Mf?} z$sH`k7I?fnz^bBd?2;9FQsZ?nH`@nC-+fQnklFq&FG-o@Phnhu=~6?}9VjQ;a9-7z z=N*ZCscvuzgcovyv_>+Q?3z-eV6i2OPasj*gC8p~T25VW)eyhSyEb=OD%ZTPAnX1b zK&flX?&wFi1y4*vlV~EG3sZYyT2fiR&+f)W$tC?jJ;4H0y1Q8P%>6xK&!RnHdE;9P zQz@YPacyk2b)+t!wOnDrO4@##Pd2{2B;}6bjU$1(2d9XE4^3kWsVn=4L re^%bNI@k{jiAYSN4jd-)gx?rL2|wnzshXVERS%V)y=aH z*{R$y4lF;9QI94hgf%V05OhdG-Fp8FBxqa9$K;ymW9FBSMIQfHT#VNooM==koeTg^ z$m@E3GvB^sK{wTSjap;809Pjd;e1CFO_ufDupc*AgzD_b68%&!3=n}WsKMTq9Z^9d z@SsJFoO4!YN#Ka-f03N9LhEgyfru)T19A6LZ$# lsUo zTMYc}$E$uvx=|CRkGUwf$+}jIMvj`yMMZxjdBin;@+KHOy>ph`mynm_6dd&WojL=y zEn^hWFD{kBc5=_P;dYmP0lS3b9js&hN!qg3)#edNHf@8RNaMQ7O#7IRZ YV zT;{A^vjp;BKM#>^=|@vJcNvJ*Iv}PU>Ex`4(rn3g)+7OWcr|{=!3CbK @o8G+8{Kx4MEh^>6ln`!VC8T$@MauR-~x6LB aX5-F*-;i4$$`|P--_5#-jk&)ZBl<68-lk+Z=Awg0(Jlz2 zLHNgy^pR~iZ&kA}{2{ffUp(kABT!Ut{Ah@BGFI`D?kfQ{zcPqUl!O+;4DK&K`vJH5 z25WV%USy|_>PYY;$P4FeCV>EI0fxv^Q<1v`;+dVbc>T#Pal)5BN_|n~%qPK+zh|C= zr#xsUxgNHGN2D&lP*`I-UI3h@fa3e(^m)k?m4?KMuZtu_#H?^ma==6kE#-$n&0yt0 zvBZZ0c 3z1t$Pu;=R4$fm Q?WM6q(mdWsIpvuf~6lc|3E%dr9sCN#6K_7J3D z9rOOs`KONfyV7*lHSLp@#c4~wr%Y>h^9xZ8=NSs8=Q=~@TIWi;Zv$I;4=?-HX{7rG z=g!45>sDmCoCbU?gXMWkAlY=*SagKhaiF0_mi9BBR!1v$2~Oh@>6biY6sHkhm%J9m zD%INisCDcn^LW99<7Z$A{r@~wA4F+p`;06TnKl2(Xu|2G4ZMGHWsJs2@XsY6SQC$x zBC`W7+Ytw5o``djfq#qNHVzOxrve {n@8 z!3-w5P#O2t<&=LOzP6=iV=EnLW-<~kNjJwJ{D~>uNzS%n>{uPDi#}ccv!;b)0P@L3 zcz>=9X`yM $d#;KMT?F z-i6ye-=r|mliJ_NW4Zg>!c4er#R12vN4#sdI*#r&cI@k`eantX#LUjLB>V N;{`=-vm)MjqfNnK*`cF2NQR4McDDayqqPz`^IAI}{YeF^E}A)-k>pxC6Ljht zu5{2_tHhwPGI?xCLBrTtJiA2~AP?|1mTaCo_IsuYeZW|}HBhua!?}=gN#@;-IOx6t zszss*7LQY!kbMw@Xy*IU2a?F<(=wB2 ajp?Hk6wW`&OO-zr*@L?DM7WgUfFF&+Lf8MPm-ZR}+dX1nja(N(A ^5Vfu@skUk_|~Zsch%tR_!y zX6^-6sRVhq=Y9*vRV@~VqhXe9e`wk=ED7quE+PTG`8_3@s6dW$;V<6NC#4<~z2FeG z{xxaT^Sd$eYCyo jhuewr69Hk;EO~{I7n$^Mwbj-JM z7`@iK-p!Rw1M&+J{rgYBj73q#7Td8YQHgWDIp+Lc6v4f#g~mBR`&^#rlhN&G86IG^ z%pusxT-gqAo@|6%TLqumvh1#;t^2rrC6Bxzvoq Fap0f)o_(5!M9s7?gWHmDtv%-&Yx=F+2K zJmQDR$hy5v+5D`b^H8e@fUI5pFMVa-y*hm9GoaZL_Z4^CU%Xan4IK|CXw1jOce8sw zS>aW{WwXA)Oc3R`!V^SXBx6+obR!b^x>%^m;`wNwp6}4o5N|jT{phC6Wie4MuUjBg zWmd1^c<>JQQ=NbADVH?cBY)ddc91649@a3$nSg&8vNU5&{j}af?Qfafq7eVmru`o} zdWsS2RsZAcKfoT{Nko8ftfxCl#{gmq%Xe8#YW=tBnVwK)7gc1??QZ3%*is-{tDx33 z{VmfiYIv&Az`^E e*NC{mQ(^F+Z5JR*opXNF|#ct?$B3PoopA0Q F%Ut77gw~EME4#;jPpaLZ`1%`a5&!7m=0i%s9hl~bV5wF_Ins_T zFP(xqPT@KA_1xY+Gltbs+k?x34G`7M_4n<0@p|nc%JjpprgdW)l~7L7prEvJNPX-@ zdC)Kv;>}*!9#Xw;%vVms9*5?SkCsr-eN_(>A(@K%#^@`vuUb9g<+*98k0{&@lvlkO zT&^J*WAh1p?SD@4JPWtd*E5P1rZ;w(YEoVMgk zg^KLpz?-fU4li!yOBCBI$*I&hVjTNL`tQC@qrn76PuCJ(%dIwYXZ~5lcnTGUrCX2M zHN8&nqH m*HoD#$s%kGtVYArd zm`AK?9kJ){H*7h1l()xwHVB`0m{ rwz z>O;+v0glR=IealU-51kbePss8-P?T~)0}yE+j {TSrPFKrC^xJtQ54w-WY)E=VY2W)|(GRH}HCI9nGfHGW#6BM> ztDd>j7%eDcFn=AxG{t(~m<8xeQ1GoIhgA$+boSj0^i9;b@`w^Oqs`pgL5~~9j}_o1 zbr>m=$e=g0TPX$YjZ8ZXkb|lcCJ1HSWQZ5T&ENNP6NmYS5tdoaaQ$QW-#B{mQDC_L z{(m ? BhIVmJgFNZ@Z(xK|OBb9|3)iqD5YuRRwSI2a(NAR}hk^Qr z8K+FzIGBBx@778Uv|!Z3U*WDf?CwFxig&+`>uB+5@xC+inC;1~$YR{~gwON?t2FZb zi1u4$g~8YPXrW_$73jC0@4wluUSpWZaM>L>_q}6WdNcVV*J5`fJMGYDo)vHL9^bwg zaLG-0@4h0@9H?XVrm3PDL#um{dG{XnH(vFHfIC%X+UubG(` pSmuuaZ zpZZJ#c+aJYN;t*3JSeM0lHYVnRH913P!UubyD){9x0enBQeYx-AG}}VzHv}IlWf4@ zi97G&WU3skMuY(cNtnFwQiF^pG7ht}(*&{<%lEc7OVtm#=^Z#y_H<| NRfimZ_uu@*EF}(d}{NKfU*rVjPydoP%8fK^l z3~`v>_(k}&sd=-l6xr-a5sx#81Ur9} Bt!bOCJHhq{4rEN;+fUM_iZr_29Mu< zvOccT!p>t`jP~o#ppCD6$I?f(S|s J!OSsGpV+x`BCEwCfqhEcj$P`+><5ittNbAXz;#wN02Rz%gCr1m(X>B?y|} z9)+bZ KDs)jvUCUJmrvYsR03NnY3z z(pTF2Hb>uJ`NHlyG(>5=68ZG ;n{l1qowk8t6Y!O7(eJz&mK+p57u7tsINDb)FB;~y2H^IHs?Ago%!{Omg&58 zDKh2qHFI2 8|JqRJo%kfbCh*zH??hSH L T>f3U7g!Cqc!!#U>T&+J12_P?CT^X tDhG7z!QZ!YNlZ1$zaDT;4j>?WCLi!+vfcOf6)Zfcy44ctrJe^eAP!CA@o;T=i z*KGRc&;eEcaCL7L3l3^ommK}M%1*=LlczQAK`9yX0@v>ix%M>@?Xu?BuS)63VQoO_ za9)r=w%5v=H7qRr6=&HhS1JiCI{a(F11yJJgVkw!-t4w}Pwa;bu0ekh6>wEgab+nE zFJad6f{&Oe?XmEDj0!nvK -W#EMO7Aq+ zJN!9@X f)hCD_{pdYOLuRytjLT`3bHKD#F~)bBQsm46GH zL-1d+4_Pu38vH!n*=S-V#57R8py3jAjSR@ven#@!l+i(z;JUO=vki=cn=lDe{XCS< z2fim8;?Z7GPw3}vrWLGpxi3HvK)9c0AYzX%o^EIV<9kNpXWG-@5sFMc3CC>44d>LE z-rg>W;?8C!H^}N 8`{RN0uacy@BwSzAt+)2#T(9TV(JA(@Hv5q*g* zgE{Yk^}?p7 KYx*^Y%Q%@aaMTe1ts?nHg&kNpk*6QV}*;YZ{<3YuVOgvv&YO6 zzH3j=S0GoiyykDJibb5hi92<^FWBI1K!7hHK@)6{qoUAiDSAl4b8?9X9Mw555=wGN z$mo38W8SJLDdU(@mrBvKmD#4=Mq&~Bk_|IO0QtDwt+y{rM&{?PaRD~*FA_;q32`Ao zWLHTV2t6J;P~*jgxBu}DZM4MGXpJBZ2D|1jf2rNR?KkyIgKxF!wuX=fU!n#dw#XzX z`|B%+UrHeYN|Eecte!Zh(G>srXEf^<`uCy6>^6l+M}y7OL?Uh5zt+mNh}f0`%| d{;@ew(KH!;Er(s(|4Fdm$8+N3(!yF^N)Nx0 zgFE@hZaxX8a|^(>=}pXDTE9IGX#&Kg0z^77Adb> #M^Sbl{)670G z(gVilQq&|Uwd_`q@L*C2B+<;Ja%|l{y0#I^=^XdeCUc5~`|Wi`rqV?Y3XrzC#j7;x z90^nU`T=0*jaHvMqW4EvFXP*vM)-6s6)wK!3(*V2=RZBCP0bfHG7|xTWniCggQuD; z6KD=b^kj7!@mx-(x-~5zjrZA%OWJtdA+sBkfvhd{%(6&B(WKVW9Isa0 XH)?{bLF+GS_v%1v)8XyKJB{Ra=r1PXkNV({ZITHlBnN