From 7c904c6826685c13003bc77d68e5faed54aefdf9 Mon Sep 17 00:00:00 2001 From: Luis Perez Morales Date: Sat, 16 Dec 2023 17:05:58 -0800 Subject: [PATCH 1/4] Azure func code, detailed readme, alternative helper, and all necessary files to deploy a functioning AI SMS assistant that can use external tools --- .funcignore | 11 ++ README.md | 68 +++++++- alternative_helper.py | 232 ++++++++++++++++++++++++++++ helper.py | 223 ++++++++++++++++++++++++++ host.json | 7 + images/azure_func_env_variables.png | Bin 0 -> 58947 bytes images/deploy.png | Bin 0 -> 35323 bytes images/extension.png | Bin 0 -> 10069 bytes images/messaging_configuration.png | Bin 0 -> 42548 bytes proxies.json | 4 + requirements.txt | 4 + sms-helper/__init__.py | 49 ++++++ sms-helper/function.json | 21 +++ sms-helper/sample.dat | 3 + 14 files changed, 620 insertions(+), 2 deletions(-) create mode 100644 .funcignore create mode 100644 alternative_helper.py create mode 100644 helper.py create mode 100644 host.json create mode 100644 images/azure_func_env_variables.png create mode 100644 images/deploy.png create mode 100644 images/extension.png create mode 100644 images/messaging_configuration.png create mode 100644 proxies.json create mode 100644 requirements.txt create mode 100644 sms-helper/__init__.py create mode 100644 sms-helper/function.json create mode 100644 sms-helper/sample.dat diff --git a/.funcignore b/.funcignore new file mode 100644 index 0000000..aa7cb0a --- /dev/null +++ b/.funcignore @@ -0,0 +1,11 @@ +.venv +.github +.vscode +docs +__pycache__ +*.pyc +*.pyo +*.pyd +*.db +helper_ai.py +test_error.py \ No newline at end of file diff --git a/README.md b/README.md index 7d44b34..debba4a 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,66 @@ -# ai-sms-assistant -An AI-powered, function-calling text assistant written in Python and hosted through Azure Functions. +# SMS Helper + +## Overview +SMS Helper is an AI-powered, function-calling text assistant designed to process and respond to SMS messages. This application is written in Python and hosted through Azure Functions, utilizing Twilio as the SMS texting platform. + +## Features +- Backend can call external tools to perform various functions, such as scheduling text and phone reminders. + - This functionality is supported through by allowing AI to call [flask-automated-reminders](https://github.com/lperezmo/flask-automated-reminders). +- Azure Functions allow us to write the backend purely in Python & easily deploy changes. +- Uses Twilio for SMS functionalities and integration. + +## Deploy on Azure (VS Code) +1. Create an Azure account & create a function with all defaults (Python). +2. Create required environment variables on your function. + - `ACCOUNT_SID` + - `AUTH_TOKEN` + - `TWIL_NUMBER` + - `TWIL_EXAMPLE_NUMBER` + - `OPENAI_API_KEY` + - `SENTRY_DSN` + + ![Setting Env variables in Azure](images\azure_func_env_variables.png) +2. In VS Code, install the Azure Functions extension (this will make it way easier). + + Extension + +3. Open the folder where this repo is located. + * **(Optional)** Edit `__init__.py` code to use alternative helper if you want to send less messages per request. + * **(Optional)** If using the 'schedule reminders' function, edit system message and API call to get the current time and date if you want something different than pacific time. +4. Go to the extension, and under 'Workspace' click on the little thunder sign and select 'Deploy to existing function...'. + + ![Deploy](images\deploy.png) + +5. Follow the prompts and done. Get your URL endpoint from Azure & load on Twilio. + + + +## Load on Twilio +1. Create Twilio account. +2. Go to Phone Numbers > Manage > Active Numbers > Your number > Messaging configuration. +3. Set when a message comes in to use a webhook with your Azure Function endpoint (see image below) + + ![Twilio config](images\messaging_configuration.png) + +*Note: Your endpoint will look like this: +`https://YOUR-FUNCTION-NAME.azurewebsites.net/api/sms_helper`* + +## Summary +1. Configure Azure & Twilio +2. Create function in Azure +3. Deploy +4. Load on Twilio +5. Text your new SMS bud + +## Requirements +The project requires the following dependencies: +- `azure-functions==1.17.0` +- `twilio==8.10.2` +- `openai==1.3.2` +- `sentry-sdk` + +## Contributing +Contributions to SMS Helper are welcome. Just submit a pull request and I'll take a look at it. + +## License + GPL-3.0 license \ No newline at end of file diff --git a/alternative_helper.py b/alternative_helper.py new file mode 100644 index 0000000..64e94e0 --- /dev/null +++ b/alternative_helper.py @@ -0,0 +1,232 @@ +import os +import json +import logging +import requests +from openai import OpenAI +import azure.functions as func +from twilio.rest import Client + +#------------------------------------# +# Load environment variables +#------------------------------------# +ACCOUNT_SID = os.environ["ACCOUNT_SID"] +AUTH_TOKEN = os.environ["AUTH_TOKEN"] +TWIL_NUMBER = os.environ["TWIL_NUMBER"] +TWIL_EXAMPLE_NUMBER = os.environ["TWIL_EXAMPLE_NUMBER"] + +#------------------------------------# +# OpenAI and Twilio Clients +#------------------------------------# +ai_client = OpenAI() +CLIENT = Client(ACCOUNT_SID, AUTH_TOKEN) + +#------------------------------------# +# Security check +#------------------------------------# +def check_pin_and_reply(PIN, incoming_message): + """ + Generate a reply based on the incoming message. + + Parameters + ---------- + PIN : str + Security PIN + incoming_message : str + Incoming message from Twilio + + Returns + ------- + message : str + Reply message + """ + if incoming_message.strip() == PIN: + return """Welcome back lord overlord Luis. + - I can schedule calls, texts, and reminders for you. + - I can also just answer questions or anything like that. + - Text 'yolo' to see this message again""" + else: + messages = CLIENT.messages.list(from_=send_to, to=send_from) + sent_pin = False + for message in messages: + if message.body.strip() == PIN: + sent_pin = True + if sent_pin: + follow_up_reply = get_follow_up_text(incoming_message) + return follow_up_reply + else: + return "Please provide security PIN to continue" + +#------------------------------------# +# Current time +#------------------------------------# +def get_time(): + """ + Robustly get the current time from an API. + + Parameters + ---------- + None + + Returns + ------- + str + Current time + """ + max_retries = 3 + attempts = 0 + while attempts < max_retries: + try: + response = requests.get('http://worldtimeapi.org/api/timezone/America/Los_Angeles') + response.raise_for_status() # This will raise an exception for HTTP error codes + + res = response.json() + datetime = res.get('datetime') + abbreviation = res.get('abbreviation') + day_of_week = res.get('day_of_week') + + if datetime and abbreviation and day_of_week is not None: + return f"{datetime} {abbreviation} day of the week {day_of_week}" + else: + raise ValueError("Incomplete time data received") + + except (requests.RequestException, ValueError) as e: + attempts += 1 + if attempts == max_retries: + return "Failed to get time after several attempts." + +#-----------------------------------------# +# Generate JSON body to schedule reminder +#-----------------------------------------# +def schedule_reminder(natural_language_request): + """ + Generate JSON body to schedule reminder + + Parameters + ---------- + natural_language_request : str + Natural language request from user + + Returns + ------- + JSON body to schedule reminder + """ + sys_prompt = """Your job is to create the JSON body for an API call to schedule texts and calls. Then , you will schedule the text or call for the user will request based on pacific time (given in pacific time). If user asks for a reminder today at 6 pm that is 18:00 (24 hour notation). + + If the user requests to be called or messaged on their work phone, set to_phone variable to '+12221110000' else send it to default phone '+15554443333'. Use twilio = True by default. + + Example endpoint: http://YOUR-ENDPOINT.elasticbeanstalk.com/schedule_single_reminder + Example call: + { + "time": "18:20", + "day": "2023-11-27", + "message_body": "This is the reminder body!", + "call": "True", + "twilio": "True", + "to_number": "+15554443333" + } + + Example message: + { + "time":"23:46", + "day":"2023-11-27", + "message_body":"text reminder to check email", + "to_number":"+15554443333", + "twilio":"True", + "call":"False" + } + """ + curr_time = get_time() + ai_client = OpenAI() + completion = ai_client.chat.completions.create( + model="gpt-3.5-turbo-1106", + messages=[ + {"role": "system", "content": f"{sys_prompt}"}, + {"role": "user", "content": f"{natural_language_request}. : {curr_time}"}, + ], + response_format={ "type": "json_object" }, + ) + + return json.loads(completion.choices[0].message.content) + +#------------------------------------# +# Follow up text +#------------------------------------# +def get_follow_up_text(send_to, send_from, incoming_message): + """Send follow up text + + Parameters + ---------- + send_to : str + Phone number to send text to + send_from : str + Phone number to send text from + incoming_message : str + Incoming message from Twilio + + Returns + ------- + message : str + Response from the AI to the user + """ + if incoming_message == 'yolo': + return """Welcome back lord overlord Luis. + - I can schedule calls, texts, and reminders for you. + - I can also just answer questions or anything like that. + - Text 'yolo' to see this message again""" + else: + tools = [ + { + "type": "function", + "function": { + "name": "schedule_reminder", + "description": "Schedule a reminder using natural language", + "parameters": { + "type": "object", + "properties": { + "natural_language_request": { + "type": "string", + "description": "Requested reminder in natural language. Example: 'Remind me to call mom tomorrow at 6pm' or 'Send me a message with a Matrix quote on wednesday at 8am'", + } + }, + "required": ["natural_language_request"], + }, + } + } + ] + #----------------------------------------------------# + # AI w/tools - reply or use tools to schedule reminder + #----------------------------------------------------# + completion = ai_client.chat.completions.create( + model="gpt-3.5-turbo-1106", + messages=[ + {"role": "system", "content": f"You are an AI assistant that can schedule reminders (like calls and texts) if asked to do so. Be informative, funny, and helpful, and keep your messages clear and short. To schedule reminder just pass a natural language request to the function 'schedule_reminder'"}, + {"role": "user", "content": f"{incoming_message}"} + ], + tools=tools, + tool_choice="auto" + ) + message = completion.choices[0].message.content + if message==None: + message = "Just a minute while I schedule your reminder." + else: + return message + #----------------------------------------------------# + # If tools are called, call the tools function + #----------------------------------------------------# + if completion.choices[0].message.tool_calls: + if completion.choices[0].message.tool_calls[0].function.name == 'schedule_reminder': + args = completion.choices[0].message.tool_calls[0].function.arguments + args_dict = json.loads(args) + try: + #--------------------------------# + # Schedule reminder + #--------------------------------# + json_body = schedule_reminder(**args_dict) + url_endpoint = "http://YOUR-ENDPOINT.elasticbeanstalk.com/schedule_single_reminder" + headers = {'Content-Type': 'application/json'} + response = requests.post(url_endpoint, headers=headers, data=json.dumps(json_body)) + if response.status_code == 200: + return "Your reminder has been scheduled." + except Exception as e: + logging.error(f"Error: {e}") + return "Error scheduling reminder." diff --git a/helper.py b/helper.py new file mode 100644 index 0000000..a77641d --- /dev/null +++ b/helper.py @@ -0,0 +1,223 @@ +import os +import json +import logging +import requests +from openai import OpenAI +import azure.functions as func +from twilio.rest import Client + +#------------------------------------# +# Load environment variables +#------------------------------------# +ACCOUNT_SID = os.environ["ACCOUNT_SID"] +AUTH_TOKEN = os.environ["AUTH_TOKEN"] +TWIL_NUMBER = os.environ["TWIL_NUMBER"] +TWIL_EXAMPLE_NUMBER = os.environ["TWIL_EXAMPLE_NUMBER"] + +#------------------------------------# +# OpenAI and Twilio Clients +#------------------------------------# +ai_client = OpenAI() +CLIENT = Client(ACCOUNT_SID, AUTH_TOKEN) + +#------------------------------------# +# Security check +#------------------------------------# +def process_incoming_message(PIN, send_to, send_from, incoming_message): + """ + Process incoming message & generate a reply. + + Parameters + ---------- + PIN : str + Security PIN + send_to : str + Phone number to send text to + send_from : str + Phone number to send text from + incoming_message : str + Incoming message from Twilio + + Returns + ------- + Send message using Twilio + """ + if incoming_message.strip() == PIN: + send_initial_text(send_to, send_from) + else: + messages = CLIENT.messages.list(from_=send_to, to=send_from) + sent_pin = False + for message in messages: + if message.body.strip() == PIN: + sent_pin = True + if sent_pin: + send_follow_up_text(send_to, send_from, incoming_message) + else: + send_message("Please provide security PIN to continue", send_to, send_from) + +#------------------------------------# +# Welcome text +#------------------------------------# +def send_initial_text(send_to, send_from): + outgoing_message = f"""Welcome back lord overlord Luis. + - I can schedule calls, texts, and reminders for you. + - I can also just answer questions or anything like that. + - Text 'yolo' to see this message again""" + send_message(outgoing_message, send_to, send_from) + + +#------------------------------------# +# Current time +#------------------------------------# +def get_time(): + """Robustly get the current time from an API.""" + max_retries = 3 + attempts = 0 + while attempts < max_retries: + try: + response = requests.get('http://worldtimeapi.org/api/timezone/America/Los_Angeles') + response.raise_for_status() # This will raise an exception for HTTP error codes + + res = response.json() + datetime = res.get('datetime') + abbreviation = res.get('abbreviation') + day_of_week = res.get('day_of_week') + + if datetime and abbreviation and day_of_week is not None: + return f"{datetime} {abbreviation} day of the week {day_of_week}" + else: + raise ValueError("Incomplete time data received") + + except (requests.RequestException, ValueError) as e: + attempts += 1 + if attempts == max_retries: + return "Failed to get time after several attempts." + +#-----------------------------------------# +# Generate JSON body to schedule reminder +#-----------------------------------------# +def schedule_reminder(natural_language_request): + """Generate JSON body to schedule reminder""" + sys_prompt = """Your job is to create the JSON body for an API call to schedule texts and calls. Then , you will schedule the text or call for the user will request based on pacific time (given in pacific time). If user asks for a reminder today at 6 pm that is 18:00 (24 hour notation). + + If the user requests to be called or messaged on their work phone, set to_phone variable to '+12221110000' else send it to default phone '+15554443333'. Use twilio = True by default. + + Example endpoint: http://YOUR-ENDPOINT.elasticbeanstalk.com/schedule_single_reminder + Example call: + { + "time": "18:20", + "day": "2023-11-27", + "message_body": "This is the reminder body!", + "call": "True", + "twilio": "True", + "to_number": "+15554443333" + } + + Example message: + { + "time":"23:46", + "day":"2023-11-27", + "message_body":"text reminder to check email", + "to_number":"+15554443333", + "twilio":"True", + "call":"False" + } + """ + curr_time = get_time() + ai_client = OpenAI() + completion = ai_client.chat.completions.create( + model="gpt-3.5-turbo-1106", + messages=[ + {"role": "system", "content": f"{sys_prompt}"}, + {"role": "user", "content": f"{natural_language_request}. : {curr_time}"}, + ], + response_format={ "type": "json_object" }, + ) + + return json.loads(completion.choices[0].message.content) + +#------------------------------------# +# Follow up text +#------------------------------------# +def send_follow_up_text(send_to, send_from, incoming_message): + """Send follow up text + + Parameters + ---------- + send_to : str + Phone number to send text to + send_from : str + Phone number to send text from + incoming_message : str + Incoming message from Twilio + """ + if incoming_message == 'yolo': + send_initial_text(send_to, send_from) + else: + tools = [ + { + "type": "function", + "function": { + "name": "schedule_reminder", + "description": "Schedule a reminder using natural language", + "parameters": { + "type": "object", + "properties": { + "natural_language_request": { + "type": "string", + "description": "Requested reminder in natural language. Example: 'Remind me to call mom tomorrow at 6pm' or 'Send me a message with a Matrix quote on wednesday at 8am'", + } + }, + "required": ["natural_language_request"], + }, + } + } + ] + #----------------------------------------------------# + # AI w/tools - reply or use tools to schedule reminder + #----------------------------------------------------# + completion = ai_client.chat.completions.create( + model="gpt-3.5-turbo-1106", + messages=[ + {"role": "system", "content": f"You are an AI assistant that can schedule reminders (like calls and texts) if asked to do so. Be informative, funny, and helpful, and keep your messages clear and short. To schedule reminder just pass a natural language request to the function 'schedule_reminder'"}, + {"role": "user", "content": f"{incoming_message}"} + ], + tools=tools, + tool_choice="auto" + ) + message = completion.choices[0].message.content + if message==None: + message = "Just a minute while I schedule your reminder." + send_message(message, send_to, send_from) + + #----------------------------------------------------# + # If tools are called, call the tools function + #----------------------------------------------------# + if completion.choices[0].message.tool_calls: + if completion.choices[0].message.tool_calls[0].function.name == 'schedule_reminder': + args = completion.choices[0].message.tool_calls[0].function.arguments + args_dict = json.loads(args) + try: + json_body = schedule_reminder(**args_dict) + url_endpoint = "http://YOUR-ENDPOINT.elasticbeanstalk.com/schedule_single_reminder" + headers = {'Content-Type': 'application/json'} + + #--------------------------------# + # Schedule reminder + #--------------------------------# + response = requests.post(url_endpoint, headers=headers, data=json.dumps(json_body)) + if response.status_code == 200: + send_message("Your reminder has been scheduled.", send_to, send_from) + except Exception as e: + logging.error(f"Error: {e}") + +#------------------------------------# +# Send message using Twilio +#------------------------------------# +def send_message(outgoing_message, send_to, send_from): + message = CLIENT.messages.create( + body=outgoing_message, from_=send_from, to=send_to, + ) + return func.HttpResponse( + "You can text this number again if you need more information. (LP)", status_code=200 + ) diff --git a/host.json b/host.json new file mode 100644 index 0000000..8c60cd1 --- /dev/null +++ b/host.json @@ -0,0 +1,7 @@ +{ + "version": "2.0", + "extensionBundle": { + "id": "Microsoft.Azure.Functions.ExtensionBundle", + "version": "[2.6.1, 3.0.0)" + } +} diff --git a/images/azure_func_env_variables.png b/images/azure_func_env_variables.png new file mode 100644 index 0000000000000000000000000000000000000000..e1d3122e8dfcf527ecbb9427a93d2dd475234217 GIT binary patch literal 58947 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%0D8PN zQ--nd;-i$m%KVeE8RhTrbW;N+ERj{&z#!_dQTAf3^S4iEORoOF2Bc4cK?FGjkb;9g`R=Yv##32x{(%@kCO=&0oQCwC8$U3PC}k1#3}CupWHu5zudEBxK_iz>n= zZF_uq$v)DXGhLuRHX{*^LW)tJnMQf*44gdYpP7wk25lDAI>Bf537-}X_^C)M+c;{f zu=A%!eoGIxrMs$ah+0a6Pv{H9f;3$@uTK^2MaMcA!Q1Q>&MW5)@nmyTCi8fGJFW|8 zP$kPyA30dYl+Kt|p*1OIh*9qd_}S=D1=dNjIjOS-WM8`$j7f4sj|X2jV2Z)}R0ZzL z3fmKYL`7H{K&{ad5H~wh<GT4wJ1QL3%)s`R zMKSGjS8W%^cH2#3<=m0pHi&lTDjwuea?gk+YDjEVLA|iT=a5~o9l(7z~^ zBn0;vNW)dG!;Vg$7M>puzap{O7nFu^0v`sV$&%s?S@JTWEm2__?9e17WvCA)H*MZK z9Q^wS!E^e1jLaf^jcpO6;(AZkrP~3QwvSP{S?2945n`F;e==*G?oBv-Kv}mrCp;8H#;W*J!sd0@Y$8u*s0J zwu$W+8qPcqgv4!vyq2PVE(Twy5nhFBweMJ;2=olx2lM=_T117NY~q%!H)SuqqhZIK zh})3$zf=PIhjr+cqLHW+kI*reO z3Fow9X^rY|&GF^-fc^B_9UO){-1^5Puja;D`?bkE_aCCid4+G!K~e1r$m?cuxwHI( zxg~(@<&Tub%-)$B+8d6(Kgw-QY_MxBS(Vzv6`jd1SzrtK3V_@Az=F*4$ruGe%}q&L zZjO^7?Y3J2FE*BJLo}te1k_@aZPu5(im+@1l){TS(rMyG3L>!abYSxv#^I zKZnlnuH;DN@%+0pRkQ^hi?mq6$CajjN>8TBq0P2h!!_v3=WZHETle>b;;{Gi$6m;V z3r|}y4)fn+su+8fsQhJW`V=+aS1z7-j>uzKOYp?1S%q$WUhg8;w!Pf^l}%Ijv1OYh zg!%*ATsCRb@1(pHPSH-XzbYTcW;rhmdvvWIN5_>F2N=S+n%KYkm(A_qn@?_o55Usp zz_u($qvqJqjB;!LSI+gymC!Mh%_R%umnd4vL3ryyXahp_m}3K+{f0}8Pwwui!!kbi zyv5TS!0)<(mg6{gsLt^=cSPYhMyz@ITHP_>q*l>^avXU7vcQ~VLb0tip-#T90`-+Zc8B(8`pS@_J>(_f1lG3@2taV=QYP0hUn>7PRttZS~`8?qf6Lyd&#B-15( zzI$kRNF|y}y2Ha;i~8w4(t-P|NcY~uBnw8y1vlt-LO{zKN3>k8HlubR*8h$yUK=jj z+wyy#RFLfy9Ox-rb1i{4GhT*0fT?3z?EeNJIbDG^%S!@&d-Vz1y>Ns&w%U?Gz zVHL|(XEdB*I4A`9bR))nYVZ_ajXnn=Zh-r&_2g#%ZxRZLr?eeUP_)xa%FaQTeHM%B zd%C_eEMY11_1FZ>YTJz=c4hP^*D$f+bmis}q3Ft|xZ--Uc?*$Po=~4*)WQ>5m=*Wd znayjq77geWyaTp9K5zUIZN{#ZEly0)EaAc+QDZem5DNl&SuD;}SK0^pqBC*nvXwu1 zZz3O zkA>KvYyX044bmks5GRe5mCgW(K$;7Suy0~vP@Z`g2yG5s`k-<`@Isygx*8bHyOJCJ z*J1whU zb;w%0Ylo%QqWv?CEW0zx$)BZ)8!e!Gafet3u7 zEHvt#8!!5D-)T^mNan@GWFYUb2%G8by?VAteRp8E&iH`5Z}w52Iro!#Q^)RA~Lf;u8Z$*W*)&hcY)TbU4Kg(;eY5yQkT4jFQzZH)>{Cqe2L$o z$GVG0)7g3&xTwmE$6D^TZ z8_3wr^^f+^^R#PiLmze;uVRh)L#k~nH>X`2-`j<7gGDX%bx{OT1}D*tsOd#mGfo(n@@YxX-!E=C^|6b zigt9h9fnQPluXYA#*GW!a@1`x0FcHI7+D-5EMFqXu~UR*4*7h2^wZfkHKt3$M%yRE zC%*Vw>r^nJ7&d=iOZ~>_3j4kvjfp1+8|;QXv(?z(- z3*6>CG*W)$Jpb~y zOIR57{R4U~1A@%Q>MS7mLh{~wtvN-#OlGfU_1pCKIcx(hU60M19&OT0Y_IQ%2YpZ~ zFSku$wH^ZddRR+yfZhfs4k_M%t|R6R+~Akit4F&uRc2X1qzil6qN^?$Kgp!Kr z{dnHe16bbRE`u7TqxHHEC7MAUyY=KbXcThuTj^_?ovOna*kcHCz$|pWP*y}^#f<;G zrtzzK)nuHv()Y^9d2c(5f4ldGIpq(R0E=ifC7^rCvpCWD^WyFev9_9N8lKr%58}Y3 zIUaqlIPtJNPj8M!(4zuI9RzwBPH__17x9 zzw})z%XF$r>I`Rjw*-w=7V`T7?_GqxQi1rjntS<@jXbt9`004JU=&_V(fn-ZDKzrR%8YAh)s{cz4mDA}<71akDOYcZEq zRDy9HZC3!-6iG_CM?wU?d~drV^Bn0Z1&jHGz{7f!aZpWD78T?nF8EDq=9VS})|u_G zlxb=D>rBBuApeyz8p!V0s;nLa0DTF{+v?HRp{c*z^vEuvT70Ce> z5y04ZHeHeEf{`!oResI-!HLu_IWZEI# zWQj#4I?;6rZ_@{t^Ip99ETjsX-hUE0R<{wuGIWwmj(EB|2lXI`j`3U@l=m2!?bMRH zJqtUF_7j*ZNxkK|CCwkKsX7oxEl>lEmHOS=N#*Eh&4C_7rgIlonVG+IxhWIp%g_9A zyarzf@b58%A49je^d8A}iO)DtG~#eqxatyz>?F2BjIv9N1=PB&T)CWObf`S=S&ur+ z=zq9GtEsC=KlSi-D~n#e^IfTWMw$K(tt?J0(^;dTO7jIrh)fnulsP6YOVl+e7BRY)iaOJ9Xnn(TSN9r7n>67 ztB^v5V*=geurzOo>8Iways=VBT&Llt?6BJqCn%wRokgyAnivYb8|R43H(tM;BDx=} zs>OZ-9$K#a@JszGK>uK<)cAR>#nyamJ%Pxd8@Z9DW55_Hh+u46)@8?1NnJ70r7?PT z*%AA!ORq7>6=Mg|(>vApUq7hDlS5EsOn<^yX=D&TW^~DGNM<`^u(0UJq6Oq-JtS;x zJkr1FVK09Ls75IKyCT-x<9HrdL+;1%ZdOalEt76g0WHr?IRruQfw=~K`y?vEv=R?r zUJDv_p{XcULLn0qF2IuKvNHr?v_z+YpL6KYl7xG_x!w% z!v0+GD8|{5xDbi_&fcg`Y&Ey;oDU@V!xZB*!u>vjFzqNBaFG|{^0J5A>Y7WkHB9fB z7>&;eYi(JGb*s%-O|{xpQnNJhY#2VY1!%MvJm)0Q2M%jd38r+$`no*I@heGPmjWqp zPNNTXXvUpkIJ{&iAEpG?1?ZFR&C1JKbZZBKKRxY> zi+s?niO`rY+|ENAc!!I)iS071J(Af5rK={0C{D-VBY6Kw_F9l_xI&1v&LG}Dl^#rIl!6xQHWUC zHJdO<$EC!Fq2NVVT6A-1q*NKVG2Umz(1qUdh3*$M-rwF!45dk7W zPjSfQ7RSxIw^eotJ^TiJ z*eGrDU3dTaE<%`=&Kf&10P$;M)5_EFYDRtlCyCh=p%H7_Q#qEkBbl zLVF)tOuYnUz%zT@hMrauGPalQ`Aa_J_+IYhHp2x28f(2!H1~a#4&d0j9`0u@RwXp= z-OJ!$?ZrydO_>dz+*pH#wyzSf#>U3U^JcRkn_0WzoBOb z8nsLw57Sw*(KXa5T@f9*N8R{@mICD#RC3N)RvP0~ZWBHOR-|i9@Y?YGF7*e(vCr<- z`ktqnS7fw*fIV9`FiM=TUR86}{c*6wL^}jGWR?Kcnn=KGA`H z4=D?xEk?pSHA-Z_n7`a2UD}Pff96U|Tky9sQfu#I*YaqzFR&?kDh6W;Q2p&@W5Yst z^^voeBj~kBa7T7pfaX`j(^HJV97!vXAE8PLbSpGtA^-|2^osso^&6!Dnw>#5{Kr~6 z#}S%mn{k*mZP_G}Kj*zcMu5Bzm2Gz1@~Gg_p4r+Ne6L?rA}>}pF9{yh8XP9Hl;6Ou zYBzHy3?GK7U@(}lepUm(BZ=^EJg8{-qeJd8M$d7e+#D<4l=Rfj;L~TZF$kb>WR_Wa zhjC-)o^+p*{%Cl9M79<)AR@!|c}aCxgSH&`o`-=->MCQK!EM`0W&ofkm2Q!VkL3Tp z^UulkA=my@z)iQbOKuFkb`)CE*Xp%KNyI^|6}5iwdfo0j3)6Qf>9 z`W&o{TGdYVAMlyK{bz!RCXhh-eAi{5`|N>zwc|~DA%+nkh{vh0QbnL7@`kRC*$+_J z#`ygk>-*d^g^UgDO2YPP-51+~veqCOL)SrDK_olu>u_Y$&PqT%?Qw4G+tsYeY_D?3 z>(4)Fib*MWrB-FI3X!}fD=#{~Ena2}C7jZ5%+04oNP!k?l&+_B7ffBY@i$?lyqL`* zGRLIqf#_Ut1(}9YEZTs_#Y9t-f(Xrkk4c3&T!qJ$DFiQAU!}b1Y&oM}#f zu3%%5Odlc##5A+g0y0R&Nu`Nqc7+XVAupI?%eId zhF3XSmwq_Sd1vK1l+2nBY>d1j4mN1IYp4iZ{3$6Yk$rM0D91!XaQz4;0cN_Q`h{Yc z!BfPHXdGz`P?06Y866!BPwLrJ_<;uMwAbpXp`CY(SO1V=`fr;;Q}zY&c$2v zW7_~SJL{}HH>^{GfeFr}&Yj5l>v^L}seu%{cJyPY?6%(cCyvzauTuEAd#@$U*7Yw+ z9X>p_uho<)>gPV1Df$9&2dhnAXM|!goW7Kg4aeFJf_u4~t zg;N6;ujbMpC^bJmJ{ng^J~#7*KJpsR-J6?8A1b*{1w6AQ3JE`!(@~U?St^=f^nLvY ze3iG`9&)peUqQzX2w52cdw!jh%m){KSKW!YT9r?7nqV|qnknSKKL5yDERy_KK(9ip zi==ZA?v>hO>s9Tc22Y+P<{KbMV{)Tbr-`Ax2hBfS0%`MpBR1V0&2tw5qLx*#(83>( zTUhaisM-5C^LEoN*h&Xsm(D)lXZmHWSTQrJ17Zg+1ojgq-+E2S$LVr*v-pcm3YlYhIFxi#1f1aAv zvfgWYL43gJxL5~%mea7cf2Z6G4nBvoqQG+@;?uh?TQ@bhSy7|pf*X_D?4{{xI4v}D z+Yd7X#`zp)`i54w{aVDQujY7I>EiE_7dfE@(sT!%SRX77gWvYORJTno*rbo=*!4mW zie)<(2JdsQ_LrKGt@_o{w{u6_a^}%zbFAJ5V=J42(Q9={NpRVj!n>ZO&{?ptXAi(PQPH?z{rD9yh5Mw|yq1f;*GaN8P(Jj2WnI4K=XWN-}Tb+sHEbrH=fUDnPmfR8t%hYeqb7Fy^$;)pH|T`G=VyAqfYX5)`{BA}PjS_|7k z9P1|2xM{d&Pjms;*hU34JJE*f+#?GNr?lZtk@Ea@D&n$YC^g`8i6IV2BaWyYZ42mh zNe?%qY~IZ|Nd0j6mg#KKt$I_dLw`}!j!0_dVvx@)O(ZTPUMM!AHDRJ@9T;GrTrOK> z>(Tb~_`?~ufsh+3n8ClWzs~32LSwck!Qs9Z!(Sgy;3))AttPewJT~r{w0vX6XP2QG z)(7pcbSo-PF?U2GQJtBK%6_&oY`_r*B#H2p4@b5PGivjmO^EURg`$InXoTo*>=Dt* z_R!$`B)gA1{sg)E&JGIKCu3$6(zx zeb~;wCVo88O|F0|7#vJko>G z&Kw^uP_|k$15RzMj2^gLiDO17PQj|B%<<0d;$F-)h=ri^a^%o3(o z!|EnA@p*}uDDkQ-#l7Dr+r95Jxp@Y$r$@G`1n(|LRW_pX^&I!~HZ!eO{uuVa958(X z2U=xr)2zC*0Z>VsP@87ji1@zD_F(fMHGo%rht})`{h>rC&CCW%v%9^;+gn5N-6H3` zVg}4oW(DW{GF3}y_OeLkD=QoO(-QiPuZ}m`9Bj{DJrx#=5e-2s6-0)LJmM|?xMl5& zOIQp;ciKM?jKA6*wMW(J#Ot5vkv~+n6u#^C=^VD&d!&)LN8}OWJ2%EIzTldjG+z2- z_>G_US$d=`W-@^1{oSjAzUTESljABPnHgW9+PbslRozT+7^DEF{u2}WpEpyMB(9xU z`BBsD%@q;(W;B{U$G^^$S>axt{vBn?>0kWz^X2@izsW7OjPB=?ul4^^z44#eNuL)t z*{NP86@y(UByfrU&!fleF8zaM5sc=H0qCE{vgFj2 zRxg{G3d_6YN_Xn+KK24RS?)a2PhJ|U7Z2ugN+bYJy}D40aiy6$~gOCfw* zGizxyXzu@XKM$)CgZ<+O z4l45Oza6Q^J^w`xta1Mue>us+ZZogh>v8KDy+Qmy=hy=;d)MZxMy*No@ViQf`c*?G z<5~g@c9Q%$G?uv>0RIgo`UT=}DBz)aMVxD<810fY=BpAdLrBW0nyV?yE4p_?nkRxPt zZ*E-{vH$HQpsb{GLjyB7pH_2pC~kVS#<_ZIK)3GGTs3E?XlOAN=OXG29#LKofrt7A zy{*D8Nif*dBmJ(Mv;C^;{0A0VlKFW0V#8aUWBOOMlK#VK0ee;=AZ_w@F-b4CSnO4m zw%}sN&&Bk7*Gvq$U39UEc=<&El85OIBA|C4I-3)~s@uYn`hRtkt1WOjmCNKOZwb(~ zoW}lFr3irmGTIm=_cG_R;hr^}4iA+&I#vyPRD-7bJ%&LwP_oJKsw5quUvy(tW=me9 z?{m(3So+|j2NmJS&pgG=tihZ^T8Hy3MQ%Ml2T&Pbbd38k@Z$H=fG|jJ{O!Z{Enk~p zPw9*MXt$pwn%^NsYy*D>rrpud;!~4<@1AbazMIl`Z!RF;8rXTTDG~%NjBU~@3qcwK zWCs7G5Y%Iu1FU}Yc}KNqG~3k)12z`^>GSmGdMYu;-sD-={Y;aBG}eAp-%b14oZM#!2mr`E6x+2^Enk6x zFf$7nINQ`+kh|U>-{fs~>ldw{Kbz+~t`|h`49wQN3$lxo+w!Ba5Q6Cy#`V&AwfD#Li!%m$^5- z>X&hK`lIdC3+Dj_AhtR7Qqh~fgYo@u{%uQki+3wE5B1P^?@>jy5iqj412Wa zi`xrn%FG`%GiE#?B#wT;|vIw~+u^*7!-R-*HRbk~qLL&!AZV%JLQ|=^Fz2V1Dh8NhyF7 zE>s#&I6=W1DK}pHk1X0&_Y|=JM43p`A_4wUR&!&V7JPxuO>O)*|MV#Tt}ydrZYw-F z&;9nDSKB@9NKc<3z}ZhcgoGPaD9gL&r#^v|;&#N+Mv&yj77V83ioBQCJ9W^Uq4lSB z-*ETy@_x2fVt%%!y0obrRHe4UU4=b_!r=jcmJzF@6yq@l+`#`cLV9vP`8w4CS^|3F zv&?JuX?IrNS#=2wk7@F(GTqSr2fq%ypD9ydWYqfRDbK#=NyHJ*rZB|9!*+neJHWe@ z@?YHIql`RdB{`S5wDn7{)eS&H13Rx_?>Eyqd-$Iw0a~y;@Bbw){bruL_^+xP(9SU+ z{`>bi5%oWbv`5eXS2yebJxZ`gm+aB(cj>5}wykdNmLuw!ycbwb`VdQ8ywwpi@JG)c1 zgwGGu@*{H=K6+W#DD@w|Ta!^5)A4@nemK(mdi_rZeGxqxa4Zq&y19im-6A7s00=?5 zHT1X>^iti>4^&i)ydIoi!5sE$z|_vs5`@4c>L(~+!fGk@htVeP*WtJWgoeBo^zZHD1=l^ z({E^J(%FDWP~7kkD(qWcP|Lm33k~YG47VpDz%=}|j!O^Nr)Gx|wEzaKDTfKd*!tRm zpQ2xZM}b*;^jt$w+0%XgV#@aIClK*YpuSLE(<&yfz5Hpo@D-MW1`Qr{6`+w5;gSH1 z-yn9YqbkHLiFm7FCfoc8h>b0%Y85Zhiik()30i#Z9iGH`|1IC zvn@^)lg_tYqui0y*esb=Kw`8;_nps{kP}YpfswdQAraYRc`seP$IzdA+TjpU(DFrwW zD{nC#LcFrQ6lj#0rSYb>rYi?>w8yii*gbN%vu3h<^ur1>9#lOdxz}LZ*M&G zvzdIgR6BAQKo`-YK`UT%`uZaBv9p(d6fDk8D9?qBns1~>jQ^Imz?|>K5RE#3%BzN8 z?A-9$YYamho6Iq3J(nJmZVu;`D_k!AlpIZ0=_L9bI*^gEw_*D}O53ox_3-oIW*23v zV8_i5%FommVHs*reC*W}Yuia)besILrlSx~TX^B8Zc-lL4G_nMdtKlQ)N3ktlL@X+ z>OEt7=Pv&iR*yGAE3cfO5u~6aJYc~I(MWl_u>TO3prx#ZdBQwF2LqZhJ@l#8pS) zvd*oEfSZ%|H2ri!?RdS_qo`F4tqMtu#aax z+U3^OXnd=eyQ+{ah9f!GhmA(L9q?(|U*yY35>y@H;NpR$YSe zI{d3ru&0$M5PtxCAEy=!05;P9!`y!bG?jgS+;EgZW+>t)MLH|(@FBf4c<$gxE}3Xeto@bAQi84zL9d2mQ0Y;%~@ z&NyflhkU^{Fq7LGV&T}Hd zrArMmeBb}PBARi;X$h@Lc0+vC--c0hrW! z9l|xIUzk6WZ@jYk(R-h+^Au%upG9KH^UErf#stVdg!gvat?36Ut{ISvkNkV>MQeW8 z5P)lNfnkI}@8_OfCRpRRi}2pBq%gpvydg?G7J1i@$Yg6ah;Q;x~?x1BjmiL|nGmHXz}#_o>5(BoOs|c|@@UfiF z)+TR0>#u*;asmv}(OHcOvBM0u746s!pT@!lsqtrr%-dsW&!zmw^|c)H3jud2FJ8S@`wE=+lgCs|x5Jy#!v+S~tWEGb2sU(KFP(zCTFN!OTwo{P3~47(focSQ=p_duN~bYwW68$C>dS_6pZ^?K+U}meq0lt^wX}k= zu+z`I_IF`{+*GBSb{XXZALZ%VciZ6^ICmP;|IWrP(^Ic1vM1He6RRi-I|1qwc~116 zd}Td4Vbw8iRC9j4oE@XEn;Llg)hQI_}pzNMh*TaGKbOe5`t%cn(a9uM6Z zf8>oS)U?3NP6!ow!5F>ZoFnnbfsK|p4mH2ZBkh|%t75A=y54{KLm224 z>zcx}f|*MgBVmZrMtUTq#v492eqqgDu!cLTH{7N7k!O37nE~3HxVc6Wpm3Lc0PG-@ zeOmiDCrK)|A)SdDW?Hs^8$6eu+rv2?cMrmEQ;M;hdk-R>cXsMX{+i?y;)m#=8lInx zjPHCE2jM7|R{m>|p$P!xfxxS2;{>Qm-eZNCe(aJ4kp(GZC3cszVSRK zEmMEhXOQ35I^Wq-)L1s)*K8by7Opn_VW}Wlre}(Nq>owPqibHKwU#raF}x!jvsM`J z9l63k!zmt2IfEAaI``W>iKdgPKk#scWkuQC-N|OhSuI8kS>@sbTXYmOs)(wa{ykzd zA?yKglQyF#g?57%P0h61HL>{ffe>2OJrF?K=6OLbsD?rGAH28t%o%@X-!`&FYWqEI zc+che4-KE=9h@b8VLs+o6N;xQZpk?{m;;dlY@&hzbrLzWQM5JIfeEG-I(PS;czqnF zwh$CSernzBBR+sd!=48_qyc8l^iJw_sPTE)TbDgb_x0^vX^Tp7h?nkPC(r@rsWFT# zE_>Ctd0J?bQA4yK_=P6CX}gp=olPgKAGI!`?|%t=InYI)XxDHqKJ_%xLM@?XRS1In zQeg_kzE70J-a*5kW9`#k`FEx(4gXcfRb7jv4XxK*S9FEOBC#DC+wrj+q{KF)n=2CC zz+)3!_js6=!nTrGUOe0?f^v#>FY1R~F9PQaDsrdY4y7xSz*TGQhHb{AKnp zS6`HNiZ8Uv+aV*iLd|HW#HT#YsyvyT?s;|MDOcMim;OcGG=MT^{xZFMeI`)MkhkmxoQ)5(No96Wix7!C&ND`^t^sra8b~fFfTz z$r^jo$Eyu$3sBD4M&E}JH6M8Rydz=vJ?+NPM1T0uAcweY#XLFvQJ}lxR{=!@(mZfT zO{AgAN)PEUeY+s(XVlC&9U`I=4?ctuV-80pC$_A;gD74RCH}ykg$NeUuHmU$H}n$G zHuH_-a0IX;?A`c{mWAQ!^;$8QnU5>)OQ4X56Tw*{cUCZ|JXRq>A`KIA)r&Hn!x-yrw3&6A zpK=inF5m68OQ6!FO-Pp(Wj|6uMj_oc#ie9m4A$nPo566Uvwb6C$y+bn>v}+pj-#%l zXY*IzH?(a{5)2OilovAlm&9^UUCu;NR|ebWdR@wKOowv45W;dZkv>d{p`raUtXmzh z4%=VXQrzfYFHq|5iCgFS6rA^2$z9FZD!m-l_GQ%s|Hqg5TLaJUA|J{xWaXlAvTOvi zbuQXo)Yo`5h?(5GEG}#zrL#V((>XZkSYQf0o}glb8Yo@=!gLi+*9U5B*sDHIZw%H* zR}(iCLnOuHYD>~f^RqbGC(;r;*LII`WY#c%B^y}j1z76{wGPwprv%7S)!R)EASPrX>IZ?AC4_Hp(1={dr>fGc$PA=g}WG)E_K z;{NXAdZ^)doi$^lnxOr3k?ziHj`sl>?=eQyQq$@1j{tw-y1(5A)b!e~QV9+M?A;B; zrUn;-WV=-S$m5E3ubvy~t<|j4h5)bz>?nB6%GqAU$?QoF(TL7D2hNB$u4_1Iro_n| z=92?2F2SOV*P8qH`QP(UoHwLmW91(~j!aP&uTieO6BA?HAlLZePKt+@_?u;3}lDB%Z zgWuey_2^FPl48iySZT|K;khoDn>f7h@g_8XzQ?_qm+T2pI-%i&#k8ZABS%mZvf~wx zDqcPmmKA6a2CQg^d1iPYXRuzfykwfmuVF1Wn8t^$%u`+i_nLfROXKzCw+`KzRiNAq zFbBzT54E?7@ajUN%)v55Aj$STRoXVgrO`54yuO4MWG~7#tJL}R-HE|+gnv>cG~wUm z_)ILYAmX~Kt=kEtXV+6IpM2;}uK(tM#a$CRaN7QZ@uc;SlzOKRJSRunwy!>1Y zg2Pd4Z7mWfp*(oh%dGVOVHxD_03jo}xnd1B!pk??pHnrrCzszSy6zulEKCy?3F|R) zvQ>>ok+4wXA#hOz_mPJb9l=;lUv3HManZ zlqKn9eWHJp-ktc~jMo5rP&)Ee$a=lF0+JB?RJbilG$oq$pS>v#KM(FfX;4WXheB^s4T?;TemX)TA1&gi7W2?;ULa)bO@)SOTEs^U{(~T z!BH;AB5&g6Vke)?)-J#=7y$sYrhP;8I(Wzfp<6CO1x=~>h?_pg6AM4^d2cmH9DuFM zF($ADpjMPOU?5$fnnbagmjfrJ^yly@Y?|I)4;yA0pZ~q1o06D&^g;~;)h>(MQ zpkC!vOC*w2@S4vMS|{`H-}q{uiu{ecb&Gi^qd-A^N0M7*lzZK5LUoIPb*^sc`K|qq zA88-5OYM{?Y03XI3RI8=5dG|<6bNOkDxGZ7k{>jY=bQcRxO@vR_^H&fK8nc*!~M75 z-x@(u`hNi|(3UMw)#Kl=_WaND|3{_3ze@fc1uZztbtOIWoAA$XTyGTt zYVBq^3SYh-ip1^Ht9w-$=ca#t^|&bTn+vV`Tls1u4k_*l+;GOW9#E@3AUQAZ0;?8P z?4&Mmg$^S4*T*v%*{u3|twS$Af`B6SL6}}jFp8o2*T1P7uxk5buK29$gaV)kj`6j{ zQIWs?WsC3s=U!4-rVSeiljPNNy{!jADe*3P7J}VB&)Ak)yv?)RcyPDgf#Q7_WauT@ zxc0M>s5d_VPz$wnn`qP9UX|+{?V-@tzL%9y(@2l63Lt*_`5_R<@Gvm&nIaUY$mEdm zEA7>clo2H?_66+v!(DF=gut+hl72ZnT~T?3)Vwn0Gce+_K}TO45%Mc>Z-dcPNaxdt zgVa_zwr_WUVneK_&!mrqx+q7|#+z36UXOSNE4Q@j+q~~Ve*FkS98TlskPycrvJJ5clBW>ZdO`Mv9xCn&eA=z z0v=jHPxw?!!p_4Si7>&V@#vHH4(mom3{#zWN$fn_!HTz!_o=j(M&(4e%>CU_r?+88 zB&}6zCz8`iL&>&d6Hte7RxM2LQkTQ=Ximd~noe42B_-Im*8LOEmauSAZ)trGmY9jP zQ@XL|$j=d7FV&;;R~JE7#X4pkgrJJs!^73ycew`mcF%YvQG*@eN5qqXir8RaQs;-Q9Mj_U@we(gkE7V) z0xr(-djkDqb{&-+@YaLX*{*M6eQifEdTUxYrlZj-*U-zl)dv<2S`@7X6A&hEsAS#z zE^{*N2E(eX@*G^brlS!p|&%ul0a+Rv2^(Hgflu4b38pEPw%^2tXx9CUv1mXfA) z3BUxm+3qKcyf54h)XK^VlUFCsb2=xl7omjtm zgXBjI8R55UY?>mfV43r=%MX?9wUd!={AHzL>?JJoL5P>Ibb>#lG)+c2gO-~zNQthz zWtK#jWbF9{Tt?P-+}sxcf`!0eK<~ zWNAi#pE}_E7X2$H_~qNs(A=!wJS3riut!9EN)~Q3=A3=Go%hn-CGM>hc1k2cHwn6p z3A^B3v3*ekdl%x`f|l7b_w0X>W*pr+>1FDNmkErDsozfYECZCY!>EEXi&ux!aamC_bA?J!3h0*DXuV+yB52ZSjiG$;=aNmvg{9%UIyw%zSL+d=q z&|0B#I>yPF!6z`<5q18&t0EutvyAjgK7Qimvq0DCfh^%a6m@M=-KCVd%db8xUK-Uz zasib#AC#17T%;V2GB3$(N#!lT45f?9@<509DShNGCr#hU5DGPRGw+knc8I%9spd^a z8cKjlt>y6H#*DpL8IsKpx14GUn8+5C86(n`Cmvz>t#_KfV z%mlc=I*Ix%2&ryd+G^@Kc=XuQU%=O7{@&NJzB#{_L-}Zf1~{=**;Lu{yw-_zV1GTD zFA4-Q4M#|sCnHlGEbbht8#uFkxsOz=+eepHKnSW(N~GL<4^|2xt{QpzekJ_BK#M)e ziNgaiIsK`^_buY`+NJ&1z8tBJ4+!y+fm{@VM-PbqJUT&rhBJzHM}p&K(aI{xI(j}E zqiI5Vv(W~hmpJq;YFo(On-(Srskp>Roj^Ph1*83~ zC7RKTW-al+E`$yKN!v_&|JceDb*pIcvY{mBNjmjj?S4Rt0%dmqay30^vEwW8UH)@w zp`Ehds@r_@sm0d(G5>rXF}Y!O8U7(|y$r?iBiz?6Bp(Kuenl|38Qfj(tnw~p%${@i zYmZb6L!p{0hIzjIeCQZV19dpWUj)_16OHu zfr#~O-MnkmWc2wC`|)BO%17X$BF4g~$@pd;kic;cd*9u%hc!9N(dWsg;RsKZ zao2viL&KLxm;dNX7*i{M44H<@E-GD>d?LIQ(1S3-3{=ef623~gk9J@cF~W2{=>ygH zU(9r^vmNOBci`$_ZL7K9USpzHm^FFoD#ZTYGCU?f1G!N9^BoR7l6~i8+|NE76&6~v^^qrg_??rjHb zWgP=Pjn8gJ1dGOpdGADI;=W2M=C3&g{;1w~(T2@IRqDs=1UQbw4|XB!k#4D;P5e5d zE{ZE1_hFUFBSxe5TN$=NJz;`^JxRvKvi6Se+UI>c+H`OMnrL+P-nC)7wC0#_8^PS- z?k%S1eMjy^!+>SdU{M~pH-Vmf${pUh6}uZDnpIH{mbm}VIE0-+6eg7&52EwoJV zZY|F!s=HDoXR?5=x>u#F8u{_TrLmC-Y=c)_CReqI?l&n%S`Fp+;g9y+74IDNB=^~j zcSFxD9iMPCMWx#QZ49^=Mxk@NT&a4M7t(SHrxpb`;*Lnj?$PC}>&}q#x_0H0>mNzJ z{Ukrc$9@6-%vf52zsyvs=Q%|m^sTNn%00&1zj_kGhEcW z{5G?Zxa))m-w<~cE&kqMOOk=x@J^1MuA8tFT-(~pIP6r6@M5M3N2*q{IuD{aH;$e+Z^#+oc7N~oW2Qko6CZU-BGjSkC~0< z<0C;Wos^YE+BqY;HX;uOpXDp|r!FbY_9(+Ljp2s$n{d_ELb4V+n7?U@%2!q57V=*8 z@)9u?Z0QfUslz2!z4eeK;=pF7l;NWFbD+Eju5^CPf!BOk9Kl^CC6=4<5DX5~Rg#laWAN}HwkyzKXO)@}TmrgmJ`wI5zC1D- zJmA;sloi&^AJaY{cQl)vI9k(8mB!tY&dApEQ8b9S7Xc zU}Ip`B!Ce0J=dQel%ec@E8`pHxG0YQ{lWtC7kVV-zd2#T|Hm1Q`ac+cY9 zpQfk$m8SJq?+w*f0GQ|DxJuPw7gt4r+vm?i6h@Oa#7#k*9Ij}syQ1e?oo|!t=80a zFu2*yB~#nSR!V!F-oF%NU0>IffNZZ3+Eg5^&v5gZ#b*H$2q2Nb+^I`=qknZIP^f6u zoq{_s;FMPAw?JcWs7fl2r@;nM!UqTZ1vfV*FrsA>NL3o zM|to3`NV!AW39dyLt8Mycm@a5!2Hlj2dRr4=diMc+yAHF8dLaS!W+(?qQ^|5;ri z&{B3Pha?UxQQ;REo_ip9KZ#iSZdOp>!cpnuIZfC0=$8R5l7%-9sj=_ha%n$VZ8}u@ z@=qWw_{pGZS>gUAjR%x_2FNpLw+8%U``3p|S0bT0*nK+11A6G5UbvIyzhfVYk#M}( zfqdg4UDqwP`>;4kt|RZHaE*&;DLX^K%@_*ts z!Ga|gk+zMHE6-03(B;2cJDZyq@l~Wl&0R#WK2FAE{Qr(!0oOBtZ_k`HC#BlmH@E!M zUxv0y=SO=!Y!ff5Wd3+xy`7ehM7q{r=pQYL@%(+arN~UiaM7eLOwvwDSJD#y@ajaO zz0VKn>nbbxhYMAQi}?O0^QyyQV^7acQLRg!kg9cfQmSW2%L>-n3NvB6f2=0_0WY2l zU$lis;3EoRbl9cD0~S#BhvVy4Fs?~de{K6n0hvErt4*wob@kb;@kMgZtQ+n>A9eS{ z*wgm0Uv5c_RwDuHSgrf9Jnv`o6cO$foT6i@^BB!92}J=ZBsdNefL&3&hgj zuvR?`=H9$1E#FKp9H;_+KS>y@?KrBo_e4q5ZuQk0uFk58|LjN+4cQO-pQDqgix%74 zOFaFia}asYhvcm3)>=X>>rXCpR8e zhv#vK0~n|TY0I*vWF=3J6;e$NKzJHSkhXTvO_YgpIiyZ??azKwKj+j()gopUqp+g@ zJy9(Xu>G>31xM*mCx*)(A+=(}jM}5G!s*^3@=k_PD$fo4mJ7ELuEbJ8?bAn;!F&VL zm-K8!nBOXv;URbq!SBEXn3S;ty_P#x#U;6vJ}q(hV}KPLvs^nJ9jUV<#xez5M=B73 zOkhkrc6WC@PJx6!p3uMcxlwg@CU#Y!>R}6K;5<-dXa`8m1rDtti-0GAjFp=D^%M_G zyMT<%LWSo7^)rXKH?I}ww8d7Y8SzxecoGZ481&;a0Gpv8d>n28ezqa_W+FF-I3Si{?+FC!y)mtZtBMpXRU-a0I0Fyz%cKb&Y8gC~kYy zbvC$UorN%J1gnIQs@(x2jMWEgL&NW_EMO{aX;E2uEXI3rN)EaVPy$y2DFA`& zRQI9KvF{kRp-Zf<*TThFMCvfXTDS#mE!=3oYrWFXg?l8@rJq}U7BxGWjM!EFimR)24% z6fDuHi#K)|W-HA#IHtRjOfu@scqK@5^CpL=Db!+mlB(36;)z|XE@s$EpCH>EjD1gX zOn*8Ud(psma2+Rj1~wS~aZEhX7F9Qw?BwyzJA}(vw0?D$n(Si7l3sWmFU*e)&JSd$ z;RgfLw)~EvH82$YYMSt3sl`4$b13cEXLi9jhTD@ElaNLD5MvP)uT4Dm&Mw@WXTVW& zYoz}Mj}H$J_6f}iTEOki%8s+quRLnKjcAWMd$0%;0aG&7`A}f9pre&V__QwT57_a3 zlH6Nb71lK#tDWBviMC7oZ*74oTJ5}9@4K?R*{fD_Kt~-slWe_BF@n4f7Yq0{{>@bx zz}})53Mr6?BcV%kDCx;WLs%?;S2m+HP1K0dyFG)a#cnUq5w1W^ciJ*wz{wD&B&=-? zK+AUnBxscx%&sV@*-v8WYV?I14~Ram&XD6^7>~%ZHJP3em|1FSvUE$G*R}YTT4u_1 zF9&(EXYQx2J;@vgFvlJuqX`E1l{Im+S~3oRG}ilLEb!FbPmiJ{{bD#XJ+9BZ*BGO0 z%yy0!FPvEcdh8)(QR;m#rw~M6%$EtBWz(Bj!WX*(IL^`#7)*_mi)*|Q50C&w@OKm1 zee`K>F&0B?Qlhkr9Q`i&3g3{wQr1wU*Dy8 z9&c3B2;+WAQu!XrHYS(Nq!!AfRpJ@pKq`Qr-{2_j9P|#+o85QFE^}$g|Mtl)OP%_8->%x1@Y?cao*$Y+qOB`lz6CTQI}ua z%s~`I^G?0n?(YE-~Fks|o`{;ys{h3k7fYs~0N&pf5XF@%ZTf4$Ax- z0Q5340>@YPSs7rLk8Q#H#%J?Fm=wGEMb^^O>jVh9rd3a;Tb+u&Dq+`oEIeEP6!L)B z(AaoyeD9dajn#i2$5c{Eg(l%6CI%|AOACSdJFc&ej5qsFqC3bbEo)@3SK1~q8Q>toXMh83+`CqG z((eI`Xe!{*Mox73q!xme+9Y;Gtp3jQ*#ZuJzro|By<}8tFHp{9>@|sS^-v@4R7|(s zyxD5+2epjsX_bv{XJNZ~O5=R-9(Ex`H1Z~+WS%#RU&_4J0w>PTl)lS4A`oIoZ9iJ+F_8^HTd(R^kym1ols(> z_-y7bjUtV3TgP2u01Wr>;(WV}*SLLCxa9t{72Q>wInbBix{d>F!kY^5_B*;cbzbwB zXU0%afd?jG1t>pMO8)(T66m8YtBNmP5H7GQqX2)JD1ytj7`s@<2#R>J0?zPs>gu?1GT7PwEYU6m zp0wh>AAlreOri(Z*ogX>9-HK=aH+Ehy&;tps4Sf?ML4MQF4~f-P~juA=sCuGQMqs@ zu%x!bX5PE|<7ND^-TsCkZOPF=KvJ+WMi&26yPEu=nOl33UQuUf zMv>m7qC!>%$Y70+`--_P{)IFxt7Pwz{4`&vDfC%`s>0;fA`n@zFF@y{TP*CpO24|W z7AK*Zy%dl@f$FeDO#us*F~n&rz0&-7 zaMO&H7cs6dpbXH9bIR!~^(2#9<%xyPp>cJ|v`E|tuVnXE;CkzrxG_9SSji(50GWF9 zk5xdt7mh{6BjlB{e(;v>$UYnmxAv$*jD5!$9#;3+D6EJZHRR<7c6$XHVkkcVkJh%k z46qmvNUUrO(gT2kd*Y(L_hu0nQ4NHCv)a3*P6fD*PZn3Vnydh-yD+$)ZTcF58Ve{; zbwoFbyTTh3OpSH*dLC33lNeYH?mrp#Yo`S2!e$Wr~Z^6eE8vC&~u>DEmn_7D~omzHEG{Dl1$`S~=DQiv97t&}qB z?gl6x4>|gB^n5U|J#LzfP|Qxzu2EACg3hUgxJ$5frH+1{kHPT>J4Jd5+~E2E{>$B) z+VDg5^XY+OvKqkgD2gwz)mP+KHO0)~U!(PCMvh6)IZ#$NH-D}LXEm{tL~l}W_4#M3t*tW4#e|1PSYM@s&_!S`IL_a7Shl= zg@Qgv&cUWIVE;a0KVg^@yj;wOUoSN%0w>bmPSQW_h|5y0hssGYmn?A41~=z>{ZLO` zCJVf>XtF^eRcXNK*c=7$mdU=TtcY!mkeod-XuR?OFwDJ?3e;W0%hywI?1j}<{n*Dv zj=kxtHVcdvU`L^GDc z`Of=np56J@#W@`yM_VVDVoiPquUI@3TBTB+Z-rYkQ$MKtzN6qr=@fV4} z@gFr1+#O#kYob#*UJ9!paLuVkP`8%wohnrTOgF?uC16XUQY{&U0U+4wRRSRN__!Y# zHaD7cp9mbRHmBDC_czKVKKH(v-G^+|qds*wgb4KJk(e+eGAg=t+Hb4d{%nvGmYQa_#+ znZaCk^tb^`7iu&l%>p?%h_)GmnzYR%Mwz_VqWmB}ceg_-#Q&z#7Q0A(>D`vTh<&V+ z@giey=AwrU^WBn-Q{yNuEOnw>v3&~@yV7{azSKhXK4Skjv-!Lfk14TyvA#{V1EI}V zxO@WDlz0~3A0xXpu|#d=RrB7I%9j5!l`)uyks&&;=2CLe;hW#FRn}ZmTr{_Ux)h}4 zk;)Z=5V}bR_F^SM_JdAMfh>0i?qJBoU?fr&>jbB7wO>080*(B@#qnqC;|F;T;w@|! zgEjX%q)@eX-vJXawts93z$#|jQ>A|7n&1A*%Ek~)0&c+~w_M=|k#Lo}4B#L$8`VNd z;M2vj6+9=#(&5`ye(om4+GxIY-m>${8uy%ctHe|aSZHbye8H#fd1TGRGh%<5?`XTb zuG&@~1RbpM3t@j}cT~Ka4EVe5K!RjH6g1?EQQIJjF|7$`t%GU+0FR63+F1;@qxTfK zh8n+JN_Pf?)>X`m_*USOiN5qsT>mX1FT59DF^L9i=Mk^3HEi}owsu5YgfC&WhIWVi z0>_CmFw7A8m>$2WnV~(vUh@FvGGLux?THp=E@&A=Z4CM4^~6qa9qcct;CF}od1@4V zmo5ElI00fqzDr9%_&UouVL^AN}~7pX3QvH+|_C0gAe2HjocCWwADVZfT+!;{&eh}GEm!`8I+ zs}5ad%}13>s__1r0M*B6!7F>dsxv`4a&Ab}U$Z6qpVA}+f^kqI>BOO;bzr7rbiA~r zg~NG7=3Y9x@U!LS4Apg*W`deOU3rvk3`i_a+W%;xX7W#`Zqot)ho#=)G(S4el*{n9 zNv_%vra6tKiMhj8-W#yf^V;h>a9HAoa^>sY<@iv17xfG^Ef#@OJDUFd&dyuZIn`2 z9>~_N^2YCGS_T>V`v`gOsS9%dr#Iz**4H@q;kxh2Bd_ejWtd6{3U;-@Q{K!!M=Pqr zsxrNXl^PL1n@|HwOX6k*bUWhA-n@)!;}w3K2=nzfH4c<`9sme;tgIQ$|FxkhIv&tx zVUdK<6S_oAlM&@QT@l7pT6Mqati-Xp=j(r@tao)4ob&r{C@ZN`8$*1VWansd%0dyy&6Sc@2l2=)5Z57 z{|p<*ux6&gphNV*(oi7*u-IMn<^xv0eJEAPJ`&a0elcSz4=t@0(vjwe@#maLgSdUt zRS=QMuXz4M&z`dYNEd$Yk|JpHJWFa2!si{uaeSJumO?-VE^b#f5coG<;D009*+C7a zr(2_?Yl3klWDfR6XgffN2E)wT#CUH-WT0*`R@qR6ujiXQrED(X1OIJTDCVNp&5rD; z1HqAUWu*#&|9O`(8+W1$)9={A7fMFKT76JT3rtKf8p;Qd^VV`=QpU$*Jsky$Dys+=~~w( z8hf!`4(HKdyM1%>7Bqt_j^l+0PAc;KYIbbEr11&XX}q`V)9-rcxq4ra6YMUKX#X}8 zgf=;9Z7eX-)8e{D#FR4|9$lpni#~{w^2%56^1VkT#ng)7Cujk8*MoReQszf`X)fl_ z1ozMijO4Mr`)N?ReMik*?pH3hG_mo{U#RD74M--99fs<%l9xqF+c+3USn+T-Vx^;j zlC0ZoVX&eGG;v${#DfmvbJw18>t31e&LQVg{@Wf4kC$;qXTK>C1c$Ba70Nj*+|gMp z$-`{`r(s04CO#o*w6Rcn*z|rcf1>1j|G~BtSW+GnQh|QHp6yh!1cZ49+1rEqq`7Ah zu|op}pPOvj<;z9@pWDf;KDWYc$GgHftumKk=KXtx5y{RXr9W|DXFLQ@9b7irpQ zGBtDtwgoR)9*bJJ2H0CMt<}2V&M@Ovu!NAoE>yI_|Ns0VKYwIvad%pVM>ScH*UV=> zz1!V%{e9HUHeT;V11Zjg!t{Y;I#y7VsSMUEJp535s`DID1IfH#12~FUaZP7KO$Oq0 z-b?ow)osfp^F(b5SE6qAu8T^My6xRr9a&1udFS!$N9G-txS*oV575S-!rYsi&7jA|pnjARHx@B!?(>Tz6EhUiFFRjzF*rrF;N&V! zmWy_lblU!g3znwhtTP5Ojk?~3%DcsF;>wk5JGFMsq^}M-z6-Oc}GOt3(yO-ec zzXf3!GII`yBK-Rl&RqCUa2S-!$|wKlQU7nu|NRRfxB*?8XmpQJ*_OCE<~^uq#B;g^ z(Bz$1CmUnTXJr&03M9^mUzyrV?-Ue)9ErrlAqtIu7 z*Fz|Oq(vL4pG~lK+uK?91r#nVg{1^mH0s(v?Ew98RxA3?R-F>-njYKdlkCcquTNwj zuk_!X8=+GvNIP7xk@mY-eMr0h_1QQl&H`caOt+ze4_py7PW@lv$-wU_0x=9gvCK;; z)&1Xb4toEEC0;-cby5`Ffdog*MZ0FuETANrLB$J>s;Xaq@?G7PjBN}YuX2t}Ap(&D zAlEwVufUSJf>r&~6y$iExL(o=RGh zM1_bP1HZAwErrObsga{qwk?&`WJ7i%Mg7K}%FO;Svw#8c^yBHDSUon&Y?`UnQY(|O zXt>Xa4*Yy{pIVG)7E=qHILcgc-EMNt7$&^@;`DP4LnB();sDd=MBr-O{Mhq@edbCi z+tIS}M{SrzOxR!99PioLMSHOnQPP^A>?lmOq)gA6%WdmQntMwWn_IU#xk3pA89O?X z9|ixhd#8Q|1=L9#7F?M~l+&ecrUj~2=%(+C#nL+ zT=6v0?ydv0kg;lJ=AzBWhc=)yOX+}W+>4ImLzl4-1MaMs0SMRC%4K5Cu}d_{;`Rm< zJ;t20#QbyXW6Zu+$o$MlF&)@5P#WI1XmndEvGhEsoe?2;=il+AYLB~rDP&l6=0(BM zJXWlSyD~%{GV50#l6OZve7pNR6j%G-_zuj}6r;`T`(L9*2G7#o)utc||B2S@}quFc7rD^7v= zsn2vwjURS>y3&6Vcs~ts3UMF=D~%|Z+V!UpV3;_jKzv+GjT2r1%5yZDHs2#9Dh6M^ zVqJDWumjyOWaMwDWpBna!OEv~epMnjos@(i;n($R_vr(Ru?8}X_m_G&PQ&3m{QZhw z=)zSQ4=$fjU#avMR8*#h%nx5_932twRcT6A^mtsXG-F-ta2|Pab`&RD5z21cVCyaIGX4Ri_7aMu^ z8!lPJda4D_JW>)%*TQ+IncgP-N@*jXz{v`K+*ZN{)%LE-w*-@$y*`5D%gG)#wLyE# zKi2{!YVDUIpsb)av9iEO!Jm^n2{7JTP>!a)L!eGVHO>K!-$QgHo z1X;UPTa$PBuXvoTN5jYf1p>QdJN?4k&OqLdA+$juWMa|{cq!rDZLE|O(>ofRhMX)d zNJq8I@ADf$%zgXRm*GIdDOfO$G9DNLz+5`VpI`79s(3;unTLtS2MSwc%Eg|31m-+) z6tKZyLH(LW+SGyI#WSM-?c#WR+^3J4P`Qw3C!^nnY~7*Dk7M?$P%3I6QA}dv8m0^FHLCR)sGLoZqt4(rl)GTi(q#((jww3zsDI;uZs(sxk56&uy z^MwWmV9qCRW8yjs- z)RtKc>r;}iQg#X4t$!h7J?!4i_E$$C-=b(h z7=I$<0InnkXp6Ku^)!P{IuI1CwCR(Hh5SEFU3ol|>mDC8oJ$=Q(#b(}BQxh(3Mnxt z9mY1yqKqUL$1)}<`<6J;Ne#y`Lc?U4HKxUk-B=P?vkVz~Obp4f$5`&Gy64{a&v*Ge z@AG>;&-*^#@9+2hK2IkI=Q}i08HD-VZWdyt;b@+>Qgk-ptW{?1%v@&Y_`k@6HZqC4 z@U1hOXgDvb>_}rV?r^ehfU`KJk~g?9~8Fc;${0P zV%(F4o%xi_3)!1~@Y>1VxR6rrlMwRU2!)=Vql5orHg$3B6)~glPT0`X!l=uXys;$z zafKg+8npacVZF-F=PN5~-7N1O2e-ZMx8+sX){%8$3dxh?EvyAf ztyL8C$H(}(qLz0sZ`X+?+JqhZ&QtW=k{0_hyQcj)4L65SSSM0b3x{8|DC`{GXb_Y{ zS0}lVwY4I1*?yrNYDQjs?VX(U+YEA`MF~EJb&rw482GpPXg@tN1&dv-M^y0!1RfDSj|elx8X>Fr+Ux@>7SuLOiMf( z4^}wQTN5vI#hB!zI2M^S;GxZjZ=l4idGNdhSeBxs&Q@7$DZFXvjgr4PYIi&Y`mg^x z9-s*T$PAZ>$4je+*Lb>DplO-C2iPS5S>&aM85uhk=R#uGZ#XI=v@~k5%051YKvlQ` z#X#cu#0vjadb{$S0_FE~c2r0=7eC9nknu5SC|@;gRlhuxr>+#*ntdkXZALMo1xL~1 z{DZpsoa-8zY%S+}0DM1EhIP}@!mL{7hx8LYhSH$;ItOsiiM@+z;Kj(<^0TVw#nxYL z77|0A>X5uJv6rG%>$m!k(pR;$20?V{#NeH^<-2z5$sW-Y`Ko94#p&?b%eY#!sCbNg z$2Ce7!7$edwW9oYGTxSC#=np0?Yv` zGc&f)UWou{z8d(0VbF~HqxAa-YxSTHC3rUS=Traw9fuJ*BQ``Qz}gLF^$|3J^7&ug z)#PvPlgO05!ie`i*q*389|dGt3hPiN-dMqIjL#hLjX~~W?}Kz+0kUv|7%MFgRbx_# zaap-`>OtnRY4T56)xcH?-k8x0o~;iq3d@Iy)`0xAp3(rN6l{N6-W%Q0CmS7+w)JJ& zt}oBWJ$rHU)@X(4W%flOu`&+K)0 z4grLLvPe(p-s@^?8Ya@b=QdK1TgN$%fLx970b|2{}J>B-}nIhw$AJZKB z*ZiG+QUI4;(p2S%BhBo0RD93bGL2lu`nU!gk+d4(Qmz5p2D875x~C6^!K`^z!5nmu zV%0kPseOrbWX;DEYybmO$Wi8`Ez=zv>Po-Z(gNN8pr32Zaj%8qjQd zKg&Ja)&YCw{%g@mrj;49;L!aVwQLXU$tT5Hu$V$L%hzmrJqG=_Lzh%AcJ+O@eUa$I z;GqE6oEHY$3wiewMay<^T%hK(=cQ2U6mLTpj$s~s5*r|W{9cqDMGhgDflU7_sm;dE z#f`|0A|2-|DHs*bLz}#)?x~AStF8Va_pPjB%dIrCeL$y%PO{Wt6D#rJv2MAE(e}v* zS&MEb08q@mXj17yzqFb8z5WnsTk57;?P-+NIs^0!Sq**n_`#|sX2Y>vG?|J3s-%Eb zxo=;w3l88k2`-TfjjIVJn@{zaE*F3J_S-xTUW#lrHMx&ipK*p!a0?l5We1riu*@NI zl%P?9l3CJWlUJLId^K_^>=qii1%#4mMdJElFEUi$`6bEL5~wkr{lnO_AN3DB-n&lp zb{m7JfB=8PSfhnSzgVARh5DGk5MorFD+;nP5bsQR%azC|o}4BXW@HS0DgViE?ruu- zh3cC-ya(^JRjC36b4+V>D9NVtu594F)|22p3N&=JO`nqFzk7;IFgS;H*|>+&M}C9y z&S4VUbRN_2v(;Uq@wmot)|Lq6knGS@*qK1kG$MrB1N$=sFm|%<6g{N)e%8IFIxS{t z#A7PX_dBFL;GxFsfj{!OLO;fi%}i+4JgPE$9Oh#`;{>+7xZs&WbA^Mi2koulwx8e| z@MJ{w%XI?Wn=X+`4AAzh@FfwZC-mt?ekl3^vvvCsMB?| zh!eNO2v9Ni>KHm2v^kB#f?2hNm8cdZ_*rj@)}*uNJ(23Xgsw6e-B3b{rqOcY2+?6z z7)IKO*HiAOnoif)KRv1oK9btU8q4t~WttaBZJp~QA0ng+Wl>Y;IumY{BxxaB7#gFS zYM9fauxEKi-#fQHkm3I3VF1gGgx<1#1F413IoerNVu5t=#)_yfHET-rc6li$e1={^ zci)Y6HwW*$n_(U<%egGvCIedf;N>oh%G2c2Inf(FyLfXr^xCx?<>)WtXMo*`BoC0& zzQgAZ@`O|cF%d>qe9(!Ku?FjT0sN6|qIjb3fh(DYR!NNO1%Oe+%oBh*#BCk^oES^9 zqBD9KZbz``kmQ-T-=Qex+nbdiX05J__MC#+Pxq4us}5%GA$6>E1yIy)Zyt8fy;=LG z4;QHnhzLyag&>l6uuwcOvloEEv^mKif1VbH@78eTr}Uojdw*R*a_{pdm54Ti(PA@A z-jdQutZ3y|g}uV_OWuO(00#cIiKZmhnwZrwfT7T6kZMhd4LK-V`-iN~z546<9>|k> zRl@134f9?a*981tPX}uG(i@YfQId}ziJcqHMVMVKOvi@0N)^1 zIrhp(P`^u;e6r1!1JwB~*(~nUYdJ(gCgM0D=jQ0OvO&>J3DoThZ?$ekwQ-6QDGbU$v*0Ua z`u2Ft#?g~zEssKiONdh)1~|St^ew@;llJWs^}U4^v;1i`R$)@n@ti5-hH+3EFoOJP zhx|PHL4?sl*~$R7R7tNG*aYkQ{UDH@dHFw(H-5SQhCwmx(*;sU-5|HKv?_+YcNO44 zkVo%*^GF#dSIiw5$vxj`2U}00m4tg%X#f3uErFOC$Z{PjW6lK+_!`s%2@X0hZK?u* z0Vwvy%}Kd_c+&t7-25EOAASTadfuUV_|(;}_F2#^US zBgI;-ws^Sy-9QX~x7+D*d~8AhE}#Ah<7q5yu63=d`KxAy9{qo6k(icU!o9wJIRL>f z9@1G`f9ztYe$tOeP{hh8a{mTPwyM%`_9VUi`_TqZ0Bn{@Ypbj0jO=xx@83}a-O@DBgcxKNse}>chC-eOl|8Fun;3L* zj3P<+=#QBx>q`Au0zsk5@p$m1t}B9nVau8UouP_tA@wLJHUbt3yw~Wdu$S4ZX;y4T z)D=n|XgWr$DGknJjOCB!#1h6iQPrVG^^5b|vtjs(!5bQoZ%$)h-vCVos>vIzs{#BtDlW5tT)I}2ucc>s z9v%>&p3Sm41aQND+7N69(b%iGIp5rvcN=InezhZ|zCGm29gY2}bAey7GcUeyJ@!A+ C+FCvU literal 0 HcmV?d00001 diff --git a/images/deploy.png b/images/deploy.png new file mode 100644 index 0000000000000000000000000000000000000000..3f8793719c6292b08965248622fece6d0a253853 GIT binary patch literal 35323 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 literal 0 HcmV?d00001 diff --git a/images/extension.png b/images/extension.png new file mode 100644 index 0000000000000000000000000000000000000000..d169a39faa427a0b4b549226f1b1326ea255a374 GIT binary patch literal 10069 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 literal 0 HcmV?d00001 diff --git a/proxies.json b/proxies.json new file mode 100644 index 0000000..b385252 --- /dev/null +++ b/proxies.json @@ -0,0 +1,4 @@ +{ + "$schema": "http://json.schemastore.org/proxies", + "proxies": {} +} diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..1259cbd --- /dev/null +++ b/requirements.txt @@ -0,0 +1,4 @@ +azure-functions==1.17.0 +twilio==8.10.2 +openai==1.3.2 +sentry-sdk diff --git a/sms-helper/__init__.py b/sms-helper/__init__.py new file mode 100644 index 0000000..efb5181 --- /dev/null +++ b/sms-helper/__init__.py @@ -0,0 +1,49 @@ +import os +import logging +import sentry_sdk +import azure.functions as func +import __app__.helper as helper +# Use alternative helper to send less messages +# import __app__.alternative_helper as alternative_helper +from sentry_sdk.integrations.serverless import serverless_function + +#------------------------------------# +# Sentry for debugging +#------------------------------------# +SENTRY = os.environ["SENTRY_DSN"] +sentry_sdk.init( + dsn=SENTRY, + # For initial testing capture 100% of transactions for monitoring + traces_sample_rate=1.0, +) + +#------------------------------------# +# Main function +#------------------------------------# +@serverless_function +def main(req: func.HttpRequest) -> func.HttpResponse: + # These variables are from the Twilio request. + send_to = req.params["From"] + send_from = req.params["To"] + incoming_message = req.params["Body"].lower().strip() + + # Reply to the user based on the incoming message + helper.process_incoming_message(os.environ["SECURITY_PIN"], + send_to, + send_from, + incoming_message) + + return func.HttpResponse( + "You can text this number again if you need more information. (LPM)", status_code=200 + ) + + #--------------------------------------------------------------------------# + # To reduce the number of messages you could use the 'alternative_helper' + # This one returns the response message as the HttpResponse. + #--------------------------------------------------------------------------# + + # response_for_user = alternative_helper.process_incoming_message(os.environ["SECURITY_PIN"], + # send_to, + # send_from, + # incoming_message) + # return func.HttpResponse(response_for_user, status_code=200) \ No newline at end of file diff --git a/sms-helper/function.json b/sms-helper/function.json new file mode 100644 index 0000000..b004838 --- /dev/null +++ b/sms-helper/function.json @@ -0,0 +1,21 @@ +{ + "scriptFile": "__init__.py", + "bindings": [ + { + "authLevel": "anonymous", + "type": "httpTrigger", + "direction": "in", + "name": "req", + "methods": [ + "get", + "post" + ] + }, + { + "type": "http", + "direction": "out", + "name": "$return" + } + ] +} + \ No newline at end of file diff --git a/sms-helper/sample.dat b/sms-helper/sample.dat new file mode 100644 index 0000000..26aac46 --- /dev/null +++ b/sms-helper/sample.dat @@ -0,0 +1,3 @@ +{ + "name": "Azure" +} \ No newline at end of file From a2dc6d62ae290b897198a29646b8044906055f09 Mon Sep 17 00:00:00 2001 From: Luis Perez Morales Date: Sat, 16 Dec 2023 17:08:58 -0800 Subject: [PATCH 2/4] Fixed images on readme --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index debba4a..e6e7c2e 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ SMS Helper is an AI-powered, function-calling text assistant designed to process - `OPENAI_API_KEY` - `SENTRY_DSN` - ![Setting Env variables in Azure](images\azure_func_env_variables.png) + Setting Env variables in Azure 2. In VS Code, install the Azure Functions extension (this will make it way easier). Extension @@ -29,7 +29,7 @@ SMS Helper is an AI-powered, function-calling text assistant designed to process * **(Optional)** If using the 'schedule reminders' function, edit system message and API call to get the current time and date if you want something different than pacific time. 4. Go to the extension, and under 'Workspace' click on the little thunder sign and select 'Deploy to existing function...'. - ![Deploy](images\deploy.png) + Deploy 5. Follow the prompts and done. Get your URL endpoint from Azure & load on Twilio. @@ -40,7 +40,7 @@ SMS Helper is an AI-powered, function-calling text assistant designed to process 2. Go to Phone Numbers > Manage > Active Numbers > Your number > Messaging configuration. 3. Set when a message comes in to use a webhook with your Azure Function endpoint (see image below) - ![Twilio config](images\messaging_configuration.png) + Twilio config *Note: Your endpoint will look like this: `https://YOUR-FUNCTION-NAME.azurewebsites.net/api/sms_helper`* From d32b4af6486a681d110880e4c7bf995059eebe6a Mon Sep 17 00:00:00 2001 From: Luis Perez Morales Date: Sat, 16 Dec 2023 17:15:16 -0800 Subject: [PATCH 3/4] Removed unecessary env variables --- README.md | 2 -- alternative_helper.py | 2 -- helper.py | 2 -- 3 files changed, 6 deletions(-) diff --git a/README.md b/README.md index e6e7c2e..a83cd5f 100644 --- a/README.md +++ b/README.md @@ -14,8 +14,6 @@ SMS Helper is an AI-powered, function-calling text assistant designed to process 2. Create required environment variables on your function. - `ACCOUNT_SID` - `AUTH_TOKEN` - - `TWIL_NUMBER` - - `TWIL_EXAMPLE_NUMBER` - `OPENAI_API_KEY` - `SENTRY_DSN` diff --git a/alternative_helper.py b/alternative_helper.py index 64e94e0..d89d246 100644 --- a/alternative_helper.py +++ b/alternative_helper.py @@ -11,8 +11,6 @@ #------------------------------------# ACCOUNT_SID = os.environ["ACCOUNT_SID"] AUTH_TOKEN = os.environ["AUTH_TOKEN"] -TWIL_NUMBER = os.environ["TWIL_NUMBER"] -TWIL_EXAMPLE_NUMBER = os.environ["TWIL_EXAMPLE_NUMBER"] #------------------------------------# # OpenAI and Twilio Clients diff --git a/helper.py b/helper.py index a77641d..8ea8c18 100644 --- a/helper.py +++ b/helper.py @@ -11,8 +11,6 @@ #------------------------------------# ACCOUNT_SID = os.environ["ACCOUNT_SID"] AUTH_TOKEN = os.environ["AUTH_TOKEN"] -TWIL_NUMBER = os.environ["TWIL_NUMBER"] -TWIL_EXAMPLE_NUMBER = os.environ["TWIL_EXAMPLE_NUMBER"] #------------------------------------# # OpenAI and Twilio Clients From efdce176776e9813645367aab298496799b115e7 Mon Sep 17 00:00:00 2001 From: Luis Perez Morales <61613934+lperezmo@users.noreply.github.com> Date: Mon, 25 Dec 2023 20:48:26 -0800 Subject: [PATCH 4/4] Create azure-functions-app-python.yml Added automatic deployment to Azure using Github Actions --- .../workflows/azure-functions-app-python.yml | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 .github/workflows/azure-functions-app-python.yml diff --git a/.github/workflows/azure-functions-app-python.yml b/.github/workflows/azure-functions-app-python.yml new file mode 100644 index 0000000..0ae9256 --- /dev/null +++ b/.github/workflows/azure-functions-app-python.yml @@ -0,0 +1,65 @@ +# This workflow will build a Python app and deploy it to an Azure Functions App on Linux when a commit is pushed to your default branch. +# +# This workflow assumes you have already created the target Azure Functions app. +# For instructions see https://learn.microsoft.com/en-us/azure/azure-functions/create-first-function-vs-code-python?pivots=python-mode-configuration +# +# To configure this workflow: +# 1. Set up the following secrets in your repository: +# - AZURE_FUNCTIONAPP_PUBLISH_PROFILE +# 2. Change env variables for your configuration. +# +# For more information on: +# - GitHub Actions for Azure: https://github.com/Azure/Actions +# - Azure Functions Action: https://github.com/Azure/functions-action +# - Publish Profile: https://github.com/Azure/functions-action#using-publish-profile-as-deployment-credential-recommended +# - Azure Service Principal for RBAC: https://github.com/Azure/functions-action#using-azure-service-principal-for-rbac-as-deployment-credential +# +# For more samples to get started with GitHub Action workflows to deploy to Azure: https://github.com/Azure/actions-workflow-samples/tree/master/FunctionApp + +name: Deploy Python project to Azure Function App + +on: + push: + branches: ["main"] + +env: + AZURE_FUNCTIONAPP_NAME: 'UniqueLuisGithubFunction' # set this to your function app name on Azure + AZURE_FUNCTIONAPP_PACKAGE_PATH: '.' # set this to the path to your function app project, defaults to the repository root + PYTHON_VERSION: '3.11' # set this to the python version to use (e.g. '3.6', '3.7', '3.8') + +jobs: + build-and-deploy: + runs-on: ubuntu-latest + environment: dev + steps: + - name: 'Checkout GitHub Action' + uses: actions/checkout@v3 + + # If you want to use Azure RBAC instead of Publish Profile, then uncomment the task below + # - name: 'Login via Azure CLI' + # uses: azure/login@v1 + # with: + # creds: ${{ secrets.AZURE_RBAC_CREDENTIALS }} # set up AZURE_RBAC_CREDENTIALS secrets in your repository + + - name: Setup Python ${{ env.PYTHON_VERSION }} Environment + uses: actions/setup-python@v4 + with: + python-version: ${{ env.PYTHON_VERSION }} + + - name: 'Resolve Project Dependencies Using Pip' + shell: bash + run: | + pushd './${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}' + python -m pip install --upgrade pip + pip install -r requirements.txt --target=".python_packages/lib/site-packages" + popd + + - name: 'Run Azure Functions Action' + uses: Azure/functions-action@v1 + id: fa + with: + app-name: ${{ env.AZURE_FUNCTIONAPP_NAME }} + package: ${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }} + publish-profile: ${{ secrets.AZURE_FUNCTIONAPP_PUBLISH_PROFILE }} # Remove publish-profile to use Azure RBAC + scm-do-build-during-deployment: true + enable-oryx-build: true