diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..af94e9d --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +**/Objects +**/AutoBackups \ No newline at end of file diff --git a/A9R16z68jv_1b0un5v_4hs.jpg b/A9R16z68jv_1b0un5v_4hs.jpg new file mode 100644 index 0000000..d59315c Binary files /dev/null and b/A9R16z68jv_1b0un5v_4hs.jpg differ diff --git a/B4A/B4XCliente.bas b/B4A/B4XCliente.bas new file mode 100644 index 0000000..36fa8d1 --- /dev/null +++ b/B4A/B4XCliente.bas @@ -0,0 +1,24 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11.5 +@EndOfDesignText@ +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore +End Sub + +'You can add more parameters here. +Public Sub Initialize As Object + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + Root = Root1 + 'load the layout to Root + +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. \ No newline at end of file diff --git a/B4A/B4XClientes.bas b/B4A/B4XClientes.bas new file mode 100644 index 0000000..36fa8d1 --- /dev/null +++ b/B4A/B4XClientes.bas @@ -0,0 +1,24 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11.5 +@EndOfDesignText@ +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore +End Sub + +'You can add more parameters here. +Public Sub Initialize As Object + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + Root = Root1 + 'load the layout to Root + +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. \ No newline at end of file diff --git a/B4A/B4XMainPage.bas b/B4A/B4XMainPage.bas new file mode 100644 index 0000000..bab1231 --- /dev/null +++ b/B4A/B4XMainPage.bas @@ -0,0 +1,715 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=9.85 +@EndOfDesignText@ +#Region Shared Files +'#CustomBuildAction: folders ready, %WINDIR%\System32\Robocopy.exe,"..\..\Shared Files" "..\Files" + 'Ctrl + click to sync files: ide://run?file=%WINDIR%\System32\Robocopy.exe&args=..\..\Shared+Files&args=..\Files&FilesSync=True + '########################################################################################################### + '###################### PULL ############################################################# + 'Ctrl + click ide://run?file=%WINDIR%\System32\cmd.exe&Args=/c&Args=git&Args=pull + '########################################################################################################### + '###################### PUSH ############################################################# + 'Ctrl + click ide://run?file=%WINDIR%\System32\WindowsPowerShell\v1.0\powershell.exe&Args=github&Args=..\..\ + '########################################################################################################### + '###################### PUSH TORTOISE GIT ######################################################### + 'Ctrl + click ide://run?file=%WINDIR%\System32\WindowsPowerShell\v1.0\powershell.exe&Args=TortoiseGitProc&Args=/command:commit&Args=/path:"./../../"&Args=/closeonend:2 + '########################################################################################################### +#End Region + +'Ctrl + click to export as zip: ide://run?File=%B4X%\Zipper.jar&Args=Project.zip + +Sub Class_Globals + Private Root As B4XView + Private xui As XUI + Public login As B4XMainPage + Public principal As C_Principal + Public clientes As C_Clientes + Public cliente As C_Cliente + Public productos As C_Productos + Public updateAvailable As C_UpdateAvailable + Public mapas As C_Mapas + Public nuevoCliente As C_NuevoCliente + Public ticketsDia As C_TicketsDia + Public noVenta As C_NoVenta + Public nota As C_Nota + Public pedidos As C_Pedidos + Public promos As C_Promos + Public historico As C_Historico + + 'nuevocliente -> NuevoCliente + 'buscar -> ticketsDia + 'colonia -> clientes + 'nopago -> noVenta + 'tarjeta -> Nota + 'fila -> Cliente + 'colonia2 -> Productos + + 'xxxxxxxxxxxxxxxxxxxxxxxxx + + Dim reqManager As DBRequestManager + Dim v As String = Application.VersionName + Dim ruta As String + Dim tgl As Toggle + Dim lat_gps, lon_gps As String + Dim usuario As String + Dim batt As Int + Dim skmt As SQL + Dim montoActual, clientesTotal, clientesVenta, clientesVisitados,almacen, rutaPreventa As String + Dim server, fechaRuta As String + Dim Logger As Boolean + Dim mac_impresora As String + Dim Phn As PhoneId + + Dim user As EditText + Dim pass As EditText + Dim c As Cursor + Dim existe As String + Dim paso1 As String + Private IMEN As Label + Dim IMEI As String = "" + Dim alterno As String + Private b_menu As Button + Dim PopupMenu As RSPopupMenu + Dim cmd As DBCommand + Private PDF As Button + Private bpv1 As BatteryProgressView + Dim batterystatus(11) As Int + Private bu As BatteryUtilities + Private b_apk As Button + Private i_engrane As ImageView + Private p_Main As Panel + Private p_appUpdate As Panel + Private b_regesar As Button + Private l_version As Label + Private ImageView1 As ImageView + Private Label2 As Label + Private Entrar As Button + Dim tipo_venta As String + Dim bTerminarClicked As Boolean = False + Private lv_server As ListView + Private l_server As Label + Private b_envioBD As Button + Public Provider As FileProvider + Public rutaBDBackup = "" + Private B4XSwitch1 As B4XSwitch +End Sub + +Public Sub Initialize +' B4XPages.GetManager.LogEvents = True +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + B4XPages.GetManager.LogEvents = True + Root = Root1 + Root.LoadLayout("login") +' B4XPages.SetTitle(Me, "Guna Preventa") + login.Initialize + B4XPages.AddPage("Login", login) + principal.Initialize + B4XPages.AddPage("Principal", principal) + clientes.Initialize + B4XPages.AddPage("Clientes", clientes) + cliente.Initialize + B4XPages.AddPage("Cliente", cliente) + productos.Initialize + B4XPages.AddPage("Productos", productos) + updateAvailable.Initialize + B4XPages.AddPage("updateAvailable", updateAvailable) + mapas.Initialize + B4XPages.AddPage("Mapas", mapas) + nuevoCliente.Initialize + B4XPages.AddPage("NuevoCliente", nuevoCliente) + ticketsDia.Initialize + B4XPages.AddPage("TicketsDia", ticketsDia) + noVenta.Initialize + B4XPages.AddPage("NoVenta", noVenta) + nota.Initialize + B4XPages.AddPage("Nota", nota) + pedidos.Initialize + B4XPages.AddPage("Pedidos", pedidos) + promos.Initialize + B4XPages.AddPage("Promos", promos) + historico.Initialize + B4XPages.AddPage("Historico", historico) + + p_Main.Height = Root.Height + p_Main.Width = Root.Width + + ruta = Starter.ruta + Provider.Initialize + +' Subs.borraArribaDe100Errores ' Para Websockets +' Subs.borraArribaDe600RenglonesBitacora ' Para Websockets + If File.Exists(ruta, "kmt.db") = False Then + File.Copy(File.DirAssets, "kmt.db", ruta, "kmt.db") + End If + skmt.Initialize(ruta,"kmt.db", True) + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS IMPRESORA (HABILITADA)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS HIST_CUOTAS (HC_META6 TEXT, HC_META5 TEXT, HC_META4 TEXT, HC_META3 TEXT, HC_META2 TEXT, HC_META1 TEXT, HC_RUTA TEXT, HC_CUOTA1 TEXT, HC_CUOTA2 TEXT, HC_CUOTA3 TEXT, HC_CUOTA4 TEXT, HC_CUOTA5 TEXT, HC_CUOTA6 TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS HIST_GPS (HGDATE TEXT, HGLAT TEXT, HGLON TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS HIST_STAY_STORE (HSS_CODIGO TEXT, HSS_IN TEXT, HSS_OUT TEXT, HSS_TOT TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS HIST_STAY_OUT (HSO_INI TEXT, HSO_FIN TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS INVENT_X_ENVIAR (ALMACEN TEXT, PROID TEXT, CANTIDAD TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS HIST_RESUM_APK (HIST_RA_OBJMES TEXT, HIST_RA_VENTA TEXT, HIST_RA_TENDENCIA TEXT, HIST_RA_ALCANCE TEXT, HISR_RA_DRAOBJ TEXT, HIST_RA_DRAVTA TEXT, HIST_RA_DSOBJ TEXT, HIST_RA_DSVTA TEXT, HIST_RA_VPOOBJ TEXT, HIST_RA_VPOVTA TEXT, HIST_RA_COBCCC TEXT, HIST_RA_CTES TEXT, HIST_RA_ECO TEXT, HIST_RA_VISITPLAN TEXT, HIST_RA_VISIREAL TEXT, HIST_RA_COBVISIT TEXT, HIST_RA_FRECCOMPOBJ TEXT, HIST_RA_FRECCOMREAL TEXT, HIST_RA_VENTAMES1 TEXT, HIST_RA_VENTAMES2 TEXT, HIST_RA_VENTAMES3 TEXT, HIST_RA_VENTAMES4 TEXT, HIST_RA_RECHAZO TEXT, HIST_RA_RECHAZOPORCEN TEXT, HIST_RA_SEMANA1 TEXT, HIST_RA_SEMANA1_DIAS TEXT, HIST_RA_SEMANA1_DRA TEXT, HIST_RA_SEMANA2 TEXT, HIST_RA_SEMANA2_DIAS TEXT, HIST_RA_SEMANA2_DRA TEXT, HIST_RA_SEMANA3 TEXT, HIST_RA_SEMANA3_DIAS TEXT, HIST_RA_SEMANA4 TEXT, HIST_RA_SEMANA3_DRA TEXT, HIST_RA_SEMANA4_DIAS TEXT, HIST_RA_SEMANA4_DRA TEXT, HIST_RA_SEMANA5 TEXT, HIST_RA_SEMANA5_DIAS TEXT, HIST_RA_SEMANA5_DRA TEXT, HIST_RA_SEMANA1_LPT TEXT, HIST_RA_SEMANA2_LPT TEXT, HIST_RA_SEMANA3_LPT TEXT, HIST_RA_SEMANA4_LPT TEXT, HIST_RA_SEMANA5_LPT TEXT, HIST_RA_RUTA TEXT, HIST_RA_IDALMACEN TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS HIST_COMISIONES_MOVIL (HCM_IDALMACEN TEXT, HCM_RUTA TEXT, HCM_TOTAL_V TEXT, HCM_TOTAL_VIVE TEXT, HCM_TOTAL_GUNA TEXT, HCM_TOTAL_BEB TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS HIST_GEOCERCA (HGCLIENTE TEXT, HGDATE TEXT, HGLAT TEXT, HGLON TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS HIST_FACE (HFCLIENTE TEXT, HFALIAS TEXT, HFRUTA TEXT, HFALMACEN TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS RUTA_GPS(FECHA INTEGER, LAT TEXT, LON TEXT)") + skmt.ExecNonQuery("CREATE VIEW IF NOT EXISTS CATALOGO AS Select CAT_GP_CLASIF, CAT_GP_ID FROM CAT_GUNAPROD UNION Select CAT_GP_CLASIF, CAT_GP_ID FROM CAT_GUNAPROD GROUP BY CAT_GP_CLASIF, CAT_GP_ID") + skmt.ExecNonQuery("CREATE VIEW IF NOT EXISTS total_marcas AS Select cat_gp_clasif, sum(pe_costo_tot) As total from CATALOGO, pedido where pe_proid = cat_gp_id And pe_cliente <> 0 group by cat_gp_clasif") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS HIST_MARCAS_CUOTAS ( HMC_MARCA TEXT, HMC_TOTAL TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS HIST_CODIGO_BARRAS(CODIGOKMTS TEXT, CODIGOB TEXT, LAT TEXT, LON TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS ENCUESTA_MODULO1(CLIENTE TEXT,ALMACEN TEXT, P1 TEXT, P2 TEXT, P3 TEXT, P4 TEXT, P5 TEXT, P6 TEXT, P7 TEXT, P8 TEXT, P9 TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS ENCUESTA_MODULO2 (CLIENTE TEXT, ALMACEN TEXT,P1 TEXT, P2 TEXT, P3 TEXT , P4 TEXT, P5 TEXT, P6 TEXT)") + + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS ENCUESTA_MODULO3(CLIENTE TEXT,ALMACEN TEXT, P1 TEXT, P2 TEXT, P3 TEXT, P4 TEXT, P5 TEXT, P6 TEXT, P7 TEXT, P8 TEXT, P9 TEXT, P10 TEXT, P11 TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS ENCUESTA_MODULO4 (CLIENTE TEXT, ALMACEN TEXT,P1 TEXT, P2 TEXT, P3 TEXT , P4 TEXT, P5 TEXT, P6 TEXT, P7 TEXT, P8 TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS ENCUESTA_MODULO5 (CLIENTE TEXT, ALMACEN TEXT,P1 TEXT, P2 TEXT, P3 TEXT , P4 TEXT, P5 TEXT, P6 TEXT, P7 TEXT, P8 TEXT, P9 TEXT)") + + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS HIST_ENCUESTA_CLIENTE (HEC_CLIENTE TEXT, HEC_MODULO TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS HIST_ENCUESTA_AVISO_GIRO (HEAV_CLIENTE TEXT, HEAV_MODULO TEXT, HEAV_AVISO TEXT, HEAV_GIRO TEXT)") + + Try 'Intentamos usar "pragma_table_info" para revisar si existe la columna "P10" en la tabla + c=skmt.ExecQuery("SELECT COUNT(*) AS fCol FROM pragma_table_info('ENCUESTA_MODULO3') WHERE name='P10'") + c.Position = 0 + If c.GetString("fCol") = 0 Then 'Si no esta la columna FECHA la agregamos + skmt.ExecNonQuery("ALTER TABLE ENCUESTA_MODULO3 ADD COLUMN P10 TEXT") + End If + Catch 'Si no funciona "pragma_table_info" lo hacemos con try/catch + Try + skmt.ExecNonQuery("ALTER TABLE ENCUESTA_MODULO3 ADD COLUMN P10 TEXT") + Catch + Log(LastException) + End Try + End Try + + Try 'Intentamos usar "pragma_table_info" para revisar si existe la columna "P11" en la tabla + c=skmt.ExecQuery("SELECT COUNT(*) AS fCol FROM pragma_table_info('ENCUESTA_MODULO3') WHERE name='P11'") + c.Position = 0 + If c.GetString("fCol") = 0 Then 'Si no esta la columna FECHA la agregamos + skmt.ExecNonQuery("ALTER TABLE ENCUESTA_MODULO3 ADD COLUMN P11 TEXT") + End If + Catch 'Si no funciona "pragma_table_info" lo hacemos con try/catch + Try + skmt.ExecNonQuery("ALTER TABLE ENCUESTA_MODULO3 ADD COLUMN P11 TEXT") + Catch + Log(LastException) + End Try + End Try + + + + c=skmt.ExecQuery("select COUNT(*) AS CUANTOS from HIST_STAY_OUT ") + C.Position = 0 + If c.GetString("CUANTOS") = 0 Then + skmt.ExecNonQuery("INSERT INTO HIST_STAY_OUT(HSO_INI, HSO_FIN) VALUES (0,0)") + End If + C.Close +' server = "http://keymon.com.mx:1782" + 'server = "http://201.99.139.28:1783" +' reqManager.Initialize(Me, server) + l_version.Text = Application.VersionName + 'este codigo es para lo del menu + PopupMenu.Initialize("PopupMenu", b_menu) + PopupMenu.AddMenuItem(0, 0, "View") + PopupMenu.AddMenuItem(1, 1, "Edit") + PopupMenu.AddMenuItem(2, 2, "Details") + PopupMenu.AddMenuItem(3, 3, "Remove") + ' menu fin + montoActual = 0 + clientesTotal = 0 + clientesVenta = 0 + clientesVisitados = 0 + almacen = 0 + rutaPreventa = 0 + p_appUpdate.Visible = False + +End Sub + +Sub B4XPage_Appear + reqManager.Initialize(Me, Starter.server) + If Starter.muestraProgreso = 1 Then + muestraProgreso("Descargando actualización") + Starter.muestraProgreso = 0 + End If + Dim ph As Phone 'Get Id Device + Dim DeviceID As String = ph.GetSettings("android_id").ToUpperCase + LogColor($"////////////////// DeviceID: ${DeviceID} ////////////////// "$, Colors.Blue) + LogColor("Revisa permisos Phone_State", Colors.Green) + Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_READ_PHONE_STATE) + Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean) + If Result Then + IMEN.Text ="" + IMEI = "" + LogColor($"////////////////// IMEI: ${IMEI} ////////////////// "$, Colors.Blue) + IMEI="" 'Pruebas + End If + Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_ACCESS_FINE_LOCATION) + Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean) + If Result Then + StartService(Tracker) + Log("Start Tracker") + Else + ToastMessageShow("No permission", True) + End If + server = Starter.server + tgl.Initialize() + If Not(Starter.gps.GPSEnabled) Then + ToastMessageShow("Es necesario tener el GPS encendido", True) + Sleep(500) + StartActivity(Starter.gps.LocationSettingsIntent) + End If + c=skmt.ExecQuery2("select count(*) as CUANTOS from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("FECHA")) + c.Position = 0 + If c.GetString("CUANTOS") = 0 Then + LogColor($"No hay fecha: ${c.GetString("CUANTOS")}"$, Colors.Red) + cmd.Initialize + cmd.Name = "select_fecha_DIS" + reqManager.ExecuteQuery(cmd , 0, "fecha") + Msgbox("AJUSTAR FECHA","AVISO") 'Ignore + B4XPage_Appear + Else + LogColor($"Si hay fecha: ${c.GetString("CUANTOS")}"$, Colors.Green) + c=skmt.ExecQuery2("select CAT_VA_VALOR from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("FECHA")) + c.Position =0 + Dim sDate, sTime As String + DateTime.DateFormat = "yyyyMMdd" + sDate=DateTime.Date(DateTime.Now) +' If sDate > "20220701" Then +' Msgbox("INSTALAR NUEVO APK" ,"AVISO") 'Ignore +' B4XPage_Appear +' End If + LogColor(sDate,Colors.Red) + If c.GetString("CAT_VA_VALOR").SubString2(0,7) > sDate Then + Msgbox("AJUSTAR LA FECHA YA QUE ES MENOR AL SISTEMA" ,"AVISO") 'Ignore + B4XPage_Appear + End If + End If + bu.Initialize + batterystatus = bu.BatteryInformation + 'Obtenemos el usuario registrado + CallSubDelayed(FirebaseMessaging, "SubscribeToTopics") + dameUsuario + + c = skmt.ExecQuery("SELECT HABILITADA FROM IMPRESORA") + If c.RowCount > 0 Then + c.Position = 0 + If c.GetString("HABILITADA") = 1 Then + B4XSwitch1.Value = True + Else If c.GetString("HABILITADA") = 0 Then + B4XSwitch1.Value = False + End If + Else + B4XSwitch1.Value = False + End If + +End Sub +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. + +Sub Entrar_Click + Dim r As Reflector + Dim Api As Int + Dim PP As Phone + user.Text = user.Text.trim + Api = r.GetStaticField("android.os.Build$VERSION", "SDK_INT") + If Api < 9 Then + 'Old device + If File.Exists(File.DirInternal, "__id") Then + IMEI = File.ReadString(File.DirInternal, "__id") + Log(1&"-"&IMEI) + Else + Dim id As Int + id = Rnd(0x10000000, 0x7FFFFFFF) + File.WriteString(File.DirInternal, "__id", id) + IMEI = id + Log(2&"-"&IMEI) + End If + Else + 'New device + IMEI = r.GetStaticField("android.os.Build", "SERIAL") + Log(3&"-"&IMEI) + End If + If IMEI.ToLowerCase = "unknown" Then + IMEI = PP.GetSettings("android_id") + End If + Log("IMEI = " & IMEI) + + If user.Text = "ALTERNO" Then + c=skmt.ExecQuery2("select CAT_CO_CONFIGURACION, CAT_CO_RESULTADO from CAT_CODIGOS where CAT_CO_PONDERACION =1 AND CAT_CO_ACCION = ?", Array As String("SERVER")) + c.Position =0 + server = c.GetString("CAT_CO_CONFIGURACION") + alterno = c.GetString("CAT_CO_RESULTADO") + c.Close + If alterno = 1 Then + skmt.ExecNonQuery2("UPDATE CAT_CODIGOS SET CAT_CO_PONDERACION = 1 WHERE CAT_CO_ACCION = ? AND CAT_CO_RESULTADO = 2", Array As String ("SERVER")) + skmt.ExecNonQuery2("UPDATE CAT_CODIGOS SET CAT_CO_PONDERACION = 0 WHERE CAT_CO_ACCION = ? AND CAT_CO_RESULTADO = 1", Array As String ("SERVER")) + Else if alterno = 2 Then + skmt.ExecNonQuery2("UPDATE CAT_CODIGOS SET CAT_CO_PONDERACION = 1 WHERE CAT_CO_ACCION = ? AND CAT_CO_RESULTADO = 1", Array As String ("SERVER")) + skmt.ExecNonQuery2("UPDATE CAT_CODIGOS SET CAT_CO_PONDERACION = 0 WHERE CAT_CO_ACCION = ? AND CAT_CO_RESULTADO = 2", Array As String ("SERVER")) + End If + c=skmt.ExecQuery2("select CAT_CO_CONFIGURACION, CAT_CO_RESULTADO from CAT_CODIGOS where CAT_CO_PONDERACION =1 AND CAT_CO_ACCION = ?", Array As String("SERVER")) + c.Position =0 + server = c.GetString("CAT_CO_CONFIGURACION") + user.Text = server + c.Close +' reqManager.Initialize(Me, server) + else if user.Text = "KMTS1" Then + skmt.ExecNonQuery("delete from usuarioa") + skmt.ExecNonQuery2("INSERT INTO USUARIOA VALUES (?,?)", Array As Object(user.Text, pass.Text)) + skmt.ExecNonQuery("delete from cat_almacen") + skmt.ExecNonQuery2("INSERT INTO CAT_ALMACEN(ID_ALMACEN) VALUES (?)", Array As Object (pass.Text)) + skmt.ExecNonQuery("delete from VERSION") + skmt.ExecNonQuery2("INSERT INTO VERSION(NOVERSION) VALUES (?)", Array As Object ("2.1")) + B4XPages.ShowPage("Principal") + else if user.Text = "BERNA1" Then + skmt.ExecNonQuery("delete from usuarioa") + skmt.ExecNonQuery2("INSERT INTO USUARIOA VALUES (?,?)", Array As Object(user.Text, "1")) + skmt.ExecNonQuery("delete from cat_almacen") + skmt.ExecNonQuery2("INSERT INTO CAT_ALMACEN(ID_ALMACEN) VALUES (?)", Array As Object ("1")) + skmt.ExecNonQuery("delete from VERSION") + skmt.ExecNonQuery2("INSERT INTO VERSION(NOVERSION) VALUES (?)", Array As Object ("2.1")) + B4XPages.ShowPage("Principal") + else if user.Text = "IMEI" Then + user.Text = IMEI + End If + + c=skmt.ExecQuery2("select count(*) as EXISTE1 from usuarioa where usuario = ?", Array As String(user.Text)) + c.Position=0 + existe = c.GetString("EXISTE1") + If existe = 0 Then + If IMEI = "" Then + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "select_usuario_DIS" 'Antes select_usuario_guna_GV2_1 + cmd.Parameters = Array As Object(user.Text.Trim, pass.Text.Trim) + reqManager.ExecuteQuery(cmd , 0, "usuario_10") 'Antes usuario + Else + If IMEI = "" Then + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "select_usuario_DIS" + cmd.Parameters = Array As Object(user.Text.Trim, pass.Text.Trim) + reqManager.ExecuteQuery(cmd , 0, "usuario_10") + Else + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "select_usuario_DIS" 'Antes select_usuario_guna_GV2 + cmd.Parameters = Array As Object(user.Text.Trim, pass.Text.trim) + Log("Mandamos: "&user.Text&"|"& pass.Text) + reqManager.ExecuteQuery(cmd , 0, "usuario_10") 'Antes usuario + End If + End If + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "select_version_DIS" + reqManager.ExecuteQuery(cmd , 0, "version") + Else + usuario = user.Text + B4XPages.ShowPage("Principal") + End If +End Sub + +Sub JobDone(Job As HttpJob) + Log(Job.Success) + If Job.Success = False Then + ToastMessageShow("Error: " & Job.ErrorMessage, True) + Else + LogColor("JobDone: '" & reqManager.HandleJob(Job).tag & "' - Registros: " & reqManager.HandleJob(Job).Rows.Size, Colors.Green) 'Mod por CHV - 211027 + If Job.JobName = "DBRequest" Then + Dim result As DBResult = reqManager.HandleJob(Job) + If result.Tag = "version" Then 'query tag + For Each records() As Object In result.Rows + skmt.ExecNonQuery("delete from VERSION") + Dim CAT_VE_VERSION As String = records(result.Columns.Get("CAT_VE_VERSION")) + skmt.ExecNonQuery2("INSERT INTO VERSION(NOVERSION) VALUES (?)", Array As Object (CAT_VE_VERSION)) + Next + End If + + If result.Tag = "select_fechat_DIS" Then 'query tag + For Each records() As Object In result.Rows + For Each k As String In result.Columns.Keys + Log("select_fechat: " & k & ": " & records(result.Columns.Get(k))) + Next + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim result As DBResult = reqManager.HandleJob(Job) + If result.Tag = "agencia" Then 'query tag + For Each records() As Object In result.Rows + Dim ID_ALMACEN As String = records(result.Columns.Get("ID_ALMACEN")) + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim result As DBResult = reqManager.HandleJob(Job) + If result.Tag = "fecha" Then 'query tag + For Each records() As Object In result.Rows + Dim FECHA_HOY As String = records(result.Columns.Get("FECHA")) + skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("FECHA")) + skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("FECHA",FECHA_HOY)) + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim result As DBResult = reqManager.HandleJob(Job) + If result.Tag = "usuario" Then 'query tag + For Each records() As Object In result.Rows + Dim name As String = records(result.Columns.Get("USUARIO")) + Dim ID_ALMACEN As String = records(result.Columns.Get("CAT_LO_AGENCIA")) + Dim IMEI_BASE As String = records(result.Columns.Get("CAT_LO_IDTELEFONO")) + Log(records(result.Columns.Get("CAT_LO_IDTELEFONO")) ) + Next + paso1 = 1 + ToastMessageShow(name, False) + Log("////////////////////////// "&name) + End If + End If + + If Job.JobName = "DBRequest" Then + Dim result As DBResult = reqManager.HandleJob(Job) + If result.Tag = "usuario_10" Then 'query tag + For Each records() As Object In result.Rows + Dim name As String = records(result.Columns.Get("USUARIO")) + Dim ID_ALMACEN As String = records(result.Columns.Get("CAT_LO_AGENCIA")) + Dim IMEI_BASE As String = records(result.Columns.Get("CAT_LO_IDTELEFONO")) + Next + Log("|"&name&"|") + paso1 = 1 + IMEI_BASE = "" + IMEI = "" + End If + End If + Job.Release + End If + Log($"Paso1 = ${paso1} - Name: ${name} - IMEI: ${IMEI} - IMEI_BASE: ${IMEI_BASE}"$) + If paso1 = 1 Then + If IMEI = "" Then + If user.Text = "KMTS1" Then name = "OKActivo" + If name = "OKActivo" Then + skmt.ExecNonQuery("delete from usuarioa") + skmt.ExecNonQuery2("INSERT INTO USUARIOA VALUES (?,?)", Array As Object(user.Text, pass.Text)) + skmt.ExecNonQuery("delete from cat_almacen") + skmt.ExecNonQuery2("INSERT INTO CAT_ALMACEN(ID_ALMACEN) VALUES (?)", Array As Object (ID_ALMACEN)) + usuario = user.Text + B4XPages.ShowPage("Principal") + Else If name = "OKExpirado" Then + Msgbox("Usuario Expirado llamar al administrador","") 'Ignore + Else If name = "OKCancelado" Then + Msgbox("Usuario Cancelado llamar al administrador","") 'Ignore + Else + Msgbox("Usuario o password No validos","") 'Ignore + End If + paso1 = 0 + Else + If name = "OKActivo" & IMEI And IMEI = IMEI_BASE Then + If name = "OKActivo" & IMEI Then + skmt.ExecNonQuery("delete from usuarioa") + skmt.ExecNonQuery2("INSERT INTO USUARIOA VALUES (?,?)", Array As Object(user.Text, pass.Text)) + skmt.ExecNonQuery("delete from cat_almacen") + skmt.ExecNonQuery2("INSERT INTO CAT_ALMACEN(ID_ALMACEN) VALUES (?)", Array As Object (ID_ALMACEN)) + usuario = user.Text + B4XPages.ShowPage("Principal") + Else If name = "OKExpirado"& IMEI Then + Msgbox("Usuario Expirado llamar al administrador","") 'ignore + Else If name = "OKCancelado"& IMEI Then + Msgbox("Usuario Cancelado llamar al administrador","") 'ignore + Else + Msgbox("Usuario o password No validos","") 'ignore + End If + paso1 = 0 + Else IF name = "OKActivo" Then + Msgbox("Telefono no VALIDO!","") 'ignore + Else + Msgbox("Usuario o password No validos","") 'ignore + End If + End If + End If +End Sub + +Private Sub B4XPage_CloseRequest As ResumableSub + Log("closreq") + Sleep(0) + If p_appUpdate.IsInitialized And p_appUpdate.Visible Then + p_appUpdate.Visible = False + Return False + End If + If Not(p_appUpdate.Visible) Then + Log("ExitApplication") + ExitApplication + End If + Return True +End Sub + +Sub GPS_LocationChanged (Location1 As Location) + If user.text = "GPS" Then + user.Text=Location1.Latitude + pass.text=Location1.Longitude + End If +End Sub + +Sub PopupMenu_Dismiss + ToastMessageShow("PopupMenu dismissed", False) +End Sub + +Sub PopupMenu_MenuItemClick (ItemId As Int) As Boolean + ToastMessageShow("Item " & ItemId & " clicked.", False) + Return False +End Sub + +Sub b_menu_Click + PopupMenu.Show +End Sub + +Sub PDF_Click + +End Sub + +'Private Sub GetAdvertisingId As ResumableSub +' Dim jo As JavaObject = Me +' jo.RunMethod("GetAdvertisingId", Null) +' Wait For AdvertisingId_Ready (Success As Boolean, Id As String) +' Return Id +'End Sub + +Sub dameUsuario + c=skmt.ExecQuery2("select count(*) as EXISTE1 from usuarioa where usuario = ?", Array As String(user.Text)) + c.Position=0 + existe = c.GetString("EXISTE1") + c.Close + If existe > 0 Then + c=skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + Else + usuario = "SINUSUARIO" + End If +End Sub + +'#if Java +'import java.util.concurrent.Callable; +'import com.google.android.gms.ads.identifier.AdvertisingIdClient; +'import com.google.android.gms.ads.identifier.AdvertisingIdClient.Info; +' +'public static void GetAdvertisingId() { +' BA.runAsync(processBA, mostCurrent, "advertisingid_ready", new Object[] {false, ""} +' , new Callable() { +' @Override +' public Object[] call() throws Exception { +' String id = AdvertisingIdClient.getAdvertisingIdInfo(mostCurrent).getId(); +' return new Object[] {true, id}; +' } +' }); } +'#End If + +Sub copiaDB + Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_WRITE_EXTERNAL_STORAGE) + Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean) + Dim theDir As String = "" + If Result Then + Dim theDir As String + Try + File.MakeDir(File.DirRootExternal,"kmts") + theDir = "/kmts" + Catch + theDir = "" + End Try + rutaBDBackup = File.DirRootExternal&theDir + Try + File.Copy(File.DirInternal,"kmt.db",File.DirRootExternal&theDir,"cedex_kmt.db") + ToastMessageShow("Listo", False) + Catch + ToastMessageShow("No se pudo hacer la copia: "&LastException, True) + End Try + Else + ToastMessageShow("Sin permisos", False) + End If + Log(rutaBDBackup) +End Sub + +Sub b_apk_Click + StartService(appUpdater) +End Sub + +'appUpdater - Mostramos el anuncio de que se esta descargando el nuevo apk +Sub muestraProgreso(mensaje As String) + ProgressDialogShow(mensaje) +End Sub + +'appUpdater - Ocultamos el anuncio de que se esta descargando el nuevo apk +Sub ocultaProgreso + ProgressDialogHide +End Sub + +Sub i_engrane_Click + p_appUpdate.Left = (Root.Width/2) - (p_appUpdate.Width/2) + lv_server.Clear + lv_server.AddSingleLine("http://keymon.net:1782") +' lv_server.AddSingleLine("http://192.168.100.54:1782") + If user.Text = "KMTS1" Then lv_server.AddSingleLine("http://10.0.0.205:1782") + l_server.Text = Starter.server + Subs.panelVisible(p_appUpdate,0,0) + p_appUpdate.Height = Root.Height + + c = skmt.ExecQuery("SELECT HABILITADA FROM IMPRESORA") + If c.RowCount = 0 Then + skmt.ExecNonQuery2("INSERT INTO IMPRESORA VALUES (?)", Array As Object(0)) + Else + + End If +End Sub + +Sub b_regesar_Click + Subs.panelVisible(p_Main,0,0) +End Sub + +Sub i_engrane_LongClick + copiaDB +End Sub + +Sub Entrar_LongClick +' dim a as int = "a" +End Sub + +Private Sub lv_server_ItemClick (Position As Int, Value As Object) + Starter.server = Value + l_server.Text = Value + Starter.reqManager.Initialize(Me, Value) + ToastMessageShow("Servidor modificado", False) +End Sub + +'Enviamos la base de datos por correo +Private Sub b_envioBD_Click +' copiaDB +' Sleep(1000) + Dim FileName As String = "kmt.db" + 'copy the shared file to the shared folder + Log("xxxxxx:"&Provider.SharedFolder) + Sleep(1000) + File.Copy(File.DirInternal, FileName, Provider.SharedFolder, FileName) + Dim email As Email + email.To.Add("soporte@keymonsoft.com") + email.Subject = "subject" + email.Attachments.Add(Provider.GetFileUri(FileName)) +' email.Attachments.Add(Provider.GetFileUri(FileName)) 'second attachment + Dim in As Intent = email.GetIntent + in.Flags = 1 'FLAG_GRANT_READ_URI_PERMISSION + StartActivity(in) +End Sub + + +Private Sub B4XSwitch1_ValueChanged (Value As Boolean) + If Value Then + skmt.ExecNonQuery2("UPDATE IMPRESORA SET HABILITADA = (?)",Array As Object(1)) + Else + Log("desactivado") + skmt.ExecNonQuery2("UPDATE IMPRESORA SET HABILITADA = (?)",Array As Object(0)) + End If +End Sub \ No newline at end of file diff --git a/B4A/B4XMapaRutas.bas b/B4A/B4XMapaRutas.bas new file mode 100644 index 0000000..36fa8d1 --- /dev/null +++ b/B4A/B4XMapaRutas.bas @@ -0,0 +1,24 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11.5 +@EndOfDesignText@ +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore +End Sub + +'You can add more parameters here. +Public Sub Initialize As Object + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + Root = Root1 + 'load the layout to Root + +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. \ No newline at end of file diff --git a/B4A/B4XMapas.bas b/B4A/B4XMapas.bas new file mode 100644 index 0000000..36fa8d1 --- /dev/null +++ b/B4A/B4XMapas.bas @@ -0,0 +1,24 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11.5 +@EndOfDesignText@ +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore +End Sub + +'You can add more parameters here. +Public Sub Initialize As Object + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + Root = Root1 + 'load the layout to Root + +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. \ No newline at end of file diff --git a/B4A/B4XNoVenta.bas b/B4A/B4XNoVenta.bas new file mode 100644 index 0000000..36fa8d1 --- /dev/null +++ b/B4A/B4XNoVenta.bas @@ -0,0 +1,24 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11.5 +@EndOfDesignText@ +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore +End Sub + +'You can add more parameters here. +Public Sub Initialize As Object + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + Root = Root1 + 'load the layout to Root + +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. \ No newline at end of file diff --git a/B4A/B4XNota.bas b/B4A/B4XNota.bas new file mode 100644 index 0000000..36fa8d1 --- /dev/null +++ b/B4A/B4XNota.bas @@ -0,0 +1,24 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11.5 +@EndOfDesignText@ +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore +End Sub + +'You can add more parameters here. +Public Sub Initialize As Object + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + Root = Root1 + 'load the layout to Root + +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. \ No newline at end of file diff --git a/B4A/B4XNuevoCliente.bas b/B4A/B4XNuevoCliente.bas new file mode 100644 index 0000000..36fa8d1 --- /dev/null +++ b/B4A/B4XNuevoCliente.bas @@ -0,0 +1,24 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11.5 +@EndOfDesignText@ +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore +End Sub + +'You can add more parameters here. +Public Sub Initialize As Object + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + Root = Root1 + 'load the layout to Root + +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. \ No newline at end of file diff --git a/B4A/B4XPrincipal.bas b/B4A/B4XPrincipal.bas new file mode 100644 index 0000000..200361f --- /dev/null +++ b/B4A/B4XPrincipal.bas @@ -0,0 +1,2100 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11.5 +@EndOfDesignText@ +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore + Dim conectado As String + Dim t1 As Timer + Dim sb As StringBuilder + Dim PHONE As Phone + Dim g As GPS + Dim trabajar As Button +' Dim lat_gps, lon_gps As String + Dim c As Cursor + Dim d As Cursor + Dim b As Cursor + Dim e As Cursor + Dim f As Cursor + Dim D2 As Cursor + Dim lv As ListView + Dim cargar As Button + Dim pendiente As Button + Dim foto1() As Byte + Dim usuario As String + Dim connecta As Button + Dim conn As String + Dim Subir As Button + Dim cmd As DBCommand + Dim TOPE As Int + Dim COUNT_CLIE As Int + Dim fecha As String + Dim drop As Double + Dim efectiva As Double + + Dim L_MONTOD As Label + Dim l_cuantosc As Label + Dim l_drop As Label + Dim l_efectiva As Label + Dim l_ctast As Label + Dim BUSCA As Button + Dim Cuantos As String + Dim l_cuantosn As Label + Dim e_ruta As EditText + Dim l_porvisitar As Label + Dim b_mapa As Button + Dim l_ruta As Label + Dim ALMACEN As String + Private img2 As ImageView + Dim Listo1 As String + Dim Listo2 As String + Dim Listo3 As String + Dim Listo4 As String + Dim Listo5 As String + Dim EJECUTANDO As String + Dim RES As String + Dim inve As String + Dim cuantos_pedidosc As String + Dim cuantos_pedido As String + Dim cuantos_noventa As String + Dim datos_iguales As String + Dim p As PhoneId + Dim imei As String +' Dim SERVER As String + + + Private inv As Button + Private P1 As Panel + Private CLAVE As EditText + Private B_OK_PAS As Button + Dim PASO As String + Private USUARIO1 As EditText + Dim connecta1 As Double + Dim armafolio As String + Private NUEVO As Button + Private S_CC As Label + Private S_CP As Label + Private S_CH As Label + Private PB2 As ProgressBar + Private PB1 As ProgressBar + Private L_P_1 As Label + Private L_P_2 As Label + Private L_P_3 As Label + Private CARGA As String + Private PORCENTAJE As String + Private P_RESUMEN As Panel + Private B_OK_RES As Button + Private Resumen As Button + Private L_CUANTOST As Label + Private img3 As ImageView + + Private ImageView3 As ImageView + Private ImageView5 As ImageView + Private L_TICKPROM As Label + Private L_MARCAS As ListView + Private ImageView9 As ImageView + Private E_RUTA2 As EditText + Private resdia As ImageView + Private hacer_ped As ImageView + Private nvo_cliente As ImageView + Private tickets_dia As ImageView + + Private l_monto_ks As Label + Private l_monto_kp As Label + Private l_monto_k As Label + + Private l_monto_c1 As Label + Private l_monto_c2 As Label + Private l_monto_c3 As Label + + Private l_encuesta As Label + + + Private bpv1 As BatteryProgressView + Dim batterystatus(11) As Int + Private bu As BatteryUtilities + + + Private Panel4 As Panel + Private L_NES As Label + Private L_REAL As Label + Private L_ALCANCE As Label + Private L_VPLAN As Label + Private L_VREAL As Label + Private L_EFEC_VIS As Label + Private L_VISITCC As Label + Private L_EFEC_PV As Label + Private L_EFEC_PURA As Label + Private L_CTE_PROMO As Label + Private L_REDEN_PROMO As Label + Private L_LIN_TICK As Label + Private SCROLL_RESDIA As ScrollView + Private L_ACUMULADO As Label + Private L_UNILEVER As Label + Private L_RECHAZOP As Label + Private L_RECHAZOM As Label + Private L_VTA_3MES As Label + Private L_VTA_2MES As Label + Private L_VTA_1MES As Label + Private L_MES_PY As Label + Private L_FREC_DE_CREAL As Label + Private L_FREC_DE_COBJ As Label + Private L_COB_VISIT As Label + Private L_VISIT_REAL As Label + Private L_VISIT_PLAN As Label + Private L_ECO As Label + Private L_COB_CCC As Label + Private L_CTES As Label + Private L_VPO_VTA As Label + Private L_VPO_OBJ As Label + Private L_DS_VTA As Label + Private L_DS_OBJ As Label + Private L_DRA_VTA As Label + Private L_DRA_OBJ As Label + Private L_ALCANCEM As Label + Private L_TENDENCIA As Label + Private L_VTA_ACUM As Label + Private L_OBJ_MES As Label + Private L_DS_OBJD As Label + Private L_DS_VTAD As Label + Private LPT As String + Private STEYIN As String + Private STEYOUT As String + + Private L_PRIO As Label + Private L_SECUND As Label + Private L_COMP As Label + + + Private stay_hh As String + Private stay_mi As String + Private stay_ss As String + + Dim sDate,sTime As String + Dim HORAINGRESO As String + + Private L_QUALA As Label + Private L_FERRERO As Label + Private L_SANMARCOS As Label + Private L_CAMPARI As Label + Private L_IBERIA As Label + Private L_BEPENSA As Label + Private L_SCJ As Label + Private L_MEDJ As Label + Private L_DURACELL As Label + Private L_GUNA As Label + Private L_KIMB As Label + Private L_TRESM As Label + Private L_REDB As Label + Private Btn_Ubicar As Button + Private B_COMM As Button + Private L_TOTAL_MM As Label + Private L_TOTAL_VIVE As Label + Private L_TOTAL_GUNA As Label + Private L_TOTAL_BA As Label + Private L_TOTAL_COMIS As Label + Private L_TOTAL_MM_1 As Label + Private L_TOTAL_VIVE_1 As Label + Private L_TOTAL_GUNA_1 As Label + Private L_TOTAL_BA_1 As Label + Private L_TOTAL_COMIS_1 As Label + Private B_OK_COMISS As Button + Private Panel_C As Panel + + Private TitleHeight As Int = 50dip + Private Title2Height As Int = 100dip + + Private DividerHeight As Int = 5dip + Private CLV1 As CustomListView + Private pnlTitle As B4XView + Private xui As XUI + Type TitleData (Title As String) + + Private B_MARCAS As Button + Private Panel5 As Panel + Private lblTitle As Label + Private B_OK_PANEL5 As Button + + + Private p_principal As Panel +End Sub + +'You can add more parameters here. +Public Sub Initialize As Object + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + Root = Root1 + 'load the layout to Root + Root.LoadLayout("principal") + EJECUTANDO=1 + 'SERVER = "http://201.99.139.28:1782" + 'SERVER = "http://keymon.com.mx:1782" + B4XPages.MainPage.SERVER = "http://187.189.244.154:1782" +' SERVER = "http://10.0.0.205:1782" + Dim ruta As String + img2.Visible =False + ruta = File.DirInternal + If File.Exists(ruta, "kmt.db") = False Then + File.Copy(File.DirAssets, "kmt.db", ruta, "kmt.db") + End If + DateTime.DateFormat = "MM/dd/yyyy" + fecha=DateTime.Date(DateTime.Now) + B4XPages.MainPage.skmt.Initialize(ruta,"kmt.db", True) + b=B4XPages.MainPage.skmt.ExecQuery("Select count(*) as CUANTOS from pedido_cliente") + b.Position=0 + Cuantos = b.GetString("CUANTOS") + b.Close + d=B4XPages.MainPage.skmt.ExecQuery("select count(*) as TOTAL_VISITAR from kmt_info where gestion = 0") + d.Position=0 + e=B4XPages.MainPage.skmt.ExecQuery("select count(*) as POR_VISITAR from kmt_info") + e.Position=0 + f=B4XPages.MainPage.skmt.ExecQuery("select count(*) as CAT_CL_RUTA from kmt_info") + f.Position=0 + l_ruta.Text = f.GetString("CAT_CL_RUTA") + f.Close + If l_ruta.Text = 0 Then + l_ruta.Text =0 + Else + f=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_RUTA from kmt_info") + f.Position=0 + l_ruta.Text = f.GetString("CAT_CL_RUTA") + f.Close + End If + If Cuantos = 0 Then + L_MONTOD.Text =0 + l_cuantosc.Text = 0 + l_cuantosn.Text = 0 + drop = 0 + l_drop.Text = 0 + efectiva = 0 + l_efectiva.text =0 + l_ctast.Text = d.GetString("TOTAL_VISITAR") + l_porvisitar.Text = e.GetString("POR_VISITAR") + Else + c=B4XPages.MainPage.skmt.ExecQuery("select sum(pc_monto) as MONTO_DIA, count(pc_cliente) AS CLIENTES_DIA from pedido_cliente ") + b=B4XPages.MainPage.skmt.ExecQuery("select count(*) as CUANTOS from noventa") + 'where pc_fecha = ?", Array As String(fecha) + c.Position=0 + b.Position=0 + L_MONTOD.Text = c.GetString("MONTO_DIA") + l_cuantosc.Text = c.GetString("CLIENTES_DIA") + l_cuantosn.Text = b.GetString("CUANTOS") + drop = c.GetString("MONTO_DIA") / c.GetString("CLIENTES_DIA") + l_drop.Text = Round2(drop,2) + efectiva = c.GetString("CLIENTES_DIA") / e.GetString("POR_VISITAR") + l_efectiva.text = Round2(efectiva*100,2) + l_ctast.Text = d.GetString("TOTAL_VISITAR") + l_porvisitar.Text = e.GetString("POR_VISITAR") + b.Close + c.Close + End If + d.Close + e.Close + CallSubDelayed(FirebaseMessaging, "SubscribeToTopics") +End Sub + +Sub B4XPage_Appear + HORAINGRESO ="000000" + B4XPages.MainPage.reqManager.Initialize(Me, B4XPages.MainPage.SERVER) + + PASO =0 + If Not(Starter.gps.GPSEnabled) Then + If Starter.marcaCel <> "Sony" Then ToastMessageShow("Es necesario tener el GPS encendido", True) + StartActivity(Starter.gps.LocationSettingsIntent) + End If + c=B4XPages.MainPage.skmt.ExecQuery2("select count(*) as CUANTOS from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("FECHA")) + c.Position =0 + If c.GetString("CUANTOS") = 0 Then + cmd.Initialize + cmd.Name = "select_fecha" + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "fecha") + Msgbox("AJUSTAR FECHA","AVISO") 'ignore + B4XPage_Appear + Else + c=B4XPages.MainPage.skmt.ExecQuery2("select CAT_VA_VALOR from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("FECHA")) + c.Position=0 + Dim sDate,sTime As String + DateTime.DateFormat = "yyyyMMdd" + sDate=DateTime.Date(DateTime.Now) + If c.GetString("CAT_VA_VALOR") > sDate Then + Msgbox("AJUSTAR LA FECHA YA QUE ES MENOR AL SISTEMA" ,"AVISO") 'ignore + c.Close + B4XPage_Appear + End If + c.Close + End If + c.Close + If EJECUTANDO =0 Then + Listo1 = 0 + Listo2 = 0 + Listo3 = 0 + Listo4 = 0 + Listo5 = 0 + inve = 0 + img2.Visible =False + End If + DateTime.DateFormat = "MM/dd/yyyy" + fecha=DateTime.Date(DateTime.Now) + b=B4XPages.MainPage.skmt.ExecQuery("Select count(*) as CUANTOS from pedido_cliente") + b.Position=0 + Cuantos = b.GetString("CUANTOS") + b.Close + If Starter.marcaCel <> "Sony" Then ToastMessageShow(Cuantos , True) + + d=B4XPages.MainPage.skmt.ExecQuery("select count(*) as TOTAL_VISITAR from kmt_info where gestion = 0") + d.Position=0 + e=B4XPages.MainPage.skmt.ExecQuery("select count(*) as POR_VISITAR from kmt_info") + e.Position=0 + f=B4XPages.MainPage.skmt.ExecQuery("select count(*) as CAT_CL_RUTA from kmt_info") + f.Position=0 + l_ruta.Text = f.GetString("CAT_CL_RUTA") + f.Close + If l_ruta.Text = 0 Then + l_ruta.Text =0 + Else + f=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_RUTA from kmt_info") + f.Position=0 + l_ruta.Text = f.GetString("CAT_CL_RUTA") + f.Close + End If + If Cuantos = 0 Then + L_MONTOD.Text =0 + l_cuantosc.Text = 0 + l_cuantosn.Text = 0 + L_CUANTOST.Text = 0 + drop = 0 + l_drop.Text = 0 + efectiva = 0 + l_efectiva.text =0 + l_ctast.Text = d.GetString("TOTAL_VISITAR") + l_porvisitar.Text = e.GetString("POR_VISITAR") + d.Close + e.Close + + b=B4XPages.MainPage.skmt.ExecQuery("select count(*) as CUANTOS from noventa") + b.Position=0 + l_cuantosn.Text = b.GetString("CUANTOS") + b.close + Else + c=B4XPages.MainPage.skmt.ExecQuery("select SUM(PE_COSTO_TOT) as MONTO_DIA, COUNT(DISTINCT(PE_CLIENTE)) AS CLIENTES_DIA from PEDIDO ") + b=B4XPages.MainPage.skmt.ExecQuery("select count(*) as CUANTOS from noventa") + c.Position=0 + b.Position=0 + L_MONTOD.Text = c.GetString("MONTO_DIA") + l_cuantosc.Text = c.GetString("CLIENTES_DIA") + + D2=B4XPages.MainPage.skmt.ExecQuery("select COUNT(*) AS CUANTOS from PEDIDO ") + D2.Position = 0 + LPT = D2.GetString("CUANTOS") / l_cuantosc.Text + D2.Close + + l_cuantosn.Text = b.GetString("CUANTOS") + efectiva = c.GetString("CLIENTES_DIA") / e.GetString("POR_VISITAR") + l_efectiva.text = Round2(efectiva*100,2) + l_ctast.Text = d.GetString("TOTAL_VISITAR") + d.Close + l_porvisitar.Text = e.GetString("POR_VISITAR") + L_CUANTOST.Text = l_cuantosc.Text + l_cuantosn.Text + drop = L_CUANTOST.Text / l_porvisitar.Text + l_drop.Text = Round(drop * 100) + If L_CUANTOST.Text < 40 Then + ImageView3.Bitmap = LoadBitmap(File.DirAssets, "tache_rojo.png") + Else If L_CUANTOST.Text > = 40 And L_CUANTOST.Text < 50 Then + ImageView3.bitmap = LoadBitmap(File.DirAssets, "alerta_amarilla.png") + Else + ImageView3.Bitmap = LoadBitmap(File.DirAssets, "palomita_verde.png") + End If + L_TICKPROM.Text = Round2((c.GetString("MONTO_DIA") / c.GetString("CLIENTES_DIA")),2) + If c.GetString("MONTO_DIA") < 4000 Then + ImageView5.Bitmap = LoadBitmap(File.DirAssets, "tache_rojo.png") + Else if c.GetString("MONTO_DIA") > = 4000 And c.GetString("MONTO_DIA") < 6250 Then + ImageView5.bitmap = LoadBitmap(File.DirAssets, "alerta_amarilla.png") + Else + ImageView5.Bitmap = LoadBitmap(File.DirAssets, "palomita_verde.png") + End If + b.Close + c.Close + End If + c.Close + b.Close + e.Close + c=B4XPages.MainPage.skmt.ExecQuery("select ID_ALMACEN from CAT_ALMACEN") + C.Position =0 + ALMACEN = C.GetString("ID_ALMACEN") + c.Close + bu.Initialize + batterystatus = bu.BatteryInformation + + c=B4XPages.MainPage.skmt.ExecQuery("select usuario from usuarioa") + c.Position = 0 + usuario = c.GetString("USUARIO") + c.Close + + B4XPages.MainPage.montoActual = L_MONTOD.Text + B4XPages.MainPage.clientestotal = L_CUANTOST.Text + B4XPages.MainPage.clientesventa = l_cuantosc.Text + B4XPages.MainPage.clientesvisitados = l_porvisitar.TEXT + B4XPages.MainPage.ALMACEN = ALMACEN + B4XPages.MainPage.rutapreventa = l_ruta.text + + '////// Para el usuario global - Chv + c=B4XPages.MainPage.skmt.ExecQuery("select usuario from usuarioa") + c.Position = 0 + usuario = c.GetString("USUARIO") + B4XPages.MainPage.usuario = usuario + c.Close + '/////// + CallSub(Starter, "ENVIA_ULTIMA_GPS") +End Sub + +Sub Subir_Click + CARGA = "SUBIR" + P1.Visible = True + P1.BringToFront + 'trabajar.Visible = False + NUEVO.Visible =False + BUSCA.Visible=False + connecta.Visible=False + Subir.Visible=False + cargar.Visible=False + L_P_1.Visible = False + S_CC.Visible = False + L_P_3.Visible = False + S_CH.Visible = False + PB1.Visible = False + Resumen.Visible= False + + L_P_2.Text = "Envio de Pedidos" + L_P_3.Text = "Envio de Pedidos" + S_CH.Text = "EN PROCESO" + S_CP.Text = "EN PROCESO" + PB1.Progress = 0 + PB2.Progress = 0 + 'c=skmt.ExecQuery("SELECT sum(IFNULL(PE_DESC,0)) as DESCUENTO FROM PEDIDO") + 'c.Position =0 + 'If c.GetString("DESCUENTO") > 0 And PASO = 0 Then + 'P1.Visible = True + 'ELSE IF c.GetString("DESCUENTO") = 0 Then + PASO = 1 + 'End If + If PASO =1 Then + B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE not In (select PE_CLIENTE from pedido)") + c=B4XPages.MainPage.skmt.ExecQuery("select usuario from usuarioa") + c.Position = 0 + usuario = c.GetString("USUARIO") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select HGDATE, HGLAT, HGLON from HIST_GPS") + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "UPDATE_GUNA_ACTUAL2_GPS" + cmd.Parameters = Array As Object(L_MONTOD.Text, L_CUANTOST.Text, l_cuantosc.Text,l_porvisitar.TEXT,c.GetString("hglat"),c.GetString("hglon"),batterystatus(0),LPT, STEYIN, STEYOUT,ALMACEN,l_ruta.Text ) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "inst_visitas") + Next + End If + c.Close + ' PEDIO_CLIENTE + + c=B4XPages.MainPage.skmt.ExecQuery("SELECT PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT, PC_COSTO_SIN, PC_RUTA, PC_ALMACEN FROM PEDIDO_CLIENTE ") + d=B4XPages.MainPage.skmt.ExecQuery("SELECT COUNT(*) as CUANTOS_PEDIDOSC FROM PEDIDO_CLIENTE ") + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_pedidos_GV2" + cmd.Parameters = Array As Object(C.GetString("PC_CLIENTE"),C.GetString("PC_FECHA"),C.GetString("PC_USER"),C.GetString("PC_NOART"),C.GetString("PC_MONTO"),C.GetString("PC_LON"),C.GetString("PC_LAT"),ALMACEN,l_ruta.text,C.GetString("PC_COSTO_SIN") ) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "ins_pedidos") + Next + End If + c.Close + d.Position=0 + cuantos_pedidosc = D.GetString("CUANTOS_PEDIDOSC") + d.Close + + ' ENVIO DE LOS CODIGOS QR + 'c=skmt.ExecQuery2("SELECT CAT_CL_NUM_SERIEFISICO,CAT_CL_CODIGO ,CAT_CL_LONG,CAT_CL_LAT, CAT_CL_FOTO FROM kmt_info where CAT_CL_NUM_SERIEFISICO = ?", Array As String("OK")) + + + c=B4XPages.MainPage.skmt.ExecQuery("SELECT CODIGOKMTS, CODIGOB, LAT, LON FROM HIST_CODIGO_BARRAS" ) + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_QR_2_GV2" + cmd.Parameters = Array As Object(C.GetString("CODIGOKMTS"),C.GetString("CODIGOB"),C.GetString("LON"),C.GetString("LAT"),ALMACEN,l_ruta.text ) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "ins_QR") + Next + End If + c.Close + + + c=B4XPages.MainPage.skmt.ExecQuery("SELECT CAT_CL_NUM_SERIEFISICO,CAT_CL_CODIGO ,CAT_CL_LONG,CAT_CL_LAT, CAT_CL_FOTO FROM kmt_info where CAT_CL_NUM_SERIEFISICO IS NOT NULL") + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + 's=skmt.ExecQuery2("SELECT HIST_VI_IMAGEN FROM HIST_VISITAS WHERE HIST_VI_CREDITO =?", Array As String (c.GetString("HIST_VI_CREDITO"))) + 's.Position =0 + foto1 = c.GetBlob("CAT_CL_FOTO") + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_QR_GV2" + cmd.Parameters = Array As Object(C.GetString("CAT_CL_NUM_SERIEFISICO"),C.GetString("CAT_CL_CODIGO"),C.GetString("CAT_CL_LONG"),C.GetString("CAT_CL_LAT"),ALMACEN,l_ruta.text, foto1 ) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "ins_QR") + Next + End If + c.Close + + c=B4XPages.MainPage.skmt.ExecQuery("SELECT HE_CLIE, HE_RES, HE_FECHA, HE_TIPO FROM HIST_ENCUESTA") + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_encuesta" + cmd.Parameters = Array As Object(C.GetString("HE_CLIE"),C.GetString("HE_RES"),C.GetString("HE_FECHA"), c.GetString("HE_TIPO")) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "inst_noventa") + Next + End If + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("SELECT PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO, PE_COSTO_SIN, PE_RUTA, PE_DESC, PE_FOLIO FROM PEDIDO") + d=B4XPages.MainPage.skmt.ExecQuery("SELECT COUNT(*) as CUANTOS_PEDIDO FROM PEDIDO") + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_pedido_GV2" + cmd.Parameters = Array As Object(C.GetString("PE_CEDIS"),ALMACEN,C.GetString("PE_COSTO_TOT"),C.GetString("PE_COSTOU"),C.GetString("PE_CANT"),C.GetString("PE_PRONOMBRE"),C.GetString("PE_PROID"),C.GetString("PE_CLIENTE"),C.GetString("PE_FECHA"),C.GetString("PE_USUARIO"),C.GetString("PE_RUTA"), C.GetString("PE_COSTO_SIN"),C.GetString("PE_DESC"),c.GetString("PE_FOLIO")) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "ins_pedido") + Next + End If + c.Close + d.Position=0 + cuantos_pedido = D.GetString("CUANTOS_PEDIDO") + d.Close + + ' NOVENTA + c=B4XPages.MainPage.skmt.ExecQuery("SELECT NV_CLIENTE,NV_FECHA,NV_USER,NV_MOTIVO,NV_COMM,NV_LAT,NV_LON FROM NOVENTA") + D=B4XPages.MainPage.skmt.ExecQuery("SELECT COUNT(*) AS CUANTOS_NOVENTA FROM NOVENTA") + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_noventa_GV2" + cmd.Parameters = Array As Object(C.GetString("NV_CLIENTE"),C.GetString("NV_FECHA"),C.GetString("NV_USER"),C.GetString("NV_MOTIVO"),C.GetString("NV_COMM"),C.GetString("NV_LAT"),C.GetString("NV_LON"), ALMACEN, l_ruta.Text) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "inst_noventa") + Next + End If + c.Close + d.Position=0 + cuantos_noventa = D.GetString("CUANTOS_NOVENTA") + d.Close + + ' GEO CERCA + + c=B4XPages.MainPage.skmt.ExecQuery("Select HGCLIENTE, HGDATE, HGLAT, HGLON from HIST_GEOCERCA") + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_geocerca_GV2" + cmd.Parameters = Array As Object(C.GetString("HGCLIENTE"),C.GetString("HGDATE"),C.GetString("HGLAT"),C.GetString("HGLON")) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "inst_noventa") + Next + End If + c.Close + + ' LO DEL LIKE + + c=B4XPages.MainPage.skmt.ExecQuery("Select HFCLIENTE, HFALIAS,HFRUTA,HFALMACEN from HIST_FACE") + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_face_like_GV2" + cmd.Parameters = Array As Object(C.GetString("HFCLIENTE"),C.GetString("HFALIAS"),C.GetString("HFRUTA"),C.GetString("HFALMACEN")) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "inst_noventa") + Next + End If + c.Close' + ' DROP + t1.Initialize("T1", 30000) ' 1000 = 1 second + t1.Enabled = True + Dim sDate,sTime As String + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + Dim cmd As DBCommand + cmd.Initialize + cmd.Name ="insert_drop_GV2_2" + cmd.Parameters = Array As Object(usuario,l_ruta.Text,sDate & sTime, l_porvisitar.Text,l_drop.Text,l_efectiva.Text,l_cuantosc.Text,l_cuantosn.Text, L_MONTOD.Text,"ENVIO",ALMACEN) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "inst_noventa") + img2.Visible =True + PORCENTAJE = Round(100/ (cuantos_noventa + cuantos_pedido + cuantos_pedidosc + 1)) + If Starter.marcaCel <> "Sony" Then ToastMessageShow("Se Actualizaran los datos, Este proceso podria tardar hasta un minuto, gracias "& l_ruta.text , True) + End If +End Sub + +Sub cargar_Click + CARGA = "CARGAR" + img2.Visible =True + L_P_1.Visible = True + S_CC.Visible = True + Btn_Ubicar.Visible=False +' P1.Visible = True + p_principal.Visible = False + Subs.panelVisible(P1, 0, 0) + Subs.centraPanel(P1, Root.Width) + Subs.centraPanelV(P1, Root.Height) +' trabajar.Visible = False + NUEVO.Visible =False + BUSCA.Visible=False + connecta.Visible=False + L_P_3.Visible = True + S_CH.Visible = True + PB1.Visible = True + Resumen.Visible= False + + L_P_1.Text = "Catalogo de Clientes" + L_P_2.Text = "Catalogos de Productos" + L_P_3.Text = "Catalogos Historicos" + S_CC.Text = "EN PROCESO" + S_CH.Text = "EN PROCESO" + S_CP.Text = "EN PROCESO" + PB1.Progress = 0 + PB2.Progress = 0 + EJECUTANDO = 1 + + 'c=skmt.ExecQuery("CREATE TABLE kmt_info (pr_cd_credito NUMERIC,pr_cd_nombre TEXT,pr_cd_calle TEXT,pr_cd_numero TEXT,pr_cd_num_int TEXT,pr_cd_entrecalle1 TEXT,pr_cd_entrecalle2 TEXT,pr_cd_colonia TEXT,pr_cd_poblacion TEXT,pr_cd_edo TEXT,pr_cd_cp TEXT,pr_cd_zona TEXT,pr_cf_credito NUMERIC,pr_cf_saldotot NUMERIC,pr_cf_saldooper NUMERIC,pr_cf_saldof1 NUMERIC, pr_cf_penalizacion NUMERIC)") + TOPE = 0 + ' NUEVOS CLIENTE + + B4XPages.MainPage.skmt.ExecNonQuery("delete from kmt_info") + B4XPages.MainPage.skmt.ExecNonQuery("delete from cod_result") + B4XPages.MainPage.skmt.ExecNonQuery("delete from hist_gest") + B4XPages.MainPage.skmt.ExecNonQuery("delete from cat_gunaprod") + B4XPages.MainPage.skmt.ExecNonQuery("delete from CAT_DETALLES_PAQ") + B4XPages.MainPage.skmt.ExecNonQuery("delete from telefonos") + B4XPages.MainPage.skmt.ExecNonQuery("delete from HIST_VENTAS") + B4XPages.MainPage.skmt.ExecNonQuery("delete from HIST_PROMOS") + B4XPages.MainPage.skmt.ExecNonQuery("delete from HIST_CLIENTE_CANT_PROMOS") + B4XPages.MainPage.skmt.ExecNonQuery("delete from PROMOS_COMP") + B4XPages.MainPage.skmt.ExecNonQuery("delete from CAT_VERIFICACION") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM MARCAS_RUTAS") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM HIST_STAY_STORE") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM HIST_GEOCERCA") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM HIST_MARCAS_CUOTAS") + + c = B4XPages.MainPage.skmt.ExecQuery2("select count(CAT_VA_DESCRIPCION) as HoraIngreso from cat_variables where CAT_VA_DESCRIPCION = ? ", Array As String("HoraIngreso")) + c.Position = 0 + DateTime.TimeFormat = "HHmmss" + 'Valida si ya se cuenta con hora actualiza el valor si no lo inserta----------- + If c.GetString("HoraIngreso") > 0 Then + B4XPages.MainPage.skmt.ExecNonQuery2("Update cat_variables set CAT_VA_VALOR = ? WHERE CAT_VA_DESCRIPCION = ?" , Array As String(DateTime.Time(DateTime.Now),"HoraIngreso")) + Else + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_VALOR,CAT_VA_DESCRIPCION) VALUES (?,?)" , Array As String(DateTime.Time(DateTime.Now),"HoraIngreso")) + End If + c.Close + DateTime.TimeFormat = "HH:mm:ss" + c=B4XPages.MainPage.skmt.ExecQuery("select usuario from usuarioa") + c.Position = 0 + usuario = c.GetString("USUARIO") + c.Close +' + Dim sDate,sTime As String + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + + Dim P As PhoneId + imei = P.GetDeviceId + cmd.Initialize + cmd.Name ="insert_drop_GV2_2" + cmd.Parameters = Array As Object(usuario,e_ruta.text,sDate,imei,sTime,"","","","","CARGA",ALMACEN) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "inst_noventa") + + cmd.Initialize + cmd.Name = "select_cat_gunaprod_GV2" + cmd.Parameters = Array As Object(ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "gunaprod") + + cmd.Initialize + cmd.Name = "select_resum_apk_guna" ''' va el nombre de archivo de config + cmd.Parameters = Array As Object(ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "resum_apk") ''' donde regresa la info ver job_done + + cmd.Initialize + cmd.Name = "select_cat_paquetes_GV3" + cmd.Parameters = Array As Object(ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "gunaprodp") + + cmd.Initialize + cmd.Name = "select_cat_paquetess_GV2" + cmd.Parameters = Array As Object(ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "gunaprodp") + + cmd.Initialize + cmd.Name = "select_cat_detallepa_GV2" + cmd.Parameters = Array As Object(ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "detallepaq") + + cmd.Initialize + cmd.Name = "select_cat_clientes_guna_GV2" + cmd.Parameters = Array As Object(e_ruta.text, ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "kmt_datos") + + cmd.Initialize + cmd.Name = "select_hist_datos_GV2_2" + cmd.Parameters = Array As Object(e_ruta.text, ALMACEN,e_ruta.text, ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "hist_datos") + + cmd.Initialize + cmd.Name = "select_hist_promos_GV2" + cmd.Parameters = Array As Object(e_ruta.text, ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "hist_promos") + + cmd.Initialize + cmd.Name = "select_hist_cliente_promos_GV2" + cmd.Parameters = Array As Object(e_ruta.text, ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "hist_cliente_promos") + + cmd.Initialize + cmd.Name = "select_HIST_MARCAS_CUOTAS" + cmd.Parameters = Array As Object( ALMACEN, e_ruta.text) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "HIST_MARCAS_CUOTAS") + + If E_RUTA2.text <> "" Then + cmd.Initialize + cmd.Name = "select_cat_clientes_guna_GV2" + cmd.Parameters = Array As Object(E_RUTA2.text, ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "kmt_datos") + + cmd.Initialize + cmd.Name = "select_hist_datos_GV2" + cmd.Parameters = Array As Object(E_RUTA2.text, ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "hist_datos") + + cmd.Initialize + cmd.Name = "select_hist_promos_GV2" + cmd.Parameters = Array As Object(E_RUTA2.text, ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "hist_promos") + + cmd.Initialize + cmd.Name = "select_hist_cliente_promos_GV2" + cmd.Parameters = Array As Object(E_RUTA2.text, ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "hist_cliente_promos") + End If + + cmd.Initialize + cmd.Name = "select_promo_comp_GV2" + cmd.Parameters = Array As Object(ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "hist_comp_promos") + + cmd.Initialize + cmd.Name = "select_verificacion_GV2" + cmd.Parameters = Array As Object(e_ruta.text, ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "cat_verificacion") + + cmd.Initialize + cmd.Name = "select_fecha" + cmd.Parameters = Array As Object(e_ruta.text, ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "fecha") + + cmd.Initialize + cmd.Name = "select_folio_GV2" + cmd.Parameters = Array As Object(e_ruta.text, ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "folio") + + cmd.Initialize + cmd.Name = "select_marcas_rutas" + cmd.Parameters = Array As Object( ALMACEN, e_ruta.text) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "marcas_rutas") + + cmd.Initialize + cmd.Name = "select_CUEST_GV2" + cmd.Parameters = Array As Object(ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "CUESTIONARIO") + + cmd.Initialize + cmd.Name = "select_HIST_CUOTAS" + cmd.Parameters = Array As Object( ALMACEN,e_ruta.text ) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "CUOTAS") + + cmd.Initialize + cmd.Name = "select_comis_cedex" + cmd.Parameters = Array As Object( ALMACEN,e_ruta.text ) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "COMISIONES") + + cargar.Visible = False + Subir.Visible = False + inv.Visible = False + If Starter.marcaCel <> "Sony" Then ToastMessageShow("Se Actualizaran los datos, Este proceso podria tardar hasta un minuto, gracias" , True) +End Sub + +Sub JobDone(Job As HttpJob) + If Job.Success = False Then + 'ToastMessageShow("Error: " & Job.ErrorMessage, True) + If Job.ErrorMessage = "STREAM" Then + If CARGA = "SUBIR" Then + PB2.Progress = PB2.Progress + PORCENTAJE + S_CP.Text = "SUBIENDO" + If PB2.Progress > 99 Then + S_CP.Text = "VALIDANDO" + End If + End If + End If + Else 'If Job Success then ... + LogColor("JobDone: '" & B4XPages.MainPage.reqManager.HandleJob(Job).tag & "' - Registros: " & B4XPages.MainPage.reqManager.HandleJob(Job).Rows.Size, Colors.Green) 'Mod por CHV - 211027 + 'Verificamos que el usuario guardado en BD sea VALIDO. + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "usuarioA" Then 'query tag + Private n As String = "Sin Usuario" + For Each records() As Object In RESULT.Rows + n = records(RESULT.Columns.Get("USUARIO")) + Next + LogColor("**************************"&n, Colors.Green) + If n = "OKActivo" Then + Log("Usuario guardado en BD es 'Valido'") + Else If n = "OKExpirado" Then + Msgbox("Usuario Expirado llamar al administrador","") 'ignore + StartActivity(Main) + Else If n = "OKCancelado" Then + Msgbox("Usuario Cancelado llamar al administrador","") 'ignore + StartActivity(Main) + Else + Msgbox("Usuario o password No validos","") 'ignore + StartActivity(Main) + End If + Log("***************** "&n) + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "kmt_datos" Then 'query tag + S_CC.TEXT = "CARGANDO" + For Each records() As Object In RESULT.Rows + Dim CAT_CL_CODIGO As String = records(RESULT.Columns.Get("CAT_CL_CODIGO")) + Dim CAT_CL_RUTA As String = records(RESULT.Columns.Get("CAT_CL_RUTA")) + Dim CAT_CL_NOMBRE As String = records(RESULT.Columns.Get("CAT_CL_NOMBRE")) + Dim CAT_CL_ATIENDE1 As String = records(RESULT.Columns.Get("CAT_CL_ATIENDE1")) + Dim CAT_CL_ATIENTE2 As String = records(RESULT.Columns.Get("CAT_CL_ATIENTE2")) + Dim CAT_CL_TELEFONO As String = records(RESULT.Columns.Get("CAT_CL_TELEFONO")) + Dim CAT_CL_EMAIL As String = records(RESULT.Columns.Get("CAT_CL_EMAIL")) + Dim CAT_CL_CALLE As String = records(RESULT.Columns.Get("CAT_CL_CALLE")) + Dim CAT_CL_NOEXT As String = records(RESULT.Columns.Get("CAT_CL_NOEXT")) + Dim CAT_CL_NOINT As String = records(RESULT.Columns.Get("CAT_CL_NOINT")) + Dim CAT_CL_CALLE1 As String = records(RESULT.Columns.Get("CAT_CL_CALLE1")) + Dim CAT_CL_CALLE2 As String = records(RESULT.Columns.Get("CAT_CL_CALLE2")) + Dim CAT_CL_COLONIA As String = records(RESULT.Columns.Get("CAT_CL_COLONIA")) + Dim CAT_CL_MUNI As String = records(RESULT.Columns.Get("CAT_CL_MUNI")) + Dim CAT_CL_EDO As String = records(RESULT.Columns.Get("CAT_CL_EDO")) + Dim CAT_CL_CP As String = records(RESULT.Columns.Get("CAT_CL_CP")) + Dim CAT_CL_LONG As String = records(RESULT.Columns.Get("CAT_CL_LONG")) + Dim CAT_CL_LAT As String = records(RESULT.Columns.Get("CAT_CL_LAT")) + Dim CAT_CL_MTOCOMPRA As String = records(RESULT.Columns.Get("CAT_CL_MTOCOMPRA")) + Dim CAT_CL_NUM_SERIEFISICO As String = records(RESULT.Columns.Get("CAT_CL_NUM_SERIEFISICO")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO kmt_info(CAT_CL_CODIGO,CAT_CL_RUTA,CAT_CL_NOMBRE,CAT_CL_ATIENDE1,CAT_CL_ATIENTE2,CAT_CL_TELEFONO,CAT_CL_EMAIL,CAT_CL_CALLE,CAT_CL_NOEXT,CAT_CL_NOINT,CAT_CL_CALLE1,CAT_CL_CALLE2,CAT_CL_COLONIA,CAT_CL_MUNI,CAT_CL_EDO,CAT_CL_CP,CAT_CL_LONG,CAT_CL_LAT,CAT_CL_MTOCOMPRA,CAT_CL_NUM_SERIEFISICO, gestion) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,0)", Array As Object (CAT_CL_CODIGO,CAT_CL_RUTA,CAT_CL_NOMBRE,CAT_CL_ATIENDE1,CAT_CL_ATIENTE2,CAT_CL_TELEFONO,CAT_CL_EMAIL,CAT_CL_CALLE,CAT_CL_NOEXT,CAT_CL_NOINT,CAT_CL_CALLE1,CAT_CL_CALLE2,CAT_CL_COLONIA,CAT_CL_MUNI,CAT_CL_EDO,CAT_CL_CP,CAT_CL_LONG,CAT_CL_LAT,CAT_CL_MTOCOMPRA,CAT_CL_NUM_SERIEFISICO)) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_STAY_STORE(HSS_CODIGO, HSS_IN , HSS_OUT , HSS_TOT) VALUES (?,0,0,0)", Array As Object (CAT_CL_CODIGO)) + Next + Listo1 = 1 + S_CC.Text = "LISTO" + If Starter.marcaCel <> "Sony" Then ToastMessageShow("Catalogo Clientes Actualizados." , True) + If Listo1 =1 And Listo2 =1 And Listo3 = 1 And Listo4 = 1 Then + B4XPage_Appear + img2.Visible=False + EJECUTANDO=0 + End If + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "resum_apk" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim HIST_RA_OBJMES As String = records(RESULT.Columns.Get("HIST_RA_OBJMES")) + Dim HIST_RA_VENTA As String = records(RESULT.Columns.Get("HIST_RA_VENTA")) + Dim HIST_RA_TENDENCIA As String = records(RESULT.Columns.Get("HIST_RA_TENDENCIA")) + Dim HIST_RA_ALCANCE As String = records(RESULT.Columns.Get("HIST_RA_ALCANCE")) + Dim HISR_RA_DRAOBJ As String = records(RESULT.Columns.Get("HISR_RA_DRAOBJ")) + Dim HIST_RA_DRAVTA As String = records(RESULT.Columns.Get("HIST_RA_DRAVTA")) + Dim HIST_RA_DSOBJ As String = records(RESULT.Columns.Get("HIST_RA_DSOBJ")) + Dim HIST_RA_DSVTA As String = records(RESULT.Columns.Get("HIST_RA_DSVTA")) + Dim HIST_RA_VPOOBJ As String = records(RESULT.Columns.Get("HIST_RA_VPOOBJ")) + Dim HIST_RA_VPOVTA As String = records(RESULT.Columns.Get("HIST_RA_VPOVTA")) + Dim HIST_RA_CTES As String = records(RESULT.Columns.Get("HIST_RA_CTES")) + Dim HIST_RA_COBCCC As String = records(RESULT.Columns.Get("HIST_RA_COBCCC")) + Dim HIST_RA_ECO As String = records(RESULT.Columns.Get("HIST_RA_ECO")) + Dim HIST_RA_VISITPLAN As String = records(RESULT.Columns.Get("HIST_RA_VISITPLAN")) + Dim HIST_RA_VISIREAL As String = records(RESULT.Columns.Get("HIST_RA_VISIREAL")) + Dim HIST_RA_COBVISIT As String = records(RESULT.Columns.Get("HIST_RA_COBVISIT")) + Dim HIST_RA_FRECCOMPOBJ As String = records(RESULT.Columns.Get("HIST_RA_FRECCOMPOBJ")) + Dim HIST_RA_FRECCOMREAL As String = records(RESULT.Columns.Get("HIST_RA_FRECCOMREAL")) + Dim HIST_RA_VENTAMES1 As String = records(RESULT.Columns.Get("HIST_RA_VENTAMES1")) + Dim HIST_RA_VENTAMES2 As String = records(RESULT.Columns.Get("HIST_RA_VENTAMES2")) + Dim HIST_RA_VENTAMES3 As String = records(RESULT.Columns.Get("HIST_RA_VENTAMES3")) + Dim HIST_RA_VENTAMES4 As String = records(RESULT.Columns.Get("HIST_RA_VENTAMES4")) + Dim HIST_RA_RECHAZO As String = records(RESULT.Columns.Get("HIST_RA_RECHAZO")) + Dim HIST_RA_RECHAZOPORCEN As String = records(RESULT.Columns.Get("HIST_RA_RECHAZOPORCEN")) + Dim HIST_RA_SEMANA1 As String = records(RESULT.Columns.Get("HIST_RA_SEMANA1")) + Dim HIST_RA_SEMANA1_DIAS As String = records(RESULT.Columns.Get("HIST_RA_SEMANA1_DIAS")) + Dim HIST_RA_SEMANA1_DRA As String = records(RESULT.Columns.Get("HIST_RA_SEMANA1_DRA")) + Dim HIST_RA_SEMANA2 As String = records(RESULT.Columns.Get("HIST_RA_SEMANA2")) + Dim HIST_RA_SEMANA2_DIAS As String = records(RESULT.Columns.Get("HIST_RA_SEMANA2_DIAS")) + Dim HIST_RA_SEMANA2_DRA As String = records(RESULT.Columns.Get("HIST_RA_SEMANA2_DRA")) + Dim HIST_RA_SEMANA3 As String = records(RESULT.Columns.Get("HIST_RA_SEMANA3")) + Dim HIST_RA_SEMANA3_DIAS As String = records(RESULT.Columns.Get("HIST_RA_SEMANA3_DIAS")) + Dim HIST_RA_SEMANA3_DRA As String = records(RESULT.Columns.Get("HIST_RA_SEMANA3_DRA")) + Dim HIST_RA_SEMANA4 As String = records(RESULT.Columns.Get("HIST_RA_SEMANA4")) + Dim HIST_RA_SEMANA4_DIAS As String = records(RESULT.Columns.Get("HIST_RA_SEMANA4_DIAS")) + Dim HIST_RA_SEMANA4_DRA As String = records(RESULT.Columns.Get("HIST_RA_SEMANA4_DRA")) + Dim HIST_RA_SEMANA5 As String = records(RESULT.Columns.Get("HIST_RA_SEMANA5")) + Dim HIST_RA_SEMANA5_DIAS As String = records(RESULT.Columns.Get("HIST_RA_SEMANA5_DIAS")) + Dim HIST_RA_SEMANA5_DRA As String = records(RESULT.Columns.Get("HIST_RA_SEMANA5_DRA")) + Dim HIST_RA_SEMANA1_LPT As String = records(RESULT.Columns.Get("HIST_RA_SEMANA1_LPT")) + Dim HIST_RA_SEMANA2_LPT As String = records(RESULT.Columns.Get("HIST_RA_SEMANA2_LPT")) + Dim HIST_RA_SEMANA3_LPT As String = records(RESULT.Columns.Get("HIST_RA_SEMANA3_LPT")) + Dim HIST_RA_SEMANA4_LPT As String = records(RESULT.Columns.Get("HIST_RA_SEMANA4_LPT")) + Dim HIST_RA_SEMANA5_LPT As String = records(RESULT.Columns.Get("HIST_RA_SEMANA5_LPT")) + Dim HIST_RA_RUTA As String = records(RESULT.Columns.Get("HIST_RA_RUTA")) + Dim HIST_RA_IDALMACEN As String = records(RESULT.Columns.Get("HIST_RA_IDALMACEN")) + + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_RESUM_APK(HIST_RA_OBJMES,HIST_RA_VENTA,HIST_RA_TENDENCIA,HIST_RA_ALCANCE,HISR_RA_DRAOBJ,HIST_RA_DRAVTA,HIST_RA_DSOBJ,HIST_RA_DSVTA,HIST_RA_VPOOBJ,HIST_RA_VPOVTA,HIST_RA_CTES,HIST_RA_COBCCC,HIST_RA_ECO,HIST_RA_VISITPLAN,HIST_RA_VISIREAL,HIST_RA_COBVISIT,HIST_RA_FRECCOMPOBJ,HIST_RA_FRECCOMREAL,HIST_RA_VENTAMES1,HIST_RA_VENTAMES2,HIST_RA_VENTAMES3,HIST_RA_VENTAMES4,HIST_RA_RECHAZO,HIST_RA_RECHAZOPORCEN,HIST_RA_SEMANA1,HIST_RA_SEMANA1_DIAS,HIST_RA_SEMANA1_DRA,HIST_RA_SEMANA2,HIST_RA_SEMANA2_DIAS,HIST_RA_SEMANA2_DRA,HIST_RA_SEMANA3,HIST_RA_SEMANA3_DIAS,HIST_RA_SEMANA3_DRA,HIST_RA_SEMANA4,HIST_RA_SEMANA4_DIAS,HIST_RA_SEMANA4_DRA,HIST_RA_SEMANA5,HIST_RA_SEMANA5_DIAS,HIST_RA_SEMANA5_DRA,HIST_RA_SEMANA1_LPT,HIST_RA_SEMANA2_LPT,HIST_RA_SEMANA3_LPT,HIST_RA_SEMANA4_LPT,HIST_RA_SEMANA5_LPT,HIST_RA_RUTA,HIST_RA_IDALMACEN) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", Array As Object (HIST_RA_OBJMES,HIST_RA_VENTA,HIST_RA_TENDENCIA,HIST_RA_ALCANCE,HISR_RA_DRAOBJ,HIST_RA_DRAVTA,HIST_RA_DSOBJ,HIST_RA_DSVTA,HIST_RA_VPOOBJ,HIST_RA_VPOVTA,HIST_RA_CTES,HIST_RA_COBCCC,HIST_RA_ECO,HIST_RA_VISITPLAN,HIST_RA_VISIREAL,HIST_RA_COBVISIT,HIST_RA_FRECCOMPOBJ,HIST_RA_FRECCOMREAL,HIST_RA_VENTAMES1,HIST_RA_VENTAMES2,HIST_RA_VENTAMES3,HIST_RA_VENTAMES4,HIST_RA_RECHAZO,HIST_RA_RECHAZOPORCEN,HIST_RA_SEMANA1,HIST_RA_SEMANA1_DIAS,HIST_RA_SEMANA1_DRA,HIST_RA_SEMANA2,HIST_RA_SEMANA2_DIAS,HIST_RA_SEMANA2_DRA,HIST_RA_SEMANA3,HIST_RA_SEMANA3_DIAS,HIST_RA_SEMANA3_DRA,HIST_RA_SEMANA4,HIST_RA_SEMANA4_DIAS,HIST_RA_SEMANA4_DRA,HIST_RA_SEMANA5,HIST_RA_SEMANA5_DIAS,HIST_RA_SEMANA5_DRA,HIST_RA_SEMANA1_LPT,HIST_RA_SEMANA2_LPT,HIST_RA_SEMANA3_LPT,HIST_RA_SEMANA4_LPT,HIST_RA_SEMANA5_LPT,HIST_RA_RUTA,HIST_RA_IDALMACEN)) + ' Msgbox("pasa","alo") + Next + Listo1 = 1 + S_CC.Text = "LISTO" + If Starter.marcaCel <> "Sony" Then ToastMessageShow("Catalogo Resumen Actualizado." , True) + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "hist_promos" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim HP_CLIENTE As String = records(RESULT.Columns.Get("HP_CLIENTE")) + Dim HP_CODIGO_PROMOCION As String = records(RESULT.Columns.Get("HP_CODIGO_PROMOCION")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_PROMOS(HP_CLIENTE, HP_CODIGO_PROMOCION) VALUES (?,?)", Array As Object (HP_CLIENTE, HP_CODIGO_PROMOCION)) + Next + If Starter.marcaCel <> "Sony" Then ToastMessageShow("Historico Promociones Actualizado." , True) + If PB1.Progress = 0 Then + PB1.Progress = 30 + S_CH.Text = "CARGANDO" + ELSE If PB1.Progress = 30 Then + PB1.Progress = 60 + ELSE IF PB1.Progress = 60 Then + PB1.Progress = 100 + S_CH.Text = "LISTO" + End If + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "hist_cliente_promos" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim HCCP_CLIENTE As String = records(RESULT.Columns.Get("HCCP_CLIENTE")) + Dim HCCP_PROMO As String = records(RESULT.Columns.Get("HCCP_PROMO")) + Dim HCCP_CANT As String = records(RESULT.Columns.Get("HCCP_CANT")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_CLIENTE_CANT_PROMOS(HCCP_CLIENTE, HCCP_PROMO, HCCP_CANT) VALUES (?,?,?)", Array As Object (HCCP_CLIENTE, HCCP_PROMO,HCCP_CANT)) + Next + If Starter.marcaCel <> "Sony" Then ToastMessageShow(" Historico Clientes Promociones Actualizado." , True) + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "HIST_MARCAS_CUOTAS" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim HMC_MARCA As String = records(RESULT.Columns.Get("HMC_MARCA")) + Dim HMC_TOTAL As String = records(RESULT.Columns.Get("HMC_TOTAL")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_MARCAS_CUOTAS(HMC_MARCA, HMC_TOTAL) VALUES (?,?)", Array As Object (HMC_MARCA, HMC_TOTAL)) + Next + If Starter.marcaCel <> "Sony" Then ToastMessageShow(" Historico Marcas" , True) + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "hist_comp_promos" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim CAT_PA_ID As String = records(RESULT.Columns.Get("CAT_PA_ID")) + Dim CAT_PA_MAXPROM As String = records(RESULT.Columns.Get("CAT_PA_MAXPROM")) + Dim CAT_PA_MAXPROMREC As String = records(RESULT.Columns.Get("CAT_PA_MAXPROMREC")) + Dim CAT_PA_MAXPROMCLIE As String = records(RESULT.Columns.Get("CAT_PA_MAXPROMCLIE")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PROMOS_COMP(CAT_PA_ID, CAT_PA_MAXPROM, CAT_PA_MAXPROMREC, CAT_PA_MAXPROMCLIE) VALUES (?,?,?,?)", Array As Object (CAT_PA_ID, CAT_PA_MAXPROM,CAT_PA_MAXPROMREC,CAT_PA_MAXPROMCLIE)) + Next + If PB1.Progress = 0 Then + PB1.Progress = 30 + S_CH.Text = "CARGANDO" + ELSE If PB1.Progress = 30 Then + PB1.Progress = 60 + ELSE IF PB1.Progress = 60 Then + PB1.Progress = 100 + S_CH.Text = "LISTO" + End If + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "cat_verificacion" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim CAT_VE_IDPROD As String = records(RESULT.Columns.Get("CAT_VE_IDPROD")) + Dim CAT_VE_NOMBRE As String = records(RESULT.Columns.Get("CAT_VE_NOMBRE")) + Dim CAT_VE_ORDEN As String = records(RESULT.Columns.Get("CAT_VE_ORDEN")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_VERIFICACION(CAT_VE_IDPROD, CAT_VE_NOMBRE,CAT_VE_ORDEN) VALUES (?,?,?)", Array As Object (CAT_VE_IDPROD, CAT_VE_NOMBRE,CAT_VE_ORDEN)) + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "marcas_rutas" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim HVD_MARCA As String = records(RESULT.Columns.Get("HVD_MARCA")) + Dim CLIENTES As String = records(RESULT.Columns.Get("CLIENTES")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO MARCAS_RUTAS(HVD_MARCA, CLIENTES) VALUES (?,?)", Array As Object (HVD_MARCA, CLIENTES)) + Next + End If + End If + + 'CUOTAS + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "CUOTAS" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim HC_RUTA As String = records(RESULT.Columns.Get("HC_RUTA")) + Dim HC_CUOTA1 As String = records(RESULT.Columns.Get("HC_CUOTA1")) + Dim HC_CUOTA2 As String = records(RESULT.Columns.Get("HC_CUOTA2")) + Dim HC_CUOTA3 As String = records(RESULT.Columns.Get("HC_CUOTA3")) + Dim HC_CUOTA4 As String = records(RESULT.Columns.Get("HC_CUOTA4")) + Dim HC_CUOTA5 As String = records(RESULT.Columns.Get("HC_CUOTA5")) + Dim HC_CUOTA6 As String = records(RESULT.Columns.Get("HC_CUOTA6")) + Dim HC_META1 As String = records(RESULT.Columns.Get("HC_META1")) + Dim HC_META2 As String = records(RESULT.Columns.Get("HC_META2")) + Dim HC_META3 As String = records(RESULT.Columns.Get("HC_META3")) + Dim HC_META4 As String = records(RESULT.Columns.Get("HC_META4")) + Dim HC_META5 As String = records(RESULT.Columns.Get("HC_META5")) + Dim HC_META6 As String = records(RESULT.Columns.Get("HC_META6")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_CUOTAS(HC_RUTA, HC_CUOTA1,HC_CUOTA2,HC_CUOTA3,HC_CUOTA4,HC_CUOTA5,HC_CUOTA6,HC_META1,HC_META2,HC_META3,HC_META4,HC_META5,HC_META6) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)", Array As Object (HC_RUTA, HC_CUOTA1,HC_CUOTA2,HC_CUOTA3,HC_CUOTA4,HC_CUOTA5,HC_CUOTA6,HC_META1,HC_META2,HC_META3,HC_META4,HC_META5,HC_META6)) + Next + + End If + End If + 'COMISIONES + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "COMISIONES" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim HCM_TOTAL_V As String = records(RESULT.Columns.Get("HCM_TOTAL_V")) + Dim HCM_TOTAL_VIVE As String = records(RESULT.Columns.Get("HCM_TOTAL_VIVE")) + Dim HCM_TOTAL_GUNA As String = records(RESULT.Columns.Get("HCM_TOTAL_GUNA")) + Dim HCM_TOTAL_BEB As String = records(RESULT.Columns.Get("HCM_TOTAL_BEB")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_COMISIONES_MOVIL (HCM_TOTAL_V , HCM_TOTAL_VIVE , HCM_TOTAL_GUNA , HCM_TOTAL_BEB) VALUES (?,?,?,?)", Array As Object (HCM_TOTAL_V , HCM_TOTAL_VIVE , HCM_TOTAL_GUNA , HCM_TOTAL_BEB)) + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "gunaprod" Then 'query tag + If PB2.Progress < 30 Then S_CP.Text = "CARGANDO" 'Mod por CHV - 20211028 Agregue el "If PB2.Progress < 30 then" + For Each records() As Object In RESULT.Rows + Dim CAT_GP_ID As String = records(RESULT.Columns.Get("CAT_GP_ID")) + Dim CAT_GP_NOMBRE As String = records(RESULT.Columns.Get("CAT_GP_NOMBRE")) + Dim CAT_GP_IMP1 As String = records(RESULT.Columns.Get("CAT_GP_IMP1")) + Dim CAT_GP_IMP2 As String = records(RESULT.Columns.Get("CAT_GP_IMP2")) + Dim CAT_GP_PRECIO As String = records(RESULT.Columns.Get("CAT_GP_PRECIO")) + Dim CAT_GP_CLASIF As String = records(RESULT.Columns.Get("CAT_GP_CLASIF")) + Dim CAT_GP_STS As String = records(RESULT.Columns.Get("CAT_GP_STS")) + Dim CAT_GP_TIPO As String = records(RESULT.Columns.Get("CAT_GP_TIPO")) + Dim CAT_GP_SUBTIPO As String = records(RESULT.Columns.Get("CAT_GP_SUBTIPO")) + Dim CAT_GP_IMG() As Byte = records(RESULT.Columns.Get("CAT_GP_IMG")) + Dim CAT_GP_ALMACEN As Int = records(RESULT.Columns.Get("CAT_GP_ALMACEN")) + ' Dim CAT_GP_DEV As String = records(RESULT.Columns.Get("CAT_GP_DEV")) + Dim CAT_GP_TIPOPROD As Int = records(RESULT.Columns.Get("CAT_GP_TIPOPROD")) + Dim CAT_GP_INICIATIVA As Int = records(RESULT.Columns.Get("CAT_GP_INICIATIVA")) +' CAT_GP_INICIATIVA = 5 +' skmt.ExecNonQuery2("INSERT INTO CAT_GUNAPROD(CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG,CAT_GP_ALMACEN,CAT_GP_DEV) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)", Array As Object (CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG, CAT_GP_ALMACEN,CAT_GP_DEV)) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_GUNAPROD(CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG,CAT_GP_ALMACEN,CAT_GP_TIPOPROD,CAT_GP_INICIATIVA) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)", Array As Object (CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG, CAT_GP_ALMACEN,CAT_GP_TIPOPROD, CAT_GP_INICIATIVA)) + Next + Listo2=1 + If PB2.Progress = 0 Then + PB2.Progress = 30 + S_CP.Text = "CARGANDO" + ELSE If PB2.Progress = 30 Then + PB2.Progress = 60 + ELSE IF PB2.Progress = 60 Then + PB2.Progress = 100 + S_CP.Text = "LISTO" + End If + If Starter.marcaCel <> "Sony" Then ToastMessageShow("Productos Actualizados." , True) + If Listo1 =1 And Listo2 =1 And Listo3 = 1 And Listo4 = 1 Then + B4XPage_Appear + img2.Visible=False + EJECUTANDO=0 + End If + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "gunaprodp" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim CAT_GP_ID As String = records(RESULT.Columns.Get("CAT_GP_ID")) + Dim CAT_GP_NOMBRE As String = records(RESULT.Columns.Get("CAT_GP_NOMBRE")) + Dim CAT_GP_IMP1 As String = records(RESULT.Columns.Get("CAT_GP_IMP1")) + Dim CAT_GP_IMP2 As String = records(RESULT.Columns.Get("CAT_GP_IMP2")) + Dim CAT_GP_PRECIO As String = records(RESULT.Columns.Get("CAT_GP_PRECIO")) + Dim CAT_GP_CLASIF As String = records(RESULT.Columns.Get("CAT_GP_CLASIF")) + Dim CAT_GP_STS As String = records(RESULT.Columns.Get("CAT_GP_STS")) + Dim CAT_GP_TIPO As String = records(RESULT.Columns.Get("CAT_GP_TIPO")) + Dim CAT_GP_SUBTIPO As String = records(RESULT.Columns.Get("CAT_GP_SUBTIPO")) + Dim CAT_GP_IMG() As Byte = records(RESULT.Columns.Get("CAT_GP_IMG")) + Dim CAT_GP_ALMACEN As Int = records(RESULT.Columns.Get("CAT_GP_ALMACEN")) + Dim CAT_GP_TIPOPROD As Int = records(RESULT.Columns.Get("CAT_GP_TIPOPROD")) + CAT_GP_TIPOPROD = "5" + If CAT_GP_ID = "PAQUNI003" Then + CAT_GP_ALMACEN = 60 + End If + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_GUNAPROD(CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG,CAT_GP_ALMACEN,CAT_GP_TIPOPROD) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)", Array As Object (CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG, CAT_GP_ALMACEN,CAT_GP_TIPOPROD)) + Next + If PB2.Progress = 0 Then + PB2.Progress = 30 + S_CP.Text = "CARGANDO" + ELSE If PB2.Progress = 30 Then + PB2.Progress = 60 + ELSE IF PB2.Progress = 60 Then + PB2.Progress = 100 + S_CP.Text = "LISTO" + End If + If Starter.marcaCel <> "Sony" Then ToastMessageShow("Promociones Actualizados." , True) + Listo4=1 + If Listo1 =1 And Listo2 =1 And Listo3 = 1 And Listo4 = 1 Then + B4XPage_Appear + img2.Visible=False + EJECUTANDO=0 + Else If Listo4 = 1 And Listo3 = 1 And inve = 1 Then + B4XPage_Appear + img2.Visible=False + EJECUTANDO=0 + End If + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "gunaprodps" Then 'query tag + For Each records() As Object In RESULT.Rows + + Dim CAT_GP_ID As String = records(RESULT.Columns.Get("CAT_GP_ID")) + Dim CAT_GP_NOMBRE As String = records(RESULT.Columns.Get("CAT_GP_NOMBRE")) + Dim CAT_GP_IMP1 As String = records(RESULT.Columns.Get("CAT_GP_IMP1")) + Dim CAT_GP_IMP2 As String = records(RESULT.Columns.Get("CAT_GP_IMP2")) + Dim CAT_GP_PRECIO As String = records(RESULT.Columns.Get("CAT_GP_PRECIO")) + Dim CAT_GP_CLASIF As String = records(RESULT.Columns.Get("CAT_GP_CLASIF")) + Dim CAT_GP_STS As String = records(RESULT.Columns.Get("CAT_GP_STS")) + Dim CAT_GP_TIPO As String = records(RESULT.Columns.Get("CAT_GP_TIPO")) + Dim CAT_GP_SUBTIPO As String = records(RESULT.Columns.Get("CAT_GP_SUBTIPO")) + Dim CAT_GP_IMG() As Byte = records(RESULT.Columns.Get("CAT_GP_IMG")) + Dim CAT_GP_ALMACEN As Int = records(RESULT.Columns.Get("CAT_GP_ALMACEN")) + Dim CAT_GP_TIPOPROD As Int = records(RESULT.Columns.Get("CAT_GP_TIPOPROD")) + ' + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_GUNAPROD(CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG,CAT_GP_ALMACEN,CAT_GP_TIPOPROD) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)", Array As Object (CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG, CAT_GP_ALMACEN,CAT_GP_TIPOPROD)) + Next + If PB2.Progress = 0 Then + PB2.Progress = 30 + S_CP.Text = "CARGANDO" + Log("C4") + ELSE If PB2.Progress = 30 Then + PB2.Progress = 60 + ELSE IF PB2.Progress = 60 Then + PB2.Progress = 100 + S_CP.Text = "LISTO" + Log("3") + End If + If Starter.marcaCel <> "Sony" Then ToastMessageShow("Promociones especiales Actualizados." , True) + + Listo4=1 + If Listo1 =1 And Listo2 =1 And Listo3 = 1 And Listo4 = 1 Then + B4XPage_Appear + img2.Visible=False + EJECUTANDO=0 + Else If Listo4 = 1 And Listo3 = 1 And inve = 1 Then + B4XPage_Appear + img2.Visible=False + EJECUTANDO=0 + End If + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "detallepaq" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim CAT_DP_ALMACEN As String = records(RESULT.Columns.Get("CAT_DP_ALMACEN")) + Dim CAT_DP_ID As String = records(RESULT.Columns.Get("CAT_DP_ID")) + Dim CAT_DP_IDPROD As String = records(RESULT.Columns.Get("CAT_DP_IDPROD")) + Dim CAT_DP_TIPO As String = records(RESULT.Columns.Get("CAT_DP_TIPO")) + Dim CAT_DP_PZAS As String = records(RESULT.Columns.Get("CAT_DP_PZAS")) + Dim CAT_DP_USUARIO As String = records(RESULT.Columns.Get("CAT_DP_USUARIO")) + Dim CAT_DP_FECHA As String = records(RESULT.Columns.Get("CAT_DP_FECHA")) + Dim CAT_DP_REGALO As String = records(RESULT.Columns.Get("CAT_DP_REGALO")) + Dim CAT_DP_CLASIF As String = records(RESULT.Columns.Get("CAT_DP_CLASIF")) + Dim CAT_DP_PRECIO As String = records(RESULT.Columns.Get("CAT_DP_PRECIO")) + Dim CAT_DP_PRECIO_SIMPTOS As String = records(RESULT.Columns.Get("CAT_DP_PRECIO_SIMPTOS")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_DETALLES_PAQ(CAT_DP_ALMACEN,CAT_DP_ID,CAT_DP_IDPROD,CAT_DP_TIPO,CAT_DP_PZAS,CAT_DP_USUARIO,CAT_DP_FECHA,CAT_DP_REGALO,CAT_DP_CLASIF,CAT_DP_PRECIO,CAT_DP_PRECIO_SIMPTOS) VALUES (?,?,?,?,?,?,?,?,?,?,?)", Array As Object (CAT_DP_ALMACEN,CAT_DP_ID,CAT_DP_IDPROD,CAT_DP_TIPO,CAT_DP_PZAS,CAT_DP_USUARIO,CAT_DP_FECHA,CAT_DP_REGALO,CAT_DP_CLASIF,CAT_DP_PRECIO,CAT_DP_PRECIO_SIMPTOS)) + Next + If PB2.Progress = 0 Then + PB2.Progress = 30 + S_CP.Text = "CARGANDO" + ELSE If PB2.Progress = 30 Then + PB2.Progress = 60 + ELSE IF PB2.Progress = 60 Then + PB2.Progress = 100 + S_CP.Text = "LISTO" + End If + Listo3 =1 + If Listo1 =1 And Listo2 =1 And Listo3 = 1 And Listo4 = 1 Then + B4XPage_Appear + img2.Visible=False + EJECUTANDO=0 + Else If Listo4 = 1 And Listo3 = 1 And inve = 1 Then + B4XPage_Appear + img2.Visible=False + EJECUTANDO=0 + End If + + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "hist_datos" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim HVD_CLIENTE As String = records(RESULT.Columns.Get("HVD_CLIENTE")) + Dim HVD_PRONOMBRE As String = records(RESULT.Columns.Get("HVD_PRONOMBRE")) + Dim HVD_CANT As String = records(RESULT.Columns.Get("HVD_CANT")) + Dim HVD_COSTO_TOT As String = records(RESULT.Columns.Get("HVD_COSTO_TOT")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_VENTAS(HVD_CLIENTE,HVD_PRONOMBRE,HVD_CANT,HVD_COSTO_TOT) VALUES (?,?,?,?)", Array As Object (HVD_CLIENTE,HVD_PRONOMBRE,HVD_CANT,HVD_COSTO_TOT)) + Next + Listo3 =1 + If PB1.Progress = 0 Then + PB1.Progress = 30 + S_CH.Text = "CARGANDO" + ELSE If PB1.Progress = 30 Then + PB1.Progress = 60 + ELSE IF PB1.Progress = 60 Then + PB1.Progress = 100 + S_CH.Text = "LISTO" + End If + If Starter.marcaCel <> "Sony" Then ToastMessageShow("Venta historico Actualizado." , True) + If Listo1 =1 And Listo2 =1 And Listo3 = 1 And Listo4 = 1 Then + B4XPage_Appear + img2.Visible=False + EJECUTANDO=0 + End If + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "variables" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim Cat_Va_Descripcion As String = records(RESULT.Columns.Get("CAT_VA_DESCRIPCION")) + Dim Cat_Va_Valor As String = records(RESULT.Columns.Get("CAT_VA_VALOR")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object (Cat_Va_Descripcion, Cat_Va_Valor)) + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "CUESTIONARIO" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim Cat_Va_Valor As String = records(RESULT.Columns.Get("CAT_VALOR")) + B4XPages.MainPage.skmt.ExecNonQuery2("DELETE FROM CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As Object ("CUESTIONARIO")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("CUESTIONARIO", Cat_Va_Valor)) + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "valida_pedido" Then 'query tag + For Each records() As Object In RESULT.Rows + + Dim CUANTOSP As Int = records(RESULT.Columns.Get("CUANTOSP")) + + If cuantos_pedido < = CUANTOSP Then + ' ToastMessageShow("rojo val ok 1 cuantosp." , True) + datos_iguales = "ok" + S_CP.Text = "INFO OK" + Else + If Starter.marcaCel <> "Sony" Then ToastMessageShow("No se cargo bien la info P. Sync Nuevamente" & CUANTOSP & " " & cuantos_pedido, True) + S_CP.Text = "ENVIAR DATOS (K-2)" + End If + + + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "valida_pedidoc" Then 'query tag + For Each records() As Object In RESULT.Rows + + Dim CUANTOSC As Int = records(RESULT.Columns.Get("CUANTOSC")) + + If cuantos_pedidosc = CUANTOSC Then + ' ToastMessageShow("rojo val ok 1 cuantosp." , True) + datos_iguales = "ok" + Else + If Starter.marcaCel <> "Sony" Then ToastMessageShow("No se cargo bien la info C. Sync Nuevamente" & CUANTOSC & " " & cuantos_pedidosc, True) + End If + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "valida_noventa" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim CUANTOSN As Int = records(RESULT.Columns.Get("CUANTOSN")) + If cuantos_noventa = CUANTOSN Then + ' ToastMessageShow("rojo val ok 1 cuantosp." , True) + datos_iguales = "ok" + Else + If Starter.marcaCel <> "Sony" Then ToastMessageShow("No se cargo bien la info N. Sync Nuevamente" & CUANTOSN & " " & cuantos_noventa, True) + End If + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "ins_pedido" Then 'query tag + For Each records() As Object In RESULT.Rows + PB2.Progress = PB2.Progress + 5 + S_CP.Text = "SUBIENDO" + Next + PB2.Progress = 100 + S_CP.Text = "LISTO" + Log("5") + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "version" Then 'query tag + For Each records() As Object In RESULT.Rows + B4XPages.MainPage.skmt.ExecNonQuery("delete from VERSION") + Dim CAT_VE_VERSION As String = records(RESULT.Columns.Get("CAT_VE_VERSION")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO VERSION(NOVERSION) VALUES (?)", Array As Object (CAT_VE_VERSION)) + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "count_cli" Then 'query tag + For Each records() As Object In RESULT.Rows + COUNT_CLIE = records(RESULT.Columns.Get("COUNT_CLIE")) + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "ruta" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim VALIDO As String = records(RESULT.Columns.Get("VALIDO")) + If VALIDO = "OK" Then + cargar.Visible = True + Subir.Visible = True + inv.Visible = True + connecta.Visible = False + If conn = "1" Then + ToastMessageShow("Existe Conexión con el Servidor." , True) + End If + Else + cargar.Visible = False + Subir.Visible = False + inv.Visible = False + connecta.Visible = False + ToastMessageShow("Ruta invalida." , True) + End If + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "usuario" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim name2 As String = records(RESULT.Columns.Get("VALIDO")) + Next + If name2 = "OK" Then + PASO = 1 + End If + P1.Visible = False + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "fecha" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim FECHA_HOY As String = records(RESULT.Columns.Get("FECHA")) + B4XPages.MainPage.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("FECHA")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("FECHA",FECHA_HOY)) + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "folio" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim FOLIO As String = records(RESULT.Columns.Get("FOLIO")) + B4XPages.MainPage.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("FOLIO")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("FOLIO",FOLIO)) + Next + End If + End If + End If + Job.Release +End Sub + +Private Sub B4XPage_CloseRequest As ResumableSub + 'Return True to close, False to cancel + If SCROLL_RESDIA.Visible Then + SCROLL_RESDIA.Visible = False + B_OK_RES_Click + Return False + Else + Return True + End If +End Sub + +Sub connecta_Click + connecta1 = connecta1 + 1 + imei = p.GetDeviceId + conn = "1" + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "select_version_GV2" + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "version") + + ' Cuando nos conectamos verificamos que el usuario guardado en BD sea VALIDO. + c=B4XPages.MainPage.skmt.ExecQuery("select USUARIO, PASS from usuarioa") + c.Position=0 + If c.RowCount > 0 And c.GetString("USUARIO") <> "KMTS1" Then + Private usrT As String = c.GetString("USUARIO") + Private passT As String = c.GetString("PASS") + cmd.Initialize + cmd.Name = "select_usuario_guna_GV2_1" + cmd.Parameters = Array As Object(usrT, passT) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "usuarioA") + End If + c.Close + + If imei = "" Then + cmd.Initialize + cmd.Name = "select_ruta_GV2_5" + cmd.Parameters = Array As Object(ALMACEN,e_ruta.text,imei) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "ruta") + Else + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "select_ruta_GV2_5" + cmd.Parameters = Array As Object(ALMACEN,e_ruta.text,imei) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "ruta") + End If + + If e_ruta.Text = "KMTS1" Then + cargar.Visible = True + Subir.Visible = True + e_ruta.Text = "" + End If + + If e_ruta.Text = "BERNA1" Then + cargar.Visible = True + Subir.Visible = True + e_ruta.Text = "" + End If + + ToastMessageShow("Validando Conexión." , True) + + If connecta1 / 2 = 1 Then + 'SERVER = "http://177.244.63.54:1782" + 'SERVER = "http://keymon.com.mx:1782" + 'SERVER = "http://201.99.139.28:1782" +' B4XPages.MainPage.SERVER = "http://187.189.244.154:1782" +' SERVER = "http://10.0.0.205:1782" + B4XPages.MainPage.reqManager.Initialize(Me, B4XPages.MainPage.SERVER) + Else + 'SERVER = "http://keymon.com.mx:1782" + 'SERVER = "http://201.99.139.28:1782" + 'SERVER = "http://177.244.63.54:1782" +' B4XPages.MainPage.SERVER = "http://187.189.244.154:1782" +' SERVER = "http://10.0.0.205:1782" + B4XPages.MainPage.reqManager.Initialize(Me, B4XPages.MainPage.SERVER) + End If +End Sub + +Sub BUSCA_Click + B4XPages.ShowPage("TicketsDia") +End Sub + +Sub b_mapa_Click + Log("mapClic") + B4XPages.GetPage("Mapas") +End Sub + +Sub e_ruta_EnterPressed + If e_ruta.Text = "FIN DIA" Then + RES = Msgbox2("Seguro que desa hacer el cierre todos los datos se borraran?","Cierre", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'ignore + If RES = DialogResponse.POSITIVE Then + e_ruta.Text = "" + B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente") + B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido") + B4XPages.MainPage.skmt.ExecNonQuery("delete from noventa") + B4XPages.MainPage.skmt.ExecNonQuery("delete from clie_act") + B4XPages.MainPage.skmt.ExecNonQuery("delete from kmt_info") + B4XPages.MainPage.skmt.ExecNonQuery("delete from cat_gunaprod") + B4XPages.MainPage.skmt.ExecNonQuery("delete from CAT_DETALLES_PAQ") + B4XPages.MainPage.skmt.ExecNonQuery("delete from HIST_VENTAS") + B4XPages.MainPage.skmt.ExecNonQuery("delete from HIST_VERIFICACION") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM HIST_ENCUESTA") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM HIST_STAY_OUT") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM HIST_GPS") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM HIST_FACE") + B4XPages.MainPage.skmt.ExecNonQuery("INSERT INTO HIST_STAY_OUT(HSO_INI, HSO_FIN) VALUES (0,0)") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM HIST_CODIGO_BARRAS") + B4XPage_Appear + End If + End If + If e_ruta.Text = "IWL" Then + ' trabajar.Visible = False + NUEVO.Visible =False + BUSCA.Visible=False + connecta.Visible=False + img3.Visible =True + Resumen.Visible= False + End If + If e_ruta.Text = "SUPLENCIA" Then + E_RUTA2.Visible = True + ImageView9.Visible = True + End If +End Sub + +Sub inv_Click + img2.Visible =True + EJECUTANDO = 1 + inve = 1 + B4XPages.MainPage.skmt.ExecNonQuery("delete from cat_gunaprod") + B4XPages.MainPage.skmt.ExecNonQuery("delete from CAT_DETALLES_PAQ") + c=B4XPages.MainPage.skmt.ExecQuery("select usuario from usuarioa") + c.Position = 0 + usuario = c.GetString("USUARIO") + c.Close + cmd.Initialize + cmd.Name = "select_cat_gunaprod_GV2" + cmd.Parameters = Array As Object(ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "gunaprod") + cmd.Initialize + cmd.Name = "select_cat_paquetes_GV2" + cmd.Parameters = Array As Object(ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "gunaprodp") + + cmd.Initialize + cmd.Name = "select_cat_detallepa_GV2" + cmd.Parameters = Array As Object(ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "detallepaq") + + cargar.Visible = False + Subir.Visible = False + connecta.Visible = True + inv.Visible = False + ToastMessageShow("Se Actualizaran los datos, Este proceso podria tardar hasta un minuto, gracias" , True) +End Sub + +Sub t1_tick + cmd.Initialize + cmd.Name = "select_cuantos_pedido_GV2" + cmd.Parameters = Array As Object(ALMACEN,l_ruta.text) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "valida_pedido") + + cmd.Initialize + cmd.Name = "select_cuantos_noventa_GV2" + cmd.Parameters = Array As Object(ALMACEN,l_ruta.text) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "valida_noventa") + + cmd.Initialize + cmd.Name = "select_cuantos_pedidoc_GV2" + cmd.Parameters = Array As Object(ALMACEN,l_ruta.text) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "valida_pedidoc") + + If PB2.Progress = 0 Then + S_CP.Text = "ENVIAR DATOS (K-1)" + End If + img2.Visible=False + t1.Enabled = False +End Sub + +Sub B_OK_PAS_Click + If CARGA = "SUBIR" And S_CP.Text = "INFO OK" Then + P1.Visible = False + Btn_Ubicar.Visible=True + 'trabajar.Visible = True + NUEVO.Visible =True + BUSCA.Visible=True + connecta.Visible=True + Resumen.Visible= True + img2.Visible=False + Subs.panelVisible(p_principal, 0, 0) + Else If CARGA = "SUBIR" And S_CP.Text = "ERROR" Then + Msgbox("Tiene que subir de nuevo la información","Atención") 'ignore + P1.Visible = False + ' trabajar.Visible = True + NUEVO.Visible =True + BUSCA.Visible=True + connecta.Visible=True + Resumen.Visible= True + img2.Visible=False + Subs.panelVisible(p_principal, 0, 0) + Else if CARGA = "SUBIR" And S_CP.Text <> "INFO OK" Then + RES = Msgbox2("Seguro que desa abortar el proceso","Cierre", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'ignore + If RES = DialogResponse.POSITIVE Then + P1.Visible = False +' trabajar.Visible = True + NUEVO.Visible =True + BUSCA.Visible=True + connecta.Visible=True + Resumen.Visible= True + img2.Visible=False + Subs.panelVisible(p_principal, 0, 0) + ExitApplication + End If + End If + If CARGA = "CARGAR" And S_CP.Text = "LISTO" And S_CC.Text = "LISTO" And S_CH.Text = "LISTO" Then + P1.Visible = False + Btn_Ubicar.Visible=True + 'trabajar.Visible = True + NUEVO.Visible =True + BUSCA.Visible=True + connecta.Visible=True + Resumen.Visible= True + img2.Visible=False + Subs.panelVisible(p_principal, 0, 0) + Else if CARGA = "CARGAR" And (S_CP.Text <> "LISTO" Or S_CC.Text <> "LISTO" Or S_CH.Text <> "LISTO") Then + RES = Msgbox2("Seguro que desa abortar el proceso","Cierre", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'ignore + If RES = DialogResponse.POSITIVE Then + P1.Visible = False +' trabajar.Visible = True + NUEVO.Visible =True + BUSCA.Visible=True + connecta.Visible=True + Resumen.Visible= True + img2.Visible=False + Subs.panelVisible(p_principal, 0, 0) + B4XPages.MainPage.skmt.ExecNonQuery("delete from kmt_info") + B4XPages.MainPage.skmt.ExecNonQuery("delete from cod_result") + B4XPages.MainPage.skmt.ExecNonQuery("delete from hist_gest") + B4XPages.MainPage.skmt.ExecNonQuery("delete from cat_gunaprod") + B4XPages.MainPage.skmt.ExecNonQuery("delete from CAT_DETALLES_PAQ") + B4XPages.MainPage.skmt.ExecNonQuery("delete from telefonos") + B4XPages.MainPage.skmt.ExecNonQuery("delete from HIST_VENTAS") + B4XPages.MainPage.skmt.ExecNonQuery("delete from HIST_PROMOS") + B4XPages.MainPage.skmt.ExecNonQuery("delete from HIST_CLIENTE_CANT_PROMOS") + B4XPages.MainPage.skmt.ExecNonQuery("delete from PROMOS_COMP") + B4XPages.MainPage.skmt.ExecNonQuery("delete from CAT_VERIFICACION") + ExitApplication + End If + End If +End Sub + +Sub NUEVO_Click + B4XPages.ShowPage("NuevoCliente") +End Sub + +Sub B_OK_RES_Click + ' trabajar.Visible = True + NUEVO.Visible =True + BUSCA.Visible=True + connecta.Visible=True + Resumen.Visible= True + P_RESUMEN.Visible=False + Panel4.Visible = False + SCROLL_RESDIA.Visible = False + Btn_Ubicar.Visible=True + p_principal.Visible = True +End Sub + +Sub Resumen_Click + P_RESUMEN.Visible = True + +' NUEVO.Visible =False +' BUSCA.Visible=False +' connecta.Visible=False +' Subir.Visible=False +' cargar.Visible=False +' Resumen.Visible= False +End Sub + +Sub P_RESUMEN_click + +End Sub + + +Sub CARGA_Click + B4XPages.ShowPage("Productos") +End Sub + +Sub resdia_Click + p_principal.Visible = False + Btn_Ubicar.Visible=False + SCROLL_RESDIA.Visible = True + SCROLL_RESDIA.Panel.LoadLayout("RESDIA") + SCROLL_RESDIA.Panel.Height = Panel4.Height + Panel4.Visible = True + + NUEVO.Visible =False + BUSCA.Visible=False + connecta.Visible=False + Subir.Visible=False + cargar.Visible=False + Resumen.Visible= False + + d=B4XPages.MainPage.skmt.ExecQuery2("select COUNT(*) AS CUANTOS FROM HIST_ENCUESTA WHERE HE_TIPO = ?", Array As String("TELEFONO")) + d.Position = 0 + l_encuesta.Text = d.GetString("CUANTOS") + d.Close + + L_MARCAS.CLEAR + d=B4XPages.MainPage.skmt.ExecQuery2("select distinct HE_CLIE AS CLIENTE FROM HIST_ENCUESTA WHERE HE_TIPO = ?", Array As String("TELEFONO")) + If D.RowCount>0 Then + For i=0 To D.RowCount -1 + D.Position=i + c=B4XPages.MainPage.skmt.ExecQuery2("Select HE_RES from HIST_ENCUESTA where HE_CLIE = ? AND HE_TIPO = ?", Array As String(d.GetString("CLIENTE"), "TELEFONO")) + c.Position = 0 + Dim label1 As Label + label1 = L_MARCAS.TwoLinesLayout.Label + label1.TextSize = 13 + label1.TextColor = Colors.Black + Dim label2 As Label + label2 = L_MARCAS.TwoLinesLayout.SecondLabel + label2.TextSize = 13 + label2.TextColor = Colors.Black + L_MARCAS.AddTwoLines(d.GetString("CLIENTE"),"TELEFONO :" & c.GetString("HE_RES") ) + c.Close + Next + End If + d.Close + + c=B4XPages.MainPage.skmt.ExecQuery2("Select sum(PE_COSTO_TOT) As MONTO_DIA from pedido where PE_CLIENTE <> 0 and pe_proid in (Select CAT_GP_ID from cat_gunaprod where CAT_GP_TIPO = ? )", Array As String("RTEC")) + c.Position = 0 + l_monto_k.Text = c.GetString("MONTO_DIA") + If l_monto_k.Text = "null" Then + l_monto_k.Text = "0" + End If + c.Close + + c=B4XPages.MainPage.skmt.ExecQuery2("Select sum(PE_COSTO_TOT) As MONTO_DIA from pedido where PE_CLIENTE <> 0 and pe_proid in (Select CAT_GP_ID from cat_gunaprod where CAT_GP_TIPO = ? )", Array As String("PING")) + c.Position = 0 + l_monto_kp.Text = c.GetString("MONTO_DIA") + If l_monto_kp.Text = "null" Then + l_monto_kp.Text = "0" + End If + c.Close + +' c=skmt.ExecQuery2("Select sum(PE_COSTO_TOT) As MONTO_DIA from pedido where PE_CLIENTE <> 0 and pe_proid in (Select CAT_GP_ID from cat_gunaprod where CAT_GP_TIPO = ? )", Array As String("SALTY SNACKS")) +' c.Position = 0 +' l_monto_ks.Text = c.GetString("MONTO_DIA") +' If l_monto_ks.Text = "null" Then +' l_monto_ks.Text = "0" +' End If + ' +' c.Close + c=B4XPages.MainPage.skmt.ExecQuery("Select sum(PE_COSTO_TOT) As MONTO_DIA from pedido where PE_CLIENTE <> 0 ") + c.Position = 0 + l_monto_ks.Text = c.GetString("MONTO_DIA") + If l_monto_ks.Text = "null" Then + l_monto_ks.Text = "0" + End If + c.Close + Dim cuantos_obj As String + c=B4XPages.MainPage.skmt.ExecQuery("Select count(*) AS TOTAL from HIST_MARCAS_CUOTAS ") + c.Position = 0 + cuantos_obj = c.GetString("TOTAL") + c.Close + + If cuantos_obj > 0 Then + c=B4XPages.MainPage.skmt.ExecQuery("Select SUM( HMC_TOTAL) AS TOTAL from HIST_MARCAS_CUOTAS ") + c.Position = 0 + L_NES.Text = c.GetString("TOTAL") + c.Close + End If + L_REAL.Text = l_monto_ks.Text + L_ALCANCE.Text = Round2((L_NES.Text / L_REAL.Text + 1),2) + L_VPLAN.Text = l_porvisitar.Text + L_VREAL.Text = L_CUANTOST.text + L_EFEC_VIS.Text = Round2(L_VREAL.text / L_VPLAN.Text,2) + L_VISITCC.Text = l_cuantosc.text + L_EFEC_PV.Text = Round2(L_VISITCC.Text / L_VREAL.Text,2) + L_EFEC_PURA.Text = Round2(L_VISITCC.Text / L_VPLAN.Text,2) + L_LIN_TICK.Text = LPT + If l_monto_ks.Text <> "0" Then + + c=B4XPages.MainPage.skmt.ExecQuery2("Select COUNT(DISTINCT(PE_CLIENTE)) AS CUANTOS FROM PEDIDO WHERE PE_CEDIS = ? ", Array As String(ALMACEN)) + c.Position = 0 + L_CTE_PROMO.Text = c.GetString("CUANTOS") + c.Close + d=B4XPages.MainPage.skmt.ExecQuery2("Select sum(PE_COSTO_TOT) AS MONTO_DIA FROM PEDIDO WHERE PE_PROID IN (select CAT_GP_ID from cat_gunaprod where CAT_GP_TIPOPROD = ?) ", Array As String("PRIORITARIO")) + d.Position = 0 + '/////////////////////////////////////////////////////////////////////////////// + '//////////////////////////// ULTIMA LINEA ANTES DEL ERROR ////////////////// + '////////// java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference + ' + '/// Al parecer d.GetString("MONTO_DIA") regresa null y la funcion numberFormat truena + '///////////////////////////////////////////////////////////////////////////////// + Log("|"&d.GetString("MONTO_DIA")&"|") + 'L_PRIO.Text = NumberFormat(d.GetString("MONTO_DIA"),0,2) + L_PRIO.Text = d.GetString("MONTO_DIA") + d.Close + + d=B4XPages.MainPage.skmt.ExecQuery2("Select sum(PE_COSTO_TOT) AS MONTO_DIA FROM PEDIDO WHERE PE_PROID IN (select CAT_GP_ID from cat_gunaprod where CAT_GP_TIPOPROD = ?) ", Array As String("ESTRATEGICO")) + d.Position = 0 + L_SECUND.Text =d.GetString("MONTO_DIA") + d.Close + + d=B4XPages.MainPage.skmt.ExecQuery2("Select sum(PE_COSTO_TOT) AS MONTO_DIA FROM PEDIDO WHERE PE_PROID IN (select CAT_GP_ID from cat_gunaprod where CAT_GP_TIPOPROD = ?) ", Array As String("COMPLEMETARIO")) + d.Position = 0 + L_COMP.Text =d.GetString("MONTO_DIA") + d.Close + Else + L_PRIO.Text = "0" + L_SECUND.Text = "0" + L_COMP.Text = "0" + End If + + c=B4XPages.MainPage.skmt.ExecQuery("Select COUNT(*) AS CUANTOS FROM PEDIDO WHERE PE_CEDIS = PE_PROID ") + c.Position = 0 + If c.GetString("CUANTOS") > 0 Then + d=B4XPages.MainPage.skmt.ExecQuery("Select sum(pe_cant) AS CUANTOS FROM PEDIDO WHERE PE_CEDIS = PE_PROID ") + d.Position = 0 + L_CTE_PROMO.Text = d.GetString("CUANTOS") + d.Close + L_REDEN_PROMO.TEXT = Round2(L_VISITCC.Text / L_CTE_PROMO.Text,2) + Else + L_CTE_PROMO.Text = 0 + L_REDEN_PROMO.Text = 0 + End If + c.Close + d=B4XPages.MainPage.skmt.ExecQuery("Select COUNT(*) AS CUANTOS FROM PEDIDO ") + d.Position = 0 + L_LIN_TICK.Text = Round2(d.GetString("CUANTOS") / L_VISITCC.Text,2) + d.Close + + d=B4XPages.MainPage.skmt.ExecQuery("Select count(*) as CUANTOS from HIST_CUOTAS ") + d.Position = 0 + If d.GetString("CUANTOS") > 0 Then + ' c=skmt.ExecQuery("Select HC_CUOTA1,HC_CUOTA2,HC_CUOTA3 from HIST_CUOTAS ") + ' c.Position = 0 + ' l_monto_c1.Text = Round( c.GetString("HC_CUOTA1") / 6) + ' l_monto_c2.Text = Round(c.GetString("HC_CUOTA2") / 6) + ' l_monto_c3.Text = Round(c.GetString("HC_CUOTA3") / 6) + ' c.Close + Else + l_monto_c1.Text = 4000 + l_monto_c2.Text = 2000 + l_monto_c3.Text = 1000 + End If + d.Close +End Sub + +Sub hacer_ped_Click + B4XPages.ShowPage("Clientes") +End Sub + +Sub nvo_cliente_Click + B4XPages.ShowPage("NuevoCliente") +End Sub + +Sub tickets_dia_Click + B4XPages.ShowPage("TicketsDia") +End Sub + +Sub GPS_LocationChanged (Location1 As Location) + +End Sub + +Sub Btn_Ubicar_Click + B4XPages.ShowPage("MapaRutas") +End Sub + +'''''''''''''''''''''''''''''''''''' VALIDAR CARACTERES +Sub e_ruta_TextChanged (Old As String, New As String) + Dim validChars As String ="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 " +' Log("Antes: " & Old & " | " & New) + If Old <> "KMTS1" Then +' Log("Desp: " & Old & " | " & New) + Try + If validChars.Contains(New.SubString(New.Length-1)) = False Then + e_ruta.Text = New.SubString2(0, New.Length-1) + e_ruta.SelectionStart = e_ruta.Text.Length + End If + Catch + Log(LastException) + End Try + End If +End Sub + +Sub B_COMM_Click + Btn_Ubicar.Visible=False + SCROLL_RESDIA.Visible = True + SCROLL_RESDIA.Panel.LoadLayout("COMIS") + SCROLL_RESDIA.Panel.Height = Panel_C.Height + Panel4.Visible = False + Panel_C.Visible = True + +' trabajar.Visible = False + NUEVO.Visible =False + BUSCA.Visible=False + connecta.Visible=False + Subir.Visible=False + cargar.Visible=False + Resumen.Visible= False +' + If l_ruta.Text <> 0 Then + c=B4XPages.MainPage.skmt.ExecQuery("Select HCM_TOTAL_V , HCM_TOTAL_VIVE , HCM_TOTAL_GUNA , HCM_TOTAL_BEB from HIST_COMISIONES_MOVIL ") + c.Position = 0 + L_TOTAL_BA.Text = c.GetString("HCM_TOTAL_BEB") + L_TOTAL_GUNA.Text = c.GetString("HCM_TOTAL_GUNA") + L_TOTAL_MM.Text = c.GetString("HCM_TOTAL_V") + L_TOTAL_VIVE.Text = c.GetString("HCM_TOTAL_VIVE") + c.Close + L_TOTAL_COMIS.Text = 0 + Else + L_TOTAL_BA.Text = 0 + L_TOTAL_GUNA.Text = 0 + L_TOTAL_MM.Text = 0 + L_TOTAL_VIVE.Text = 0 + L_TOTAL_COMIS.Text = 0 + End If +End Sub + +Sub B_OK_COMISS_Click + NUEVO.Visible =True + BUSCA.Visible=True + connecta.Visible=True + Resumen.Visible= True + P_RESUMEN.Visible=False + Panel_C.Visible = False + SCROLL_RESDIA.Visible = False + Btn_Ubicar.Visible=True +End Sub + + +Sub B_MARCAS_Click + + SCROLL_RESDIA.Visible = False + Panel5.Visible = True + pnlTitle.Visible = False + pnlTitle.SetLayoutAnimated(0, 0, 0, CLV1.AsView.Width, TitleHeight + DividerHeight) + pnlTitle.LoadLayout("CellTitle") + c=B4XPages.MainPage.skmt.ExecQuery("Select CAT_GP_CLASIF, SUM(TOTAL) AS TOTAL FROM TOTAL_MARCAS GROUP BY CAT_GP_CLASIF") + CLV1.Clear + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + AddTitle(c.GetString("CAT_GP_CLASIF")) + If c.GetString("CAT_GP_CLASIF") = "PROMOS" Then + d=B4XPages.MainPage.skmt.ExecQuery("SELECT SUM(PE_CANT) AS CUANTOS FROM PEDIDO WHERE PE_CEDIS = PE_PROID") + d.Position=0 + CLV1.AddTextItem("CANTIDAD DE PROMOS = " & d.GetString("CUANTOS"),"1") + d.Close + Else + f=B4XPages.MainPage.skmt.ExecQuery2("select COUNT(*) AS CUANTOS from HIST_MARCAS_CUOTAS where HMC_MARCA = ?", Array As String(c.GetString("CAT_GP_CLASIF"))) + f.Position=0 + If f.GetString("CUANTOS") > 0 Then + e=B4XPages.MainPage.skmt.ExecQuery2("select HMC_MARCA, HMC_TOTAL from HIST_MARCAS_CUOTAS where HMC_MARCA = ?", Array As String(c.GetString("CAT_GP_CLASIF"))) + e.Position=0 + d=B4XPages.MainPage.skmt.ExecQuery2("SELECT count(distinct(PE_CLIENTE)) AS CUANTOS FROM PEDIDO WHERE PE_PROID in (select CAT_GP_ID from cat_gunaprod WHERE CAT_GP_CLASIF =?)", Array As String (c.GetString("CAT_GP_CLASIF"))) + d.Position=0 + CLV1.AddTextItem("TOTAL PREVENTA = $" & c.GetString("TOTAL"),"1") + CLV1.AddTextItem("M E T A = $" & e.GetString("HMC_TOTAL"),"1") + CLV1.AddTextItem("FALTA = $" & (e.GetString("HMC_TOTAL") - c.GetString("TOTAL")) ,"1") + CLV1.AddTextItem("CLIENTES = " & d.GetString("CUANTOS"),"1") + d.Close + e.Close + Else + d=B4XPages.MainPage.skmt.ExecQuery2("SELECT count(distinct(pe_cliente)) AS CUANTOS FROM PEDIDO WHERE PE_PROID in (select CAT_GP_ID from cat_gunaprod WHERE CAT_GP_CLASIF =?)", Array As String (c.GetString("CAT_GP_CLASIF"))) + d.Position=0 + CLV1.AddTextItem("TOTAL PREVENTA = $" & c.GetString("TOTAL"),"1") + CLV1.AddTextItem("M E T A = $" & "1000","1") + CLV1.AddTextItem("FALTA = $" & (1000 - c.GetString("TOTAL")) ,"1") + CLV1.AddTextItem("CLIENTES = " & d.GetString("CUANTOS"),"1") + d.Close + End If + f.Close + End If + Next + End If + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("Select HMC_MARCA, HMC_TOTAL from HIST_MARCAS_CUOTAS where HMC_MARCA not in (SELECT CAT_GP_CLASIF FROM TOTAL_MARCAS )") + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + AddTitle(c.GetString("HMC_MARCA")) + CLV1.AddTextItem("TOTAL PREVENTA = $ 0.00","1") + CLV1.AddTextItem("M E T A = $" & C.GetString("HMC_TOTAL"),"1") + CLV1.AddTextItem("CLIENTES = 0","1") + Next + End If + c.Close +End Sub + +Sub AddTitle (Title As String) + Dim p_MARCAS As B4XView = xui.CreatePanel("") + p_MARCAS.SetLayoutAnimated(0, 0, 0, CLV1.AsView.Width, TitleHeight) + p_MARCAS.LoadLayout("CellTitle") + lblTitle.Text = Title + Dim td As TitleData + td.Title = Title + CLV1.Add(p_MARCAS, td) +End Sub + +Sub B_OK_PANEL5_Click + Panel5.Visible = False + NUEVO.Visible =True + BUSCA.Visible=True + connecta.Visible=True + Resumen.Visible= True + P_RESUMEN.Visible=False + Panel4.Visible = False + SCROLL_RESDIA.Visible = False + Btn_Ubicar.Visible=True + p_principal.Visible = True + +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. \ No newline at end of file diff --git a/B4A/B4XProductos.bas b/B4A/B4XProductos.bas new file mode 100644 index 0000000..36fa8d1 --- /dev/null +++ b/B4A/B4XProductos.bas @@ -0,0 +1,24 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11.5 +@EndOfDesignText@ +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore +End Sub + +'You can add more parameters here. +Public Sub Initialize As Object + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + Root = Root1 + 'load the layout to Root + +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. \ No newline at end of file diff --git a/B4A/B4XTicketsDia.bas b/B4A/B4XTicketsDia.bas new file mode 100644 index 0000000..36fa8d1 --- /dev/null +++ b/B4A/B4XTicketsDia.bas @@ -0,0 +1,24 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11.5 +@EndOfDesignText@ +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore +End Sub + +'You can add more parameters here. +Public Sub Initialize As Object + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + Root = Root1 + 'load the layout to Root + +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. \ No newline at end of file diff --git a/B4A/B4XUpdateAvailable.bas b/B4A/B4XUpdateAvailable.bas new file mode 100644 index 0000000..36fa8d1 --- /dev/null +++ b/B4A/B4XUpdateAvailable.bas @@ -0,0 +1,24 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11.5 +@EndOfDesignText@ +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore +End Sub + +'You can add more parameters here. +Public Sub Initialize As Object + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + Root = Root1 + 'load the layout to Root + +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. \ No newline at end of file diff --git a/B4A/BatteryUtilities.bas b/B4A/BatteryUtilities.bas new file mode 100644 index 0000000..53902d5 --- /dev/null +++ b/B4A/BatteryUtilities.bas @@ -0,0 +1,126 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=9.5 +@EndOfDesignText@ +'Class module +Sub Class_Globals + Private nativeMe As JavaObject + +End Sub +'Initializes the object. +Public Sub Initialize + nativeMe = Me +End Sub +'Return information about the battery status. It returns the following 11 values in an integer Array: +'EXTRA_LEVEL = current battery level, from 0 To EXTRA_SCALE. +'EXTRA_SCALE = the maximum battery level possible. +'EXTRA_HEALTH = the current health constant. +'EXTRA_ICON_SMALL = the resource ID of a small status bar icon indicating the current battery state. +'EXTRA_PLUGGED = whether the device is plugged into a Power source; 0 means it is on battery, other constants are different types of Power sources. +'EXTRA_STATUS = the current status constant. +'EXTRA_TEMPERATURE = the current battery temperature. +'EXTRA_VOLTAGE = the current battery voltage level. +'A value indicating if the battery is being charged or fully charged (If neither it returns 0 Else it returns 1) +'A value indicating if it is charging via USB (0 = Not USB, 2 = USB) +'A value indicating if it is charging via AC (0 = Not AC, 1 = AC) +Public Sub getBatteryInformation () As Int() + + Dim batteryInfo(11) As Int + batteryInfo = nativeMe.RunMethod("getBatteryInformation",Null) + Return batteryInfo + +End Sub + +Public Sub getBatteryTechnolgy() As String + + Dim batterytech As String + batterytech = nativeMe.RunMethod("getBatteryTechnology",Null) + Return batterytech + +End Sub + + + +#If Java + +import android.os.BatteryManager; +import android.os.Bundle; +import android.app.Activity; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; + + public int[] getBatteryInformation() { + + int[] mybat = new int[11]; + + Intent batteryIntent = ba.context.getApplicationContext().registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); + + int level = batteryIntent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); + mybat[0] = level; + int scale = batteryIntent.getIntExtra(BatteryManager.EXTRA_SCALE, -1); + mybat[1] = scale; + int health = batteryIntent.getIntExtra(BatteryManager.EXTRA_HEALTH,-1); + mybat[2] = health; + int icon_small = batteryIntent.getIntExtra(BatteryManager.EXTRA_ICON_SMALL,-1); + mybat[3] = icon_small; + int plugged = batteryIntent.getIntExtra(BatteryManager.EXTRA_PLUGGED,-1); + mybat[4] = plugged; +// boolean present = batteryIntent.getExtras().getBoolean(BatteryManager.EXTRA_PRESENT); + int status = batteryIntent.getIntExtra(BatteryManager.EXTRA_STATUS,-1); + mybat[5] = status; +// String technology = batteryIntent.getExtras().getString(BatteryManager.EXTRA_TECHNOLOGY); +// BA.Log("Technology = " + technology); + int temperature = batteryIntent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE,-1); + mybat[6] = temperature; + int voltage = batteryIntent.getIntExtra(BatteryManager.EXTRA_VOLTAGE,-1); + mybat[7] = voltage; +// int ac = batteryIntent.getIntExtra("plugged",BatteryManager.BATTERY_PLUGGED_AC); +// mybat[8] = ac; +// int usb = batteryIntent.getIntExtra("plugged",BatteryManager.BATTERY_PLUGGED_USB); +// mybat[9] = usb; + + boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING || + status == BatteryManager.BATTERY_STATUS_FULL; + mybat[8] = 0; + if (isCharging == true) { + mybat[8] = 1; + } + + // How are we charging? + mybat[9] = 0; + mybat[10] = 0; + int chargePlug = batteryIntent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1); + boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB; + if (usbCharge == true) { + mybat[9] = 2; + } + + boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC; + if (acCharge == true) { + mybat[10] = 1; + } + + return mybat; + } + + + public String getBatteryTechnology() { + + Intent batteryIntent = ba.context.getApplicationContext().registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); + + String technology = batteryIntent.getExtras().getString(BatteryManager.EXTRA_TECHNOLOGY); + + return technology; + } + + + + + + + +#End If \ No newline at end of file diff --git a/B4A/C_Cliente.bas b/B4A/C_Cliente.bas new file mode 100644 index 0000000..5fdfb5d --- /dev/null +++ b/B4A/C_Cliente.bas @@ -0,0 +1,3452 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11.5 +@EndOfDesignText@ +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore + Private p_cliente As Panel + + Dim g As GPS + Dim ruta As String + Dim skmt As SQL + Dim clie_id As String + Dim sDate,sTime As String + Dim usuario As String + Dim total_cliente As String + Dim m_lat, m_lon As String + Dim btAdmin As BluetoothAdmin + Dim cmp20 As Serial + Dim printer As TextWriter + Dim PairedDevices As Map + Dim L As List + Dim TAMANO As Int + Dim ESPACIO As Int + Dim BLANCO As String + Dim cuenta As String + Dim tipo_venta As String = "VENTA" + Dim MAC_IMPRESORA As String + Dim btAdmin As BluetoothAdmin + Dim Printer1 As EscPosPrinter + + Dim c As Cursor + Dim s As Cursor + Dim DD As Cursor + Dim c2 As Cursor + Dim ListView1 As ListView + Dim la_cuenta As Label + Dim La_nombre As Label + Dim la_Calle As Label + Dim la_numero As Label + Dim la_nint As Label + Dim la_edo As Label + Dim la_pob As Label + Dim la_col As Label + Dim la_cp As Label + Dim la_zona As Label + Dim gest As Button + Dim la_saldotot As Label + Dim la_saldooper As Label + + Dim Tels As Button + Dim Label10 As Label + Dim Label11 As Label + + Dim Tar As Button + + Dim la_comm As Label + Dim la_actdte As Label + Dim la_usuario As Label + Dim la_resultado As Label + Dim l_entre1 As Label + Dim l_entre2 As Label + Dim l_atiende As Label + Dim l_atiende2 As Label + Dim DATOS As Button + Dim Guardar As Button + Dim NUEVO As Button + ' Dim lat_gps, lon_gps As String + + Dim l_total As Label + Dim c2 As Cursor + Dim S2 As Cursor + Private s As Cursor + Dim res As String + Private HIST As Button + Private MONTO_COMPRA As String + Private META As String + Private META2 As String + Private VERIFICA As String + Private L_QR As Label + Private BT_QR As Button + 'Private qr As QRCode + Dim CODIGO As String + + Private b_mapa As Button + Dim CUANTOS As String + Private B_IMP As Button + Dim Toggla As Toggle + Dim tgl As Toggle + Private Panel1 As Panel + Private I_COMPRA As EditText + Private B_GUARDA_C As Button + Private b_venta As Button + Dim ALMACEN As String + Dim LA_GPS As Label + Private B_E_NEXT As Button + Private E_RES_E As EditText + Private t_tenc As Label + Private Panel2 As Panel + Private CONTADOR_E As String + Private HR_RES1 As String + Private HR_RES2 As String + Private HR_RES3 As String + Private EXISTE As String + Private TELEFONO As String + + + Private RB1 As RadioButton + Private RB2 As RadioButton + Private RB3 As RadioButton + Private RB4 As RadioButton + Private RB5 As RadioButton + + Private stay_hh As String + Private stay_mi As String + Private stay_ss As String + + Private LA_GEO As Label + Dim result As Int + Private cercavalor As String + Private LA_RUTA As String + + Private b_like As Button + Private B_GPS As Button + Dim sc As JhsIceZxing1 + Dim CODIGO As String + Private SV_ENCUESTA As ScrollView + Private RB1_E1 As RadioButton + Private RB2_E1 As RadioButton + Private RB3_E1 As RadioButton + Private CHB1 As CheckBox + Private CHB2 As CheckBox + Private CHB3 As CheckBox + Private Panel5 As Panel + Private B_guardaencuesta As Button + Private RadioButton1 As RadioButton + Private RadioButton2 As RadioButton + Private RadioButton3 As RadioButton + Private RadioButton4 As RadioButton + Private RadioButton5 As RadioButton + Private RadioButton6 As RadioButton + Private RadioButton7 As RadioButton + Private RadioButton8 As RadioButton + Private RadioButton9 As RadioButton + Private RadioButton10 As RadioButton + Private RadioButton11 As RadioButton + Private RadioButton12 As RadioButton + Private RadioButton13 As RadioButton + Private RadioButton14 As RadioButton + Private CheckBox1 As CheckBox + Private CheckBox2 As CheckBox + Private CheckBox3 As CheckBox + Private CheckBox4 As CheckBox + Private CheckBox5 As CheckBox + Private CheckBox6 As CheckBox + Private CheckBox7 As CheckBox + Private CheckBox8 As CheckBox + Dim encuentasmapa As Map + Private p6 As EditText + Private p7 As EditText + Private p8 As EditText + Private Panel7 As Panel + Private RadioButton17 As RadioButton + Private RadioButton16 As RadioButton + Private RadioButton15 As RadioButton + Private B_guardaencuesta_m2 As Button + Private et_p1_m2 As EditText + Private et_p2_m2 As EditText + Private RB7_P6_M2 As RadioButton + Private RB6_P6_M2 As RadioButton + Private RB5_P6_M2 As RadioButton + Private RB4_P6_M2 As RadioButton + Private RB3_P6_M2 As RadioButton + Private RB2_P6_M2 As RadioButton + Private RB1_P6_M2 As RadioButton + Private et_p5_m2 As EditText + Private rd3_p4_m2 As RadioButton + Private rd2_p4_m2 As RadioButton + Private rd1_p4_m2 As RadioButton + Private RB1_P3_M2 As RadioButton + Private RB2_P3_M2 As RadioButton + Private RB3_P3_M2 As RadioButton + Private RB4_P3_M2 As RadioButton + Private ET_P3_M2 As EditText + Private Panel7_M2 As Panel + Private P4_M2 As String + Private P3_M2 As String + Private P6_M2 As String + + Private CB1_P3_M2 As CheckBox + Private CB2_P3_M2 As CheckBox + Private CB3_P3_M2 As CheckBox + Private CB4_P3_M2 As CheckBox + Private CB5_P3_M2 As CheckBox + Private CB6_P3_M2 As CheckBox + Private EXISTE2 As String + Private EXISTE3 As String + Private EXISTE4 As String + Private EXISTE5 As String + Private et_p1_m3 As EditText + Private et_p2_m3 As EditText + Private CB1_P3_M3 As CheckBox + Private CB2_P3_M3 As CheckBox + Private CB3_P3_M3 As CheckBox + Private CB4_P3_M3 As CheckBox + Private CB5_P3_M3 As CheckBox + Private CB1_P4_M3 As CheckBox + Private CB2_P4_M3 As CheckBox + Private CB3_P4_M3 As CheckBox + Private CB4_P4_M3 As CheckBox + Private CB5_P4_M3 As CheckBox + Private rd1_p5_m3 As RadioButton + Private rd2_p5_m3 As RadioButton + Private CB1_P6_M3 As CheckBox + Private CB2_P6_M3 As CheckBox + Private CB3_P6_M3 As CheckBox + Private CB4_P6_M3 As CheckBox + Private CB5_P6_M3 As CheckBox + Private CB6_P6_M3 As CheckBox + Private ET_P6_M3 As EditText + Private CB1_P7_M3 As CheckBox + Private CB2_P7_M3 As CheckBox + Private CB3_P7_M3 As CheckBox + Private CB4_P7_M3 As CheckBox + Private CB1_P8_M3 As CheckBox + Private CB2_P8_M3 As CheckBox + Private CB4_P8_M3 As CheckBox + Private RB1_P9_M3 As RadioButton + Private RB2_P9_M3 As RadioButton + Private RB3_P9_M3 As RadioButton + Private RB4_P9_M3 As RadioButton + Private RB5_P9_M3 As RadioButton + Private B_guardaencuesta_m3 As Button + Private P_gallina As Panel + Private b_acepta_gallina As Button + Private B_CANCELA_GALLINA As Button + Private B_GALLINA As Button + Private la_cuenta_gallina As Label + Private cb_pregunta As B4XComboBox + Dim girotienda As String + Private p_pregunta1 As Panel + Private b_preguntag As Button + Private EN_QUE_ENCUESTA As String + Private ENCUESTA As String + Private et_p1_m4 As EditText + Private et_p2_m4 As EditText + Private cb_p3_m4 As B4XComboBox + Private cb_p4_1_m4 As B4XComboBox + Private cb_p4_2_m4 As B4XComboBox + Private cb_p4_3_m4 As B4XComboBox + Private cb_p4_4_m4 As B4XComboBox + Private cb_p4_5_m4 As B4XComboBox + Dim itemselect2 As String + Dim itemselect3 As String + Dim itemselect4 As String + Dim itemselect5 As String + Dim itemselect6 As String + Dim itemselect7 As String + Private B_guardaencuesta_m4 As Button + Private p_modulo5 As Panel + Private cb_p1_m5 As B4XComboBox + Private cb_p2_m5 As B4XComboBox + Private cb_p3_m5 As B4XComboBox + Private cb_p4_m5 As B4XComboBox + Private cb_p5_m5 As B4XComboBox + Private cb_p6_m5 As B4XComboBox + Private cb_p7_m5 As B4XComboBox + Private cb_p8_m5 As B4XComboBox + Private cb_p9_m5 As B4XComboBox + Dim itemselect8 As String + Dim itemselect9 As String + Dim itemselect10 As String + Dim itemselect11 As String + Dim itemselect12 As String + Dim itemselect13 As String + Dim itemselect14 As String + Dim itemselect15 As String + Dim itemselect16 As String + Private B_guardaencuesta_m5 As Button + Dim PASA As String + Private RB1_P4_M2 As RadioButton + Private RB2_P4_M2 As RadioButton + Private panel7_p4_m2 As Panel + Private CB1_P4_M2 As CheckBox + Private CB2_P4_M2 As CheckBox + Private CB3_P4_M2 As CheckBox + Private CB4_P4_M2 As CheckBox + Private Panel4 As Panel + Private B_GUARDA_CE_PED As Button + + + Private KP_01 As CheckBox + Private KP_02 As CheckBox + Private KP_03 As CheckBox + Private KP_04 As CheckBox + Private KP_05 As CheckBox + Private KP_06 As CheckBox + Private KP_07 As CheckBox + Private KP_08 As CheckBox + Private KP_09 As CheckBox + Private KP_10 As CheckBox + Private KP_11 As CheckBox + Private KP_12 As CheckBox + Private KP_13 As CheckBox + Private KP_14 As CheckBox + Private KP_15 As CheckBox + Private KP_16 As CheckBox + Private KP_17 As CheckBox + Private KP_18 As CheckBox + Private KP_19 As CheckBox + Private KP_20 As CheckBox + + Private KG_01 As CheckBox + Private KG_02 As CheckBox + Private KG_03 As CheckBox + Private KG_04 As CheckBox + Private KG_05 As CheckBox + Private KG_06 As CheckBox + + Private PK_01 As CheckBox + Private PK_02 As CheckBox + Private PK_03 As CheckBox + Private PK_04 As CheckBox + Private PK_05 As CheckBox + Private PK_06 As CheckBox + Private PK_07 As CheckBox + Private PK_08 As CheckBox + + Private HPG_01 As CheckBox + Private HPG_02 As CheckBox + Private HPG_03 As CheckBox + Private HPG_04 As CheckBox + Private HPG_05 As CheckBox + Private HPG_06 As CheckBox + Private HPG_07 As CheckBox + Private HPG_08 As CheckBox + Private HPG_09 As CheckBox + Private HPG_10 As CheckBox + + Private HC_01 As CheckBox + Private HC_02 As CheckBox + Private HC_03 As CheckBox + Private HC_04 As CheckBox + + Private B_01 As CheckBox + Private B_02 As CheckBox + + Private CH_FACTURA As CheckBox + Private que_modulo As String + Private CUENTA_MODULO As String + Private rb1_m3_p1 As RadioButton + Private RB2_M3_P1 As RadioButton + Private RB3_M3_P1 As RadioButton + Private RB4_M3_P1 As RadioButton + Private RB1_M3_P2 As RadioButton + Private RB2_M3_P2 As RadioButton + Private RB3_M3_P2 As RadioButton + Private RB4_M3_P2 As RadioButton + Private et_p2_m3_1 As EditText + Dim textemp2 As String ="" + Dim textemp3 As String ="" + Dim textemp4 As String ="" + Dim textemp5 As String ="" + Dim textemp6 As String ="" + Dim textemp7 As String ="" + Dim textemp8 As String ="" + Private CB3_P8_M3 As CheckBox + Private CB7_P6_M3 As CheckBox + Private p_m1 As Panel + Private p_m2 As Panel + Private p_m3 As Panel + Private p_m4 As Panel + Dim impresoraConectada As Boolean = False + Dim errorImpresora As Int = 0 +End Sub + +'You can add more parameters here. +Public Sub Initialize As Object + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + Root = Root1 + 'load the layout to Root +' Activity.RemoveAllViews + Root.LoadLayout("cliente") + ruta = File.DirInternal + If File.Exists(ruta, "kmt.db") = False Then + File.Copy(File.DirAssets, "kmt.db", ruta, "kmt.db") + End If + skmt.Initialize(ruta,"kmt.db", True) + c=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_CODIGO,CAT_CL_RUTA,CAT_CL_NOMBRE,CAT_CL_ATIENDE1,CAT_CL_ATIENTE2,CAT_CL_TELEFONO,CAT_CL_EMAIL,CAT_CL_CALLE,CAT_CL_NOEXT,CAT_CL_NOINT,CAT_CL_CALLE1,CAT_CL_CALLE2,CAT_CL_COLONIA,CAT_CL_MUNI,CAT_CL_EDO,CAT_CL_CP,CAT_CL_LONG,CAT_CL_LAT,CAT_CL_MTOCOMPRA from kmt_info where CAT_CL_CODIGO In (Select cuenta from cuentaa)") + s=B4XPages.MainPage.skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + s.Position=0 + If c.RowCount>0 Then + c.Position=0 + la_cuenta.Text = c.GetString("CAT_CL_CODIGO") + cuenta = c.GetString("CAT_CL_CODIGO") + La_nombre.Text = c.GetString("CAT_CL_NOMBRE") + la_Calle.Text = c.GetString("CAT_CL_CALLE") & c.GetString("CAT_CL_NOEXT") + la_col.Text = c.GetString("CAT_CL_COLONIA") + la_edo.Text = c.GetString("CAT_CL_EDO") +' la_cp.Text = c.GetString("CAT_CL_CP") + l_entre1.Text = c.GetString("CAT_CL_CALLE1") + l_entre2.Text = c.GetString("CAT_CL_CALLE2") + l_atiende.Text = c.GetString("CAT_CL_ATIENDE1") + l_atiende2.Text = c.GetString("CAT_CL_ATIENTE2") + la_saldotot.Text = c.GetString("CAT_CL_TELEFONO") + la_saldooper.Text = c.GetString("CAT_CL_EMAIL") + l_total.Text = s.GetString("TOTAL_CLIE") + total_cliente = s.GetString("TOTAL_CLIE") + MONTO_COMPRA = c.GetString("CAT_CL_MTOCOMPRA") + End If + c.Close + s.Close + btAdmin.Initialize("BlueTeeth") + cmp20.Initialize("Printer") + SV_ENCUESTA.Height = Root.Height + SV_ENCUESTA.Width = Root.Height + p_pregunta1.Height = Root.Height + p_pregunta1.Width = Root.Height +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. + +Sub B4XPage_Appear + que_modulo = 1 + B4XPages.MainPage.tipo_venta = tipo_venta + encuentasmapa.Initialize + Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_CAMERA) + Wait For B4XPage_PermissionResult (Permission As String, resultC As Boolean) + Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_WRITE_EXTERNAL_STORAGE) + Wait For B4XPage_PermissionResult (Permission As String, resultC As Boolean) + + LA_GPS.TextColor = Colors.Red + LA_GPS.Text = "SIN UBICACION GPS" + cercavalor = 0 + If Not(Starter.gps.GPSEnabled) Then + ToastMessageShow("Es necesario tener el GPS encendido", True) + StartActivity(Starter.gps.LocationSettingsIntent) + End If + skmt.Initialize(ruta,"kmt.db", True) + c=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_CODIGO,CAT_CL_RUTA,CAT_CL_NOMBRE,CAT_CL_ATIENDE1,CAT_CL_ATIENTE2,CAT_CL_TELEFONO,CAT_CL_EMAIL,CAT_CL_CALLE,CAT_CL_NOEXT,CAT_CL_NOINT,CAT_CL_CALLE1,CAT_CL_CALLE2,CAT_CL_COLONIA,CAT_CL_MUNI,CAT_CL_EDO,CAT_CL_CP,CAT_CL_LONG,CAT_CL_LAT,CAT_CL_MTOCOMPRA,CAT_CL_NUM_SERIEFISICO from kmt_info where CAT_CL_CODIGO In (Select cuenta from cuentaa)") + s=B4XPages.MainPage.skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + s.Position=0 + If c.RowCount > 0 Then + c.Position=0 + la_cuenta.Text = c.GetString("CAT_CL_CODIGO") + la_cuenta_gallina.Text = c.GetString("CAT_CL_CODIGO") + La_nombre.Text = c.GetString("CAT_CL_NOMBRE") + la_Calle.Text = c.GetString("CAT_CL_CALLE") & " " & c.GetString("CAT_CL_NOEXT") + la_col.Text = c.GetString("CAT_CL_COLONIA") + la_edo.Text = c.GetString("CAT_CL_EDO") + l_entre1.Text = c.GetString("CAT_CL_CALLE1") + l_entre2.Text = c.GetString("CAT_CL_CALLE2") + l_atiende.Text = c.GetString("CAT_CL_ATIENDE1") + l_atiende2.Text = c.GetString("CAT_CL_ATIENTE2") + TELEFONO = c.GetString("CAT_CL_TELEFONO") + l_total.Text = s.GetString("TOTAL_CLIE") + total_cliente = s.GetString("TOTAL_CLIE") + m_lat = "0" + If c.GetString("CAT_CL_LAT") <> "" Then m_lat =c.GetString("CAT_CL_LAT") + If m_lat.Length < 5 Then m_lat = "0" + m_lon = "0" + If c.GetString("CAT_CL_LONG") <> "" Then m_lon =c.GetString("CAT_CL_LONG") + If m_lon.Length < 5 Then m_lon = "0" + LA_RUTA = c.GetString("CAT_CL_RUTA") + ' ESTO ES PARA FORZAR A PEDIR LA FOTO Y EL GPS + If c.GetString("CAT_CL_NUM_SERIEFISICO") = "0" Then + L_QR.TEXT = "SIN CODIGO" + L_QR.TextColor = Colors.Red + gest.VISIBLE = True + BT_QR.Visible = True + Else + L_QR.TEXT = c.GetString("CAT_CL_NUM_SERIEFISICO") + L_QR.TextColor = Colors.Blue + BT_QR.Visible = False + End If + End If + c.Close + s.Close + + S2=B4XPages.MainPage.skmt.ExecQuery("select count(*) AS CUANTOS from HIST_VENTAS WHERE HVD_CLIENTE IN (Select CUENTA from cuentaa)") + S2.Position =0 + CUANTOS = S2.GetString("CUANTOS") + S2.Close + If CUANTOS > 0 Then + c2=B4XPages.MainPage.skmt.ExecQuery("select sum(HVD_COSTO_TOT) AS TOTAL from HIST_VENTAS WHERE HVD_CLIENTE IN (Select CUENTA from cuentaa)") + c2.Position =0 + MONTO_COMPRA = c2.GetString("TOTAL") + c2.Close + Else + MONTO_COMPRA = "0" + End If + + la_saldotot.Text = MONTO_COMPRA + If MONTO_COMPRA <> "0" Then + META2 = 300 - MONTO_COMPRA + Else + META2 = 300 + End If + If META2 < 1 Then + META2 = "CUBIERTO" + End If + la_saldooper.Text = META2 + c=B4XPages.MainPage.skmt.ExecQuery("select ID_ALMACEN from CAT_ALMACEN") + If c.RowCount>0 Then + C.Position=0 + ALMACEN = C.GetString("ID_ALMACEN") + End If + c.Close +' If ALMACEN = "1" Then +' Tels.Visible = False +' gest.Visible = True +' B_GPS.Visible = False +' End If + If ALMACEN = "4" Then + b_like.Visible = False + DD=B4XPages.MainPage.skmt.ExecQuery2("SELECT COUNT(*) AS CUANTOS FROM HIST_VENTAS WHERE HVD_CLIENTE IN (Select cuenta from cuentaa) AND HVD_PRONOMBRE =?", Array As String("KNORR RINDE MAS 70 GR")) + DD.Position =0 + If DD.GetString("CUANTOS") = 0 Then + c=B4XPages.MainPage.skmt.ExecQuery2("SELECT COUNT(*) AS CUANTOS FROM PEDIDO WHERE PE_CLIENTE IN (Select cuenta from cuentaa) AND PE_PRONOMBRE =?", Array As String("KNORR RINDE MAS 70 GR")) + c.Position =0 + If c.GetString("CUANTOS") = 0 Then + b_like.Visible = False + Else + b_like.Visible = False + End If + c.Close + Else + b_like.Visible = False + End If + DD.Close + Else + b_like.Visible = False + End If + If ALMACEN = "16" Or ALMACEN = "13" Then + Tels.Visible = True + gest.Visible = True + End If + CallSubDelayed(Tracker, "Track") + CallSubDelayed(Tracker, "StartFLPSmall") + If Tracker.FLP.GetLastKnownLocation.IsInitialized Then 'Si tenemos "UltimaUbicaccionConocida" la usamos. + B4XPages.MainPage.lat_gps = Tracker.FLP.GetLastKnownLocation.Latitude + B4XPages.MainPage.lon_gps = Tracker.FLP.GetLastKnownLocation.Longitude +' Log($"Tenemos UUC: ${Tracker.FLP.GetLastKnownLocation.Latitude},${Tracker.FLP.GetLastKnownLocation.Longitude}"$) + GPS_LocationChanged(Tracker.FLP.GetLastKnownLocation) + End If + If ALMACEN = "1" Or ALMACEN = "2" Or ALMACEN = "4" Or ALMACEN = "5" Or ALMACEN = "25" Then + DD=skmt.ExecQuery2("SELECT COUNT(*) AS CUANTOS FROM HIST_VENTAS WHERE HVD_CLIENTE IN (Select cuenta from cuentaa) AND HVD_PRONOMBRE =?", Array As String("KNORR SUIZA GALLINA")) + DD.Position =0 + If DD.GetString("CUANTOS") = 0 Then + c=skmt.ExecQuery2("SELECT COUNT(*) AS CUANTOS FROM PEDIDO WHERE PE_CLIENTE IN (Select cuenta from cuentaa) AND PE_PRONOMBRE =?", Array As String("KNORR SUIZA GALLINA")) + c.Position =0 + If c.GetString("CUANTOS") = 0 Then + B_GALLINA.Visible = True + Else + B_GALLINA.Visible = False + End If + c.Close + Else + B_GALLINA.Visible = False + End If + DD.Close + Else + B_GALLINA.Visible = False + End If + P_gallina.Visible = False + B_GALLINA.Visible = False + que_modulo = 1 + If ALMACEN = "2" Or ALMACEN = "4" Or ALMACEN = "5" Or ALMACEN = "4" Or ALMACEN = "53" Or ALMACEN = "64" Or ALMACEN = "25" Then + b_like.Visible = True + Else + b_like.Visible = False + End If + c = skmt.ExecQuery2("select CAT_VA_VALOR from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("MACIMP")) + If c.RowCount > 0 Then + c.Position = 0 + Starter.MAC_IMPRESORA = c.GetString("CAT_VA_VALOR") + End If + If Starter.MAC_IMPRESORA = "" Then Starter.MAC_IMPRESORA = "0" + Log("|" & Starter.MAC_IMPRESORA & "|") + Printer1.Initialize(Me, "Printer1") + + If Printer1.IsConnected = False Then +' Printer1.Connect + Log("1") + Else + Printer1.DisConnect + Printer1.Connect + Log("2") + End If + + c = skmt.ExecQuery("SELECT HABILITADA FROM IMPRESORA") + If c.RowCount > 0 Then + c.Position = 0 + If c.GetString("HABILITADA") = 1 Then + B_IMP.Visible = True + Else If c.GetString("HABILITADA") = 0 Then + B_IMP.Visible = False + End If + Else If c.RowCount = 0 Then + B_IMP.Visible = False + End If +End Sub + +Sub GPS_LocationChanged (Location1 As Location) +' LogColor($"Entrando a Cliente.GPS_LocationChanged"$, Colors.red) + If Tracker.FLP.GetLastKnownLocation.IsInitialized And Tracker.FLP.GetLastKnownLocation.Latitude <> 0 Then + B4XPages.MainPage.lat_gps = Tracker.FLP.GetLastKnownLocation.Latitude + B4XPages.MainPage.lon_gps = Tracker.FLP.GetLastKnownLocation.Longitude +' Log("Coords set to: " & B4XPages.MainPage.lat_gps & " and " & B4XPages.MainPage.lon_gps) + End If + + Dim l1, l2 As Location + l1.Initialize2(B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps) +' Log($"Coordenadas de la tienda - lat:${m_lat}, lon:${m_lon}"$) + l2.Initialize2(m_lat, m_lon) + + BT_QR.Enabled = True + LA_GPS.TextColor = Colors.Blue + LA_GPS.Text = "CON UBICACION GPS" + B_GPS.Enabled = True + 'now we need the distance between our location and the target location + Dim distance As Long + distance = l1.DistanceTo(l2) 'the result is in meter + gest.Visible = True + If distance < 100 Then + LA_GEO.TextColor = Colors.Blue + Tels.Visible = True + gest.Visible = True + Else + LA_GEO.TextColor = Colors.Red +' If ALMACEN = "1" Then +' Tels.Visible = False +' gest.Visible = True +' End If + End If + LA_GEO.Text= $"$1.2{distance/1000} kms"$ + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM HIST_GPS") + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_GPS (HGDATE, HGLAT, HGLON) VALUES(?,?,?) ", Array As Object (sDate & sTime, B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps)) + CallSubDelayed(Tracker, "CreateLocationRequest") +End Sub + +Sub ListView1_ItemLongClick (Position As Int, Value As Object) + +End Sub + +Sub gest_Click + +' 'If ALMACEN = "4" Or ALMACEN = "36" Then +' Log(Subs.traeAlmacen) +' Dim Items As List +' Items.Initialize +' Items.Add("Selecciona una opción") +' Items.Add("Tienda de Abarrotes (Abarrotes, Misceláneas, Minisupers, Particulares con Venta y Cremerías)") +' Items.Add("Recaudería (Frutas y Verduras)") +' Items.Add("Vinos y Licores") +' Items.Add("Carnicería o Pollería") +' Items.Add("Farmacia") +' Items.Add("Jarciería (Productos de Limpieza)") +' Items.Add("Papelería y Regalos") +' Items.Add("Tortillería") +' Items.Add("Escuelas") +' Items.Add("Estanquillos (Puestos Semifijos)") +' Items.Add("Fonda, Cocina Económica, Cafetería)") +' Items.Add("Tlapalería, Ferretería") +' Items.Add("Dulcería, Materias Primas") +' Items.Add("Semillas y Chiles Secos") +' Items.Add("Cybercafé") +' Items.Add("Hotel") +' Items.Add("Veterinaria") +' Items.Add("Tienda de Mascotas") +' Items.Add("Otros") +' cb_pregunta.SetItems(Items) +' +' girotienda = "Selecciona una opcion" +' +' c=skmt.ExecQuery("SELECT COUNT(*) AS CUANTOS FROM HIST_ENCUESTA_CLIENTE WHERE HEC_CLIENTE IN (Select CUENTA from cuentaa)") +' c.Position=0 +' CUENTA_MODULO = c.GetString("CUANTOS") +' c.Close +' If CUENTA_MODULO > 0 Then +' c=skmt.ExecQuery("SELECT HEC_MODULO FROM HIST_ENCUESTA_CLIENTE WHERE HEC_CLIENTE IN (Select CUENTA from cuentaa)") +' c.Position=0 +' que_modulo = c.GetString("HEC_MODULO") +' c.Close +' End If +' Log(Subs.traeAlmacen) +' c=skmt.ExecQuery("SELECT COUNT(*) AS CUANTOS FROM ENCUESTA_MODULO1 WHERE CLIENTE IN (Select CUENTA from cuentaa)") +' c.Position=0 +' EXISTE = c.GetString("CUANTOS") +' c.Close +' +' c=skmt.ExecQuery("SELECT COUNT(*) AS CUANTOS FROM ENCUESTA_MODULO2 WHERE CLIENTE IN (Select CUENTA from cuentaa)") +' c.Position=0 +' EXISTE2 = c.GetString("CUANTOS") +' c.Close +' +' c=skmt.ExecQuery("SELECT COUNT(*) AS CUANTOS FROM ENCUESTA_MODULO3 WHERE CLIENTE IN (Select CUENTA from cuentaa)") +' c.Position=0 +' EXISTE3 = c.GetString("CUANTOS") +' c.Close +' +' c=skmt.ExecQuery("SELECT COUNT(*) AS CUANTOS FROM ENCUESTA_MODULO4 WHERE CLIENTE IN (Select CUENTA from cuentaa)") +' c.Position=0 +' EXISTE4 = c.GetString("CUANTOS") +' c.Close +' +' c=skmt.ExecQuery("SELECT COUNT(*) AS CUANTOS FROM ENCUESTA_MODULO5 WHERE CLIENTE IN (Select CUENTA from cuentaa)") +' c.Position=0 +' EXISTE5 = c.GetString("CUANTOS") +' c.Close +' +' '' esto para la primera encuesta m1 +'' p_cliente.Visible = False +'' SV_ENCUESTA.Visible = True +'' SV_ENCUESTA.Panel.LoadLayout("ENCUESTA") +'' Panel5.Width = Root.Width * 0.94 +'' SV_ENCUESTA.Panel.Height = Panel5.Height + 60 +'' Panel7.Visible = False +' +' '' para la m2 +'' p_cliente.Visible = False +'' SV_ENCUESTA.Visible = True +'' SV_ENCUESTA.Panel.LoadLayout("ESNCUESTA_m2") +'' Panel5.Width = Root.Width * 0.94 +'' SV_ENCUESTA.Panel.Height = Panel5.Height + 60 +'' Panel7_M2.Visible = False +'' +' '' para la m3 +'' p_cliente.Visible = False +'' SV_ENCUESTA.Visible = True +'' SV_ENCUESTA.Panel.LoadLayout("ENCUESSTA_M3") +'' Panel5.Width = Root.Width * 0.94 +'' SV_ENCUESTA.Panel.Height = Panel5.Height + 60 +' +' If EXISTE = 0 And EXISTE2 = 0 And EXISTE3 = 0 And EXISTE4 = 0 And EXISTE5 = 0 Then +' +' +' S=skmt.ExecQuery2("SELECT CAT_VA_VALOR FROM CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("CUESTIONARIO")) +' S.Position=0 +' +' If s.GetString("CAT_VA_VALOR") > "0" Then +' '' If "3" > "0" Then +' ENCUESTA = s.GetString("CAT_VA_VALOR") +' ' ENCUESTA = "3" +' +' +'' c=skmt.ExecQuery("SELECT COUNT(*) AS CUANTOS FROM HIST_ENCUESTA_PED_DIST_1 WHERE TIENDA IN (Select CUENTA from cuentaa)") +'' c.Position=0 +'' EXISTE = c.GetString("CUANTOS") +'' c.Close +'' If EXISTE = 0 Then +'' Dim result As Int= -3 +'' Do While result=-3 +'' result = Msgbox2("Entiendo, acepto y consiento que GUNA usará mis datos Personales y serán tratados acorde con lo establecido en la Ley Federal de Protección de Datos Personales en Posesión de los Particulares (en lo sucesivo la “Ley”), y su respectivo Reglamento; bajo lo manifestado en el Aviso de Privacidad – Texto Completo – que se encuentra en la página www.guna.com.mx", "AVISO DE PRIVACIDAD","ACEPTO","", "NO ACEPTO",LoadBitmap(File.DirAssets,"alert2.png")) +'' Select Case result +'' Case DialogResponse.POSITIVE +'' p_pregunta1.Visible = True +'' Case DialogResponse.NEGATIVE +'' ''HIST_ENCUESTA_AVISO_GIRO (HEAV_CLIENTE TEXT, HEAV_MODULO TEXT, HEAV_AVISO TEXT, HEAV_GIRO TEXT) +'' skmt.ExecNonQuery2("INSERT INTO HIST_ENCUESTA_AVISO_GIRO(HEAV_CLIENTE , HEAV_MODULO , HEAV_AVISO ) VALUES (?,?,?) ", Array As Object( clie_id, ENCUESTA, "NO ACEPTA")) +'' +'' B4XPages.ShowPage("productos") +'' End Select +'' +'' +'' Loop +'' result = Msgbox2("Entiendo, acepto y consciento que GUNA usará mis datos Personales y serán tratados acorde con lo establecido en la Ley Federal de Protección de Datos Personales en Posesión de los Particulares (en lo sucesivo la “Ley”), y su respectivo Reglamento; bajo lo manifestado en el Aviso de Privacidad – Texto Completo – que se encuentra en la página www.guna.com.mx", "AVISO DE PRIVACIDAD","ACEPTO","", "NO ACEPTO",LoadBitmap(File.DirAssets,"alert2.png")) +'' If result = DialogResponse.Positive Then +' p_pregunta1.Visible = True +'' +'' +'' Else +'' ''HIST_ENCUESTA_AVISO_GIRO (HEAV_CLIENTE TEXT, HEAV_MODULO TEXT, HEAV_AVISO TEXT, HEAV_GIRO TEXT) +'' skmt.ExecNonQuery2("INSERT INTO HIST_ENCUESTA_AVISO_GIRO(HEAV_CLIENTE , HEAV_MODULO , HEAV_AVISO ) VALUES (?,?,?) ", Array As Object( clie_id, ENCUESTA, "NO ACEPTA")) +' ' +'' B4XPages.ShowPage("productos") +'' End If +' +' +' Else +' B4XPages.ShowPage("productos") +' End If +' Else +' B4XPages.ShowPage("productos") +' +' End If + + B4XPages.ShowPage("productos") + + s.Close + + 'Else +' B4XPages.ShowPage("productos") + 'End If + +End Sub + + +Private Sub cb_pregunta_SelectedIndexChanged (Index As Int) + girotienda = Sender.As(B4XComboBox).SelectedItem + Log(girotienda) + Log(Index) +End Sub + +Private Sub b_preguntag_Click + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE kmt_info SET CAT_CL_GIRO = ? WHERE CAT_CL_CODIGO = ? And CAT_CL_NOMBRE = ?", Array As Object (girotienda, la_cuenta.text,La_nombre.Text)) + + skmt.ExecNonQuery2("INSERT INTO HIST_ENCUESTA_AVISO_GIRO(HEAV_CLIENTE , HEAV_MODULO , HEAV_AVISO ,HEAV_GIRO ) VALUES (?,?,?,?) ", Array As Object( clie_id, ENCUESTA, "ACEPTA",girotienda)) + + If girotienda <> "Selecciona una opcion" Then + + If girotienda = "Tienda de Abarrotes (Abarrotes, Misceláneas, Minisupers, Particulares con Venta y Cremerías)" Then + + Dim result As Int= -3 + Do While result=-3 + result = Msgbox2("Entiendo, acepto y consiento que GUNA usará mis datos Personales y serán tratados acorde con lo establecido en la Ley Federal de Protección de Datos Personales en Posesión de los Particulares (en lo sucesivo la “Ley”), y su respectivo Reglamento; bajo lo manifestado en el Aviso de Privacidad – Texto Completo – que se encuentra en la página www.guna.com.mx", "AVISO DE PRIVACIDAD","ACEPTO","", "NO ACEPTO",LoadBitmap(File.DirAssets,"alert2.png")) + Select Case result + Case DialogResponse.POSITIVE + + + + + + + +' If ALMACEN = "35" Or ALMACEN = "43" Or ALMACEN = "54" Or ALMACEN = "73" Or ALMACEN = "56" Then 'ALMACEN = "7" Then ' +' ''Or ALMACEN = "56" ATIZAPAN PEDIGRI +' p_pregunta1.Visible = False +' SV_ENCUESTA.Visible = True +' SV_ENCUESTA.Panel.LoadLayout("ENCUESTA_PED") +' SV_ENCUESTA.Panel.Height = Panel4.Height +' Panel4.Visible = True +' b_like.Visible = False +' BT_QR.Visible = False +' B_GALLINA.Visible = False +' Tar.Visible = False +' Tels.Visible = False +' gest.Visible = False +' b_venta.Visible = False +' Guardar.Visible = False +' HIST.Visible = False +' +' +' Else +Log(que_modulo) + If que_modulo = Null Or que_modulo = " " Then que_modulo = "1" + ' Msgbox(que_modulo,"ALO") + If que_modulo < = ENCUESTA Then + If que_modulo = "1" Then + + + If p_m2.IsInitialized And p_m2.Visible Then + p_m2.Visible = False + Else If p_m3.IsInitialized And p_m3.Visible Then + p_m3.Visible = False + Else If p_m4.IsInitialized And p_m4.Visible Then + p_m4.Visible = False + Else If p_modulo5.IsInitialized And p_modulo5.Visible Then + p_modulo5.Visible = False + Else + End If + ' esto para la primera encuesta m1 + p_pregunta1.Visible = False + p_cliente.Visible = False + SV_ENCUESTA.Visible = True + SV_ENCUESTA.Panel.LoadLayout("ENCUESTA") + p_m1.Width = Root.Width * 0.94 + SV_ENCUESTA.Panel.Height = p_m1.Height + 60 + Panel7.Visible = False + + else if que_modulo = "2" Then + + + '' para la m2 + If p_m1.IsInitialized And p_m1.Visible Then + p_m1.Visible = False + Else + + End If + p_pregunta1.Visible = False + p_cliente.Visible = False + SV_ENCUESTA.Visible = True + SV_ENCUESTA.Panel.LoadLayout("ESNCUESTA_m2") + p_m2.Width = Root.Width * 0.94 + SV_ENCUESTA.Panel.Height = p_m2.Height + 60 + Panel7_M2.Visible = False + else if que_modulo = "3" Then + 'para la m3 + If p_m2.IsInitialized And p_m2.Visible Then + p_m2.Visible = False + Else + + End If + p_pregunta1.Visible = False + p_cliente.Visible = False + SV_ENCUESTA.Visible = True + SV_ENCUESTA.Panel.LoadLayout("ENCUESSTA_M3") + + p_m3.Width = Root.Width * 0.94 + SV_ENCUESTA.Panel.Height = p_m3.Height + 60 + else if que_modulo = "4" Then + + '' para la m4 + + If p_m3.IsInitialized And p_m3.Visible Then + + p_m3.Visible = False + Else + + End If + p_pregunta1.Visible = False + p_cliente.Visible = False + SV_ENCUESTA.Visible = True + p_pregunta1.Visible = False + SV_ENCUESTA.Panel.LoadLayout("ENCUESTA_M4") + p_m4.Width = Root.Width * 0.94 + SV_ENCUESTA.Panel.Height = p_m4.Height + 60 + + Dim Items2 As List + Items2.Initialize + Items2.Add("Selecciona una opcion") + Items2.Add("Propio") + Items2.Add("Rentado") + cb_p3_m4.SetItems(Items2) + itemselect2 = "Selecciona una opcion" + + + Dim Items3 As List + Items3.Initialize + Items3.Add("Selecciona una opcion") + Items3.Add("Completamente Surtido") + Items3.Add("Bien Surtido") + Items3.Add("Poco Surtido") + Items3.Add("Muy Poco Surtido") + Items3.Add("Sin Existencias") + cb_p4_1_m4.SetItems(Items3) + itemselect3 = "Selecciona una opcion" + cb_p4_2_m4.SetItems(Items3) + itemselect4 = "Selecciona una opcion" + cb_p4_3_m4.SetItems(Items3) + itemselect5 = "Selecciona una opcion" + cb_p4_4_m4.SetItems(Items3) + itemselect6 = "Selecciona una opcion" + cb_p4_5_m4.SetItems(Items3) + itemselect7 = "Selecciona una opcion" + ' + else if que_modulo = "5" Then + '' 'MODULO 5 + If p_m4.IsInitialized And p_m4.Visible Then + p_m4.Visible = False + Else + + End If + p_cliente.Visible = False + SV_ENCUESTA.Visible = True + p_pregunta1.Visible = False + SV_ENCUESTA.Panel.LoadLayout("ENCUESTA_M5") + p_modulo5.Width = Root.Width * 0.94 + SV_ENCUESTA.Panel.Height = p_modulo5.Height + 30 + + Dim Items8 As List + Items8.Initialize + Items8.Add("Selecciona una opcion") + Items8.Add("Completamente Surtido") + Items8.Add("Bien Surtido") + Items8.Add("Poco Surtido") + Items8.Add("Muy Poco Surtido") + Items8.Add("Sin Existencias") + cb_p1_m5.SetItems(Items8) + itemselect8 = "Selecciona una opcion" + cb_p2_m5.SetItems(Items8) + itemselect9 = "Selecciona una opcion" + cb_p3_m5.SetItems(Items8) + itemselect10 = "Selecciona una opcion" + cb_p4_m5.SetItems(Items8) + itemselect11 = "Selecciona una opcion" + cb_p5_m5.SetItems(Items8) + itemselect12 = "Selecciona una opcion" + cb_p6_m5.SetItems(Items8) + itemselect13 = "Selecciona una opcion" + cb_p7_m5.SetItems(Items8) + itemselect14 = "Selecciona una opcion" + cb_p8_m5.SetItems(Items8) + itemselect15 = "Selecciona una opcion" + cb_p9_m5.SetItems(Items8) + itemselect16 = "Selecciona una opcion" + End If + Else + p_pregunta1.Visible = False + + B4XPages.ShowPage("productos") + + + End If +' End IF + + Case DialogResponse.NEGATIVE + + B4XPages.ShowPage("productos") + End Select + + + Loop + 'fin modulos +' If girotienda = "Tienda de Abarrotes (Abarrotes, Misceláneas, Minisupers, Particulares con Venta y Cremerías)" Then +' If Subs.traeAlmacen = 36 And EXISTE4 = 0 Then +' p_cliente.Visible = False +' SV_ENCUESTA.Visible = True +' p_pregunta1.Visible = False +' SV_ENCUESTA.Panel.LoadLayout("ENCUESTA_M5") +' p_modulo5.Width = Root.Width * 0.94 +' SV_ENCUESTA.Panel.Height = p_modulo5.Height + 60 +' +' Dim Items8 As List +' Items8.Initialize +' Items8.Add("Selecciona una opcion") +' Items8.Add("Completamente Surtido") +' Items8.Add("Bien Surtido") +' Items8.Add("Poco Surtido") +' Items8.Add("Muy Poco Surtido") +' Items8.Add("Sin Existencias") +' cb_p1_m5.SetItems(Items8) +' itemselect8 = "Selecciona una opcion" +' cb_p2_m5.SetItems(Items8) +' itemselect9 = "Selecciona una opcion" +' cb_p3_m5.SetItems(Items8) +' itemselect10 = "Selecciona una opcion" +' cb_p4_m5.SetItems(Items8) +' itemselect11 = "Selecciona una opcion" +' cb_p5_m5.SetItems(Items8) +' itemselect12 = "Selecciona una opcion" +' cb_p6_m5.SetItems(Items8) +' itemselect13 = "Selecciona una opcion" +' cb_p7_m5.SetItems(Items8) +' itemselect14 = "Selecciona una opcion" +' cb_p8_m5.SetItems(Items8) +' itemselect15 = "Selecciona una opcion" +' cb_p9_m5.SetItems(Items8) +' itemselect16 = "Selecciona una opcion" +' +' ELSE IF Subs.traeAlmacen = 56 And EXISTE4 = 0 Then +' p_cliente.Visible = False +' SV_ENCUESTA.Visible = True +' p_pregunta1.Visible = False +' SV_ENCUESTA.Panel.LoadLayout("ENCUESTA_M5") +' p_modulo5.Width = Root.Width * 0.94 +' SV_ENCUESTA.Panel.Height = p_modulo5.Height + 60 +' +' Dim Items8 As List +' Items8.Initialize +' Items8.Add("Selecciona una opcion") +' Items8.Add("Completamente Surtido") +' Items8.Add("Bien Surtido") +' Items8.Add("Poco Surtido") +' Items8.Add("Muy Poco Surtido") +' Items8.Add("Sin Existencias") +' cb_p1_m5.SetItems(Items8) +' itemselect8 = "Selecciona una opcion" +' cb_p2_m5.SetItems(Items8) +' itemselect9 = "Selecciona una opcion" +' cb_p3_m5.SetItems(Items8) +' itemselect10 = "Selecciona una opcion" +' cb_p4_m5.SetItems(Items8) +' itemselect11 = "Selecciona una opcion" +' cb_p5_m5.SetItems(Items8) +' itemselect12 = "Selecciona una opcion" +' cb_p6_m5.SetItems(Items8) +' itemselect13 = "Selecciona una opcion" +' cb_p7_m5.SetItems(Items8) +' itemselect14 = "Selecciona una opcion" +' cb_p8_m5.SetItems(Items8) +' itemselect15 = "Selecciona una opcion" +' cb_p9_m5.SetItems(Items8) +' itemselect16 = "Selecciona una opcion" + ' +' Else If Subs.traeAlmacen = 4 And EXISTE5 = 0 Then +' p_cliente.Visible = False +' SV_ENCUESTA.Visible = True +' p_pregunta1.Visible = False +' SV_ENCUESTA.Panel.LoadLayout("ENCUESTA_M5") +' p_modulo5.Width = Root.Width * 0.94 +' SV_ENCUESTA.Panel.Height = p_modulo5.Height + 60 +' +' Dim Items8 As List +' Items8.Initialize +' Items8.Add("Selecciona una opcion") +' Items8.Add("Completamente Surtido") +' Items8.Add("Bien Surtido") +' Items8.Add("Poco Surtido") +' Items8.Add("Muy Poco Surtido") +' Items8.Add("Sin Existencias") +' cb_p1_m5.SetItems(Items8) +' itemselect8 = "Selecciona una opcion" +' cb_p2_m5.SetItems(Items8) +' itemselect9 = "Selecciona una opcion" +' cb_p3_m5.SetItems(Items8) +' itemselect10 = "Selecciona una opcion" +' cb_p4_m5.SetItems(Items8) +' itemselect11 = "Selecciona una opcion" +' cb_p5_m5.SetItems(Items8) +' itemselect12 = "Selecciona una opcion" +' cb_p6_m5.SetItems(Items8) +' itemselect13 = "Selecciona una opcion" +' cb_p7_m5.SetItems(Items8) +' itemselect14 = "Selecciona una opcion" +' cb_p8_m5.SetItems(Items8) +' itemselect15 = "Selecciona una opcion" +' cb_p9_m5.SetItems(Items8) +' itemselect16 = "Selecciona una opcion" + ' FIN MODULO 5 + + + ' ESTOI ES PARA MODULO 4 +' p_cliente.Visible = False +' SV_ENCUESTA.Visible = True +' p_pregunta1.Visible = False +' SV_ENCUESTA.Panel.LoadLayout("ENCUESTA_M4") +' Panel5.Width = Root.Width * 0.94 +' SV_ENCUESTA.Panel.Height = Panel5.Height + 60 +' +' Dim Items2 As List +' Items2.Initialize +' Items2.Add("Selecciona una opcion") +' Items2.Add("Propio") +' Items2.Add("Rentado") +' cb_p3_m4.SetItems(Items2) +' itemselect2 = "Selecciona una opcion" +' +' Dim Items3 As List +' Items3.Initialize +' Items3.Add("Selecciona una opcion") +' Items3.Add("Completamente Surtido") +' Items3.Add("Bien Surtido") +' Items3.Add("Poco Surtido") +' Items3.Add("Muy Poco Surtido") +' Items3.Add("Sin Existencias") +' cb_p4_1_m4.SetItems(Items3) +' itemselect3 = "Selecciona una opcion" +' cb_p4_2_m4.SetItems(Items3) +' itemselect4 = "Selecciona una opcion" +' cb_p4_3_m4.SetItems(Items3) +' itemselect5 = "Selecciona una opcion" +' cb_p4_4_m4.SetItems(Items3) +' itemselect6 = "Selecciona una opcion" +' cb_p4_5_m4.SetItems(Items3) +' itemselect7 = "Selecciona una opcion" +' End If + ' FIN MODULO 4 + +' Else +' B4XPages.ShowPage("productos") +' End If + Else + p_pregunta1.Visible = False + + B4XPages.ShowPage("productos") + + End If + + + Else + Msgbox("Contesta la pregunta de favor","AVISO") + End If +End Sub + +Private Sub cb_p3_m4_SelectedIndexChanged (Index As Int) + itemselect2 = Sender.As(B4XComboBox).SelectedItem + Log(itemselect2) + Log(Index) +End Sub + +Private Sub cb_p4_1_m4_SelectedIndexChanged (Index As Int) + itemselect3 = Sender.As(B4XComboBox).SelectedItem + Log(itemselect3) + Log(Index) +End Sub + +Private Sub cb_p4_2_m4_SelectedIndexChanged (Index As Int) + itemselect4 = Sender.As(B4XComboBox).SelectedItem + Log(itemselect4) + Log(Index) +End Sub + +Private Sub cb_p4_3_m4_SelectedIndexChanged (Index As Int) + itemselect5 = Sender.As(B4XComboBox).SelectedItem + Log(itemselect5) + Log(Index) +End Sub + +Private Sub cb_p4_4_m4_SelectedIndexChanged (Index As Int) + itemselect6 = Sender.As(B4XComboBox).SelectedItem + Log(itemselect6) + Log(Index) +End Sub + +Private Sub cb_p4_5_m4_SelectedIndexChanged (Index As Int) + itemselect7 = Sender.As(B4XComboBox).SelectedItem + Log(itemselect7) + Log(Index) +End Sub + +Private Sub cb_p1_m5_SelectedIndexChanged (Index As Int) + itemselect8 = Sender.As(B4XComboBox).SelectedItem + Log(itemselect8) + Log(Index) +End Sub + +Private Sub cb_p2_m5_SelectedIndexChanged (Index As Int) + itemselect9 = Sender.As(B4XComboBox).SelectedItem + Log(itemselect9) + Log(Index) +End Sub + +Private Sub cb_p3_m5_SelectedIndexChanged (Index As Int) + itemselect10 = Sender.As(B4XComboBox).SelectedItem + Log(itemselect10) + Log(Index) +End Sub + +Private Sub cb_p4_m5_SelectedIndexChanged (Index As Int) + itemselect11 = Sender.As(B4XComboBox).SelectedItem + Log(itemselect11) + Log(Index) +End Sub + +Private Sub cb_p5_m5_SelectedIndexChanged (Index As Int) + itemselect12 = Sender.As(B4XComboBox).SelectedItem + Log(itemselect12) + Log(Index) +End Sub + +Private Sub cb_p6_m5_SelectedIndexChanged (Index As Int) + itemselect13 = Sender.As(B4XComboBox).SelectedItem + Log(itemselect13) + Log(Index) +End Sub + +Private Sub cb_p7_m5_SelectedIndexChanged (Index As Int) + itemselect14 = Sender.As(B4XComboBox).SelectedItem + Log(itemselect14) + Log(Index) +End Sub + +Private Sub cb_p8_m5_SelectedIndexChanged (Index As Int) + itemselect15 = Sender.As(B4XComboBox).SelectedItem + Log(itemselect15) + Log(Index) +End Sub + +Private Sub cb_p9_m5_SelectedIndexChanged (Index As Int) + itemselect16 = Sender.As(B4XComboBox).SelectedItem + Log(itemselect16) + Log(Index) +End Sub + + +Sub B_guardaencuesta_Click + Dim SI_GUARDAR As String + SI_GUARDAR = 1 + + If RB1_E1.Checked = False And RB2_E1.Checked = False And RB3_E1.Checked = False Then + SI_GUARDAR = 0 + End If + + If Panel7.Visible = True Then + If RadioButton15.Checked = False And RadioButton16.Checked = False And RadioButton17.Checked = False Then + SI_GUARDAR = 0 + End If + End If + + If RadioButton1.Checked = False And RadioButton2.Checked = False And RadioButton3.Checked = False And RadioButton4.Checked = False Then + SI_GUARDAR = 0 + End If + + If RadioButton5.Checked = False And RadioButton6.Checked = False And RadioButton7.Checked = False And RadioButton8.Checked = False And RadioButton9.Checked = False Then + SI_GUARDAR = 0 + End If + + If RadioButton10.Checked = False And RadioButton11.Checked = False And RadioButton12.Checked = False And RadioButton13.Checked = False And RadioButton14.Checked = False Then + SI_GUARDAR = 0 + End If + + If p6.Text = "" Then + SI_GUARDAR = 0 + End If + If p7.Text = "" Then + SI_GUARDAR = 0 + End If + If p8.Text = "" Then + SI_GUARDAR = 0 + End If + + If CheckBox1.Checked = False And CheckBox2.Checked = False And CheckBox3.Checked = False And CheckBox4.Checked = False And CheckBox5.Checked = False And CheckBox6.Checked = False And CheckBox7.Checked = False And CheckBox8.Checked = False Then + encuentasmapa.Put("P9", "") + Log(encuentasmapa) + End If + + If SI_GUARDAR = 1 Then + skmt.ExecNonQuery2("INSERT INTO ENCUESTA_MODULO1 (CLIENTE, ALMACEN,P1, P2, P3, P4, P5, P6, P7, P8, P9) VALUES (?,?,?,?,?,?,?,?,?,?,?)", Array As Object(Subs.traeCliente, ALMACEN, encuentasmapa.Get("P3"),encuentasmapa.Get("P1"),encuentasmapa.Get("P2"),encuentasmapa.Get("P4"),encuentasmapa.Get("P5"),p6.Text,p7.Text,p8.Text,encuentasmapa.Get("P9"))) +' SV_ENCUESTA.Visible = False +' p_cliente.Visible = True +' B4XPages.MainPage.tipo_venta = "PREVENTA" +' B4XPages.ShowPage("productos") +' MsgboxAsync("Encuesta guardada","") + RB1_E1.Checked = False + RB2_E1.Checked = False + RB3_E1.Checked = False + RadioButton15.Checked = False + RadioButton16.Checked = False + RadioButton17.Checked = False + RadioButton1.Checked = False + RadioButton2.Checked = False + RadioButton3.Checked = False + RadioButton4.Checked = False + RadioButton5.Checked = False + RadioButton6.Checked = False + RadioButton7.Checked = False + RadioButton8.Checked = False + RadioButton9.Checked = False + RadioButton10.Checked = False + RadioButton11.Checked = False + RadioButton12.Checked = False + RadioButton13.Checked = False + RadioButton14.Checked = False + p6.Text = "" + p7.Text = "" + p8.Text = "" + CheckBox1.Checked = False + CheckBox2.Checked = False + CheckBox3.Checked = False + CheckBox4.Checked = False + CheckBox5.Checked = False + CheckBox6.Checked = False + CheckBox7.Checked = False + CheckBox8.Checked = False + + If ENCUESTA > 1 Then + ' para la m2 + If p_m1.IsInitialized And p_m1.Visible Then + p_m1.Visible = False + Else + + End If + p_pregunta1.Visible = False + p_cliente.Visible = False + SV_ENCUESTA.Visible = True + SV_ENCUESTA.Panel.LoadLayout("ESNCUESTA_m2") + p_m2.Width = Root.Width * 0.94 + SV_ENCUESTA.Panel.Height = p_m2.Height + 60 + Panel7_M2.Visible = False + Else + p_pregunta1.Visible = False + SV_ENCUESTA.Visible = False + p_cliente.Visible = True + tipo_venta = "VENTA" +' StartActivity(colonia2) + B4XPages.ShowPage("productos") + + End If + + Else + Msgbox("FALTAN DATOS DE CAPTURA FAVOR DE VALIDAR", "AVISO") + End If +End Sub + +Sub Tels_Click + B4XPages.ShowPage("NoVenta") +End Sub + +Private Sub B4XPage_CloseRequest As ResumableSub +' BACK key pressed +' Return True To close, False To cancel + If p_pregunta1.Visible Then + p_pregunta1.Visible = False + Else if SV_ENCUESTA.Visible Then + SV_ENCUESTA.visible = False + p_cliente.Visible = True + Else + B4XPages.ShowPage("Clientes") + End If +' Return True + Return False +End Sub + +Sub Tar_Click + B4XPages.ShowPage("Nota") +End Sub + +Sub DATOS_Click + B4XPages.ShowPage("telefonos") +End Sub + +Sub Guardar_Click + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=B4XPages.MainPage.skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE, COUNT(*) AS CUANTOS FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + c.Position=0 + If c.GetString("CUANTOS") > 0 Then + B4XPages.MainPage.skmt.ExecNonQuery("delete from NOVENTA where NV_CLIENTE In (select cuenta from cuentaa)") + B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)") + B4XPages.MainPage.skmt.ExecNonQuery2("insert into pedido_cliente(PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT) VALUES (?,?,?,?,?,?,?)", Array As Object(clie_id, sDate & sTime, usuario, c.GetString("CANT_CLIE"),c.GetString("TOTAL_CLIE"), B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps)) + B4XPages.MainPage.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 2 where CAT_CL_CODIGO In (select cuenta from cuentaa)") + End If + c.Close + DateTime.TimeFormat = "HHmmss" + sTime=DateTime.Time(DateTime.Now) + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE HIST_STAY_STORE set HSS_OUT = ? where HSS_OUT = 0 AND HSS_CODIGO In (select cuenta from cuentaa)", Array As Object(sTime)) + ' B4XPages.MainPage.skmt.ExecNonQuery("UPDATE HIST_STAY_STORE set HSS_TOT = HSS_OUT - HSS_IN where HSS_CODIGO In (select cuenta from cuentaa)") + Try + c=B4XPages.MainPage.skmt.ExecQuery(" Select (substr(HSS_OUT,1,2) - substr(HSS_IN,1,2)) - Case when (substr(HSS_OUT,3,2) - substr(HSS_IN,3,2)) < 0 Then 1 Else 0 end HORAS_TOTALES, " & _ + "Case when (substr(HSS_OUT,3,2) - substr(HSS_IN,3,2)) < 0 Then (substr(HSS_OUT,3,2) + 60 - substr(HSS_IN,3,2)) " & _ + " Else (substr(HSS_OUT,3,2) - substr(HSS_IN,3,2)) End - Case when (substr(HSS_OUT,5,2) - substr(HSS_IN,5,2)) < 0 Then 1 Else 0 end MINUTOS_TOTALES, " & _ + "Case when (substr(HSS_OUT,5,2) - substr(HSS_IN,5,2)) < 0 Then (substr(HSS_OUT,5,2) + 60 - substr(HSS_IN,5,2)) " & _ + " Else (substr(HSS_OUT,5,2) - substr(HSS_IN,5,2)) end SEGUNDOS_TOTALES " & _ + " from HIST_STAY_STORE where HSS_CODIGO In (Select cuenta from cuentaa) ") + c.Position = 0 + stay_hh = c.GetString("HORAS_TOTALES") * 60 * 60 + stay_mi = c.GetString("MINUTOS_TOTALES") * 60 + stay_ss = c.GetString("SEGUNDOS_TOTALES") + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE HIST_STAY_STORE set HSS_TOT = ? where HSS_CODIGO In (select cuenta from cuentaa)", Array As Object(stay_hh + stay_mi + stay_ss)) + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE HIST_STAY_OUT set HSO_FIN = ? ", Array As Object(sTime)) + c.Close + Catch + ToastMessageShow(".",True) + End Try + DateTime.TimeFormat = "HH:mm:ss" + B4XPages.ShowPage("Principal") +End Sub + +Sub NUEVO_Click + B4XPages.ShowPage("NuevoCliente") +End Sub + +Sub HIST_Click + B4XPages.ShowPage("Historico") +End Sub + +Sub BT_QR_Click + sc.isportrait = True + sc.timeoutDuration = 45 + sc.theViewFinderXfactor = 0.7 + sc.theViewFinderYfactor = 0.5 + sc.theResultColor = Colors.Green + sc.mustVibrate = True + sc.BeginScan("sc") +End Sub + +Sub sc_result(atype As String,Values As String, image As Bitmap) + 'Log("Type : " & atype) + 'Log("Value : " & Values) + CODIGO = Values + DD=B4XPages.MainPage.skmt.ExecQuery2("SELECT COUNT(*) AS CUANTOS FROM kmt_info WHERE CAT_CL_NUM_SERIEFISICO = ?", Array As String(CODIGO)) + DD.Position =0 + If DD.GetString("CUANTOS") > 0 Then + MsgboxAsync("Código ya asignado", "AVISO") + Else + If CODIGO.Length = 7 Then + Msgbox2Async("El código "& CODIGO & " es correcto?" , "Title", "Yes", "Cancel", "No", Null, False) + Wait For Msgbox_Result (resultado As Int) + If resultado = DialogResponse.POSITIVE Then + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE kmt_info set CAT_CL_NUM_SERIEFISICO = ?, CAT_CL_LONG = ?, CAT_CL_LAT =? where CAT_CL_CODIGO In (select cuenta from cuentaa)", Array As Object(CODIGO, B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps)) + L_QR.TEXT =CODIGO + L_QR.TextColor = Colors.Blue + B4XPages.MainPage.skmt.ExecNonQuery2("insert into HIST_CODIGO_BARRAS(CODIGOKMTS, CODIGOB, LAT, LON) VALUES (?,?,?,?)", Array As Object(la_cuenta.Text,CODIGO, B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps)) + End If + Else + MsgboxAsync("Código No Valido", "AVISO") + End If + End If + DD.Close +End Sub + +Sub sc_timedout(timedOut As Boolean) + Log("timedOut " & timedOut) +End Sub + +Sub sc_usercancelled(userCancelled As Boolean) + Log("userCancelled " & userCancelled) +End Sub + +Sub calc_ean_checksum(number As String) As String 'this has now become redundant as I am only interested in QR Codes + Dim i As Int + Dim cO As Char + Dim soma As Int + Dim n As Int + Dim digit As Float + soma = 0 + For i=0 To number.Length - 1 + digit = number.SubString2(i,i+1) + n= digit * ((i Mod 2) * 2 + 1) + soma=soma+n + Next + Return number & ( ( 10 - ( soma Mod 10 )) Mod 10 ) +End Sub + +Sub b_mapa_Click + B4XPages.ShowPage("mapas") +End Sub + +Sub Printer1_Connected (Success As Boolean) +' If Logger Then Log("Printer1_Connected") + If Success Then + ToastMessageShow("Impresora conectada", False) + skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("MACIMP")) + skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("MACIMP",Starter.mac_impresora)) + LogColor("Impresora conectada", Colors.Green) +' B_IMP2.Enabled = True + impresoraConectada = True + Else +' Msgbox(Printer1.ConnectedErrorMsg, "Error connecting.") 'ignore +' ToastMessageShow("Error conectando la impresora", False) + LogColor("Error conectando la impresora", Colors.Red) + errorImpresora = errorImpresora + 1 + If errorImpresora > 1 Then + Starter.MAC_IMPRESORA = "0" + errorImpresora = 0 + End If + End If +End Sub + +Sub B_IMP_Click +' Printer1.Connect2 +' c=Starter.skmt.ExecQuery2("select count(*) AS CUANTOS from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("PERFIL")) +' c.Position =0 +' perfil = c.GetString("CUANTOS") +' c.Close + +' If perfil > 0 Then +' c=Starter.skmt.ExecQuery2("select CAT_VA_VALOR from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("PERFIL")) +' If c.RowCount > 0 Then +' c.Position =0 +' perfil = c.GetString("CAT_VA_VALOR") +' c.Close +' End If +' LogColor(perfil,Colors.Magenta) +' End If + + + + c=skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c.Close +' c=Starter.skmt.ExecQuery2("SELECT CAT_VA_VALOR FROM CAT_VARIABLES WHERE CAT_VA_DESCRIPCION =?", Array As String ("SUCURSAL")) +' c.Position = 0 +' sucursal = c.GetString("CAT_VA_VALOR") +' c.Close + + ProgressDialogShow("Imprimiendo, un momento ...") + Printer1.DisConnect + If Not(Printer1.IsConnected) Then + Log("Conectando a impresora ...") + Printer1.Connect + Private cont As Int = 0 + Do While Not(impresoraConectada) + Sleep(1000) + Log("++++++ " & cont) + cont = cont + 1 + If cont = 2 Then Printer1.Connect 'Tratamos de reconectar + If cont > 3 Then impresoraConectada = True + Loop + Sleep(500) + impresoraConectada = False + Else + Log("conectando 2") + Printer1.Connect + Private cont As Int = 0 + Do While Not(impresoraConectada) Or Not(Printer1.IsConnected) + Sleep(1000) + Log("****** " & cont) + cont = cont + 1 + If cont = 2 Then Printer1.Connect + If cont > 3 Then impresoraConectada = True + Loop + Sleep(500) + impresoraConectada = False + End If + + TAMANO = 0 + ESPACIO = 21 + BLANCO = " " + Dim bmp As Bitmap + bmp.InitializeResize(File.DirAssets, "guna.png", 192, 192, True) 'ignore + Dim myimage As AnImage = Printer1.ImageToBWIMage(bmp) + Printer1.Justify = 1 + myimage = Printer1.DitherImage2D(myimage, 128) + myimage= Printer1.PackImage(myimage) + Printer1.WriteString(CRLF) ' nudge the printer to show the user something is happening + Printer1.WriteString(Printer1.REVERSE) + + Printer1.PrintImage(myimage) + Printer1.WriteString(Printer1.UNREVERSE) + + Printer1.Justify = 0 + 'printer.Initialize(cmp20.OutputStream) + Printer1.WriteString("DISRUPTIVE" & CRLF) +' Printer1.WriteString("RFC: DRT-110316-9J1" & CRLF) +' Printer1.WriteString(sucursal & CRLF) + Printer1.WriteString(sDate & " " &sTime & CRLF) + Printer1.WriteString("Vendedor:" & usuario & CRLF) + Printer1.WriteString("Tienda: " & La_nombre.Text & CRLF) + Printer1.WriteString("ID.Cliente: " & la_cuenta.Text & CRLF) + Printer1.WriteString("Calle: " & la_Calle.Text & CRLF) + Printer1.WriteString("Colonia: " & la_col.Text & CRLF) +' Printer1.WriteString("C.P.: " & la_cp.Text & CRLF) + Printer1.WriteString("Entre c/1: " & l_entre1.Text & CRLF) + Printer1.WriteString("Entre c/2: " & l_entre2.Text & CRLF) + + + Printer1.WriteString("-------------VENTA------------" & CRLF) + ' aqui es donde esta el pedo de julieta de los descuentos quitar el precio2 pero meter un if para saber si es ruta especial o es normal o que show. + s=skmt.ExecQuery2("select PE_PRONOMBRE, PE_CANT, length(pe_cant) as L_CANT, PE_COSTOU, length(PE_COSTOU) as L_COSTOU,PE_CANT * PE_COSTOU AS PE_COSTO_TOT, length(PE_CANT * PE_COSTOU) as L_COSTO_TOT,PE_PROID, PE_CEDIS FROM PEDIDO WHERE PE_CEDIS <> ? AND LENGTH(PE_CEDIS) < 4 AND PE_CLIENTE IN (Select CUENTA from cuentaa) order by PE_PROID", Array As String("DUR")) + If S.RowCount>0 Then + For i=0 To S.RowCount -1 + S.Position=i + If s.GetString("PE_CEDIS") = s.GetString("PE_PROID") Then + Printer1.WriteString(s.GetString("PE_PRONOMBRE") & CRLF) + + Else + + Printer1.WriteString(s.GetString("PE_CANT") & " " & s.GetString("PE_PRONOMBRE") & CRLF) + TAMANO = s.GetLong("L_CANT") + TAMANO + TAMANO = s.GetLong("L_COSTOU") + TAMANO + TAMANO = s.GetLong("L_COSTO_TOT") + TAMANO + + ESPACIO = ESPACIO - TAMANO + + For E=0 To ESPACIO -1 + BLANCO = " " & BLANCO + Next + Printer1.WriteString(BLANCO & s.GETSTRING("PE_CANT") & " X $" & s.GETSTRING("PE_COSTOU") & " $" & s.GETSTRING("PE_COSTO_TOT") & CRLF ) + TAMANO = 0 + ESPACIO = 21 + BLANCO = " " + End If + Next + End If + s.Close + Printer1.WriteString(" " & CRLF) + s=skmt.ExecQuery("select PE_PRONOMBRE, PE_CANT, length(pe_cant) as L_CANT, PE_COSTOU, length(PE_COSTOU) as L_COSTOU,PE_CANT * PE_COSTOU AS PE_COSTO_TOT, length(PE_CANT * PE_COSTOU) as L_COSTO_TOT,PE_PROID, PE_CEDIS FROM PEDIDO WHERE LENGTH(PE_CEDIS) > 3 AND PE_PROID NOT IN (SELECT CAT_PA_ID FROM PROMOS_COMP ) AND PE_CLIENTE IN (Select CUENTA from cuentaa) order by PE_CEDIS, PE_COSTOU") + If S.RowCount>0 Then + Printer1.WriteString("------------PROMOS------------" & CRLF) + For i=0 To S.RowCount -1 + S.Position=i + If s.GetString("PE_CEDIS") = s.GetString("PE_PROID") Then + Printer1.WriteString(s.GetString("PE_PRONOMBRE") & CRLF) + + Else + + Printer1.WriteString(s.GetString("PE_CANT") & " " & s.GetString("PE_PRONOMBRE") & CRLF) + TAMANO = s.GetLong("L_CANT") + TAMANO + TAMANO = s.GetLong("L_COSTOU") + TAMANO + TAMANO = s.GetLong("L_COSTO_TOT") + TAMANO + + ESPACIO = ESPACIO - TAMANO + + For E=0 To ESPACIO -1 + BLANCO = " " & BLANCO + Next + Printer1.WriteString(BLANCO & s.GETSTRING("PE_CANT") & " X $" & s.GETSTRING("PE_COSTOU") & " $" & s.GETSTRING("PE_COSTO_TOT") & CRLF ) + TAMANO = 0 + ESPACIO = 21 + BLANCO = " " + End If + Next + Printer1.WriteString(" " & CRLF) + End If + s.Close + +' Printer1.WriteString("-------------RMI..-----------" & CRLF) +' ' aqui es donde esta el pedo de julieta de los descuentos quitar el precio2 pero meter un if para saber si es ruta especial o es normal o que show. +' s=skmt.ExecQuery2("select PE_PRONOMBRE, PE_CANT, length(pe_cant) as L_CANT, PE_COSTOU, length(PE_COSTOU) as L_COSTOU,PE_CANT * PE_COSTOU AS PE_COSTO_TOT, length(PE_CANT * PE_COSTOU) as L_COSTO_TOT,PE_PROID, PE_CEDIS FROM PEDIDO WHERE PE_TIPO = ? AND PE_CEDIS = ? AND LENGTH(PE_CEDIS) < 4 AND PE_CLIENTE IN (Select CUENTA from cuentaa) order by PE_PROID", Array As String("PREVENTA","DUR")) +' If S.RowCount>0 Then +' For i=0 To S.RowCount -1 +' S.Position=i +' If s.GetString("PE_CEDIS") = s.GetString("PE_PROID") Then +' Printer1.WriteString(s.GetString("PE_PRONOMBRE") & CRLF) +' +' Else +' +' Printer1.WriteString(s.GetString("PE_CANT") & " " & s.GetString("PE_PRONOMBRE") & CRLF) +' TAMANO = s.GetLong("L_CANT") + TAMANO +' TAMANO = s.GetLong("L_COSTOU") + TAMANO +' TAMANO = s.GetLong("L_COSTO_TOT") + TAMANO +' +' ESPACIO = ESPACIO - TAMANO +' +' For E=0 To ESPACIO -1 +' BLANCO = " " & BLANCO +' Next +' Printer1.WriteString(BLANCO & s.GETSTRING("PE_CANT") & " X $" & s.GETSTRING("PE_COSTOU") & " $" & s.GETSTRING("PE_COSTO_TOT") & CRLF ) +' TAMANO = 0 +' ESPACIO = 21 +' BLANCO = " " +' End If +' Next +' End If +' s.Close + + s=skmt.ExecQuery("select SUM(PE_COSTO_TOT) AS TOTAL FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + s.Position =0 + ' If s.GetString("TOTAL") - s.GetString("TOTAL2") <> 0 Then + ' Printer1.WriteString("Descuento: $" & (s.GetString("TOTAL2") - s.GetString("TOTAL"))) + ' End If + Printer1.WriteString("Total venta: $" & s.GetString("TOTAL") & CRLF) + s.Close + c= skmt.ExecQuery("select sum(PE_CANT) as PC_NOART from PEDIDO where PE_CLIENTE in (Select CUENTA from cuentaa) AND PE_PROID NOT IN (SELECT CAT_PA_ID FROM PROMOS_COMP )") + C.Position=0 + Printer1.WriteString("Total articulos: " & c.GetString("PC_NOART") & CRLF) + c.Close + + Printer1.WriteString(" " & CRLF) + Printer1.WriteString("------------------------------" & CRLF) + Printer1.WriteString("ENTREGA EN :" & CRLF) + Printer1.WriteString(la_Calle.Text & CRLF) + Printer1.WriteString("----ESTE TICKET NO ES UN -----" & CRLF) + Printer1.WriteString("--COMPROBANTE FISCAL, SOLO ES-" & CRLF) + Printer1.WriteString("--------INFORMATIVO-----------" & CRLF) + Printer1.WriteString("------------------------------" & CRLF) + Printer1.WriteString(" " & CRLF) + Printer1.WriteString(" " & CRLF) + Printer1.WriteString(" " & CRLF) + + Sleep(1000) + Printer1.DisConnect + + ProgressDialogHide +' printer.Flush + ' printer.Close + +End Sub + +'Sub B_IMP_Click +' TAMANO = 0 +' ESPACIO = 21 +' BLANCO = " " +' printer.Initialize(cmp20.OutputStream) +' printer.WriteLine("DURAKELO S.A. de C.V.") +' printer.WriteLine("RFC: DUR-011025-T12") +' printer.WriteLine("Tel.: 618-826-0104") +' printer.WriteLine("Vendedor: KMTS ") +' printer.WriteLine("Tienda: " & La_nombre.Text) +' printer.WriteLine("-----------PREVENTA-----------") +' s=B4XPages.MainPage.skmt.ExecQuery("select PE_PRONOMBRE, PE_CANT, length(pe_cant) as L_CANT, PE_COSTOU, length(PE_COSTOU) as L_COSTOU, PE_COSTO_TOT, length(PE_COSTO_TOT) as L_COSTO_TOT FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") +' If S.RowCount>0 Then +' For i=0 To S.RowCount -1 +' S.Position=i +' printer.WriteLine(s.GetString("PE_CANT") & " " & s.GetString("PE_PRONOMBRE")) +' TAMANO = s.GetLong("L_CANT") + TAMANO +' TAMANO = s.GetLong("L_COSTOU") + TAMANO +' TAMANO = s.GetLong("L_COSTO_TOT") + TAMANO +' ESPACIO = ESPACIO - TAMANO +' For E=0 To ESPACIO -1 +' BLANCO = " " & BLANCO +' Next +' printer.WriteLine(BLANCO & s.GETSTRING("PE_CANT") & " X $" & s.GETSTRING("PE_COSTOU") & " $" & s.GETSTRING("PE_COSTO_TOT") ) +' TAMANO = 0 +' ESPACIO = 21 +' BLANCO = " " +' Next +' End If +' s.Close +' printer.WriteLine("Total Preventa: $" & total_cliente) +' printer.WriteLine("------------VENTA-------------") +' printer.WriteLine(" ") +' printer.WriteLine("TOTAL: $" & total_cliente) +' printer.WriteLine(" ") +' printer.WriteLine("----ESTE TICKET NO ES UN -----") +' printer.WriteLine("--COMPROBANTE FISCAL, SOLO ES-") +' printer.WriteLine("--------INFORMATIVO-----------") +' printer.WriteLine("------------------------------") +' printer.WriteLine(" ") +' printer.Flush +'' printer.Close +'End Sub + +Sub Printer_Connected (Success As Boolean) + If Success Then + B_IMP.Enabled = True + Else + B_IMP.Enabled = False + If Msgbox2("", "Printer Error","Reprint","Cancel","",Null) = DialogResponse.POSITIVE Then 'Ignore + StartPrinter + End If + End If +End Sub + +Sub StartPrinter + Dim PairedDevices As Map + Dim L As List + Dim resimp As Int + ToastMessageShow("Printing.....",True) + PairedDevices.Initialize + Try + PairedDevices = cmp20.GetPairedDevices + Catch + Msgbox("Getting Paired Devices","Printer Error") 'Ignore + printer.Close + cmp20.Disconnect + End Try + If PairedDevices.Size = 0 Then + Msgbox("Error Connecting to Printer - Printer Not Found","") 'Ignore + Return + End If + If PairedDevices.Size = 1 Then + Try + cmp20.ConnectInsecure(btAdmin,PairedDevices.Get(PairedDevices.GetKeyAt(0)),1) + Catch + Msgbox("Connecting","Printer Error") 'Ignore + printer.Close + cmp20.Disconnect + End Try + Else + L.Initialize + For i = 0 To PairedDevices.Size - 1 + L.Add(PairedDevices.GetKeyAt(i)) + Next + resimp = InputList(L, "Choose device", -1) 'Ignore + If resimp <> DialogResponse.CANCEL Then + cmp20.Connect(PairedDevices.Get(L.Get(resimp))) + End If + End If +End Sub + +Sub B_GUARDA_C_Click + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=B4XPages.MainPage.skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + c.Close + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO,PE_RUTA) VALUES(?,?,?,?,?,?,?,?,?,?) ", Array As Object ("4",.01 , .01, 2, "KNORR RINDE MAS 70 GR", "GUNA2",la_cuenta.TEXT, sDate & sTime, usuario,LA_RUTA)) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_FACE(HFCLIENTE, HFALIAS,HFRUTA,HFALMACEN) VALUES (?,?,?,?) ", Array As Object(la_cuenta.Text, I_COMPRA.Text,LA_RUTA,ALMACEN)) + Panel1.Visible = False + b_like.Visible = True + Tar.Visible = True + Tels.Visible = True + gest.Visible = True + b_like.Visible = False + Guardar.Visible = True +End Sub + +Sub b_venta_Click + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) +' s=B4XPages.MainPage.skmt.ExecQuery("select COUNT(*) AS CUANTOS from HIST_ENCUESTA where HE_CLIE In (Select cuenta from cuentaa)") +' s.Position= 0 +' If s.GetString("CUANTOS") = 0 Then +' c=B4XPages.MainPage.skmt.ExecQuery2("SELECT CAT_VA_VALOR FROM CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String("CUESTIONARIO")) +' c.Position =0 +' If c.GetString("CAT_VA_VALOR") = "2" Then +' res = Msgbox2("El cliente maneja CAZARES ?","CAZARES", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'Ignore +' If res = DialogResponse.POSITIVE Then +' B4XPages.MainPage.skmt.ExecNonQuery2("insert into HIST_ENCUESTA(HE_CLIE, HE_RES, HE_FECHA, HE_TIPO) VALUES (?,?,?,?)", Array As Object(la_cuenta.Text, "SI",sDate & sTime,"TIENE")) +' Panel1.Visible =True +' I_COMPRA.Text = "" +' BT_QR.Visible= False +' Else +' B4XPages.MainPage.skmt.ExecNonQuery2("insert into HIST_ENCUESTA(HE_CLIE, HE_RES, HE_FECHA, HE_TIPO) VALUES (?,?,?,?)", Array As Object(la_cuenta.Text, "NO",sDate & sTime,"TIENE")) +' B4XPages.MainPage.tipo_venta = "VENTA" +' B4XPages.ShowPage("Productos") +' End If +' Else +' B4XPages.MainPage.tipo_venta = "VENTA" +' B4XPages.ShowPage("Productos") +' End If +' c.Close +' Else +' B4XPages.MainPage.tipo_venta = "VENTA" +' B4XPages.ShowPage("Productos") +' End If +' s.Close +End Sub + +Sub B_E_NEXT_Click + If E_RES_E.Text <> "" Then + B4XPages.MainPage.skmt.ExecNonQuery2("insert into HIST_ENCUESTA(HE_CLIE, HE_RES, HE_FECHA, HE_TIPO) VALUES (?,?,?,?)", Array As Object(la_cuenta.Text, E_RES_E.Text,sDate & sTime,"DONDE")) + Panel2.Visible = False + B4XPages.ShowPage("Productos") + Else + Msgbox("SIN RESPUESTA","AVISO") 'Ignore + End If +End Sub + +Sub RB1_CheckedChange(Checked As Boolean) + If RB1.Checked = True Then + E_RES_E.Text = "CENTRAL DE ABASTOS" + End If +End Sub + +Sub RB2_CheckedChange(Checked As Boolean) + If RB2.Checked = True Then + E_RES_E.Text = "AUTOSERVICIO" + End If +End Sub + +Sub RB3_CheckedChange(Checked As Boolean) + If RB3.Checked = True Then + E_RES_E.Text = "CLUB DE PRECIO" + End If +End Sub + +Sub RB4_CheckedChange(Checked As Boolean) + If RB4.Checked = True Then + E_RES_E.Text = "DIRECTO PEDEGREE" + End If +End Sub + +Sub b_like_Click + Panel1.Visible = True + b_like.Visible = False + Tar.Visible = False + Tels.Visible = False + gest.Visible = False + b_venta.Visible = False + Guardar.Visible = False +End Sub + +Sub B_GPS_Click + Dim result As Int + result = Msgbox2("Esta seguro de cambiar las coordenadas de este cliente", "Aviso GPS", "SI", "", "NO", LoadBitmap(File.DirAssets, "alerta.jpg")) 'Ignore + If result = DialogResponse.Positive Then + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE kmt_info SET CAT_CL_LAT = ?, CAT_CL_LONG = ? where CAT_CL_CODIGO In (Select cuenta from cuentaa)", Array As Object(B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps)) + B4XPage_Appear + End If +End Sub + +Private Sub p_cliente_Click + 'Nada aqui, solo esta para que los clics no se pasen hacia atras. +End Sub + + +Private Sub Panel5_Click + +End Sub + +' P2 M1 + +Private Sub RB1_E1_CheckedChange(Checked As Boolean) + Log($"RB1 Clicked - chk:${Sender.As(RadioButton).Checked}"$) + encuentasmapa.Put("P1", Sender.As(RadioButton).text) + encuentasmapa.Remove("P2") + Panel7.Visible = False + RadioButton17.Checked = False + RadioButton16.Checked = False + RadioButton15.Checked = False + encuentasmapa.Remove("P2") + Log(encuentasmapa) +End Sub + +Private Sub RB2_E1_CheckedChange(Checked As Boolean) + Log($"RB2 Clicked - chk:${Sender.As(RadioButton).Checked}"$) + encuentasmapa.Put("P1", Sender.As(RadioButton).text) + RadioButton17.Checked = False + encuentasmapa.Remove("P2") + RadioButton17.Checked = False + RadioButton16.Checked = False + RadioButton15.Checked = False + Panel7.Visible = False + encuentasmapa.Remove("P2") + Log(encuentasmapa) +End Sub + +Private Sub RB3_E1_CheckedChange(Checked As Boolean) + Log($"RB3 Clicked - chk:${Sender.As(RadioButton).Checked}"$) + encuentasmapa.Put("P1", Sender.As(RadioButton).text) + + Panel7.Visible = True + Log(encuentasmapa) +End Sub + +' FIN P2 M1 + +' p2_1 m1 +Private Sub RadioButton17_CheckedChange(Checked As Boolean) + encuentasmapa.Put("P2", Sender.As(RadioButton).text) + Log(encuentasmapa) +End Sub + +Private Sub RadioButton16_CheckedChange(Checked As Boolean) + encuentasmapa.Put("P2", Sender.As(RadioButton).text) + Log(encuentasmapa) +End Sub + +Private Sub RadioButton15_CheckedChange(Checked As Boolean) + encuentasmapa.Put("P2", Sender.As(RadioButton).text) + Log(encuentasmapa) +End Sub +' fin p2_1 m1 + + +'PREGUNTA 1 MODULO 1 + +Private Sub RadioButton1_CheckedChange(Checked As Boolean) + encuentasmapa.Put("P3", Sender.As(RadioButton).text) + Log(encuentasmapa) +End Sub + +Private Sub RadioButton2_CheckedChange(Checked As Boolean) + encuentasmapa.Put("P3", Sender.As(RadioButton).text) + Log(encuentasmapa) +End Sub + +Private Sub RadioButton3_CheckedChange(Checked As Boolean) + encuentasmapa.Put("P3", Sender.As(RadioButton).text) + Log(encuentasmapa) +End Sub + +Private Sub RadioButton4_CheckedChange(Checked As Boolean) + encuentasmapa.Put("P3", Sender.As(RadioButton).text) + Log(encuentasmapa) +End Sub + +' FIN PREGUNTA 1 MODULO 1 + +' P3 M1 +Private Sub RadioButton5_CheckedChange(Checked As Boolean) + encuentasmapa.Put("P4", Sender.As(RadioButton).text) + Log(encuentasmapa) +End Sub + +Private Sub RadioButton6_CheckedChange(Checked As Boolean) + encuentasmapa.Put("P4", Sender.As(RadioButton).text) + Log(encuentasmapa) +End Sub + +Private Sub RadioButton7_CheckedChange(Checked As Boolean) + encuentasmapa.Put("P4", Sender.As(RadioButton).text) + Log(encuentasmapa) +End Sub + +Private Sub RadioButton8_CheckedChange(Checked As Boolean) + encuentasmapa.Put("P4", Sender.As(RadioButton).text) + Log(encuentasmapa) +End Sub + +Private Sub RadioButton9_CheckedChange(Checked As Boolean) + encuentasmapa.Put("P4", Sender.As(RadioButton).text) + Log(encuentasmapa) +End Sub + +' FIN P3 M1 + +'P4 M1 + +Private Sub RadioButton10_CheckedChange(Checked As Boolean) + encuentasmapa.Put("P5", Sender.As(RadioButton).text) + Log(encuentasmapa) +End Sub + +Private Sub RadioButton11_CheckedChange(Checked As Boolean) + encuentasmapa.Put("P5", Sender.As(RadioButton).text) + Log(encuentasmapa) +End Sub + +Private Sub RadioButton12_CheckedChange(Checked As Boolean) + encuentasmapa.Put("P5", Sender.As(RadioButton).text) + Log(encuentasmapa) +End Sub + +Private Sub RadioButton13_CheckedChange(Checked As Boolean) + encuentasmapa.Put("P5", Sender.As(RadioButton).text) + Log(encuentasmapa) +End Sub + +Private Sub RadioButton14_CheckedChange(Checked As Boolean) + encuentasmapa.Put("P5", Sender.As(RadioButton).text) + Log(encuentasmapa) +End Sub + +' FIN P4 M1 + +Private Sub CheckBox1_CheckedChange(Checked As Boolean) + Dim textemp As String ="" + textemp = CheckBox1.Text + If CheckBox2.Checked Then textemp = textemp & ", " & CheckBox2.Text + If CheckBox3.Checked Then textemp = textemp & ", " & CheckBox3.Text + If CheckBox4.Checked Then textemp = textemp & ", " & CheckBox4.Text + If CheckBox5.Checked Then textemp = textemp & ", " & CheckBox5.Text + If CheckBox6.Checked Then textemp = textemp & ", " & CheckBox6.Text + If CheckBox7.Checked Then textemp = textemp & ", " & CheckBox7.Text + If CheckBox8.Checked Then textemp = textemp & ", " & CheckBox8.Text + encuentasmapa.Put("P9", textemp) + Log(encuentasmapa) +End Sub + +Private Sub CheckBox2_CheckedChange(Checked As Boolean) + Dim textemp As String ="" + textemp = CheckBox2.Text + If CheckBox1.Checked Then textemp = textemp & ", " & CheckBox1.Text + If CheckBox3.Checked Then textemp = textemp & ", " & CheckBox3.Text + If CheckBox4.Checked Then textemp = textemp & ", " & CheckBox4.Text + If CheckBox5.Checked Then textemp = textemp & ", " & CheckBox5.Text + If CheckBox6.Checked Then textemp = textemp & ", " & CheckBox6.Text + If CheckBox7.Checked Then textemp = textemp & ", " & CheckBox7.Text + If CheckBox8.Checked Then textemp = textemp & ", " & CheckBox8.Text + encuentasmapa.Put("P9", textemp) + Log(encuentasmapa) +End Sub + +Private Sub CheckBox3_CheckedChange(Checked As Boolean) + Dim textemp As String ="" + textemp = CheckBox3.Text + If CheckBox1.Checked Then textemp = textemp & ", " & CheckBox1.Text + If CheckBox2.Checked Then textemp = textemp & ", " & CheckBox2.Text + If CheckBox4.Checked Then textemp = textemp & ", " & CheckBox4.Text + If CheckBox5.Checked Then textemp = textemp & ", " & CheckBox5.Text + If CheckBox6.Checked Then textemp = textemp & ", " & CheckBox6.Text + If CheckBox7.Checked Then textemp = textemp & ", " & CheckBox7.Text + If CheckBox8.Checked Then textemp = textemp & ", " & CheckBox8.Text + encuentasmapa.Put("P9", textemp) + Log(encuentasmapa) +End Sub + +Private Sub CheckBox4_CheckedChange(Checked As Boolean) + Dim textemp As String ="" + textemp = CheckBox4.Text + If CheckBox1.Checked Then textemp = textemp & ", " & CheckBox1.Text + If CheckBox2.Checked Then textemp = textemp & ", " & CheckBox2.Text + If CheckBox3.Checked Then textemp = textemp & ", " & CheckBox3.Text + If CheckBox5.Checked Then textemp = textemp & ", " & CheckBox5.Text + If CheckBox6.Checked Then textemp = textemp & ", " & CheckBox6.Text + If CheckBox7.Checked Then textemp = textemp & ", " & CheckBox7.Text + If CheckBox8.Checked Then textemp = textemp & ", " & CheckBox8.Text + encuentasmapa.Put("P9", textemp) + Log(encuentasmapa) +End Sub + +Private Sub CheckBox5_CheckedChange(Checked As Boolean) + Dim textemp As String ="" + textemp = CheckBox5.Text + If CheckBox1.Checked Then textemp = textemp & ", " & CheckBox1.Text + If CheckBox2.Checked Then textemp = textemp & ", " & CheckBox2.Text + If CheckBox3.Checked Then textemp = textemp & ", " & CheckBox3.Text + If CheckBox4.Checked Then textemp = textemp & ", " & CheckBox4.Text + If CheckBox6.Checked Then textemp = textemp & ", " & CheckBox6.Text + If CheckBox7.Checked Then textemp = textemp & ", " & CheckBox7.Text + If CheckBox8.Checked Then textemp = textemp & ", " & CheckBox8.Text + encuentasmapa.Put("P9", textemp) + Log(encuentasmapa) +End Sub + +Private Sub CheckBox6_CheckedChange(Checked As Boolean) + Dim textemp As String ="" + textemp = CheckBox6.Text + If CheckBox1.Checked Then textemp = textemp & ", " & CheckBox1.Text + If CheckBox2.Checked Then textemp = textemp & ", " & CheckBox2.Text + If CheckBox3.Checked Then textemp = textemp & ", " & CheckBox3.Text + If CheckBox4.Checked Then textemp = textemp & ", " & CheckBox4.Text + If CheckBox5.Checked Then textemp = textemp & ", " & CheckBox5.Text + If CheckBox7.Checked Then textemp = textemp & ", " & CheckBox7.Text + If CheckBox8.Checked Then textemp = textemp & ", " & CheckBox8.Text + encuentasmapa.Put("P9", textemp) + Log(encuentasmapa) +End Sub + +Private Sub CheckBox7_CheckedChange(Checked As Boolean) + Dim textemp As String ="" + textemp = CheckBox7.Text + If CheckBox1.Checked Then textemp = textemp & ", " & CheckBox1.Text + If CheckBox2.Checked Then textemp = textemp & ", " & CheckBox2.Text + If CheckBox3.Checked Then textemp = textemp & ", " & CheckBox3.Text + If CheckBox4.Checked Then textemp = textemp & ", " & CheckBox4.Text + If CheckBox5.Checked Then textemp = textemp & ", " & CheckBox5.Text + If CheckBox6.Checked Then textemp = textemp & ", " & CheckBox6.Text + If CheckBox8.Checked Then textemp = textemp & ", " & CheckBox8.Text + encuentasmapa.Put("P9", textemp) + Log(encuentasmapa) +End Sub + +Private Sub CheckBox8_CheckedChange(Checked As Boolean) + Dim textemp As String ="" + textemp = CheckBox8.Text + If CheckBox1.Checked Then textemp = textemp & ", " & CheckBox1.Text + If CheckBox2.Checked Then textemp = textemp & ", " & CheckBox2.Text + If CheckBox3.Checked Then textemp = textemp & ", " & CheckBox3.Text + If CheckBox4.Checked Then textemp = textemp & ", " & CheckBox4.Text + If CheckBox5.Checked Then textemp = textemp & ", " & CheckBox5.Text + If CheckBox6.Checked Then textemp = textemp & ", " & CheckBox6.Text + If CheckBox7.Checked Then textemp = textemp & ", " & CheckBox7.Text + encuentasmapa.Put("P9", textemp) + Log(encuentasmapa) +End Sub + +Private Sub B_guardaencuesta_m2_Click + P3_M2 = "" + P6_M2 = "" + P4_M2 = "" + + PASA = "1" + If et_p1_m2.Text = "" Then PASA = "0" + If et_p2_m2.Text = "" Then PASA = "0" + P4_M2 = "" + If rd1_p4_m2.Checked Then P4_M2 = "ALTO" + If rd2_p4_m2.Checked Then P4_M2 = "MEDIO" + If rd3_p4_m2.Checked Then P4_M2 = "BAJO" + + If P4_M2 = "" Then PASA = "0" + + P6_M2 = "" + If RB1_P6_M2.Checked Then P6_M2 = "LUNES" + If RB2_P6_M2.Checked Then P6_M2 = "MARTES" + If RB3_P6_M2.Checked Then P6_M2 = "MIERCOLES" + If RB4_P6_M2.Checked Then P6_M2 = "JUEVES" + If RB5_P6_M2.Checked Then P6_M2 = "VIERNES" + If RB6_P6_M2.Checked Then P6_M2 = "SABADO" + If RB7_P6_M2.Checked Then P6_M2 = "DOMINGO" + + If P6_M2 = "" Then PASA = "0" + +' P3_M2 = CB1_P3_M2.Checked & "," & CB2_P3_M2.Checked & "," & CB3_P3_M2.Checked & "," & CB4_P3_M2.Checked & "," & CB5_P3_M2.Checked & "," & CB6_P3_M2.Checked & "," & RB1_P3_M2.Checked & "," & RB2_P3_M2.Checked & "," & RB3_P3_M2.Checked& "," & ET_P3_M2.TEXT & "," & CB1_P4_M2.Checked & "," & CB2_P4_M2.Checked & "," & CB3_P4_M2.Checked & "," & CB4_P4_M2.Checked + If CB1_P3_M2.Checked = False And CB2_P3_M2.Checked = False And CB3_P3_M2.Checked = False And CB4_P3_M2.Checked = False And CB5_P3_M2.Checked = False And CB6_P3_M2.Checked = False And RB1_P3_M2.Checked = False And RB2_P3_M2.Checked = False And RB3_P3_M2.Checked = False And ET_P3_M2.TEXT = False And CB1_P4_M2.Checked = False And CB2_P4_M2.Checked = False And CB3_P4_M2.Checked = False And CB4_P4_M2.Checked = False Then PASA = "0" + If et_p5_m2.Text = "" Then PASA = "0" + Log(textemp2) + If textemp2 <> "" And textemp2.SubString2(0,2) = ", " Then textemp2 = textemp2.SubString(2) + Log(textemp2) + P3_M2 = textemp2 + If RB2_P4_M2.Checked Then + P3_M2 = P3_M2 &"|" & "NO" + + Else if RB1_P4_M2.Checked Then + P3_M2 = P3_M2 &"|" & "SI" + If ET_P3_M2.Text = "" Then + If RB1_P3_M2.Checked Then P3_M2 = P3_M2 &"|" & "Rappi" + If RB2_P3_M2.Checked Then P3_M2 = P3_M2 &"|" & "Coca Cola" + If RB3_P3_M2.Checked Then P3_M2 = P3_M2 &"|" & "Modelo" + If RB4_P3_M2.Checked Then P3_M2 = P3_M2 &"|" & "Rabbit" + Else If ET_P3_M2.Text <> "" Then + If RB1_P3_M2.Checked Then P3_M2 = P3_M2 &"|" & "Rappi" + If RB2_P3_M2.Checked Then P3_M2 = P3_M2 &"|" & "Coca Cola" + If RB3_P3_M2.Checked Then P3_M2 = P3_M2 &"|" & "Modelo" + If RB4_P3_M2.Checked Then P3_M2 = P3_M2 &"|" & "Rabbit" + P3_M2 = P3_M2 &", " & ET_P3_M2.Text + End If + End If + If textemp3 <> "" And textemp3.SubString2(0,2) = ", " Then textemp3 = textemp3.SubString(2) + + P3_M2 = P3_M2 &"|" & textemp3 + + If P3_M2 <> "" And P3_M2.SubString2(0,2) = ", " Then P3_M2 = P3_M2.SubString(2) + LogColor(P3_M2,Colors.BlUE) + If PASA = "1" Then + skmt.ExecNonQuery2("INSERT INTO ENCUESTA_MODULO2 (CLIENTE, ALMACEN,P1, P2, P3, P4, P5, P6) VALUES (?,?,?,?,?,?,?,?)", Array As Object(Subs.traeCliente, ALMACEN,et_p1_m2.Text,et_p2_m2.Text,P3_M2,P4_M2,et_p5_m2.Text,P6_M2 )) + SV_ENCUESTA.Visible = False + p_cliente.Visible = True + et_p1_m2.Text = "" + et_p2_m2.TEXT = "" + RB7_P6_M2.Checked = False + RB6_P6_M2.Checked = False + RB5_P6_M2.Checked = False + RB4_P6_M2.Checked = False + RB3_P6_M2.Checked = False + RB2_P6_M2.Checked = False + RB1_P6_M2.Checked = False + et_p5_m2.Text = "" + rd3_p4_m2.Checked = False + rd2_p4_m2.Checked = False + rd1_p4_m2.Checked = False + RB1_P3_M2.Checked = False + RB2_P3_M2.Checked = False + RB3_P3_M2.Checked = False + RB4_P3_M2.Checked = False + + CB1_P3_M2.Checked = False + CB2_P3_M2.Checked = False + CB3_P3_M2.Checked = False + CB4_P3_M2.Checked = False + CB5_P3_M2.Checked = False + CB6_P3_M2.Checked = False + + ET_P3_M2.Text = "" + P3_M2 = "" + P4_M2 = "" + P6_M2 = "" + + Panel7_M2.Visible = False + +' B4XPages.MainPage.tipo_venta = "PREVENTA" +' B4XPages.ShowPage("productos") + + If ENCUESTA > 2 Then + If p_m2.IsInitialized And p_m2.Visible Then + p_m2.Visible = False + Else + + End If + p_pregunta1.Visible = False + p_cliente.Visible = False + SV_ENCUESTA.Visible = True + SV_ENCUESTA.Panel.LoadLayout("ENCUESSTA_M3") + p_m3.Width = Root.Width * 0.94 + SV_ENCUESTA.Panel.Height = p_m3.Height + 60 + '35,36,45,46,47,54,64,65,71,3,25,27,38 + If Subs.traeAlmacen = 1 Or Subs.traeAlmacen = 2 Or Subs.traeAlmacen = 4 Or Subs.traeAlmacen = 5 Or Subs.traeAlmacen =35 Or Subs.traeAlmacen =36 Or Subs.traeAlmacen =45 Or Subs.traeAlmacen =46 Or Subs.traeAlmacen =47 Or Subs.traeAlmacen =54 Or Subs.traeAlmacen =64 Or Subs.traeAlmacen =65 Or Subs.traeAlmacen =71 Or Subs.traeAlmacen =3 Or Subs.traeAlmacen =25 Or Subs.traeAlmacen =27 Or Subs.traeAlmacen =38 Then + CB1_P6_M3.Text = "GARIS" + CB2_P6_M3.Text = "SAHUAYO" + CB3_P6_M3.Text = "ZORRO" + CB4_P6_M3.Text = "ESCORPION" + CB5_P6_M3.Text = "RABBIT" + CB6_P6_M3.Text = "SAMS" + + else If Subs.traeAlmacen = 12 Then ' + CB1_P6_M3.Text = "DECASA" + CB2_P6_M3.Text = "ZETA" + CB3_P6_M3.Text = "SAHUAYO" + CB4_P6_M3.Text = "DUERO" + CB5_P6_M3.Text = "HUGOSS" + CB6_P6_M3.Text = "ZORRO" + else If Subs.traeAlmacen = 13 Then ' + CB1_P6_M3.Text = "DECASA" + CB2_P6_M3.Text = "ZETA" + CB3_P6_M3.Text = "SAHUAYO" + CB4_P6_M3.Text = "SCORPION" + CB5_P6_M3.Text = "ZORRO" + CB6_P6_M3.Text = "GARIS" + else If Subs.traeAlmacen = 14 Or Subs.traeAlmacen =69 Or Subs.traeAlmacen =37 Then '69 -37 + CB1_P6_M3.Text = "DECASA" + CB2_P6_M3.Text = "ZETA" + CB3_P6_M3.Text = "SAHUAYO" + CB4_P6_M3.Text = "DUERO" + CB5_P6_M3.Text = "RIVERA/GRAN BODEGA" + CB6_P6_M3.Text = "ZORRO" + else If Subs.traeAlmacen = 16 Or Subs.traeAlmacen =70 Then '70 + CB1_P6_M3.Text = "DECASA" + CB2_P6_M3.Text = "ZETA" + CB3_P6_M3.Text = "SAHUAYO" + CB4_P6_M3.Text = "DUERO" + CB5_P6_M3.Text = "RIVERA/GRAN BODEGA" + CB6_P6_M3.Text = "SAMS" + else If Subs.traeAlmacen = 17 Then ' + CB1_P6_M3.Text = "DECASA" + CB2_P6_M3.Text = "SAHUAYO" + CB3_P6_M3.Text = "" + CB4_P6_M3.Text = "" + CB5_P6_M3.Text = "" + CB6_P6_M3.Text = "" + else If Subs.traeAlmacen = 29 Or Subs.traeAlmacen =31 Then '31 + CB1_P6_M3.Text = "DECASA" + CB2_P6_M3.Text = "ZETA" + CB3_P6_M3.Text = "SAHUAYO" + CB4_P6_M3.Text = "DUERO" + CB5_P6_M3.Text = "SAMS" + CB6_P6_M3.Text = "RIVERA/GRAN BODEGA" + else If Subs.traeAlmacen = 32 Or Subs.traeAlmacen =33 Then '33 + CB1_P6_M3.Text = "MAS BODEGA" + CB2_P6_M3.Text = "SAHUAYO" + CB3_P6_M3.Text = "TREVIÑO" + CB4_P6_M3.Text = "HUGOSS" + CB5_P6_M3.Text = "RABBIT" + CB6_P6_M3.Text = "SAMS" + else If Subs.traeAlmacen = 66 Or Subs.traeAlmacen =67 Then '67 + CB1_P6_M3.Text = "DECASA" + CB2_P6_M3.Text = "ZETA" + CB3_P6_M3.Text = "SAHUAYO" + CB4_P6_M3.Text = "DUERO" + CB5_P6_M3.Text = "SCORPION" + CB6_P6_M3.Text = "SAMS" + + else If Subs.traeAlmacen = 22 Or Subs.traeAlmacen =34 Then '34 + CB1_P6_M3.Text = "DECASA" + CB2_P6_M3.Text = "ZETA" + CB3_P6_M3.Text = "SAHUAYO" + CB4_P6_M3.Text = "MERZA/DUERO" + CB5_P6_M3.Text = "HUGOSS" + + End If + + + Else + p_pregunta1.Visible = False + SV_ENCUESTA.Visible = False + p_cliente.Visible = True + tipo_venta = "VENTA" +' StartActivity(colonia2) + B4XPages.ShowPage("productos") + MsgboxAsync("Encuesta guardada","") + End If + Else + Msgbox("FAVOR DE CONTESTAR LA ENCUESTA","AVISO") + End If +End Sub + +Private Sub CB6_P3_M2_CheckedChange(Checked As Boolean) + If CB6_P3_M2.Checked = True Then + Panel7_M2.Visible = True + Else + Panel7_M2.Visible = False + End If + + +End Sub + +Private Sub B_guardaencuesta_m3_Click + + PASA = "1" +' textemp4 = "" +' textemp5 = "" +' textemp6 = "" +' textemp7 = "" +' textemp8 = "" + Private P3_M3 As String = "" + Private P4_M3 As String = "" + Private P5_M3 As String = "" + Private P6_M3 As String = "" + Private P7_M3 As String = "" + Private P8_M3 As String = "" + Private P9_M3 As String = "" + + +' If et_p1_m3.Text = "" Then PASA = "0" +' If et_p2_m3.Text = "" Then PASA = "0" + + If rd1_p5_m3.Checked Then P5_M3 = "SI" + If rd2_p5_m3.Checked Then P5_M3 = "NO" + + If RB1_P9_M3.Checked Then P9_M3 = "DIARIO" + If RB2_P9_M3.Checked Then P9_M3 = "BISEMANAL" + If RB3_P9_M3.Checked Then P9_M3 = "SEMANAL" + If RB4_P9_M3.Checked Then P9_M3 = "QUINCENAL" + If RB5_P9_M3.Checked Then P9_M3 = "MENSUAL" + If P9_M3 = "" Then PASA = "0" + If P5_M3 = "" Then PASA = "0" + +' P3_M3 = CB1_P3_M3.Checked & "," & CB2_P3_M3.Checked & "," & CB3_P3_M3.Checked & "," & CB4_P3_M3.Checked & "," & CB5_P3_M3.Checked + If CB1_P3_M3.Checked = False And CB2_P3_M3.Checked = False And CB3_P3_M3.Checked = False And CB4_P3_M3.Checked = False And CB5_P3_M3.Checked = False Then PASA = "0" +' P4_M3 = CB1_P4_M3.Checked & "," & CB2_P4_M3.Checked & "," & CB3_P4_M3.Checked & "," & CB4_P4_M3.Checked & "," & CB5_P4_M3.Checked + If CB1_P4_M3.Checked = False And CB2_P4_M3.Checked = False And CB3_P4_M3.Checked = False And CB4_P4_M3.Checked = False And CB5_P4_M3.Checked = False Then PASA = "0" + +' P6_M3 = CB1_P6_M3.Checked & "," & CB2_P6_M3.Checked & "," & CB3_P6_M3.Checked & "," & CB4_P6_M3.Checked & "," & CB5_P6_M3.Checked & "," & CB6_P6_M3.Checked & "," & ET_P6_M3.TEXT + +' P7_M3 = CB1_P7_M3.Checked & "," & CB2_P7_M3.Checked & "," & CB3_P7_M3.Checked & "," & CB4_P7_M3.Checked + If CB1_P7_M3.Checked = False And CB2_P7_M3.Checked = False And CB3_P7_M3.Checked = False And CB4_P7_M3.Checked = False Then PASA = "0" + +' P8_M3 = CB1_P8_M3.Checked & "," & CB2_P8_M3.Checked & "," & CB3_P8_M3.Checked & "," & CB4_P8_M3.Checked + If CB1_P8_M3.Checked = False And CB2_P8_M3.Checked = False And CB3_P8_M3.Checked = False And CB4_P8_M3.Checked = False Then PASA = "0" + If rb1_m3_p1.Checked Then P3_M3 = "7 A 9" + If RB2_M3_P1.Checked Then P3_M3 = "9 A 11" + If RB3_M3_P1.Checked Then P3_M3 = "11 A 13" + If RB4_M3_P1.Checked Then P3_M3 = "13 +" + + If RB1_M3_P2.Checked Then P4_M3 = "2 A 4" + If RB2_M3_P2.Checked Then P4_M3 = "4 A 6" + If RB3_M3_P2.Checked Then P4_M3 = "6 A 8" + If RB4_M3_P2.Checked Then P4_M3 = "8 +" + + If CB5_P4_M3.Checked = True And ( CB2_P4_M3.Checked = True Or CB3_P4_M3.Checked = True Or CB4_P4_M3.Checked = True Or CB1_P4_M3.Checked = True ) Then + PASA = "0" + CB5_P4_M3.Checked = False + CB2_P4_M3.Checked = False + CB3_P4_M3.Checked = False + CB4_P4_M3.Checked = False + CB1_P4_M3.Checked = False + End If + + + If PASA = "1" Then + If rb1_m3_p1.Checked Then P3_M3 = "7 A 9" + If RB2_M3_P1.Checked Then P3_M3 = "9 A 11" + If RB3_M3_P1.Checked Then P3_M3 = "11 A 13" + If RB4_M3_P1.Checked Then P3_M3 = "13 +" + + If RB1_M3_P2.Checked Then P4_M3 = "2 A 4" + If RB2_M3_P2.Checked Then P4_M3 = "4 A 6" + If RB3_M3_P2.Checked Then P4_M3 = "6 A 8" + If RB4_M3_P2.Checked Then P4_M3 = "8 +" + + If ET_P6_M3.Text <> "" Then + textemp6 = textemp6 & ", " & ET_P6_M3.Text + End If + + If textemp4 <> "" And textemp4.SubString2(0,2) = ", " Then textemp4 = textemp4.SubString(2) + If textemp5 <> "" And textemp5.SubString2(0,2) = ", " Then textemp5 = textemp5.SubString(2) + If textemp6 <> "" And textemp6.SubString2(0,2) = ", " Then textemp6 = textemp6.SubString(2) + If textemp7 <> "" And textemp7.SubString2(0,2) = ", " Then textemp7 = textemp7.SubString(2) + If textemp8 <> "" And textemp8.SubString2(0,2) = ", " Then textemp8 = textemp8.SubString(2) +' skmt.ExecNonQuery2("INSERT INTO ENCUESTA_MODULO2 (CLIENTE, ALMACEN,P1, P2, P3, P4, P5, P6) VALUES (?,?,?,?,?,?,?,?)", Array As Object(Subs.traeCliente, ALMACEN,et_p1_m2.Text,et_p2_m2.Text,P3_M2,P4_M2,et_p5_m2.Text,"MODULO_3" )) + + + skmt.ExecNonQuery2("INSERT INTO ENCUESTA_MODULO3 (CLIENTE, ALMACEN,P1, P2, P3, P4, P5, P6,P7,P8,P9,P10,P11) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)", Array As Object(Subs.traeCliente, ALMACEN,"x","x",P3_M3,P4_M3,textemp4,textemp5,P5_M3,textemp6,textemp7, textemp8, P9_M3)) + SV_ENCUESTA.Visible = False + p_cliente.Visible = True +' B4XPages.MainPage.tipo_venta = "PREVENTA" +' B4XPages.ShowPage("productos") + If ENCUESTA > 3 Then + If p_m3.IsInitialized And p_m3.Visible Then + p_m3.Visible = False + Else + + End If + p_pregunta1.Visible = False + p_cliente.Visible = False + SV_ENCUESTA.Visible = True + p_pregunta1.Visible = False + SV_ENCUESTA.Panel.LoadLayout("ENCUESTA_M4") + p_m4.Width = Root.Width * 0.94 + SV_ENCUESTA.Panel.Height = p_m4.Height + 60 + + Dim Items2 As List + Items2.Initialize + Items2.Add("Selecciona una opcion") + Items2.Add("Propio") + Items2.Add("Rentado") + cb_p3_m4.SetItems(Items2) + itemselect2 = "Selecciona una opcion" + + + Dim Items3 As List + Items3.Initialize + Items3.Add("Selecciona una opcion") + Items3.Add("Completamente Surtido") + Items3.Add("Bien Surtido") + Items3.Add("Poco Surtido") + Items3.Add("Muy Poco Surtido") + Items3.Add("Sin Existencias") + cb_p4_1_m4.SetItems(Items3) + itemselect3 = "Selecciona una opcion" + cb_p4_2_m4.SetItems(Items3) + itemselect4 = "Selecciona una opcion" + cb_p4_3_m4.SetItems(Items3) + itemselect5 = "Selecciona una opcion" + cb_p4_4_m4.SetItems(Items3) + itemselect6 = "Selecciona una opcion" + cb_p4_5_m4.SetItems(Items3) + itemselect7 = "Selecciona una opcion" + Else + p_pregunta1.Visible = False + SV_ENCUESTA.Visible = False + p_cliente.Visible = True + tipo_venta = "VENTA" +' StartActivity(colonia2) + B4XPages.ShowPage("productos") + + MsgboxAsync("Encuesta guardada","") + End If + Else + Msgbox("FAVOR DE CONTESTAR LA ENCUESTA","AVISO") + End If +End Sub + +Private Sub B_guardaencuesta_m4_Click + + PASA = "1" + + If itemselect2 = "Selecciona una opcion" Then + PASA = "0" + End If + If itemselect3 = "Selecciona una opcion" Then + PASA = "0" + End If + If itemselect4 = "Selecciona una opcion" Then + PASA = "0" + End If + If itemselect5 = "Selecciona una opcion" Then + PASA = "0" + End If + If itemselect6 = "Selecciona una opcion" Then + PASA = "0" + End If + If itemselect7 = "Selecciona una opcion" Then + PASA = "0" + End If + If et_p1_m4.Text.Length < 2 Then + + et_p1_m4.Text = "" + PASA = "0" + End If + If PASA = "1" Then + skmt.ExecNonQuery2("INSERT INTO ENCUESTA_MODULO4 (CLIENTE, ALMACEN,P1, P2, P3, P4, P5, P6, P7, P8) VALUES (?,?,?,?,?,?,?,?,?,?)", Array As Object(Subs.traeCliente, ALMACEN,et_p1_m4.Text,et_p2_m4.Text,itemselect2,itemselect3,itemselect4,itemselect5,itemselect6,itemselect7)) + SV_ENCUESTA.Visible = False + p_cliente.Visible = True +' + If ENCUESTA > 4 Then + If p_m4.IsInitialized And p_m4.Visible Then + p_m4.Visible = False + Else + + End If + p_cliente.Visible = False + SV_ENCUESTA.Visible = True + p_pregunta1.Visible = False + SV_ENCUESTA.Panel.LoadLayout("ENCUESTA_M5") + p_modulo5.Width = Root.Width * 0.94 + SV_ENCUESTA.Panel.Height = p_modulo5.Height + 60 + + Dim Items8 As List + Items8.Initialize + Items8.Add("Selecciona una opcion") + Items8.Add("Completamente Surtido") + Items8.Add("Bien Surtido") + Items8.Add("Poco Surtido") + Items8.Add("Muy Poco Surtido") + Items8.Add("Sin Existencias") + cb_p1_m5.SetItems(Items8) + itemselect8 = "Selecciona una opcion" + cb_p2_m5.SetItems(Items8) + itemselect9 = "Selecciona una opcion" + cb_p3_m5.SetItems(Items8) + itemselect10 = "Selecciona una opcion" + cb_p4_m5.SetItems(Items8) + itemselect11 = "Selecciona una opcion" + cb_p5_m5.SetItems(Items8) + itemselect12 = "Selecciona una opcion" + cb_p6_m5.SetItems(Items8) + itemselect13 = "Selecciona una opcion" + cb_p7_m5.SetItems(Items8) + itemselect14 = "Selecciona una opcion" + cb_p8_m5.SetItems(Items8) + itemselect15 = "Selecciona una opcion" + cb_p9_m5.SetItems(Items8) + itemselect16 = "Selecciona una opcion" + MsgboxAsync("Encuesta guardada","") + Else + B4XPages.MainPage.tipo_venta = "VENTA" + ' B4XPages.ShowPage("productos") + p_pregunta1.Visible = False + SV_ENCUESTA.Visible = False + p_cliente.Visible = True + tipo_venta = "VENTA" + B4XPages.ShowPage("productos") + ' StartActivity(colonia2) + B4XPages.ShowPage("productos") + End If + Else + Msgbox("FAVOR DE CONTESTAR LA ENCUESTA","AVISO") + End If + +End Sub + +Private Sub B_guardaencuesta_m5_Click + + PASA = "1" + + If itemselect8 = "Selecciona una opcion" Then + PASA = "0" + End If + If itemselect9 = "Selecciona una opcion" Then + PASA = "0" + End If + If itemselect10 = "Selecciona una opcion" Then + PASA = "0" + End If + If itemselect11 = "Selecciona una opcion" Then + PASA = "0" + End If + If itemselect12 = "Selecciona una opcion" Then + PASA = "0" + End If + If itemselect13 = "Selecciona una opcion" Then + PASA = "0" + End If + If itemselect14 = "Selecciona una opcion" Then + PASA = "0" + End If + If itemselect15 = "Selecciona una opcion" Then + PASA = "0" + End If + If itemselect16 = "Selecciona una opcion" Then + PASA = "0" + End If + + If PASA = "1" Then + skmt.ExecNonQuery2("INSERT INTO ENCUESTA_MODULO5 (CLIENTE, ALMACEN,P1, P2, P3, P4, P5, P6, P7, P8, P9) VALUES (?,?,?,?,?,?,?,?,?,?,?)", Array As Object(Subs.traeCliente, ALMACEN,itemselect8,itemselect9,itemselect10,itemselect11,itemselect12,itemselect13,itemselect14,itemselect15,itemselect16)) + SV_ENCUESTA.Visible = False + p_cliente.Visible = True + B4XPages.MainPage.tipo_venta = "VENTA" + B4XPages.ShowPage("productos") + MsgboxAsync("Encuesta guardada","") + Else + Msgbox("FAVOR DE CONTESTAR LA ENCUESTA","AVISO") + End If +End Sub + + +Private Sub B_ACEPTA_GALLINA_Click + + + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c.Close + c=skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + c.Close + c=skmt.ExecQuery("select ID_ALMACEN from CAT_ALMACEN") + If c.RowCount>0 Then + C.Position=0 + ALMACEN = C.GetString("ID_ALMACEN") + End If + c.Close + skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO,PE_RUTA) VALUES(?,?,?,?,?,?,?,?,?,?) ", Array As Object ("PRO1771",0 , 0, 1, "1 KNORR SUIZA EXH C/50/22 GR +1 KNORR SUIZA GALLINA $279.00", "PRO1771",la_cuenta.TEXT, sDate & sTime, usuario,LA_RUTA)) + skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO,PE_RUTA) VALUES(?,?,?,?,?,?,?,?,?,?) ", Array As Object ("PRO1771",139.5 , 139.5, 1, "KNORR SUIZA EXH C/50/22 GR", "UNI047",la_cuenta.TEXT, sDate & sTime, usuario,LA_RUTA)) + skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO,PE_RUTA) VALUES(?,?,?,?,?,?,?,?,?,?) ", Array As Object ("PRO1771",139.5 , 139.5, 1, "KNORR SUIZA GALLINA", "UNI860",la_cuenta.TEXT, sDate & sTime, usuario,LA_RUTA)) + + c=skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE, SUM(PE_COSTO_SIN) AS TOTAL_CLIE_SIN FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + c.Position=0 + skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)") + skmt.ExecNonQuery2("insert into pedido_cliente(PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT,PC_ALMACEN,PC_RUTA,PC_COSTO_SIN) VALUES (?,?,?,?,?,?,?,?,?,?)", Array As Object(clie_id, sDate & sTime, usuario, c.GetString("CANT_CLIE"),c.GetString("TOTAL_CLIE"), B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps,ALMACEN,LA_RUTA,c.GetString("TOTAL_CLIE_SIN"))) + skmt.ExecNonQuery("UPDATE kmt_info set gestion = 2 where CAT_CL_CODIGO In (select cuenta from cuentaa)") + + + 'Panel5.Visible = False + B_GALLINA.Visible = False + b_like.Visible = True + Tar.Visible = True + Tels.Visible = True + gest.Visible = True + 'b_venta.Visible = True + b_like.Visible = False + Guardar.Visible = True + P_gallina.Visible = False +End Sub + +Private Sub B_CANCELA_GALLINA_Click + P_gallina.Visible = False + 'Panel5.Visible = False + B_GALLINA.Visible = False + b_like.Visible = True + Tar.Visible = True + Tels.Visible = True + gest.Visible = True + 'b_venta.Visible = True + b_like.Visible = False + Guardar.Visible = True +' tipo_venta = "PREVENTA" +' StartActivity(colonia2) +End Sub + +Private Sub B_GALLINA_Click + P_gallina.Visible = True + + B_GALLINA.Visible = False + b_like.Visible = False + BT_QR.Visible = False + 'Panel5.Visible = True + b_like.Visible = False + Tar.Visible = False + Tels.Visible = False + gest.Visible = False + b_venta.Visible = False + Guardar.Visible = False + HIST.Visible = False +End Sub + + + +' P5 M1 +Private Sub p6_TextChanged (Old As String, New As String) + If p6.Text.Length > 2 Then + Msgbox("Valida tu respuesta, dato no valido1","Aviso") + p6.Text = "" + End If +End Sub +' FIN P5 M1 + +' P6 M1 +Private Sub p7_TextChanged (Old As String, New As String) + If p7.Text.Length > 2 Then + Msgbox("Valida tu respuesta, dato no valido2","Aviso") + p7.Text = "" + End If +End Sub +' FIN P6 M1 + +' P7 M1 +Private Sub p8_TextChanged (Old As String, New As String) + If p8.Text.Length > 2 Then + + Msgbox("Valida tu respuesta, dato no valido3","Aviso") + p8.Text = "" + End If +End Sub + +' FIN P7 M1 +''aqui + +'Private Sub et_p1_m3_TextChanged (Old As String, New As String) +' If et_p1_m3.Text.Length > 2 Or et_p1_m3.Text = 0 Then +' +' Msgbox("Valida tu respuesta, dato no valido","Aviso") +' et_p1_m3.Text = "" +' End If +'End Sub + +'Private Sub et_p2_m3_TextChanged (Old As String, New As String) +' If et_p2_m3.Text.Length > 2 Or et_p2_m3.Text = 0 Then +' +' Msgbox("Valida tu respuesta, dato no valido","Aviso") +' et_p2_m3.Text = "" +' +' End If +'End Sub + +Private Sub et_p1_m2_TextChanged (Old As String, New As String) + If et_p1_m2.Text.Length > 2 Or et_p1_m2.Text = 0 Then + + Msgbox("Valida tu respuesta, dato no valido","Aviso") + et_p1_m2.Text = "" + End If +End Sub + +Private Sub et_p2_m2_TextChanged (Old As String, New As String) + If et_p2_m2.Text.Length > 2 Or et_p2_m2.Text = 0 Then + + Msgbox("Valida tu respuesta, dato no valido","Aviso") + et_p2_m2.Text = "" + + End If +End Sub + +Private Sub et_p5_m2_TextChanged (Old As String, New As String) + If et_p5_m2.Text.Length > 4 Then + + Msgbox("Valida tu respuesta, dato no valido","Aviso") + et_p5_m2.Text = "" + End If +End Sub + +Private Sub et_p1_m4_TextChanged (Old As String, New As String) + If et_p1_m4.Text.Length > 5 Then + + Msgbox("Valida tu respuesta, dato no valido","Aviso") + et_p1_m4.Text = "" + End If +End Sub + + +Private Sub RB1_P4_M2_CheckedChange(Checked As Boolean) + If RB1_P4_M2.Checked = True Then + Panel7_M2.Visible = True + panel7_p4_m2.Visible = True + Else + Panel7_M2.Visible = False + panel7_p4_m2.Visible = False + + End If +End Sub + +Private Sub RB2_P4_M2_CheckedChange(Checked As Boolean) + If RB2_P4_M2.Checked = True Then + Panel7_M2.Visible = False + panel7_p4_m2.Visible = False + RB1_P3_M2.Checked = False + RB2_P3_M2.Checked = False + RB3_P3_M2.Checked = False + RB4_P3_M2.Checked = False + ET_P3_M2.Text = "" + CB1_P4_M2.Checked = False + CB2_P4_M2.Checked = False + CB3_P4_M2.Checked = False + CB4_P4_M2.Checked = False + textemp3 = "" + Else + Panel7_M2.Visible = True + panel7_p4_m2.Visible = True + + End If +End Sub + +Private Sub B_GUARDA_CE_PED_Click + + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c.Close + c=skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + c.Close + c=skmt.ExecQuery("select ID_ALMACEN from CAT_ALMACEN") + If c.RowCount>0 Then + C.Position=0 + ALMACEN = C.GetString("ID_ALMACEN") + End If + c.Close + +' +' If rdb_ch.Checked = True Then TAMANIO = "CHICA" +' If rdb_gd.Checked = True Then TAMANIO = "GRANDE" +' If rdb_md.Checked = True Then TAMANIO = "MEDIANA" +' If rdb_vt.Checked = True Then TAMANIO = "VENTANITA" +' +' If RDB_SI.Checked = True Then ENTRADA = "SI" +' +' If RDB_NO.Checked = True Then +' ENTRADA = "NO" +' TAMANIO = "VENTANITA" +' End If +' + 'la enecuesta actual + + skmt.ExecNonQuery2("INSERT INTO HIST_ENCUESTA_PED_DIST_1(ALMACEN , TIENDA , KP_01 , KP_02 , KP_03 , KP_04 , KP_05 , KP_06 , KP_07 , KP_08 , KP_09 , KP_10 , KP_11 , KP_12 , KP_13 , KP_14 , KP_15 , KP_16 , KP_17 , KP_18 , KP_19 , KP_20 , KG_01 , KG_02 , KG_03 , KG_04 , KG_05 , KG_06 , PK_01 , PK_02 , PK_03 , PK_04 , PK_05 , PK_06 , PK_07 , PK_08) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ", Array As Object(ALMACEN, clie_id,KP_01.Checked,KP_02.Checked,KP_03.Checked,KP_04.Checked,KP_05.Checked,KP_06.Checked,KP_07.Checked,KP_08.Checked,KP_09.Checked,KP_10.Checked,KP_11.Checked,KP_12.Checked,KP_13.Checked,KP_14.Checked,KP_15.Checked,KP_16.Checked,KP_17.Checked,KP_18.Checked,KP_19.Checked,KP_20.Checked,KG_01.Checked,KG_02.Checked,KG_03.Checked,KG_04.Checked,KG_05.Checked,KG_06.Checked,PK_01.Checked,PK_02.Checked,PK_03.Checked,PK_04.Checked,PK_05.Checked,PK_06.Checked,PK_07.Checked,PK_08.Checked )) + + skmt.ExecNonQuery2("INSERT INTO HIST_ENCUESTA_PED_DIST_2(ALMACEN , TIENDA , HPG_01 , HPG_02 , HPG_03 , HPG_04 , HPG_05 , HPG_06 , HPG_07 , HPG_08 , HPG_09 , HPG_10 , HC_01 , HC_02 , HC_03 , HC_04 , B_01 , B_02) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ", Array As Object(ALMACEN, clie_id, HPG_01.Checked,HPG_02.Checked,HPG_03.Checked,HPG_04.Checked,HPG_05.Checked,HPG_06.Checked,HPG_07.Checked,HPG_08.Checked,HPG_09.Checked,HPG_10.Checked,HC_01.Checked,HC_02.Checked,HC_03.Checked,HC_04.Checked,B_01.Checked,B_02.Checked)) + + 'la encuesta anterior + +' skmt.ExecNonQuery2("INSERT INTO HIST_ENCUESTA_PED_SEG(ALMACEN , TIENDA , TAMANIO , ENTRADA , BULTOSP , BULTOSG) VALUES (?,?,?,?,?,?) ", Array As Object(ALMACEN, clie_id, TAMANIO,ENTRADA, I_COMPRA2.TEXT, I_COMPRA.TEXT)) + + + +' skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO,PE_RUTA) VALUES(?,?,?,?,?,?,?,?,?,?) ", Array As Object ("4",.01 , .01, 2, "KNORR RINDE MAS 70 GR", "GUNA2",la_cuenta.TEXT, sDate & sTime, usuario,LA_RUTA)) + +' skmt.ExecNonQuery2("INSERT INTO HIST_FACE(HFCLIENTE, HFALIAS,HFRUTA,HFALMACEN) VALUES (?,?,?,?) ", Array As Object(la_cuenta.Text, I_COMPRA.Text,LA_RUTA,ALMACEN)) + + 'I_COMPRA2.TEXT = "" + I_COMPRA.TEXT = "" + SV_ENCUESTA.Visible = False + Panel1.Visible = False +' Panel4.Visible = False + b_like.Visible = True + Tar.Visible = True + Tels.Visible = True + gest.Visible = True + 'b_venta.Visible = True + b_like.Visible = False + Guardar.Visible = True + tipo_venta = "VENTA" +' StartActivity(colonia2) + B4XPages.ShowPage("productos") + +End Sub + + +Private Sub p_modulo5_Click + +End Sub + +Private Sub Panel4_Click + +End Sub + +Private Sub CB1_P3_M2_CheckedChange(Checked As Boolean) + textemp2 = "" + If CB1_P3_M2.Checked Then + textemp2 = CB1_P3_M2.Text + Else + textemp2 = "" + End If + If CB2_P3_M2.Checked Then textemp2 = textemp2 & ", " & CB2_P3_M2.Text + If CB3_P3_M2.Checked Then textemp2 = textemp2 & ", " & CB3_P3_M2.Text + If CB4_P3_M2.Checked Then textemp2 = textemp2 & ", " & CB4_P3_M2.Text + If CB5_P3_M2.Checked Then textemp2 = textemp2 & ", " & CB5_P3_M2.Text + Log(textemp2) +End Sub + +Private Sub CB2_P3_M2_CheckedChange(Checked As Boolean) + textemp2 = "" + If CB2_P3_M2.Checked Then + textemp2 = CB2_P3_M2.Text + Else + textemp2 = "" + End If + If CB1_P3_M2.Checked Then textemp2 = textemp2 & ", " & CB1_P3_M2.Text + If CB3_P3_M2.Checked Then textemp2 = textemp2 & ", " & CB3_P3_M2.Text + If CB4_P3_M2.Checked Then textemp2 = textemp2 & ", " & CB4_P3_M2.Text + If CB5_P3_M2.Checked Then textemp2 = textemp2 & ", " & CB5_P3_M2.Text + Log(textemp2) +End Sub + +Private Sub CB3_P3_M2_CheckedChange(Checked As Boolean) + textemp2 = "" + If CB3_P3_M2.Checked Then + textemp2 = CB3_P3_M2.Text + Else + textemp2 = "" + End If + If CB1_P3_M2.Checked Then textemp2 = textemp2 & ", " & CB1_P3_M2.Text + If CB2_P3_M2.Checked Then textemp2 = textemp2 & ", " & CB2_P3_M2.Text + If CB4_P3_M2.Checked Then textemp2 = textemp2 & ", " & CB4_P3_M2.Text + If CB5_P3_M2.Checked Then textemp2 = textemp2 & ", " & CB5_P3_M2.Text + Log(textemp2) +End Sub + +Private Sub CB4_P3_M2_CheckedChange(Checked As Boolean) + textemp2 = "" + If CB4_P3_M2.Checked Then + textemp2 = CB4_P3_M2.Text + Else + textemp2 = "" + End If + If CB1_P3_M2.Checked Then textemp2 = textemp2 & ", " & CB1_P3_M2.Text + If CB2_P3_M2.Checked Then textemp2 = textemp2 & ", " & CB2_P3_M2.Text + If CB3_P3_M2.Checked Then textemp2 = textemp2 & ", " & CB3_P3_M2.Text + If CB5_P3_M2.Checked Then textemp2 = textemp2 & ", " & CB5_P3_M2.Text + Log(textemp2) +End Sub + +Private Sub CB5_P3_M2_CheckedChange(Checked As Boolean) + textemp2 = "" + If CB5_P3_M2.Checked Then + textemp2 = CB5_P3_M2.Text + Else + textemp2 = "" + End If + If CB1_P3_M2.Checked Then textemp2 = textemp2 & ", " & CB1_P3_M2.Text + If CB2_P3_M2.Checked Then textemp2 = textemp2 & ", " & CB2_P3_M2.Text + If CB3_P3_M2.Checked Then textemp2 = textemp2 & ", " & CB3_P3_M2.Text + If CB4_P3_M2.Checked Then textemp2 = textemp2 & ", " & CB4_P3_M2.Text + Log(textemp2) +End Sub + + + +Private Sub CB1_P4_M2_CheckedChange(Checked As Boolean) + textemp3 = "" + If CB1_P4_M2.Checked Then + textemp3 = CB1_P4_M2.Text + Else + textemp3 = "" + End If + If CB2_P4_M2.Checked Then textemp3 = textemp3 & ", " & CB2_P4_M2.Text + If CB3_P4_M2.Checked Then textemp3 = textemp3 & ", " & CB3_P4_M2.Text + If CB4_P4_M2.Checked Then textemp3 = textemp3 & ", " & CB4_P4_M2.Text + Log(textemp3) +End Sub + +Private Sub CB2_P4_M2_CheckedChange(Checked As Boolean) + textemp3 = "" + If CB2_P4_M2.Checked Then + textemp3 = CB2_P4_M2.Text + Else + textemp3 = "" + End If + If CB1_P4_M2.Checked Then textemp3 = textemp3 & ", " & CB1_P4_M2.Text + If CB3_P4_M2.Checked Then textemp3 = textemp3 & ", " & CB3_P4_M2.Text + If CB4_P4_M2.Checked Then textemp3 = textemp3 & ", " & CB4_P4_M2.Text + Log(textemp3) +End Sub + +Private Sub CB3_P4_M2_CheckedChange(Checked As Boolean) + textemp3 = "" + If CB3_P4_M2.Checked Then + textemp3 = CB3_P4_M2.Text + Else + textemp3 = "" + End If + If CB1_P4_M2.Checked Then textemp3 = textemp3 & ", " & CB1_P4_M2.Text + If CB2_P4_M2.Checked Then textemp3 = textemp3 & ", " & CB2_P4_M2.Text + If CB4_P4_M2.Checked Then textemp3 = textemp3 & ", " & CB4_P4_M2.Text + Log(textemp3) +End Sub + +Private Sub CB4_P4_M2_CheckedChange(Checked As Boolean) + textemp3 = "" + If CB4_P4_M2.Checked Then + textemp3 = CB4_P4_M2.Text + Else + textemp3 = "" + End If + If CB1_P4_M2.Checked Then textemp3 = textemp3 & ", " & CB1_P4_M2.Text + If CB2_P4_M2.Checked Then textemp3 = textemp3 & ", " & CB2_P4_M2.Text + If CB3_P4_M2.Checked Then textemp3 = textemp3 & ", " & CB3_P4_M2.Text + Log(textemp3) +End Sub + + + + +Private Sub CB1_P3_M3_CheckedChange(Checked As Boolean) + textemp4 = "" + If CB1_P3_M3.Checked Then + textemp4 = CB1_P3_M3.Text + Else + textemp4 = "" + End If + If CB2_P3_M3.Checked Then textemp4 = textemp4 & ", " & CB2_P3_M3.Text + If CB3_P3_M3.Checked Then textemp4 = textemp4 & ", " & CB3_P3_M3.Text + If CB4_P3_M3.Checked Then textemp4 = textemp4 & ", " & CB4_P3_M3.Text + If CB5_P3_M3.Checked Then textemp4 = textemp4 & ", " & CB5_P3_M3.Text + Log(textemp4) +End Sub + +Private Sub CB2_P3_M3_CheckedChange(Checked As Boolean) + textemp4 = "" + If CB2_P3_M3.Checked Then + textemp4 = CB2_P3_M3.Text + Else + textemp4 = "" + End If + If CB1_P3_M3.Checked Then textemp4 = textemp4 & ", " & CB1_P3_M3.Text + If CB3_P3_M3.Checked Then textemp4 = textemp4 & ", " & CB3_P3_M3.Text + If CB4_P3_M3.Checked Then textemp4 = textemp4 & ", " & CB4_P3_M3.Text + If CB5_P3_M3.Checked Then textemp4 = textemp4 & ", " & CB5_P3_M3.Text + Log(textemp4) +End Sub + +Private Sub CB3_P3_M3_CheckedChange(Checked As Boolean) + textemp4 = "" + If CB3_P3_M3.Checked Then + textemp4 = CB3_P3_M3.Text + Else + textemp4 = "" + End If + If CB1_P3_M3.Checked Then textemp4 = textemp4 & ", " & CB1_P3_M3.Text + If CB2_P3_M3.Checked Then textemp4 = textemp4 & ", " & CB2_P3_M3.Text + If CB4_P3_M3.Checked Then textemp4 = textemp4 & ", " & CB4_P3_M3.Text + If CB5_P3_M3.Checked Then textemp4 = textemp4 & ", " & CB5_P3_M3.Text + Log(textemp4) +End Sub + +Private Sub CB4_P3_M3_CheckedChange(Checked As Boolean) + textemp4 = "" + If CB4_P3_M3.Checked Then + textemp4 = CB4_P3_M3.Text + Else + textemp4 = "" + End If + If CB1_P3_M3.Checked Then textemp4 = textemp4 & ", " & CB1_P3_M3.Text + If CB2_P3_M3.Checked Then textemp4 = textemp4 & ", " & CB2_P3_M3.Text + If CB3_P3_M3.Checked Then textemp4 = textemp4 & ", " & CB3_P3_M3.Text + If CB5_P3_M3.Checked Then textemp4 = textemp4 & ", " & CB5_P3_M3.Text + Log(textemp4) +End Sub + +Private Sub CB5_P3_M3_CheckedChange(Checked As Boolean) + textemp4 = "" + If CB5_P3_M3.Checked Then + textemp4 = CB5_P3_M3.Text + Else + textemp4 = "" + End If + If CB1_P3_M3.Checked Then textemp4 = textemp4 & ", " & CB1_P3_M3.Text + If CB2_P3_M3.Checked Then textemp4 = textemp4 & ", " & CB2_P3_M3.Text + If CB3_P3_M3.Checked Then textemp4 = textemp4 & ", " & CB3_P3_M3.Text + If CB4_P3_M3.Checked Then textemp4 = textemp4 & ", " & CB4_P3_M3.Text + Log(textemp4) +End Sub + + + +Private Sub CB1_P4_M3_CheckedChange(Checked As Boolean) + textemp5 = "" + CB5_P4_M3.Checked = False + If CB1_P4_M3.Checked Then + textemp5 = CB1_P4_M3.Text + Else + textemp5 = "" + End If + If CB2_P4_M3.Checked Then textemp5 = textemp5 & ", " & CB2_P4_M3.Text + If CB3_P4_M3.Checked Then textemp5 = textemp5 & ", " & CB3_P4_M3.Text + If CB4_P4_M3.Checked Then textemp5 = textemp5 & ", " & CB4_P4_M3.Text + If CB5_P4_M3.Checked Then textemp5 = textemp5 & ", " & CB5_P4_M3.Text + Log(textemp5) +End Sub + +Private Sub CB2_P4_M3_CheckedChange(Checked As Boolean) + textemp5 = "" + CB5_P4_M3.Checked = False + If CB2_P4_M3.Checked Then + textemp5 = CB2_P4_M3.Text + Else + textemp5 = "" + End If + If CB1_P4_M3.Checked Then textemp5 = textemp5 & ", " & CB1_P4_M3.Text + If CB3_P4_M3.Checked Then textemp5 = textemp5 & ", " & CB3_P4_M3.Text + If CB4_P4_M3.Checked Then textemp5 = textemp5 & ", " & CB4_P4_M3.Text + If CB5_P4_M3.Checked Then textemp5 = textemp5 & ", " & CB5_P4_M3.Text + Log(textemp5) +End Sub + +Private Sub CB3_P4_M3_CheckedChange(Checked As Boolean) + textemp5 = "" + CB5_P4_M3.Checked = False + If CB3_P4_M3.Checked Then + textemp5 = CB3_P4_M3.Text + Else + textemp5 = "" + End If + If CB1_P4_M3.Checked Then textemp5 = textemp5 & ", " & CB1_P4_M3.Text + If CB2_P4_M3.Checked Then textemp5 = textemp5 & ", " & CB2_P4_M3.Text + If CB4_P4_M3.Checked Then textemp5 = textemp5 & ", " & CB4_P4_M3.Text + If CB5_P4_M3.Checked Then textemp5 = textemp5 & ", " & CB5_P4_M3.Text + Log(textemp5) +End Sub + +Private Sub CB4_P4_M3_CheckedChange(Checked As Boolean) + textemp5 = "" + CB5_P4_M3.Checked = False + If CB4_P4_M3.Checked Then + textemp5 = CB4_P4_M3.Text + Else + textemp5 = "" + End If + If CB1_P4_M3.Checked Then textemp5 = textemp5 & ", " & CB1_P4_M3.Text + If CB2_P4_M3.Checked Then textemp5 = textemp5 & ", " & CB2_P4_M3.Text + If CB3_P4_M3.Checked Then textemp5 = textemp5 & ", " & CB3_P4_M3.Text + If CB5_P4_M3.Checked Then textemp5 = textemp5 & ", " & CB5_P4_M3.Text + Log(textemp5) +End Sub + +Private Sub CB5_P4_M3_CheckedChange(Checked As Boolean) + textemp5 = "" + CB1_P4_M3.Checked = False + CB2_P4_M3.Checked = False + CB3_P4_M3.Checked = False + CB4_P4_M3.Checked = False + If CB5_P4_M3.Checked Then + textemp5 = CB5_P4_M3.Text + Else + textemp5 = "" + End If + If CB1_P4_M3.Checked Then textemp5 = textemp5 & ", " & CB1_P4_M3.Text + If CB2_P4_M3.Checked Then textemp5 = textemp5 & ", " & CB2_P4_M3.Text + If CB3_P4_M3.Checked Then textemp5 = textemp5 & ", " & CB3_P4_M3.Text + If CB4_P4_M3.Checked Then textemp5 = textemp5 & ", " & CB4_P4_M3.Text + Log(textemp5) +End Sub + + + + +Private Sub CB1_P6_M3_CheckedChange(Checked As Boolean) + textemp6 = "" + If CB1_P6_M3.Checked Then + textemp6 = CB1_P6_M3.Text + Else + textemp6 = "" + End If + If CB2_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB2_P6_M3.Text + If CB3_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB3_P6_M3.Text + If CB4_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB4_P6_M3.Text + If CB5_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB5_P6_M3.Text + If CB6_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB6_P6_M3.Text + If CB7_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB7_P6_M3.Text + Log(textemp6) +End Sub + +Private Sub CB2_P6_M3_CheckedChange(Checked As Boolean) + textemp6 = "" + If CB2_P6_M3.Checked Then + textemp6 = CB2_P6_M3.Text + Else + textemp6 = "" + End If + If CB1_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB1_P6_M3.Text + If CB3_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB3_P6_M3.Text + If CB4_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB4_P6_M3.Text + If CB5_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB5_P6_M3.Text + If CB6_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB6_P6_M3.Text + If CB7_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB7_P6_M3.Text + Log(textemp6) +End Sub + +Private Sub CB3_P6_M3_CheckedChange(Checked As Boolean) + textemp6 = "" + If CB3_P6_M3.Checked Then + textemp6 = CB3_P6_M3.Text + Else + textemp6 = "" + End If + If CB1_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB1_P6_M3.Text + If CB2_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB2_P6_M3.Text + If CB4_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB4_P6_M3.Text + If CB5_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB5_P6_M3.Text + If CB6_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB6_P6_M3.Text + If CB7_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB7_P6_M3.Text + Log(textemp6) +End Sub + +Private Sub CB4_P6_M3_CheckedChange(Checked As Boolean) + textemp6 = "" + If CB4_P6_M3.Checked Then + textemp6 = CB4_P6_M3.Text + Else + textemp6 = "" + End If + If CB1_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB1_P6_M3.Text + If CB2_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB2_P6_M3.Text + If CB3_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB3_P6_M3.Text + If CB5_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB5_P6_M3.Text + If CB6_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB6_P6_M3.Text + If CB7_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB7_P6_M3.Text + Log(textemp6) +End Sub + +Private Sub CB5_P6_M3_CheckedChange(Checked As Boolean) + textemp6 = "" + If CB5_P6_M3.Checked Then + textemp6 = CB5_P6_M3.Text + Else + textemp6 = "" + End If + If CB1_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB1_P6_M3.Text + If CB2_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB2_P6_M3.Text + If CB3_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB3_P6_M3.Text + If CB4_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB4_P6_M3.Text + If CB6_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB6_P6_M3.Text + If CB7_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB7_P6_M3.Text + Log(textemp6) +End Sub + +Private Sub CB6_P6_M3_CheckedChange(Checked As Boolean) + textemp6 = "" + If CB6_P6_M3.Checked Then + textemp6 = CB6_P6_M3.Text + Else + textemp6 = "" + End If + If CB1_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB1_P6_M3.Text + If CB2_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB2_P6_M3.Text + If CB3_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB3_P6_M3.Text + If CB4_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB4_P6_M3.Text + If CB5_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB5_P6_M3.Text + If CB7_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB7_P6_M3.Text + Log(textemp6) +End Sub + +Private Sub CB7_P6_M3_CheckedChange(Checked As Boolean) + textemp6 = "" + If CB7_P6_M3.Checked Then + textemp6 = CB7_P6_M3.Text + Else + textemp6 = "" + End If + If CB1_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB1_P6_M3.Text + If CB2_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB2_P6_M3.Text + If CB3_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB3_P6_M3.Text + If CB4_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB4_P6_M3.Text + If CB5_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB5_P6_M3.Text + If CB6_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB6_P6_M3.Text + Log(textemp6) +End Sub + + + + + +Private Sub CB1_P7_M3_CheckedChange(Checked As Boolean) + textemp7 = "" + If CB1_P7_M3.Checked Then + textemp7 = CB1_P7_M3.Text + Else + textemp7 = "" + End If + If CB2_P7_M3.Checked Then textemp7 = textemp7 & ", " & CB2_P7_M3.Text + If CB3_P7_M3.Checked Then textemp7 = textemp7 & ", " & CB3_P7_M3.Text + If CB4_P7_M3.Checked Then textemp7 = textemp7 & ", " & CB4_P7_M3.Text + Log(textemp7) +End Sub + +Private Sub CB2_P7_M3_CheckedChange(Checked As Boolean) + textemp7 = "" + If CB2_P7_M3.Checked Then + textemp7 = CB2_P7_M3.Text + Else + textemp7 = "" + End If + If CB1_P7_M3.Checked Then textemp7 = textemp7 & ", " & CB1_P7_M3.Text + If CB3_P7_M3.Checked Then textemp7 = textemp7 & ", " & CB3_P7_M3.Text + If CB4_P7_M3.Checked Then textemp7 = textemp7 & ", " & CB4_P7_M3.Text + Log(textemp7) +End Sub + +Private Sub CB3_P7_M3_CheckedChange(Checked As Boolean) + textemp7 = "" + If CB3_P7_M3.Checked Then + textemp7 = CB3_P7_M3.Text + Else + textemp7 = "" + End If + If CB1_P7_M3.Checked Then textemp7 = textemp7 & ", " & CB1_P7_M3.Text + If CB2_P7_M3.Checked Then textemp7 = textemp7 & ", " & CB2_P7_M3.Text + If CB4_P7_M3.Checked Then textemp7 = textemp7 & ", " & CB4_P7_M3.Text + Log(textemp7) +End Sub + +Private Sub CB4_P7_M3_CheckedChange(Checked As Boolean) + textemp7 = "" + If CB4_P7_M3.Checked Then + textemp7 = CB4_P7_M3.Text + Else + textemp7 = "" + End If + If CB1_P7_M3.Checked Then textemp7 = textemp7 & ", " & CB1_P7_M3.Text + If CB2_P7_M3.Checked Then textemp7 = textemp7 & ", " & CB2_P7_M3.Text + If CB3_P7_M3.Checked Then textemp7 = textemp7 & ", " & CB3_P7_M3.Text + Log(textemp7) +End Sub + + + + + + +Private Sub CB1_P8_M3_CheckedChange(Checked As Boolean) + textemp8 = "" + textemp8 = CB1_P8_M3.Text + If CB2_P8_M3.Checked Then textemp8 = textemp8 & ", " & CB2_P8_M3.Text + If CB3_P8_M3.Checked Then textemp8 = textemp8 & ", " & CB3_P8_M3.Text + If CB4_P8_M3.Checked Then textemp8 = textemp8 & ", " & CB4_P8_M3.Text + Log(textemp8) +End Sub + +Private Sub CB2_P8_M3_CheckedChange(Checked As Boolean) + textemp8 = "" + textemp8 = CB2_P8_M3.Text + If CB1_P8_M3.Checked Then textemp8 = textemp8 & ", " & CB1_P8_M3.Text + If CB3_P8_M3.Checked Then textemp8 = textemp8 & ", " & CB3_P8_M3.Text + If CB4_P8_M3.Checked Then textemp8 = textemp8 & ", " & CB4_P8_M3.Text + Log(textemp8) +End Sub + +Private Sub CB3_P8_M3_CheckedChange(Checked As Boolean) + textemp8 = "" + textemp8 = CB3_P8_M3.Text + If CB1_P8_M3.Checked Then textemp8 = textemp8 & ", " & CB1_P8_M3.Text + If CB2_P8_M3.Checked Then textemp8 = textemp8 & ", " & CB2_P8_M3.Text + If CB4_P8_M3.Checked Then textemp8 = textemp8 & ", " & CB4_P8_M3.Text + Log(textemp8) +End Sub + +Private Sub CB4_P8_M3_CheckedChange(Checked As Boolean) + textemp8 = "" + textemp8 = CB4_P8_M3.Text + If CB1_P8_M3.Checked Then textemp8 = textemp8 & ", " & CB1_P8_M3.Text + If CB2_P8_M3.Checked Then textemp8 = textemp8 & ", " & CB2_P8_M3.Text + If CB3_P8_M3.Checked Then textemp8 = textemp8 & ", " & CB3_P8_M3.Text + Log(textemp8) +End Sub + + diff --git a/B4A/C_Clientes.bas b/B4A/C_Clientes.bas new file mode 100644 index 0000000..ae37e68 --- /dev/null +++ b/B4A/C_Clientes.bas @@ -0,0 +1,216 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11.5 +@EndOfDesignText@ +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore + +' Dim skmt As SQL + Dim c As Cursor + Dim c2 As Cursor + Dim s As Cursor + Dim ListView1 As ListView + Dim entro As String + Dim gest As Button + Dim lfila As Label + Dim busca As EditText + Dim colonia As String + Private b_qr As Button + Private qr As QRCode + ' Dim sc As Zxing_scanner + Dim CODIGO As String + Dim STIME As String + + Dim ruta As String + Dim q_buscar As String + Private p_clientes As Panel + Private Panel4 As Panel +End Sub + +'You can add more parameters here. +Public Sub Initialize As Object + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + Root = Root1 + 'load the layout to Root + Root.LoadLayout("clientes") + 'Dim ruta As String + entro ="2" + p_clientes.Height = Root.Height + p_clientes.Width = Root.Width + Panel4.Left = Round(Root.Width/2)-(Panel4.Width/2) + + ' valido donde escribo el archivo de la base de datos de kmt +' If File.ExternalWritable Then +' ruta = File.DirDefaultExternal +' Else + ruta = File.DirInternal +' End If + + ' se crea o no el archivo de la base de ddatos de kmt + 'NOTAS SI SE MODIFICA LA ESTRUCTURA SE QUITA EL IF Y SE VA DIRECTO A LA SENTENCIA FILE.COPY PARA QUE + 'TOME LA NUEVA ESTRUCTURA ES MUY IMPORTANTE TENER EL IF DE LO CONTRARIO SOLO LO ESCRIBE UNA VEZ Y LO BORRA + 'SI SE REGRESA A ESTE ACTIVIDAD. + If File.Exists(ruta, "kmt.db") = False Then + File.Copy(File.DirAssets, "kmt.db", ruta, "kmt.db") + End If + qr.initialize +End Sub + +Sub B4XPage_Appear + busca.Text = "" + entro ="2" + colonia = 0 + c=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_NOMBRE, CAT_CL_CALLE, CAT_CL_CODIGO from kmt_info where gestion = 0 ORDER BY CAT_CL_CODIGO") + ListView1.Clear + lfila.Text = "NOMBRE" + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim label1 As Label + label1 = ListView1.TwoLinesLayout.Label + label1.TextSize = 13 + label1.TextColor = Colors.Black + Dim label2 As Label + label2 = ListView1.TwoLinesLayout.SecondLabel + label2.TextSize = 13 + label2.TextColor = Colors.Black + ListView1.AddTwoLines(c.GetString("CAT_CL_CODIGO"), c.GetString("CAT_CL_NOMBRE")) + Next + End If + entro = "4" +End Sub + +Sub ListView1_ItemClick (Position As Int, Value As Object) + If colonia = 0 Then + colonia = Value + End If + If entro = "2" Then + c2=B4XPages.MainPage.skmt.ExecQuery2("select CAT_CL_CALLE, CAT_CL_COLONIA, count(*) as cuantos from kmt_info where gestion = 0 and CAT_CL_COLONIA = ? GROUP BY CAT_CL_CALLE, CAT_CL_COLONIA order by CAT_CL_CALLE ", Array As String(Value)) + ListView1.Clear + lfila.text = "Calle" + If c2.RowCount>0 Then + For i=0 To c2.RowCount -1 + c2.Position=i + ListView1.AddTwoLines(c2.GetString("CAT_CL_CALLE"),c2.GetString("cuantos") ) + Next + End If + entro = "3" + Else If entro = "3" Then + c2=B4XPages.MainPage.skmt.ExecQuery2("select CAT_CL_NOMBRE, CAT_CL_CALLE, CAT_CL_CODIGO from kmt_info where gestion = 0 and CAT_CL_CALLE = ? AND CAT_CL_COLONIA = ? order by CAT_CL_NOMBRE ", Array As String(Value, colonia)) + ListView1.Clear + lfila.text = "Nombre" + If c2.RowCount>0 Then + For i=0 To c2.RowCount -1 + c2.Position=i + ListView1.AddTwoLines(c2.GetString("CAT_CL_CODIGO"), c2.GetString("CAT_CL_NOMBRE")) + Next + End If + entro = "4" + Else If entro = "4" Then + B4XPages.MainPage.skmt.ExecNonQuery("delete from CUENTAA") + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CUENTAA VALUES (?)", Array As Object(Value)) + DateTime.TimeFormat = "HHmmss" + STIME=DateTime.Time(DateTime.Now) + + s=B4XPages.MainPage.skmt.ExecQuery2("SELECT COUNT(*) AS CUANTOS FROM HIST_STAY_STORE WHERE HSS_IN = ? AND HSS_CODIGO In (select cuenta from cuentaa)", Array As String("0")) + s.Position = 0 + If s.GetString("CUANTOS") = 1 Then + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE HIST_STAY_STORE set HSS_IN = ? where HSS_IN = 0 AND HSS_CODIGO In (select cuenta from cuentaa)", Array As Object(STIME)) + Else + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_STAY_STORE(HSS_CODIGO, HSS_IN , HSS_OUT , HSS_TOT) VALUES (?,0,0,0)", Array As Object (Value)) + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE HIST_STAY_STORE set HSS_IN = ? where HSS_IN = 0 AND HSS_CODIGO In (select cuenta from cuentaa)", Array As Object(STIME)) + End If + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE HIST_STAY_OUT set HSO_INI = ? where HSO_INI = 0 ", Array As Object(STIME)) + DateTime.TimeFormat = "HH:mm:ss" + B4XPages.ShowPage("Cliente") + End If +End Sub + +Private Sub B4XPage_CloseRequest As ResumableSub + ' BACK key pressed + 'Return True to close, False to cancel +' If key=KeyCodes.KEYCODE_BACK Then +' StartActivity(seleccion) +' Return False +' End If + Return True +End Sub + +Sub BUSCA_TextChanged (Old As String, New As String) + q_buscar = "%" & busca.Text & "%" + c2=B4XPages.MainPage.skmt.ExecQuery2("select CAT_CL_NOMBRE, CAT_CL_CALLE, CAT_CL_CODIGO from kmt_info where (CAT_CL_NOMBRE like ? OR CAT_CL_CODIGO LIKE ? OR CAT_CL_CALLE LIKE ?)and gestion = 0 order by CAT_CL_NOMBRE ", Array As String(q_buscar,q_buscar,q_buscar)) + ListView1.Clear + lfila.text = "Nombre y Calle" + If c2.RowCount>0 Then + For i=0 To c2.RowCount -1 + c2.Position=i + Dim label1 As Label + label1 = ListView1.TwoLinesLayout.Label + label1.TextSize = 9 + label1.TextColor = Colors.Gray + Dim label2 As Label + label2 = ListView1.TwoLinesLayout.SecondLabel + label2.TextSize = 17 + label2.TextColor = Colors.Gray + ListView1.AddTwoLines(c2.GetString("CAT_CL_CODIGO"), c2.GetString("CAT_CL_NOMBRE") &" CALLE: "& c2.GetString("CAT_CL_CALLE")) + Next + End If + entro = "4" + c2.Close +End Sub + +Sub b_qr_Click + Dim scan_width As Int + Dim scan_height As Int + scan_width = 400 + scan_height = 400 +End Sub + +Sub sc_result(atype As String,Values As String) + CODIGO = Values + c2=B4XPages.MainPage.skmt.ExecQuery2("select COUNT(*) AS ENCONTRADO from kmt_info where CAT_CL_NUM_SERIEFISICO = ? order by CAT_CL_NOMBRE ", Array As String(CODIGO)) + c2.Position =0 + If c2.GetString("ENCONTRADO") > 0 Then + s=B4XPages.MainPage.skmt.ExecQuery2("select CAT_CL_CODIGO from kmt_info where CAT_CL_NUM_SERIEFISICO = ? order by CAT_CL_NOMBRE ", Array As String(CODIGO)) + s.Position =0 + B4XPages.MainPage.skmt.ExecNonQuery("delete from CUENTAA") + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CUENTAA VALUES (?)", Array As Object(s.GetString("CAT_CL_CODIGO"))) + s.Close +' b_qr.Visible = False + B4XPages.ShowPage("clientes") + Else + Msgbox("CODIGO " & CODIGO & " NO ENCONTRADO","AVISO") 'ignore + End If +End Sub + +Sub sc_noScan + Log("nothing returned from the scan !!!!!") +End Sub + +Sub calc_ean_checksum(number As String) As String 'this has now become redundant as I am only interested in QR Codes + Dim i As Int + Dim cO As Char + Dim soma As Int + Dim n As Int + Dim digit As Float + soma = 0 + For i=0 To number.Length - 1 + digit = number.SubString2(i,i+1) + n= digit * ((i Mod 2) * 2 + 1) + soma=soma+n + Next + Return number & ( ( 10 - ( soma Mod 10 )) Mod 10 ) +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. + +Private Sub p_clientes_Click + 'Nada aqui, solo esta para que los clics no se pasen hacia atras. +End Sub \ No newline at end of file diff --git a/B4A/C_Historico.bas b/B4A/C_Historico.bas new file mode 100644 index 0000000..ccad2cd --- /dev/null +++ b/B4A/C_Historico.bas @@ -0,0 +1,123 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11.5 +@EndOfDesignText@ +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore + + Dim g As GPS + Dim clie_id As String + Dim sDate,sTime As String + Dim usuario As String + + Dim c As Cursor + Dim ruta As String + Dim Regresar As Button + + + Dim ListView1 As ListView + Dim L_CANT As Label + Dim L_TOTAL As Label + Dim borra As Button + Dim Existe As String + Dim result As String + ' Dim lat_gps, lon_gps As String + + Private Titulo As Label + Private b_desc As Button + Private ListView2 As ListView + Dim tgl As Toggle +End Sub + +'You can add more parameters here. +Public Sub Initialize As Object + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + Root = Root1 + 'load the layout to Root + ruta = File.DirInternal + Root.LoadLayout("nota") + borra.Visible = False + Titulo.Text = "Acumulado" + b_desc.Visible = False + If File.Exists(ruta, "kmt.db") = False Then + File.Copy(File.DirAssets, "kmt.db", ruta, "kmt.db") + End If +' skmt.Initialize(ruta,"kmt.db", True) +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. + +Sub B4XPage_Appear + If Not(Starter.gps.GPSEnabled) Then + ToastMessageShow("Es necesario tener el GPS encendido", True) + StartActivity(Starter.gps.LocationSettingsIntent) + End If + L_CANT.Text ="" + L_TOTAL.Text="" + c=B4XPages.MainPage.skmt.ExecQuery("select count(*) as EXISTE from HIST_VENTAS WHERE HVD_CLIENTE IN (Select CUENTA from cuentaa)") + C.Position=0 + Existe = C.GetString("EXISTE") + C.Close + c=B4XPages.MainPage.skmt.ExecQuery("select HVD_CLIENTE,HVD_PRONOMBRE,HVD_CANT,HVD_COSTO_TOT from HIST_VENTAS WHERE HVD_CLIENTE IN (Select CUENTA from cuentaa) order by HVD_PRONOMBRE asc") + ListView1.Clear + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim label1 As Label + label1 = ListView1.TwoLinesLayout.Label + label1.TextSize = 15 + label1.TextColor = Colors.Black + Dim label2 As Label + label2 = ListView1.TwoLinesLayout.SecondLabel + label2.TextSize = 10 + label2.TextColor = Colors.Blue + ListView1.AddTwoLines(c.GetString("HVD_PRONOMBRE"),"Cantidad #"& c.GetString("HVD_CANT")& " SubTotal $"& c.GetString("HVD_COSTO_TOT")) + Next + End If + If Existe <> 0 Then + c=B4XPages.MainPage.skmt.ExecQuery("select SUM(HVD_CANT) AS PC_NOART, SUM(HVD_COSTO_TOT) AS PC_MONTO from HIST_VENTAS where HVD_CLIENTE in (Select CUENTA from cuentaa)") + C.Position=0 + L_CANT.Text = c.GetString("PC_NOART") + L_TOTAL.Text = c.GetString("PC_MONTO") + End If +End Sub + +Sub GPS_LocationChanged (Location1 As Location) + 'lat_gps=Location1.ConvertToSeconds(Location1.Latitude) + 'lon_gps=Location1.ConvertToSeconds(Location1.Longitude) +End Sub + +Sub Regresar_Click + B4XPages.ShowPage("Cliente") +End Sub + +Private Sub B4XPage_CloseRequest As ResumableSub +' BACK key pressed +' Return True To close, False To cancel + B4XPages.ShowPage("Principal") + Return False +End Sub + +Sub ListView2_ItemClick (Position As Int, Value As Object) + ListView2.Visible = False + ListView1.Visible = True +End Sub + +Sub ListView1_ItemClick (Position As Int, Value As Object) + ListView2.Visible = True + ListView1.Visible = False + Dim label1 As Label + For i=0 To 20 + label1 = ListView2.SingleLineLayout.Label + label1.TextSize = 15 + label1.TextColor = Colors.Black + ListView2.AddSingleLine(i) + Next +End Sub \ No newline at end of file diff --git a/B4A/C_MapaRutas.bas b/B4A/C_MapaRutas.bas new file mode 100644 index 0000000..d055d2d --- /dev/null +++ b/B4A/C_MapaRutas.bas @@ -0,0 +1,263 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11.5 +@EndOfDesignText@ +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore + + Dim GPS As GPS + Dim rp As RuntimePermissions + Dim ruta As String + Dim skmt As SQL + Dim c As Cursor + Dim c2 As Cursor + Dim c22 As Cursor + Dim c3 As Cursor + + Private gmap As GoogleMap + Private MapFragment1 As MapFragment + Dim Latitud As Double = 0 + Dim Longitud As Double = 0 + Dim Lat2 As Double = 0 + Dim Lon2 As Double = 0 + Dim p1, p2 As Location + Dim Distance As Float + Dim boton1 As Button + Dim HUE_BLUE As Float + Dim HUE_RED As Float + Dim HUE_GREEN As Float + Private B_AZUL As Button + Private B_ROJO As Button + Private B_VERDE As Button + Private B_TODOS As Button + Dim Tienda As String + Dim LatitudRu As Double + Dim LongitudRU As Double + Dim LIST_AZUL As List + Dim LIST_ROJO As List + Dim LIST_VERDE As List + Dim MARK_AZUL As Marker + Dim MARK_ROJO As Marker + Dim MARK_VERDE As Marker + Dim MARK_CEDIS As Marker + Dim rojo As String + Dim azul As String + Dim verde As String + Dim todos As String + Dim NumSerie As Int + Dim OnInfoWindowClickListener1 As OnInfoWindowClickListener + Dim GoogleMapEXTRA As GoogleMapsExtras + Dim CODIGO As String + Private SEMANA As String + Private p_mapaRutas As Panel +End Sub + +'You can add more parameters here. +Public Sub Initialize As Object + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + Root = Root1 + 'load the layout to Root + Root.LoadLayout("mapaRutas") + ruta = File.DirInternal + If File.Exists(ruta, "kmt.db") = False Then + File.Copy(File.DirAssets, "kmt.db", ruta, "kmt.db") + End If + skmt.Initialize(ruta,"kmt.db", True) + GPS.Initialize("GPS") + If MapFragment1.IsGooglePlayServicesAvailable = False Then + ToastMessageShow("Please install Google Play Services.", True) + End If + MARK_AZUL.IsInitialized + MARK_ROJO.IsInitialized + MARK_VERDE.IsInitialized + LIST_AZUL.Initialize + LIST_ROJO.Initialize + LIST_VERDE.Initialize + verde = 0 + azul = 0 + rojo = 0 + todos = 1 + c=B4XPages.MainPage.skmt.ExecQuery2("select count(*) AS CUANTOS from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("SEMANA")) + c.Position =0 + SEMANA = c.GetString("CUANTOS") + c.Close + If SEMANA > 0 Then + c=B4XPages.MainPage.skmt.ExecQuery2("select CAT_VA_VALOR from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("SEMANA")) + c.Position =0 + SEMANA = c.GetString("CAT_VA_VALOR") + c.Close + End If +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. + +Sub MapFragment1_Ready + Log("ENTRANDO") + gmap = MapFragment1.GetMap + gmap.IsInitialized + rp.CheckAndRequest(rp.PERMISSION_ACCESS_FINE_LOCATION) + Wait For Activity_PermissionResult (Permission As String, Result As Boolean) + gmap.MyLocationEnabled = Result + Dim JavaMapsObject As JavaObject + JavaMapsObject = gmap.GetUiSettings + JavaMapsObject.RunMethod("setMapToolbarEnabled", Array As Object(True)) + '''''''----------------------------MARKER AZUL - POR VISITAR + If azul = 1 Or todos = 1 Then + c.IsInitialized + c=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_CODIGO,CAT_CL_NOMBRE,CAT_CL_LAT,CAT_CL_LONG from kmt_info where gestion = 0 and CAT_CL_LAT is not null and CAT_CL_LONG is not null and CAT_CL_LAT <> 0 and CAT_CL_LONG <> 0 and CAT_CL_LAT <> ' ' and CAT_CL_LONG <> ' ' ") + skmt.Initialize(ruta,"kmt.db", True) + If c.RowCount > 0 Then + For i = 0 To c.RowCount - 1 + c.Position = i +' Log(i&"|"&c.GetString("CAT_CL_LAT")&"|") + LatitudRu = 0 + If c.GetString("CAT_CL_LAT") <> "" Then LatitudRu = c.GetString("CAT_CL_LAT") + LongitudRU = 0 + If c.GetString("CAT_CL_LONG") <> "" Then LongitudRU = c.GetString("CAT_CL_LONG") + CODIGO=c.GetString("CAT_CL_CODIGO") + Tienda= c.GetString("CAT_CL_NOMBRE") + MARK_AZUL = gmap.AddMarker2(LatitudRu,LongitudRU,CODIGO, gmap.HUE_BLUE) + MARK_AZUL.Snippet = Tienda + Next + End If + c .Close + If MARK_AZUL.IsInitialized Then LIST_AZUL.Add(MARK_AZUL) + End If + '''''''----------------------------MARKER VERDE - VENTA + If verde =1 Or todos = 1 Then + c2.IsInitialized + c2=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_CODIGO, CAT_CL_NOMBRE,CAT_CL_LONG,CAT_CL_LAT from kmt_info where gestion = 2 and CAT_CL_LAT is not null and CAT_CL_LONG is not null and CAT_CL_LAT <> 0 and CAT_CL_LONG <> 0") + For i = 0 To c2.RowCount -1 + c2.Position = i + LongitudRU = c2.GetString("CAT_CL_LONG") + LatitudRu = c2.GetString("CAT_CL_LAT") + CODIGO=c2.GetString("CAT_CL_CODIGO") + Tienda= c2.GetString("CAT_CL_NOMBRE") + MARK_VERDE = gmap.AddMarker2(LatitudRu,LongitudRU,CODIGO,gmap.HUE_GREEN) + MARK_VERDE.Snippet = Tienda + Next + Else + If verde =1 Or todos = 1 Then + c2.IsInitialized + c2=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_CODIGO, CAT_CL_NOMBRE,CAT_CL_LONG,CAT_CL_LAT from kmt_info where gestion = 2 and CAT_CL_LAT is not null and CAT_CL_LONG is not null and CAT_CL_LAT <> 0 and CAT_CL_LONG <> 0") + For i = 0 To c2.RowCount -1 + c2.Position = i + LongitudRU = c2.GetString("CAT_CL_LONG") + LatitudRu = c2.GetString("CAT_CL_LAT") + CODIGO=c2.GetString("CAT_CL_CODIGO") + Tienda= c2.GetString("CAT_CL_NOMBRE") + MARK_VERDE = gmap.AddMarker2(LatitudRu,LongitudRU,CODIGO,gmap.HUE_GREEN) + MARK_VERDE.Snippet = Tienda + Next + c2 .Close + If MARK_VERDE.IsInitialized Then LIST_VERDE.Add(MARK_VERDE) + End If + End If +' '''''''----------------------------MARKER ROJO - NO VENTA + If rojo =1 Or todos = 1 Then + c3.IsInitialized + c3=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_CODIGO, CAT_CL_NOMBRE,CAT_CL_LONG,CAT_CL_LAT from kmt_info where gestion = 3 and CAT_CL_LAT is not null and CAT_CL_LONG is not null and CAT_CL_LAT <> 0 and CAT_CL_LONG <> 0") + For i = 0 To c3.RowCount -1 + c3.Position = i + LongitudRU = c3.GetDouble("CAT_CL_LONG") + LatitudRu = c3.GetDouble("CAT_CL_LAT") + Tienda= c3.GetString("CAT_CL_NOMBRE") + MARK_ROJO = gmap.AddMarker2(LatitudRu,LongitudRU,Tienda, gmap.HUE_RED) + Next + Else + If rojo =1 Or todos = 1 Then + c3.IsInitialized + c3=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_CODIGO, CAT_CL_NOMBRE,CAT_CL_LONG,CAT_CL_LAT from kmt_info where gestion = 3 and CAT_CL_LAT is not null and CAT_CL_LONG is not null and CAT_CL_LAT <> 0 and CAT_CL_LONG <> 0") + For i = 0 To c3.RowCount -1 + c3.Position = i + LongitudRU = c3.GetDouble("CAT_CL_LONG") + LatitudRu = c3.GetDouble("CAT_CL_LAT") + Tienda= c3.GetString("CAT_CL_NOMBRE") + MARK_ROJO = gmap.AddMarker2(LatitudRu,LongitudRU,Tienda, gmap.HUE_RED) + Next + If MARK_ROJO.IsInitialized Then LIST_ROJO.Add(MARK_ROJO) + c3.Close + End If + End If + ''------------------------------ + Dim aa As CameraPosition + aa.Initialize(LatitudRu,LongitudRU,15)''' RECOMENDABLE CAMBIAR A 10 PARA QUE SE VEAN MAS MARCADORES + gmap.AnimateCamera(aa) + + '''''---------------------- ESTO ES PARA LOS CLICK EN LAS VENTANAS D INFORMACION----------- + Dim OnInfoWindowClickListener1 As OnInfoWindowClickListener + OnInfoWindowClickListener1.Initialize("OnInfoWindowClickListener1") + GoogleMapEXTRA.SetOnInfoWindowClickListener(gmap, OnInfoWindowClickListener1) + +End Sub + +Sub OnInfoWindowClickListener1_click(Marker1 As Marker) + Log("mapclicked") + Log("borramos cuentaa") + B4XPages.MainPage.skmt.ExecNonQuery("delete from CUENTAA") + Log("insertamos cuentaa") + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CUENTAA VALUES (?) ", Array As Object(Marker1.Title)) + Log("vamos a cliente") + B4XPages.ShowPage("Cliente") + B4XPages.ClosePage("MapaRutas") + B4XPages.GetManager.ClosePage(Me) +End Sub + +Sub GPS_LocationChanged (Parametro As Location) + MARK_CEDIS.IsInitialized +End Sub + +Sub B4XPage_Appear + If GPS.GPSEnabled = False Then + ToastMessageShow("Debe Activar el GPS del Equipo.", True) + StartActivity(GPS.LocationSettingsIntent) + Else + GPS.Start(0, 0) + End If +End Sub + +Sub B_TODOS_Click + todos =1 + verde = 0 + azul = 0 + rojo = 0 + MapFragment1_Ready +End Sub + +Sub B_VERDE_Click + verde = 1 + azul = 0 + rojo = 0 + todos = 0 + gmap.Clear + MapFragment1_Ready +End Sub + +Sub B_ROJO_Click + rojo = 1 + verde = 0 + azul = 0 + todos = 0 + gmap.Clear + MapFragment1_Ready +End Sub + +Sub B_AZUL_Click + azul = 1 + verde = 0 + rojo = 0 + todos = 0 + gmap.Clear + MapFragment1_Ready +End Sub + +Private Sub p_mapaRutas_Click + +End Sub \ No newline at end of file diff --git a/B4A/C_Mapas.bas b/B4A/C_Mapas.bas new file mode 100644 index 0000000..36fa8d1 --- /dev/null +++ b/B4A/C_Mapas.bas @@ -0,0 +1,24 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11.5 +@EndOfDesignText@ +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore +End Sub + +'You can add more parameters here. +Public Sub Initialize As Object + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + Root = Root1 + 'load the layout to Root + +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. \ No newline at end of file diff --git a/B4A/C_NoVenta.bas b/B4A/C_NoVenta.bas new file mode 100644 index 0000000..c30bf5f --- /dev/null +++ b/B4A/C_NoVenta.bas @@ -0,0 +1,127 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11.5 +@EndOfDesignText@ +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore + + Dim g As GPS + Dim ruta As String + Dim skmt As SQL + Dim c As Cursor + + Dim CANCELA As Button + Dim GUARDA As Button + Dim r_1 As RadioButton + Dim r_2 As RadioButton + Dim r_3 As RadioButton + Dim e_comm As EditText + Dim motivo As String + Dim cuenta As String + Dim usuario As String + Dim sDate,sTime As String +' Dim lat_gps, lon_gps As String + Dim tgl As Toggle + Dim r_4 As RadioButton + + Private stay_hh As String + Private stay_mi As String + Private stay_ss As String + Private p_NoVenta As Panel +End Sub + +'You can add more parameters here. +Public Sub Initialize As Object + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + Root = Root1 + 'load the layout to Root + Root.LoadLayout("noventa") + + ruta = File.DirInternal +' End If + If File.Exists(ruta, "kmt.db") = False Then + File.Copy(File.DirAssets, "kmt.db", ruta, "kmt.db") + End If +' skmt.Initialize(ruta,"kmt.db", True) +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. + +Sub B4XPage_Appear + e_comm.Text="" + tgl.Initialize + If Not(Starter.gps.GPSEnabled) Then + ToastMessageShow("Es necesario tener el GPS encendido", True) + StartActivity(Starter.gps.LocationSettingsIntent) + End If +End Sub + +Sub GPS_LocationChanged (Location1 As Location) + 'lat_gps=Location1.ConvertToSeconds(Location1.Latitude) + 'lon_gps=Location1.ConvertToSeconds(Location1.Longitude) +End Sub + +Sub CANCELA_Click + B4XPages.ShowPage("Cliente") +End Sub +Sub GUARDA_Click + If r_1.Checked Then + motivo = "CERRADO" + Else If r_2.Checked Then + motivo = "NO COMPRA" + Else If r_3.Checked Then + motivo = "CON PRODUCTO" + Else + motivo = "NO ESTA EL ENCARGADO" + End If + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=B4XPages.MainPage.skmt.ExecQuery("select CUENTA from cuentaa") + c.Position = 0 + cuenta = c.GetString("CUENTA") + c=B4XPages.MainPage.skmt.ExecQuery("select usuario from usuarioa") + c.Position = 0 + usuario = c.GetString("USUARIO") + c=B4XPages.MainPage.skmt.ExecQuery("select PE_PROID,PE_CANT FROM PEDIDO where pe_cliente in (Select CUENTA from cuentaa) ") + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + B4XPages.MainPage.skmt.ExecNonQuery2("update cat_gunaprod set cat_gp_almacen = cat_gp_almacen + ? where cat_gp_id = ?", Array As Object(c.GetString("PE_CANT"),c.GetString("PE_PROID"))) + Next + End If + + + B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente where pc_cliente in (Select CUENTA from cuentaa)") + B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido where pe_cliente in (Select CUENTA from cuentaa)") + + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO NOVENTA (NV_CLIENTE,NV_FECHA,NV_USER,NV_MOTIVO,NV_COMM,NV_LAT,NV_LON) VALUES(?,?,?,?,?,?,?) ", Array As Object (cuenta,sDate & sTime, usuario, motivo,e_comm.text, B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps)) + B4XPages.MainPage.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 3 where CAT_CL_CODIGO In (select cuenta from cuentaa)") + DateTime.TimeFormat = "HHmmss" + sTime=DateTime.Time(DateTime.Now) + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE HIST_STAY_STORE set HSS_OUT = ? where HSS_CODIGO In (select cuenta from cuentaa)", Array As Object(sTime)) + ' B4XPages.MainPage.skmt.ExecNonQuery("UPDATE HIST_STAY_STORE set HSS_TOT = HSS_OUT - HSS_IN where HSS_CODIGO In (select cuenta from cuentaa)") + + c=B4XPages.MainPage.skmt.ExecQuery(" Select (substr(HSS_OUT,1,2) - substr(HSS_IN,1,2)) - Case when (substr(HSS_OUT,3,2) - substr(HSS_IN,3,2)) < 0 Then 1 Else 0 end HORAS_TOTALES, " & _ + "Case when (substr(HSS_OUT,3,2) - substr(HSS_IN,3,2)) < 0 Then (substr(HSS_OUT,3,2) + 60 - substr(HSS_IN,3,2)) " & _ + " Else (substr(HSS_OUT,3,2) - substr(HSS_IN,3,2)) End - Case when (substr(HSS_OUT,5,2) - substr(HSS_IN,5,2)) < 0 Then 1 Else 0 end MINUTOS_TOTALES, " & _ + "Case when (substr(HSS_OUT,5,2) - substr(HSS_IN,5,2)) < 0 Then (substr(HSS_OUT,5,2) + 60 - substr(HSS_IN,5,2)) " & _ + " Else (substr(HSS_OUT,5,2) - substr(HSS_IN,5,2)) end SEGUNDOS_TOTALES " & _ + " from HIST_STAY_STORE where HSS_CODIGO In (Select cuenta from cuentaa) ") + c.Position = 0 + stay_hh = c.GetString("HORAS_TOTALES") * 60 * 60 + stay_mi = c.GetString("MINUTOS_TOTALES") * 60 + stay_ss = c.GetString("SEGUNDOS_TOTALES") + + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE HIST_STAY_STORE set HSS_TOT = ? where HSS_CODIGO In (select cuenta from cuentaa)", Array As Object(stay_hh + stay_mi + stay_ss)) + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE HIST_STAY_OUT set HSO_FIN = ? ", Array As Object(sTime)) + DateTime.TimeFormat = "HH:mm:ss" + B4XPages.ShowPage("Principal") +End Sub \ No newline at end of file diff --git a/B4A/C_Nota.bas b/B4A/C_Nota.bas new file mode 100644 index 0000000..5ab86cc --- /dev/null +++ b/B4A/C_Nota.bas @@ -0,0 +1,241 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11.5 +@EndOfDesignText@ +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore + + Dim skmt As SQL + Dim g As GPS + Dim clie_id As String + Dim sDate,sTime As String + Dim usuario As String + + Dim c As Cursor + Dim ruta As String + Dim Regresar As Button + + Dim ListView1 As ListView + Dim L_CANT As Label + Dim L_TOTAL As Label + Dim borra As Button + Dim Existe As String + Dim result As String + ' Dim lat_gps, lon_gps As String + Dim DESC As String + + Private Titulo As Label + Private b_desc As Button + Dim DESCUENTO As String + Dim folio As String + Dim tgl As Toggle + Private almacen As String + Private p_nota As Panel +End Sub + +'You can add more parameters here. +Public Sub Initialize As Object + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + Root = Root1 + ruta = File.DirInternal + Root.LoadLayout("nota") + borra.Visible = True + Titulo.Text = "Pedido Actual" +' If Existe <> 0 Then +' c=B4XPages.MainPage.skmt.ExecQuery("select pc_noart, pc_monto from pedido_cliente where pc_cliente in (Select CUENTA from cuentaa)") +' C.Position=0 +' L_CANT.Text = c.GetString("PC_NOART") +' L_TOTAL.Text = c.GetString("PC_MONTO") +' End If +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. + +Sub B4XPage_Appear + If Not(Starter.gps.GPSEnabled) Then + ToastMessageShow("Es necesario tener el GPS encendido", True) + StartActivity(Starter.gps.LocationSettingsIntent) + End If + c=B4XPages.MainPage.skmt.ExecQuery("select ID_ALMACEN from CAT_ALMACEN") + C.Position =0 + almacen = C.GetString("ID_ALMACEN") + C.Close + L_CANT.Text ="" + L_TOTAL.Text="" + c=B4XPages.MainPage.skmt.ExecQuery("select count(*) as EXISTE from pedido_cliente WHERE pc_cliente IN (Select CUENTA from cuentaa)") + C.Position=0 + Existe = C.GetString("EXISTE") + C.Close + c=B4XPages.MainPage.skmt.ExecQuery("select PE_PRONOMBRE,PE_COSTO_TOT, PE_CANT, PE_FOLIO, PE_CEDIS FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) order by PE_PRONOMBRE asc") + ListView1.Clear + Private cs As CSBuilder + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + cs.Initialize + c.Position=i + Dim label1 As Label + label1 = ListView1.TwoLinesLayout.Label + label1.TextSize = 15 + label1.TextColor = Colors.Black + label1.color = Colors.White + Private textColor As Int = Colors.black + If c.GetString("PE_CEDIS").Contains("PRO") Then textColor = Colors.RGB(210,105,30) 'Si es promo, cambiamos el color del texto. + Dim label2 As Label + label2 = ListView1.TwoLinesLayout.SecondLabel + label2.TextSize = 10 + label2.TextColor = Colors.Blue + ListView1.AddTwoLines(cs.Color(textColor).append(c.GetString("PE_PRONOMBRE")).pop,"Cantidad #"& c.GetString("PE_CANT")& " SubTotal $"& c.GetString("PE_COSTO_TOT")& " Folio "& c.GetString("PE_FOLIO")) + folio = c.GetString("PE_FOLIO") + Next + End If + If Existe <> 0 Then + c=B4XPages.MainPage.skmt.ExecQuery("select pc_noart, pc_monto from pedido_cliente where pc_cliente in (Select CUENTA from cuentaa)") + C.Position=0 + L_CANT.Text = c.GetString("PC_NOART") + L_TOTAL.Text = c.GetString("PC_MONTO") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select SUM(IFNULL(PE_DESC,0)) AS DESCUENTO FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + c.Position=0 + DESC = c.GetString("DESCUENTO") + b_desc.Visible = False + End If +End Sub + +Sub Activity_Pause (UserClosed As Boolean) + +End Sub + +Sub GPS_LocationChanged (Location1 As Location) + 'lat_gps=Location1.ConvertToSeconds(Location1.Latitude) + 'lon_gps=Location1.ConvertToSeconds(Location1.Longitude) +End Sub + +Sub Regresar_Click + B4XPages.ShowPage("Cliente") +End Sub + +Private Sub B4XPage_CloseRequest As ResumableSub +' BACK key pressed +' Return True To close, False To cancel + B4XPages.ShowPage("Principal") + Return False +End Sub + +Sub borra_Click + If folio <> "" Then + result = Msgbox2("Seguro que desa borrar el pedido?","Cancelar pedido", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'ignore + If result = DialogResponse.POSITIVE Then + c=B4XPages.MainPage.skmt.ExecQuery("select PE_PROID,PE_CANT FROM PEDIDO where pe_cliente in (Select CUENTA from cuentaa) ") + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + B4XPages.MainPage.skmt.ExecNonQuery2("update cat_gunaprod set cat_gp_almacen = cat_gp_almacen + ? where cat_gp_id = ?", Array As Object(c.GetString("PE_CANT"),c.GetString("PE_PROID"))) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO INVENT_X_ENVIAR (ALMACEN , PROID , CANTIDAD ) VALUES(?,?,?) ", Array As Object (almacen,c.GetString("PE_PROID"),c.GetString("PE_CANT")* -1)) + Next + End If + B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente where pc_cliente in (Select CUENTA from cuentaa)") + B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido where pe_cliente in (Select CUENTA from cuentaa)") + B4XPages.MainPage.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 0 where CAT_CL_CODIGO In (select cuenta from cuentaa)") + B4XPage_Appear + End If + Else + Msgbox("CLIENTE YA SE TRANSMITIO, FAVOR DE LLAMAR A SOPORTE PARA ASISTENCIA","AVISO") 'ignore + End If +End Sub + +Sub ListView1_ItemLongClick (Position As Int, Value As Object) + result = Msgbox2("Seguro que desea borrar este articulo?","Borrar Articulo", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'ignore + If result = DialogResponse.POSITIVE Then + c=B4XPages.MainPage.skmt.ExecQuery2("select PE_PROID,PE_CANT FROM PEDIDO where pe_pronombre = ? and pe_cliente in (Select CUENTA from cuentaa) ", Array As String(Value)) + c.Position=0 + B4XPages.MainPage.skmt.ExecNonQuery2("update cat_gunaprod set cat_gp_almacen = cat_gp_almacen + ? where cat_gp_id = ?", Array As Object(c.GetString("PE_CANT"),c.GetString("PE_PROID"))) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO INVENT_X_ENVIAR (ALMACEN , PROID , CANTIDAD ) VALUES(?,?,?) ", Array As Object (almacen,c.GetString("PE_PROID"),c.GetString("PE_CANT")* -1)) + c.Close + c=B4XPages.MainPage.skmt.ExecQuery2("select count(*) AS CUANTOS from cat_gunaprod where CAT_GP_ID in (select pe_cedis from pedido where pe_pronombre = ? and pe_cliente in (Select CUENTA from cuentaa)) and CAT_GP_CLASIF = 'PROMOS' AND CAT_GP_TIPO = 'PROMOS' AND CAT_GP_SUBTIPO = 'PROMOS'", Array As String(Value)) + c.Position=0 + If c.GetString("CUANTOS") > 0 Then + B4XPages.MainPage.skmt.ExecNonQuery2("delete from pedido where pe_cedis in (select pe_cedis from pedido where pe_pronombre = ?) and pe_cliente in (Select CUENTA from cuentaa)", Array As Object(Value)) + Else + B4XPages.MainPage.skmt.ExecNonQuery2("delete from pedido where pe_pronombre = ? and pe_cliente in (Select CUENTA from cuentaa)", Array As Object(Value)) + End If + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=B4XPages.MainPage.skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c=B4XPages.MainPage.skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + c=B4XPages.MainPage.skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE, count(*) as CUANTOS FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + c.Position=0 + If c.GetString("CUANTOS") > 0 Then + B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)") + B4XPages.MainPage.skmt.ExecNonQuery2("insert into pedido_cliente(PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT) VALUES (?,?,?,?,?,?,?)", Array As Object(clie_id, sDate & sTime, usuario, c.GetString("CANT_CLIE"),c.GetString("TOTAL_CLIE"), B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps)) + B4XPages.MainPage.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 2 where CAT_CL_CODIGO In (select cuenta from cuentaa)") + Else + B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)") + B4XPages.MainPage.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 0 where CAT_CL_CODIGO In (select cuenta from cuentaa)") + End If + B4XPage_Appear + End If +End Sub + +Sub b_desc_Click + If DESCUENTO = "MENOS" Then + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=B4XPages.MainPage.skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + c.Close + result = Msgbox2("Seguro que desa dar descuento del 5%?","Dar descuento", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'ignore + If result = DialogResponse.POSITIVE Then + B4XPages.MainPage.skmt.ExecNonQuery("UPDATE pedido SET PE_COSTO_TOT = PE_COSTO_TOT * .95, PE_DESC = 5 WHERE PE_CLIENTE In (select cuenta from cuentaa)") + c=B4XPages.MainPage.skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE, count(*) as CUANTOS FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + c.Position=0 + B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)") + B4XPages.MainPage.skmt.ExecNonQuery2("insert into pedido_cliente(PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT) VALUES (?,?,?,?,?,?,?)", Array As Object(clie_id, sDate & sTime, usuario, c.GetString("CANT_CLIE"),c.GetString("TOTAL_CLIE"), B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps)) + c.Close + B4XPage_Appear + End If + ELSE IF DESCUENTO = "MAS" Then + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=B4XPages.MainPage.skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + c.Close + result = Msgbox2("Seguro que desa CANCELAR el descuento?","Cancelar descuento", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'ignore + If result = DialogResponse.POSITIVE Then + B4XPages.MainPage.skmt.ExecNonQuery("UPDATE pedido SET PE_COSTO_TOT = PE_COSTO_TOT / .95, PE_DESC = 0 WHERE PE_CLIENTE In (select cuenta from cuentaa)") + c=B4XPages.MainPage.skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE, count(*) as CUANTOS FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + c.Position=0 + B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)") + B4XPages.MainPage.skmt.ExecNonQuery2("insert into pedido_cliente(PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT) VALUES (?,?,?,?,?,?,?)", Array As Object(clie_id, sDate & sTime, usuario, c.GetString("CANT_CLIE"),c.GetString("TOTAL_CLIE"), B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps)) + c.Close + B4XPage_Appear + End If + End If +End Sub + +Private Sub p_nota_Click + +End Sub \ No newline at end of file diff --git a/B4A/C_NuevoCliente.bas b/B4A/C_NuevoCliente.bas new file mode 100644 index 0000000..c2adaec --- /dev/null +++ b/B4A/C_NuevoCliente.bas @@ -0,0 +1,114 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11.5 +@EndOfDesignText@ +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore + + Dim g As GPS + Dim ruta As String + Dim c As Cursor + + Dim CANCELA As Button + Dim GUARDA As Button + Dim cuenta As String + Dim usuario As String + Dim sDate,sTime As String + Dim no_cliente As String + Dim no_ruta As String + + Dim r_4 As RadioButton + Dim E_NOMBRE As EditText + Dim tgl As Toggle + Private l_sinUbicacion As Label + Private p_nuevoCliente As Panel + Private Label1 As Label + Private p_botones As Panel +End Sub + +'You can add more parameters here. +Public Sub Initialize As Object + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + Root = Root1 + 'load the layout to Root + Root.LoadLayout("nuevocliente") + ruta = File.DirInternal + If File.Exists(ruta, "kmt.db") = False Then + File.Copy(File.DirAssets, "kmt.db", ruta, "kmt.db") + End If +' skmt.Initialize(ruta,"kmt.db", True) +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. + +Sub B4XPage_Appear + E_NOMBRE.Text = "" + If Not(Starter.gps.GPSEnabled) Then + ToastMessageShow("Es necesario tener el GPS encendido", True) + StartActivity(Starter.gps.LocationSettingsIntent) + End If + GUARDA.Visible = False + Subs.panelVisible(p_nuevoCliente, 0, 0) + p_nuevoCliente.Height = Root.Height + p_nuevoCliente.Width = Root.Width + Subs.centraEtiqueta(Label1, Root.Width) + Subs.centraEtiqueta(l_sinUbicacion, Root.Width) + Subs.centraPanel(p_botones, Root.Width) +' E_NOMBRE.Left = Round(Root.Width/2)-(E_NOMBRE.Width/2) + If B4XPages.MainPage.lat_gps <> "0.0" Then + GUARDA.Visible = True 'Si hay ubicaccion, mostramos el boton de guardar. + l_sinUbicacion.Visible = False + End If +End Sub + +Sub GPS_LocationChanged (Location1 As Location) + If B4XPages.MainPage.lat_gps <> "0.0" Then + GUARDA.Visible = True 'Si hay ubicaccion, mostramos el boton de guardar. + l_sinUbicacion.Visible = False + End If +End Sub + +Sub CANCELA_Click + B4XPages.ShowPage("Principal") +End Sub + +Sub GUARDA_Click + If E_NOMBRE.Text = "" Then + ToastMessageShow("Se tiene que nombrar la tienda para continuar" , True) + Else + DateTime.DateFormat = "MM/dd/yyyy" + DateTime.Timeformat = "HHmmss" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + Log($" //////////// Date: ${sDate} - Time: ${sTime} ////////////////"$) + 'Aqui creamos manualmete la hora con el separador de los 2 puntos porque en algunas versiones de android no respeta el formato "Timeformat = 'HH:mm:ss'" + Private hora As String = sTime.SubString2(0,2) + Private mins As String = sTime.SubString2(2,4) + Private segs As String = sTime.SubString(4) + sTime = hora&":"&mins&":"&segs + Log("////////////// sTime: "&sTime&" ////////////////") + c=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_RUTA FROM kmt_info") + c.Position=0 + no_ruta= c.GetString("CAT_CL_RUTA") + no_cliente= "N" & sTime & no_ruta + Log("++ ++ no_cliente = "&no_cliente) + c.Close + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO kmt_info(CAT_CL_CODIGO,CAT_CL_RUTA,CAT_CL_NOMBRE,CAT_CL_ATIENDE1,CAT_CL_ATIENTE2,CAT_CL_TELEFONO,CAT_CL_EMAIL,CAT_CL_CALLE,CAT_CL_NOEXT,CAT_CL_NOINT,CAT_CL_CALLE1,CAT_CL_CALLE2,CAT_CL_COLONIA,CAT_CL_MUNI,CAT_CL_EDO,CAT_CL_CP,CAT_CL_LONG,CAT_CL_LAT,CAT_CL_MTOCOMPRA,CAT_CL_NUM_SERIEFISICO, gestion) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,0,0,0) ",Array As Object (no_cliente,no_ruta, E_NOMBRE.Text,"null","null","null","null","null","null","null","null","null","null","null","null","null",B4XPages.MainPage.lon_gps,B4XPages.MainPage.lat_gps)) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_STAY_STORE(HSS_CODIGO, HSS_IN , HSS_OUT , HSS_TOT) VALUES (?,0,0,0)", Array As Object (no_cliente)) + B4XPages.MainPage.skmt.ExecNonQuery("delete from CUENTAA") + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CUENTAA VALUES (?)", Array As Object(no_cliente)) + B4XPages.ShowPage("Cliente") + End If +End Sub + + +Private Sub p_nuevoCliente_Click + +End Sub \ No newline at end of file diff --git a/B4A/C_Pedidos.bas b/B4A/C_Pedidos.bas new file mode 100644 index 0000000..a12e482 --- /dev/null +++ b/B4A/C_Pedidos.bas @@ -0,0 +1,584 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11.5 +@EndOfDesignText@ +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore + + Dim g As GPS + Dim ruta As String + Dim skmt As SQL + Private t3 As Timer + Dim p As Phone + Dim sb As StringBuilder + + Dim c As Cursor + Dim e As Cursor + Dim f As Cursor + Dim h As Cursor + Dim CC As Cursor + Dim DD As Cursor + Dim l_tipo As Label + Dim l_sub As Label + Dim l_marca As Label + Dim l_desc As Label + Dim l_precio As Label + Dim l_bodega As Label + Dim cantidad As EditText + Dim guardar As Button + Dim Terminar As Button + Dim img_prod As ImageView + Dim IMG_PASO() As Byte + Dim L_PROID As Label + Dim clie_id As String + Dim sDate,sTime As String + Dim usuario As String + ' Dim lat_gps, lon_gps As String + Dim t_venta As Label + Dim PROMO_C As String + Dim i_fotol As ImageView + Private DESC_PROMO As Button + Private nopromo As Button + Dim TOT_ART_PROMO As String + Dim cambio As String + Dim COSTO_TOT As String + Dim ALMACEN As String + Dim preciosin As String + Dim cl_ruta As String + Dim d As Cursor + Dim TOT_ART_PROMOR As String + Dim PROMO_CR As String + Dim TOTAL_PROMO As String + Dim HCCP_CANT As String + Dim tgl As Toggle + Dim precio_Cero As String + Private BONSABOR As String + Private BONSABOR2 As String + Dim cmd As DBCommand + Private p_pedido As Panel +End Sub + +'You can add more parameters here. +Public Sub Initialize As Object + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + Root = Root1 + 'load the layout to Root + Root.LoadLayout("pedido") + i_fotol.Visible = False +' B4XPages.MainPage.reqManager.Initialize(Me, "http://177.244.63.54:1782") + ruta = File.DirInternal + If File.Exists(ruta, "kmt.db") = False Then + File.Copy(File.DirAssets, "kmt.db", ruta, "kmt.db") + End If +' skmt.Initialize(ruta,"kmt.db", True) +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. + +Sub B4XPage_Appear + tgl.Initialize + BONSABOR = 0 + BONSABOR2 = 0 + If Not(Starter.gps.GPSEnabled) Then + ToastMessageShow("Es necesario tener el GPS encendido", True) + StartActivity(Starter.gps.LocationSettingsIntent) + End If + cantidad.Text = "" + c=B4XPages.MainPage.skmt.ExecQuery("select ID_ALMACEN from CAT_ALMACEN") + C.Position =0 + ALMACEN = C.GetString("ID_ALMACEN") + C.Close + i_fotol.Visible = False + sb.Initialize + p.Shell("ping -c1 -W1 177.244.63.54",Null, sb,Null) + skmt.Initialize(ruta,"kmt.db", True) + c=B4XPages.MainPage.skmt.ExecQuery("select CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG,CAT_GP_ALMACEN,CAT_GP_DEV from CAT_GUNAPROD where CAT_GP_NOMBRE In (Select PDESC from PROID)") + c.Position=0 + L_PROID.Text = c.GetString("CAT_GP_ID") + l_tipo.Text = c.GetString("CAT_GP_TIPO") + l_sub.Text = c.GetString("CAT_GP_SUBTIPO") + l_marca.Text = c.GetString("CAT_GP_CLASIF") + l_desc.Text = c.GetString("CAT_GP_NOMBRE") + l_precio.Text = c.GetDouble("CAT_GP_PRECIO") + l_bodega.Text = c.GetString("CAT_GP_ALMACEN") + IMG_PASO = c.GetBlob("CAT_GP_IMG") + PROMO_C = c.GetString("CAT_GP_STS") + cambio = c.GetString("CAT_GP_DEV") + preciosin = c.GetString("CAT_GP_IMP2") + PROMO_CR = c.GetString("CAT_GP_IMP1") + cambio = "0" + + e=B4XPages.MainPage.skmt.ExecQuery2("select count(*) as CUANTOS FROM pedido WHERE PE_CEDIS = ? AND PE_CLIENTE IN (Select cuenta from cuentaa) ", Array As String(c.GetString("CAT_GP_ID"))) + e.Position =0 + If e.GetString("CUANTOS") = 0 Then + If l_marca.text = "PROMOS" And l_tipo.Text ="PROMOS" Then + DESC_PROMO.Visible = True + CC=B4XPages.MainPage.skmt.ExecQuery2("select count(*) as CUANTOS FROM PROMOS_COMP WHERE CAT_PA_ID = ?", Array As String(c.GetString("CAT_GP_ID"))) + CC.Position =0 + If CC.GetString("CUANTOS") = 0 Then + l_bodega.Text = "0" ' se modifica a cero para evitar error en la promo especial de unilever mayo + Else + CC.Close + CC=B4XPages.MainPage.skmt.ExecQuery2("select CAT_PA_MAXPROM, CAT_PA_MAXPROMREC, CAT_PA_MAXPROMCLIE FROM PROMOS_COMP WHERE CAT_PA_ID = ?", Array As String(c.GetString("CAT_GP_ID"))) + CC.Position =0 + ' SE MODIFICA LA APLICACION PARA QUE VEA EL HISTORIAL DE VENTA DEL CLIENTE. + DD=B4XPages.MainPage.skmt.ExecQuery2("SELECT COUNT(*) AS CUANTOS FROM HIST_CLIENTE_CANT_PROMOS WHERE HCCP_CLIENTE IN (Select cuenta from cuentaa) AND HCCP_PROMO =?", Array As String(c.GetString("CAT_GP_ID"))) + DD.Position =0 + If DD.GetString("CUANTOS") = 0 Then + HCCP_CANT = 0 + Else + DD.Close + DD=B4XPages.MainPage.skmt.ExecQuery2("SELECT HCCP_CANT FROM HIST_CLIENTE_CANT_PROMOS WHERE HCCP_CLIENTE IN (Select cuenta from cuentaa) AND HCCP_PROMO =?", Array As String(c.GetString("CAT_GP_ID"))) + DD.Position =0 + HCCP_CANT = DD.GetString("HCCP_CANT") + DD.Close + End If + BONSABOR = HCCP_CANT + DD=B4XPages.MainPage.skmt.ExecQuery2("SELECT COUNT(*) AS CUANTOS FROM HIST_VENTAS WHERE HVD_CLIENTE IN (Select cuenta from cuentaa) AND HVD_PRONOMBRE =?", Array As String(c.GetString("CAT_GP_NOMBRE"))) + DD.Position =0 + If DD.GetString("CUANTOS") = 0 Then + HCCP_CANT = 0 + Else + DD.Close + DD=B4XPages.MainPage.skmt.ExecQuery2("SELECT SUM(HVD_CANT) AS HCCP_CANT FROM HIST_VENTAS WHERE HVD_CLIENTE IN (Select cuenta from cuentaa) AND HVD_PRONOMBRE =?", Array As String(c.GetString("CAT_GP_NOMBRE"))) + DD.Position =0 + HCCP_CANT = DD.GetString("HCCP_CANT") + DD.Close + End If + DD=B4XPages.MainPage.skmt.ExecQuery2("Select COUNT(*) AS CUANTOS FROM PEDIDO WHERE PE_CLIENTE IN (Select cuenta from cuentaa) AND PE_PROID IN (select CAT_GP_ID from CAT_GUNAPROD where CAT_GP_CLASIF = ?) ",Array As String(c.GetString("CAT_GP_NOMBRE"))) + DD.Position =0 + BONSABOR2 = DD.GetString("CUANTOS") + DD.Close + TOTAL_PROMO = CC.GetString("CAT_PA_MAXPROMCLIE") - HCCP_CANT + If HCCP_CANT = 0 Then + l_bodega.Text = CC.GetString("CAT_PA_MAXPROM") + Else IF TOTAL_PROMO > CC.GetString("CAT_PA_MAXPROMREC") Then + l_bodega.Text = CC.GetString("CAT_PA_MAXPROMREC") + Else + l_bodega.Text = TOTAL_PROMO + End If + End If + Else + DESC_PROMO.Visible = False + End If + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select CASE WHEN pe_costo_tot is null then 0 else sum( pe_costo_tot ) end as TOTAL_CLIE FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + c.Position=0 + t_venta.Text = c.GetString("TOTAL_CLIE") + c.Close + Terminar.Visible = True + guardar.Visible = True + cantidad.Visible = True + If cambio = "1" Then + nopromo.Visible = True + Else + nopromo.Visible = False + End If + Dim out As OutputStream + out = File.OpenOutput(ruta, "1.jpg", False) + out.WriteBytes(IMG_PASO, 0, IMG_PASO.Length) + out.Close + img_prod.Bitmap = LoadBitmap(ruta,"1.jpg") + TOT_ART_PROMO = "0" + TOT_ART_PROMOR = "0" + If l_marca.text = "PROMOS" And l_tipo.Text ="PROMOS" And l_bodega.Text = "0" Then + Msgbox("ALERTA","EL CLIENTE NO PUEDE TENER ESTA PROMOCION") 'ignore + B4XPages.ShowPage("Productos") + ELSE IF l_marca.text = "PROMOS" And l_tipo.Text ="PROMOS" And L_PROID.Text = "PROUNI1" And BONSABOR <> "1" And BONSABOR2 = 0 Then + Msgbox("ALERTA","EL CLIENTE NO PUEDE TENER ESTA PROMOCION") 'ignore + B4XPages.ShowPage("Productos") + End If + Else + Msgbox("ALERTA","EL CLIENTE YA COMPRO ESTE PRODUCTO REVISAR NOTA") 'ignore + B4XPages.ShowPage("Productos") + End If +End Sub + +Sub guardar_Click + If cantidad.Text = "" Then + B4XPages.ShowPage("Productos") + ELSE If cantidad.Text > l_bodega.Text Then + Msgbox("Exede la existencia", "ADVERTENCIA") 'ignore + Else If l_marca.text = "PROMOS" And l_tipo.Text ="PROMOS" And PROMO_C > 0 And cantidad.Text > 0 Then + B4XPages.MainPage.skmt.ExecNonQuery("delete from PROIDID") + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PROIDID VALUES (?)", Array As Object(L_PROID.text)) + c=B4XPages.MainPage.skmt.ExecQuery("Select count(*) as CUANTOSD from pedido where PE_CLIENTE IN (Select CUENTA from cuentaa) and pe_proid In (Select cat_dp_idprod from CAT_DETALLES_PAQ WHERE CAT_DP_ID In (Select PROIDID from PROIDID) AND CAT_DP_TIPO = 1)") + c.Position =0 + If c.GetString("CUANTOSD") = 0 Then + Msgbox("No tiene venta el cliente para la promo", "ADVERTENCIA") 'ignore + Else + c=B4XPages.MainPage.skmt.ExecQuery("Select sum(pe_cant) As TOT_ART_PROMO, sum(PE_COSTO_TOT) as COSTO_TOT from pedido where PE_CLIENTE IN (Select CUENTA from cuentaa) and pe_proid In (Select cat_dp_idprod from CAT_DETALLES_PAQ WHERE CAT_DP_ID In (Select PROIDID from PROIDID) AND CAT_DP_PRECIO > 1)") + C.Position =0 + TOT_ART_PROMO = C.GetString("TOT_ART_PROMO") + COSTO_TOT = C.GetString("COSTO_TOT") + C.Close + c=B4XPages.MainPage.skmt.ExecQuery("Select count(*) as CUANTOSD from pedido where PE_CLIENTE IN (Select CUENTA from cuentaa) and pe_proid In (Select cat_dp_idprod from CAT_DETALLES_PAQ WHERE CAT_DP_ID In (Select PROIDID from PROIDID) AND (CAT_DP_PRECIO = 0.01 or CAT_DP_PRECIO = 1 OR CAT_DP_PRECIO = 0) AND CAT_DP_TIPO = 1)") + c.Position =0 + If c.GetString("CUANTOSD") = 0 Then + TOT_ART_PROMOR = "0" 'Msgbox("No tiene venta el cliente para la promo", "ADVERTENCIA") + Else + c=B4XPages.MainPage.skmt.ExecQuery("Select sum(pe_cant) As TOT_ART_PROMO, sum(PE_COSTO_TOT) as COSTO_TOT from pedido where PE_CLIENTE IN (Select CUENTA from cuentaa) and pe_proid In (Select cat_dp_idprod from CAT_DETALLES_PAQ WHERE CAT_DP_ID In (Select PROIDID from PROIDID) AND (CAT_DP_PRECIO = 0.01 or CAT_DP_PRECIO = 1 OR CAT_DP_PRECIO = 0) AND CAT_DP_TIPO = 1)") + C.Position =0 + TOT_ART_PROMOR = C.GetString("TOT_ART_PROMO") + End If + C.Close + PROMO_C = PROMO_C * cantidad.Text + PROMO_CR = PROMO_CR * cantidad.Text + If TOT_ART_PROMO = PROMO_C And TOT_ART_PROMOR = PROMO_CR Then + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE PEDIDO SET PE_CEDIS = (?) WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) and pe_proid In (Select cat_dp_idprod from CAT_DETALLES_PAQ WHERE CAT_DP_ID In (Select PROIDID from PROIDID))", Array As Object(L_PROID.text)) + D=B4XPages.MainPage.skmt.ExecQuery("select CAT_DP_ID, CAT_DP_PRECIO, CAT_DP_PRECIO_SIMPTOS, CAT_DP_IDPROD FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (Select PROIDID from PROIDID) AND CAT_DP_PRECIO > 1") + If D.RowCount>0 Then + For i=0 To D.RowCount -1 + D.Position=i + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE PEDIDO SET PE_COSTOU = (?), PE_COSTO_TOT = PE_CANT * (?) , PE_COSTO_SIN = (?) WHERE PE_PROID = (?) And PE_CEDIS In (Select PROIDID from PROIDID) AND PE_CLIENTE IN (Select CUENTA from cuentaa) ",Array As Object( D.GetString("CAT_DP_PRECIO"), D.GetString("CAT_DP_PRECIO"), D.GetString("CAT_DP_PRECIO_SIMPTOS"),D.GetString("CAT_DP_IDPROD"))) + Next + End If + D.Close + D=B4XPages.MainPage.skmt.ExecQuery("select CAT_DP_ID, CAT_DP_PRECIO, CAT_DP_PRECIO_SIMPTOS, CAT_DP_IDPROD FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (Select PROIDID from PROIDID) AND (CAT_DP_PRECIO = 0.01 or CAT_DP_PRECIO = 1 OR CAT_DP_PRECIO = 0) AND CAT_DP_TIPO = 1") + If D.RowCount>0 Then + For i=0 To D.RowCount -1 + D.Position=i + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE PEDIDO SET PE_COSTOU = (?), PE_COSTO_TOT = PE_CANT * (?) , PE_COSTO_SIN = (?) WHERE PE_PROID = (?) And PE_CEDIS In (Select PROIDID from PROIDID) AND PE_CLIENTE IN (Select CUENTA from cuentaa) ",Array As Object( D.GetString("CAT_DP_PRECIO"), D.GetString("CAT_DP_PRECIO"), D.GetString("CAT_DP_PRECIO_SIMPTOS"),D.GetString("CAT_DP_IDPROD"))) + Next + End If + D.Close + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=B4XPages.MainPage.skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_RUTA from kmt_info where CAT_CL_CODIGO In (Select cuenta from cuentaa)") + c.Position=0 + cl_ruta = c.GetString("CAT_CL_RUTA") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + e=B4XPages.MainPage.skmt.ExecQuery("select count(*) as CUANTOS FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (Select PROIDID from PROIDID) and CAT_DP_TIPO = 0 ") + ' SE LO QUITE DE CONDICION AND (CAT_DP_PRECIO = 0.01 or CAT_DP_PRECIO = 1 OR CAT_DP_PRECIO = 0) + e.Position =0 + If e.GetString("CUANTOS") > 0 Then + F=B4XPages.MainPage.skmt.ExecQuery("select CAT_DP_IDPROD, CAT_DP_PZAS,CAT_DP_PRECIO FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (Select PROIDID from PROIDID) and CAT_DP_TIPO = 0 ") ' AND (CAT_DP_PRECIO = 0.01 or CAT_DP_PRECIO = 1 OR CAT_DP_PRECIO = 0) + 'meter el otro + 'si jala copiar para guna y el resto + If f.RowCount>0 Then + For i=0 To f.RowCount -1 + f.Position=i + precio_Cero = f.GetString("CAT_DP_PRECIO") + h=B4XPages.MainPage.skmt.ExecQuery2("select CAT_GP_NOMBRE from CAT_GUNAPROD where CAT_GP_ID = ? ", Array As String(f.GetString("CAT_DP_IDPROD"))) + h.Position=0 + '0 + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO,PE_RUTA) VALUES(?,?,?,?,?,?,?,?,?,?) ", Array As Object (L_PROID.text,precio_Cero * f.GetString("CAT_DP_PZAS") * cantidad.text, precio_Cero, f.GetString("CAT_DP_PZAS") * cantidad.text, h.GetString("CAT_GP_NOMBRE"), f.GetString("CAT_DP_IDPROD"),clie_id, sDate & sTime, usuario,cl_ruta)) + h.Close + Next + End If + f.Close + End If + e.Close + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO,PE_RUTA,PE_FOLIO) VALUES(?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (L_PROID.text,0 , 0, cantidad.text, l_desc.text, L_PROID.Text,clie_id, sDate & sTime, usuario,cl_ruta, b4xpages.MainPage.tipo_venta)) + B4XPages.MainPage.skmt.ExecNonQuery2("update cat_gunaprod set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? ", Array As Object(cantidad.Text, L_PROID.Text)) + Else + Msgbox("Tiene " & TOT_ART_PROMO & " " & TOT_ART_PROMOR & " y necesita " & PROMO_C & " " & PROMO_CR & " Para la Promo. " , "ADVERTENCIA") 'ignore + End If + End If + cantidad.Text = "" + B4XPages.ShowPage("Productos") + else If l_marca.text = "PROMOS" And l_tipo.Text ="PROMOS" And PROMO_C = 0 Then + B4XPages.MainPage.skmt.ExecNonQuery("delete from PROIDID") + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PROIDID VALUES (?)", Array As Object(L_PROID.text)) + c=B4XPages.MainPage.skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c.Close + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_RUTA from kmt_info where CAT_CL_CODIGO In (Select cuenta from cuentaa)") + c.Position=0 + cl_ruta = c.GetString("CAT_CL_RUTA") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + 'B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO) VALUES(?,?,?,?,?,?,?,?,?) ", Array As Object ("COACALCO",cantidad.Text * l_precio.Text, l_precio.text, cantidad.text, l_desc.text, L_PROID.Text,clie_id, sDate & sTime, usuario)) + 'para insertar la promo de ades el de regalo en 0 + e=B4XPages.MainPage.skmt.ExecQuery("select count(*) as CUANTOS FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (Select PROIDID from PROIDID) ") + e.Position =0 + If e.GetString("CUANTOS") > 0 Then + F=B4XPages.MainPage.skmt.ExecQuery("select CAT_DP_IDPROD, CAT_DP_PZAS, CAT_DP_PRECIO FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (Select PROIDID from PROIDID)") + For i =0 To f.RowCount -1 + F.Position =i + h=B4XPages.MainPage.skmt.ExecQuery2("select CAT_GP_NOMBRE from CAT_GUNAPROD where CAT_GP_ID = ? ", Array As String(f.GetString("CAT_DP_IDPROD"))) + h.Position=0 + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO,PE_RUTA,PE_FOLIO) VALUES(?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (L_PROID.text,f.GetString("CAT_DP_PRECIO") * cantidad.text * f.GetString("CAT_DP_PZAS"), f.GetString("CAT_DP_PRECIO"), f.GetString("CAT_DP_PZAS") * cantidad.text, h.GetString("CAT_GP_NOMBRE"), f.GetString("CAT_DP_IDPROD"),clie_id, sDate & sTime, usuario,cl_ruta, B4XPages.MainPage.tipo_venta)) + h.Close + Next + f.Close + End If + e.Close + '0 + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO,PE_RUTA,PE_FOLIO) VALUES(?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (L_PROID.text,0, 0, cantidad.text, l_desc.text, L_PROID.Text,clie_id, sDate & sTime, usuario,cl_ruta, B4XPages.MainPage.tipo_venta)) + B4XPages.MainPage.skmt.ExecNonQuery2("update cat_gunaprod set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? ", Array As Object(cantidad.Text, L_PROID.Text)) + cantidad.Text = "" + c=B4XPages.MainPage.skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE, SUM(PE_COSTO_SIN) AS TOTAL_CLIE_SIN FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + c.Position=0 + B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)") + B4XPages.MainPage.skmt.ExecNonQuery2("insert into pedido_cliente(PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT,PC_ALMACEN,PC_RUTA,PC_COSTO_SIN) VALUES (?,?,?,?,?,?,?,?,?,?)", Array As Object(clie_id, sDate & sTime, usuario, c.GetString("CANT_CLIE"),c.GetString("TOTAL_CLIE"), B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps,ALMACEN,cl_ruta,c.GetString("TOTAL_CLIE_SIN"))) + B4XPages.MainPage.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 2 where CAT_CL_CODIGO In (select cuenta from cuentaa)") + B4XPages.ShowPage("Productos") + Else + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=B4XPages.MainPage.skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_RUTA from kmt_info where CAT_CL_CODIGO In (Select cuenta from cuentaa)") + c.Position=0 + cl_ruta = c.GetString("CAT_CL_RUTA") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO,PE_RUTA,PE_COSTO_SIN, PE_FOLIO) VALUES(?,?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (ALMACEN,cantidad.Text * l_precio.Text, l_precio.text, cantidad.text, l_desc.text, L_PROID.Text,clie_id, sDate & sTime, usuario,cl_ruta,preciosin, B4XPages.MainPage.tipo_venta)) + B4XPages.MainPage.skmt.ExecNonQuery2("update cat_gunaprod set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? ", Array As Object(cantidad.Text, L_PROID.Text)) + c=B4XPages.MainPage.skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE, SUM(PE_COSTO_SIN) AS TOTAL_CLIE_SIN FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + c.Position=0 + B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)") + B4XPages.MainPage.skmt.ExecNonQuery2("insert into pedido_cliente(PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT,PC_ALMACEN,PC_RUTA,PC_COSTO_SIN) VALUES (?,?,?,?,?,?,?,?,?,?)", Array As Object(clie_id, sDate & sTime, usuario, c.GetString("CANT_CLIE"),c.GetString("TOTAL_CLIE"), B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps,ALMACEN,cl_ruta,c.GetString("TOTAL_CLIE_SIN"))) + B4XPages.MainPage.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 2 where CAT_CL_CODIGO In (select cuenta from cuentaa)") + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO INVENT_X_ENVIAR (ALMACEN , PROID , CANTIDAD ) VALUES(?,?,?) ", Array As Object (ALMACEN,L_PROID.Text,cantidad.text)) + B4XPages.ShowPage("Productos") + End If +End Sub + +Sub GPS_LocationChanged (Location1 As Location) + 'lat_gps=Location1.ConvertToSeconds(Location1.Latitude) + 'lon_gps=Location1.ConvertToSeconds(Location1.Longitude) +End Sub + +Sub Terminar_Click + If cantidad.Text = "" Then + B4XPages.ShowPage("Cliente") + ELSE If cantidad.Text > l_bodega.Text Then + Msgbox("Exede la existencia", "ADVERTENCIA") 'ignore + Else If l_marca.text = "PROMOS" And l_tipo.Text ="PROMOS" And PROMO_C > 0 And cantidad.Text > 0 Then + B4XPages.MainPage.skmt.ExecNonQuery("delete from PROIDID") + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PROIDID VALUES (?)", Array As Object(L_PROID.text)) + c=B4XPages.MainPage.skmt.ExecQuery("Select count(*) as CUANTOSD from pedido where PE_CLIENTE IN (Select CUENTA from cuentaa) and pe_proid In (Select cat_dp_idprod from CAT_DETALLES_PAQ WHERE CAT_DP_ID In (Select PROIDID from PROIDID) AND CAT_DP_TIPO = 1)") + c.Position =0 + If c.GetString("CUANTOSD") = 0 Then + Msgbox("No tiene venta el cliente para la promo", "ADVERTENCIA") 'ignore + Else + c=B4XPages.MainPage.skmt.ExecQuery("Select sum(pe_cant) As TOT_ART_PROMO, sum(PE_COSTO_TOT) as COSTO_TOT from pedido where PE_CLIENTE IN (Select CUENTA from cuentaa) and pe_proid In (Select cat_dp_idprod from CAT_DETALLES_PAQ WHERE CAT_DP_ID In (Select PROIDID from PROIDID) AND CAT_DP_PRECIO > 1)") + C.Position =0 + TOT_ART_PROMO = C.GetString("TOT_ART_PROMO") + COSTO_TOT = C.GetString("COSTO_TOT") + C.Close + c=B4XPages.MainPage.skmt.ExecQuery("Select count(*) as CUANTOSD from pedido where PE_CLIENTE IN (Select CUENTA from cuentaa) and pe_proid In (Select cat_dp_idprod from CAT_DETALLES_PAQ WHERE CAT_DP_ID In (Select PROIDID from PROIDID) AND (CAT_DP_PRECIO = 0.01 or CAT_DP_PRECIO = 1 OR CAT_DP_PRECIO = 0) AND CAT_DP_TIPO = 1)") + c.Position =0 + If c.GetString("CUANTOSD") = 0 Then + TOT_ART_PROMOR = "0" 'Msgbox("No tiene venta el cliente para la promo", "ADVERTENCIA") + Else + c=B4XPages.MainPage.skmt.ExecQuery("Select sum(pe_cant) As TOT_ART_PROMO, sum(PE_COSTO_TOT) as COSTO_TOT from pedido where PE_CLIENTE IN (Select CUENTA from cuentaa) and pe_proid In (Select cat_dp_idprod from CAT_DETALLES_PAQ WHERE CAT_DP_ID In (Select PROIDID from PROIDID) AND (CAT_DP_PRECIO = 0.01 or CAT_DP_PRECIO = 1 OR CAT_DP_PRECIO = 0) AND CAT_DP_TIPO = 1)") + C.Position =0 + TOT_ART_PROMOR = C.GetString("TOT_ART_PROMO") + End If + C.Close + PROMO_C = PROMO_C * cantidad.Text + PROMO_CR = PROMO_CR * cantidad.Text + If TOT_ART_PROMO = PROMO_C And TOT_ART_PROMOR = PROMO_CR Then + ' anterior a 29/06/2015 + 'B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE PEDIDO SET PE_COSTOU = (?), PE_COSTO_TOT = PE_CANT * (?) WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) and pe_proid In (Select cat_dp_idprod from CAT_DETALLES_PAQ WHERE CAT_DP_ID In (Select PROIDID from PROIDID))", Array As Object(l_precio.text/(TOT_ART_PROMO/cantidad.Text),l_precio.text/(TOT_ART_PROMO/cantidad.Text))) + 'en pe_cedis meto el codigo de promocion para hacer esta validacion. + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE PEDIDO SET PE_CEDIS = (?) WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) and pe_proid In (Select cat_dp_idprod from CAT_DETALLES_PAQ WHERE CAT_DP_ID In (Select PROIDID from PROIDID))", Array As Object(L_PROID.text)) + D=B4XPages.MainPage.skmt.ExecQuery("select CAT_DP_ID, CAT_DP_PRECIO, CAT_DP_PRECIO_SIMPTOS, CAT_DP_IDPROD FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (Select PROIDID from PROIDID) AND CAT_DP_PRECIO > 1") + If D.RowCount>0 Then + For i=0 To D.RowCount -1 + D.Position=i + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE PEDIDO SET PE_COSTOU = (?), PE_COSTO_TOT = PE_CANT * (?) , PE_COSTO_SIN = (?) WHERE PE_PROID = (?) And PE_CEDIS In (Select PROIDID from PROIDID) AND PE_CLIENTE IN (Select CUENTA from cuentaa) ",Array As Object( D.GetString("CAT_DP_PRECIO"), D.GetString("CAT_DP_PRECIO"), D.GetString("CAT_DP_PRECIO_SIMPTOS"),D.GetString("CAT_DP_IDPROD"))) + Next + End If + D.Close + D=B4XPages.MainPage.skmt.ExecQuery("select CAT_DP_ID, CAT_DP_PRECIO, CAT_DP_PRECIO_SIMPTOS, CAT_DP_IDPROD FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (Select PROIDID from PROIDID) AND (CAT_DP_PRECIO = 0.01 or CAT_DP_PRECIO = 1 OR CAT_DP_PRECIO = 0) AND CAT_DP_TIPO = 1") + If D.RowCount>0 Then + For i=0 To D.RowCount -1 + D.Position=i + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE PEDIDO SET PE_COSTOU = (?), PE_COSTO_TOT = PE_CANT * (?) , PE_COSTO_SIN = (?) WHERE PE_PROID = (?) And PE_CEDIS In (Select PROIDID from PROIDID) AND PE_CLIENTE IN (Select CUENTA from cuentaa) ",Array As Object( D.GetString("CAT_DP_PRECIO"), D.GetString("CAT_DP_PRECIO"), D.GetString("CAT_DP_PRECIO_SIMPTOS"),D.GetString("CAT_DP_IDPROD"))) + Next + End If + D.Close + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=B4XPages.MainPage.skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_RUTA from kmt_info where CAT_CL_CODIGO In (Select cuenta from cuentaa)") + c.Position=0 + cl_ruta = c.GetString("CAT_CL_RUTA") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + 'para insertar la promo de ades el de regalo en 0 + e=B4XPages.MainPage.skmt.ExecQuery("select count(*) as CUANTOS FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (Select PROIDID from PROIDID) and CAT_DP_TIPO = 0 ") + ' SE LO QUITE DE CONDICION AND (CAT_DP_PRECIO = 0.01 or CAT_DP_PRECIO = 1 OR CAT_DP_PRECIO = 0) + e.Position =0 + If e.GetString("CUANTOS") > 0 Then + F=B4XPages.MainPage.skmt.ExecQuery("select CAT_DP_IDPROD, CAT_DP_PZAS,CAT_DP_PRECIO FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (Select PROIDID from PROIDID) and CAT_DP_TIPO = 0 ") ' AND (CAT_DP_PRECIO = 0.01 or CAT_DP_PRECIO = 1 OR CAT_DP_PRECIO = 0) + 'meter el otro + 'si jala copiar para guna y el resto + If f.RowCount>0 Then + For i=0 To f.RowCount -1 + f.Position=i + precio_Cero = f.GetString("CAT_DP_PRECIO") + h=B4XPages.MainPage.skmt.ExecQuery2("select CAT_GP_NOMBRE from CAT_GUNAPROD where CAT_GP_ID = ? ", Array As String(f.GetString("CAT_DP_IDPROD"))) + h.Position=0 + Log(111) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO,PE_RUTA,PE_FOLIO) VALUES(?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (L_PROID.text,precio_Cero * f.GetString("CAT_DP_PZAS") * cantidad.text, precio_Cero, f.GetString("CAT_DP_PZAS") * cantidad.text, h.GetString("CAT_GP_NOMBRE"), f.GetString("CAT_DP_IDPROD"),clie_id, sDate & sTime, usuario,cl_ruta, B4XPages.MainPage.tipo_venta)) + h.Close + Next + End If + f.Close + End If + e.Close + Log(222) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO,PE_RUTA,PE_FOLIO) VALUES(?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (L_PROID.text,0 , 0, cantidad.text, l_desc.text, L_PROID.Text,clie_id, sDate & sTime, usuario,cl_ruta, B4XPages.MainPage.tipo_venta)) + B4XPages.MainPage.skmt.ExecNonQuery2("update cat_gunaprod set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? ", Array As Object(cantidad.Text, L_PROID.Text)) + Else + Msgbox("Tiene " & TOT_ART_PROMO & " " & TOT_ART_PROMOR & " y necesita " & PROMO_C & " " & PROMO_CR & " Para la Promo. " , "ADVERTENCIA") 'ignore + End If + End If + cantidad.Text = "" + B4XPages.ShowPage("Cliente") + else If l_marca.text = "PROMOS" And l_tipo.Text ="PROMOS" And PROMO_C = 0 Then + B4XPages.MainPage.skmt.ExecNonQuery("delete from PROIDID") + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PROIDID VALUES (?)", Array As Object(L_PROID.text)) + c=B4XPages.MainPage.skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c.Close + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_RUTA from kmt_info where CAT_CL_CODIGO In (Select cuenta from cuentaa)") + c.Position=0 + cl_ruta = c.GetString("CAT_CL_RUTA") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + 'para insertar la promo de ades el de regalo en 0 + e=B4XPages.MainPage.skmt.ExecQuery("select count(*) as CUANTOS FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (Select PROIDID from PROIDID) ") + e.Position =0 + If e.GetString("CUANTOS") > 0 Then + F=B4XPages.MainPage.skmt.ExecQuery("select CAT_DP_IDPROD, CAT_DP_PZAS, CAT_DP_PRECIO FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (Select PROIDID from PROIDID)") + For i =0 To f.RowCount -1 + F.Position =i + h=B4XPages.MainPage.skmt.ExecQuery2("select CAT_GP_NOMBRE from CAT_GUNAPROD where CAT_GP_ID = ? ", Array As String(f.GetString("CAT_DP_IDPROD"))) + h.Position=0 + Log(333) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO,PE_RUTA,PE_FOLIO) VALUES(?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (L_PROID.text,f.GetString("CAT_DP_PRECIO") * cantidad.text * f.GetString("CAT_DP_PZAS"), f.GetString("CAT_DP_PRECIO"), f.GetString("CAT_DP_PZAS") * cantidad.text, h.GetString("CAT_GP_NOMBRE"), f.GetString("CAT_DP_IDPROD"),clie_id, sDate & sTime, usuario,cl_ruta, B4XPages.MainPage.tipo_venta)) + h.Close + Next + f.Close + End If + e.Close + Log(444) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO,PE_RUTA,PE_FOLIO) VALUES(?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (L_PROID.text,0, 0, cantidad.text, l_desc.text, L_PROID.Text,clie_id, sDate & sTime, usuario,cl_ruta, B4XPages.MainPage.tipo_venta)) + B4XPages.MainPage.skmt.ExecNonQuery2("update cat_gunaprod set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? ", Array As Object(cantidad.Text, L_PROID.Text)) + cantidad.Text = "" + c=B4XPages.MainPage.skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE, SUM(PE_COSTO_SIN) AS TOTAL_CLIE_SIN FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + c.Position=0 + B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)") + B4XPages.MainPage.skmt.ExecNonQuery2("insert into pedido_cliente(PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT,PC_ALMACEN,PC_RUTA,PC_COSTO_SIN) VALUES (?,?,?,?,?,?,?,?,?,?)", Array As Object(clie_id, sDate & sTime, usuario, c.GetString("CANT_CLIE"),c.GetString("TOTAL_CLIE"), B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps,ALMACEN,cl_ruta,c.GetString("TOTAL_CLIE_SIN"))) + B4XPages.MainPage.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 2 where CAT_CL_CODIGO In (select cuenta from cuentaa)") + B4XPages.ShowPage("Cliente") + Else + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=B4XPages.MainPage.skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_RUTA from kmt_info where CAT_CL_CODIGO In (Select cuenta from cuentaa)") + c.Position=0 + cl_ruta = c.GetString("CAT_CL_RUTA") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + Log(555) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO,PE_RUTA,PE_COSTO_SIN,PE_FOLIO) VALUES(?,?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (ALMACEN,cantidad.Text * l_precio.Text, l_precio.text, cantidad.text, l_desc.text, L_PROID.Text,clie_id, sDate & sTime, usuario,cl_ruta,preciosin, B4XPages.MainPage.tipo_venta)) + B4XPages.MainPage.skmt.ExecNonQuery2("update cat_gunaprod set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? ", Array As Object(cantidad.Text, L_PROID.Text)) + c=B4XPages.MainPage.skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE, SUM(PE_COSTO_SIN) AS TOTAL_CLIE_SIN FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + c.Position=0 + B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)") + B4XPages.MainPage.skmt.ExecNonQuery2("insert into pedido_cliente(PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT,PC_ALMACEN,PC_RUTA,PC_COSTO_SIN) VALUES (?,?,?,?,?,?,?,?,?,?)", Array As Object(clie_id, sDate & sTime, usuario, c.GetString("CANT_CLIE"),c.GetString("TOTAL_CLIE"), B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps,ALMACEN,cl_ruta,c.GetString("TOTAL_CLIE_SIN"))) + B4XPages.MainPage.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 2 where CAT_CL_CODIGO In (select cuenta from cuentaa)") + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO INVENT_X_ENVIAR (ALMACEN , PROID , CANTIDAD ) VALUES(?,?,?) ", Array As Object (ALMACEN,L_PROID.Text,cantidad.text)) + B4XPages.ShowPage("Cliente") + End If +End Sub + +Private Sub B4XPage_CloseRequest As ResumableSub +' BACK key pressed +' Return True To close, False To cancel + Msgbox("Presione Boton Terminar.","ADVERTENCIA") 'ignore + Return False +End Sub + +Sub img_prod_Click + i_fotol.Visible = True + i_fotol.Bitmap = LoadBitmap(ruta,"1.jpg") + +End Sub +Sub i_fotol_Click + i_fotol.Visible = False + +End Sub + +Sub DESC_PROMO_Click + B4XPages.MainPage.skmt.ExecNonQuery("delete from PROIDID") + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PROIDID VALUES (?)", Array As Object(L_PROID.text)) + B4XPages.ShowPage("detalle_promo") +End Sub + +Sub nopromo_Click + If cantidad.Text = "" Then + Msgbox("Cantidad no puede ser 0","Cantidad") 'ignore + Else If cantidad.Text > l_bodega.Text Then + Msgbox("Exede la existencia", "ADVERTENCIA") 'ignore + Else + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=B4XPages.MainPage.skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c=B4XPages.MainPage.skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO,PE_FOLIO) VALUES(?,?,?,?,?,?,?,?,?,?) ", Array As Object ("COACALCO",0,0, cantidad.text, l_desc.text, L_PROID.Text,clie_id, sDate & sTime, usuario, b4xpages.MainPage.tipo_venta)) + B4XPages.MainPage.skmt.ExecNonQuery2("update cat_gunaprod set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? ", Array As Object(cantidad.Text, L_PROID.Text)) + cantidad.Text = "" + B4XPages.ShowPage("Productos") + End If +End Sub + +Private Sub p_pedido_Click + +End Sub \ No newline at end of file diff --git a/B4A/C_Principal.bas b/B4A/C_Principal.bas new file mode 100644 index 0000000..fc35aaa --- /dev/null +++ b/B4A/C_Principal.bas @@ -0,0 +1,2279 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11.5 +@EndOfDesignText@ +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore + Dim conectado As String + Dim t1 As Timer + Dim sb As StringBuilder + Dim PHONE As Phone + Dim g As GPS + Dim trabajar As Button +' Dim lat_gps, lon_gps As String + Dim c As Cursor + Dim d As Cursor + Dim b As Cursor + Dim e As Cursor + Dim f As Cursor + Dim D2 As Cursor + Dim lv As ListView + Dim cargar As Button + Dim pendiente As Button + Dim foto1() As Byte + Dim usuario As String + Dim connecta As Button + Dim conn As String + Dim Subir As Button + Dim cmd As DBCommand + Dim TOPE As Int + Dim COUNT_CLIE As Int + Dim fecha As String + Dim drop As Double + Dim efectiva As Double + + Dim L_MONTOD As Label + Dim l_cuantosc As Label + Dim l_drop As Label + Dim l_efectiva As Label + Dim l_ctast As Label + Dim BUSCA As Button + Dim Cuantos As String + Dim l_cuantosn As Label + Dim e_ruta As EditText + Dim l_porvisitar As Label + Dim b_mapa As Button + Dim l_ruta As Label + Dim ALMACEN As String + Private img2 As ImageView + Dim Listo1 As String + Dim Listo2 As String + Dim Listo3 As String + Dim Listo4 As String + Dim Listo5 As String + Dim EJECUTANDO As String + Dim RES As String + Dim inve As String + Dim cuantos_pedidosc As String + Dim cuantos_pedido As String + Dim cuantos_noventa As String + Dim datos_iguales As String + Dim p As PhoneId + Dim imei As String +' Dim SERVER As String + + + Private inv As Button + Private P1 As Panel + Private CLAVE As EditText + Private B_OK_PAS As Button + Dim PASO As String + Private USUARIO1 As EditText + Dim connecta1 As Double + Dim armafolio As String + Private NUEVO As Button + Private S_CC As Label + Private S_CP As Label + Private S_CH As Label + Private PB2 As ProgressBar + Private PB1 As ProgressBar + Private L_P_1 As Label + Private L_P_2 As Label + Private L_P_3 As Label + Private CARGA As String + Private PORCENTAJE As String + Private P_RESUMEN As Panel + Private B_OK_RES As Button + Private Resumen As Button + Private L_CUANTOST As Label + Private img3 As ImageView + + Private ImageView3 As ImageView + Private ImageView5 As ImageView + Private L_TICKPROM As Label + Private L_MARCAS As ListView + Private Panel11 As Panel + Private E_RUTA2 As EditText + Private resdia As ImageView + Private hacer_ped As ImageView + Private nvo_cliente As ImageView + Private tickets_dia As ImageView + + Private l_monto_ks As Label + Private l_monto_kp As Label + Private l_monto_k As Label + + Private l_monto_c1 As Label + Private l_monto_c2 As Label + Private l_monto_c3 As Label + + Private l_encuesta As Label + + + Private bpv1 As BatteryProgressView + Dim batterystatus(11) As Int + Private bu As BatteryUtilities + + + Private Panel4 As Panel + Private L_NES As Label + Private L_REAL As Label + Private L_ALCANCE As Label + Private L_VPLAN As Label + Private L_VREAL As Label + Private L_EFEC_VIS As Label + Private L_VISITCC As Label + Private L_EFEC_PV As Label + Private L_EFEC_PURA As Label + Private L_CTE_PROMO As Label + Private L_REDEN_PROMO As Label + Private L_LIN_TICK As Label + Private SCROLL_RESDIA As ScrollView + Private L_ACUMULADO As Label + Private L_UNILEVER As Label + Private L_RECHAZOP As Label + Private L_RECHAZOM As Label + Private L_VTA_3MES As Label + Private L_VTA_2MES As Label + Private L_VTA_1MES As Label + Private L_MES_PY As Label + Private L_FREC_DE_CREAL As Label + Private L_FREC_DE_COBJ As Label + Private L_COB_VISIT As Label + Private L_VISIT_REAL As Label + Private L_VISIT_PLAN As Label + Private L_ECO As Label + Private L_COB_CCC As Label + Private L_CTES As Label + Private L_VPO_VTA As Label + Private L_VPO_OBJ As Label + Private L_DS_VTA As Label + Private L_DS_OBJ As Label + Private L_DRA_VTA As Label + Private L_DRA_OBJ As Label + Private L_ALCANCEM As Label + Private L_TENDENCIA As Label + Private L_VTA_ACUM As Label + Private L_OBJ_MES As Label + Private L_DS_OBJD As Label + Private L_DS_VTAD As Label + Private LPT As String + Private STEYIN As String + Private STEYOUT As String + + Private L_PRIO As Label + Private L_SECUND As Label + Private L_COMP As Label + + + Private stay_hh As String + Private stay_mi As String + Private stay_ss As String + + Dim sDate,sTime As String + Dim HORAINGRESO As String + + Private L_QUALA As Label + Private L_FERRERO As Label + Private L_SANMARCOS As Label + Private L_CAMPARI As Label + Private L_IBERIA As Label + Private L_BEPENSA As Label + Private L_SCJ As Label + Private L_MEDJ As Label + Private L_DURACELL As Label + Private L_GUNA As Label + Private L_KIMB As Label + Private L_TRESM As Label + Private L_REDB As Label + Private Btn_Ubicar As Button + Private B_COMM As Button + Private L_TOTAL_MM As Label + Private L_TOTAL_VIVE As Label + Private L_TOTAL_GUNA As Label + Private L_TOTAL_BA As Label + Private L_TOTAL_COMIS As Label + Private L_TOTAL_MM_1 As Label + Private L_TOTAL_VIVE_1 As Label + Private L_TOTAL_GUNA_1 As Label + Private L_TOTAL_BA_1 As Label + Private L_TOTAL_COMIS_1 As Label + Private B_OK_COMISS As Button + Private Panel_C As Panel + + Private TitleHeight As Int = 50dip + Private Title2Height As Int = 100dip + + Private DividerHeight As Int = 5dip + Private CLV1 As CustomListView + Private pnlTitle As B4XView + Private xui As XUI + Type TitleData (Title As String) + + Private B_MARCAS As Button + Private lblTitle As Label + Private B_OK_PANEL5 As Button + Private p_principal As Panel + + Private teclado As IME + Private panel5 As Panel + Private panel_5 As Panel + Private p_marcasRes As Panel + Private p_sombra As Panel +End Sub + +'You can add more parameters here. +Public Sub Initialize As Object + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + Root = Root1 + 'load the layout to Root + Root.LoadLayout("principal") + SCROLL_RESDIA.Width = Root.Width + SCROLL_RESDIA.Height = Root.Height + B_OK_RES.color = Colors.Red + B_OK_RES.TextColor = Colors.White + EJECUTANDO=1 + Dim ruta As String + img2.Visible =False + ruta = File.DirInternal + If File.Exists(ruta, "kmt.db") = False Then + File.Copy(File.DirAssets, "kmt.db", ruta, "kmt.db") + End If + DateTime.DateFormat = "MM/dd/yyyy" + fecha=DateTime.Date(DateTime.Now) + B4XPages.MainPage.skmt.Initialize(ruta,"kmt.db", True) + b=B4XPages.MainPage.skmt.ExecQuery("Select count(*) as CUANTOS from pedido_cliente") + b.Position=0 + Cuantos = b.GetString("CUANTOS") + b.Close + d=B4XPages.MainPage.skmt.ExecQuery("select count(*) as TOTAL_VISITAR from kmt_info where gestion = 0") + d.Position=0 + e=B4XPages.MainPage.skmt.ExecQuery("select count(*) as POR_VISITAR from kmt_info") + e.Position=0 + f=B4XPages.MainPage.skmt.ExecQuery("select count(*) as CAT_CL_RUTA from kmt_info") + f.Position=0 + l_ruta.Text = f.GetString("CAT_CL_RUTA") + f.Close + If l_ruta.Text = 0 Then + l_ruta.Text =0 + Else + f=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_RUTA from kmt_info") + f.Position=0 + l_ruta.Text = f.GetString("CAT_CL_RUTA") + f.Close + End If + If Cuantos = 0 Then + L_MONTOD.Text =0 + l_cuantosc.Text = 0 + l_cuantosn.Text = 0 + drop = 0 + l_drop.Text = 0 + efectiva = 0 + l_efectiva.text =0 + l_ctast.Text = d.GetString("TOTAL_VISITAR") + l_porvisitar.Text = e.GetString("POR_VISITAR") + Else + c=B4XPages.MainPage.skmt.ExecQuery("select sum(pc_monto) as MONTO_DIA, count(pc_cliente) AS CLIENTES_DIA from pedido_cliente ") + b=B4XPages.MainPage.skmt.ExecQuery("select count(*) as CUANTOS from noventa") + 'where pc_fecha = ?", Array As String(fecha) + c.Position=0 + b.Position=0 + L_MONTOD.Text = c.GetString("MONTO_DIA") + l_cuantosc.Text = c.GetString("CLIENTES_DIA") + l_cuantosn.Text = b.GetString("CUANTOS") + drop = c.GetString("MONTO_DIA") / c.GetString("CLIENTES_DIA") + l_drop.Text = Round2(drop,2) + efectiva = c.GetString("CLIENTES_DIA") / e.GetString("POR_VISITAR") + l_efectiva.text = Round2(efectiva*100,2) + l_ctast.Text = d.GetString("TOTAL_VISITAR") + l_porvisitar.Text = e.GetString("POR_VISITAR") + b.Close + c.Close + End If + d.Close + e.Close + CallSubDelayed(FirebaseMessaging, "SubscribeToTopics") +End Sub + +Sub B4XPage_Appear + p_principal.Visible = True + HORAINGRESO ="000000" + Btn_Ubicar.Left = (Root.Width/2) - (Btn_Ubicar.Width/2) +' B4XPages.MainPage.reqManager.Initialize(Me, B4XPages.MainPage.SERVER) + PASO =0 + If Not(Starter.gps.GPSEnabled) Then + If Starter.marcaCel <> "Sony" Then ToastMessageShow("Es necesario tener el GPS encendido", True) + StartActivity(Starter.gps.LocationSettingsIntent) + End If + c=B4XPages.MainPage.skmt.ExecQuery2("select count(*) as CUANTOS from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("FECHA")) + c.Position =0 + If c.GetString("CUANTOS") = 0 Then + cmd.Initialize + cmd.Name = "select_fecha_DIS" + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "fecha") + Msgbox("AJUSTAR FECHA","AVISO") 'ignore + B4XPage_Appear + Else + c=B4XPages.MainPage.skmt.ExecQuery2("select CAT_VA_VALOR from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("FECHA")) + c.Position=0 + Dim sDate,sTime As String + DateTime.DateFormat = "yyyyMMdd" + sDate=DateTime.Date(DateTime.Now) + If c.GetString("CAT_VA_VALOR").SubString2(0,7) > sDate Then + Msgbox("AJUSTAR LA FECHA YA QUE ES MENOR AL SISTEMA" ,"AVISO") 'ignore + c.Close + B4XPage_Appear + End If + c.Close + End If + c.Close + If EJECUTANDO =0 Then + Listo1 = 0 + Listo2 = 0 + Listo3 = 0 + Listo4 = 0 + Listo5 = 0 + inve = 0 + img2.Visible =False + End If + DateTime.DateFormat = "MM/dd/yyyy" + fecha=DateTime.Date(DateTime.Now) + b=B4XPages.MainPage.skmt.ExecQuery("Select count(*) as CUANTOS from pedido_cliente") + b.Position=0 + Cuantos = b.GetString("CUANTOS") + b.Close + If Starter.marcaCel <> "Sony" Then ToastMessageShow(Cuantos , True) + + d=B4XPages.MainPage.skmt.ExecQuery("select count(*) as TOTAL_VISITAR from kmt_info where gestion = 0") + d.Position=0 + e=B4XPages.MainPage.skmt.ExecQuery("select count(*) as POR_VISITAR from kmt_info") + e.Position=0 + f=B4XPages.MainPage.skmt.ExecQuery("select count(*) as CAT_CL_RUTA from kmt_info") + f.Position=0 + l_ruta.Text = f.GetString("CAT_CL_RUTA") + f.Close + If l_ruta.Text = 0 Then + l_ruta.Text =0 + Else + f=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_RUTA from kmt_info") + f.Position=0 + l_ruta.Text = f.GetString("CAT_CL_RUTA") + f.Close + End If + If Cuantos = 0 Then + L_MONTOD.Text =0 + l_cuantosc.Text = 0 + l_cuantosn.Text = 0 + L_CUANTOST.Text = 0 + drop = 0 + l_drop.Text = 0 + efectiva = 0 + l_efectiva.text =0 + l_ctast.Text = d.GetString("TOTAL_VISITAR") + l_porvisitar.Text = e.GetString("POR_VISITAR") + d.Close + e.Close + + b=B4XPages.MainPage.skmt.ExecQuery("select count(*) as CUANTOS from noventa") + b.Position=0 + l_cuantosn.Text = b.GetString("CUANTOS") + b.close + Else + c=B4XPages.MainPage.skmt.ExecQuery("select SUM(PE_COSTO_TOT) as MONTO_DIA, COUNT(DISTINCT(PE_CLIENTE)) AS CLIENTES_DIA from PEDIDO ") + b=B4XPages.MainPage.skmt.ExecQuery("select count(*) as CUANTOS from noventa") + c.Position=0 + b.Position=0 + L_MONTOD.Text = c.GetString("MONTO_DIA") + l_cuantosc.Text = c.GetString("CLIENTES_DIA") + + D2=B4XPages.MainPage.skmt.ExecQuery("select COUNT(*) AS CUANTOS from PEDIDO ") + D2.Position = 0 + LPT = D2.GetString("CUANTOS") / l_cuantosc.Text + D2.Close + + l_cuantosn.Text = b.GetString("CUANTOS") + efectiva = c.GetString("CLIENTES_DIA") / e.GetString("POR_VISITAR") + l_efectiva.text = Round2(efectiva*100,2) + l_ctast.Text = d.GetString("TOTAL_VISITAR") + d.Close + l_porvisitar.Text = e.GetString("POR_VISITAR") + L_CUANTOST.Text = l_cuantosc.Text + l_cuantosn.Text + drop = L_CUANTOST.Text / l_porvisitar.Text + l_drop.Text = Round(drop * 100) + If L_CUANTOST.Text < 40 Then + ImageView3.Bitmap = LoadBitmap(File.DirAssets, "tache_rojo.png") + Else If L_CUANTOST.Text > = 40 And L_CUANTOST.Text < 50 Then + ImageView3.bitmap = LoadBitmap(File.DirAssets, "alerta_amarilla.png") + Else + ImageView3.Bitmap = LoadBitmap(File.DirAssets, "palomita_verde.png") + End If + L_TICKPROM.Text = Round2((c.GetString("MONTO_DIA") / c.GetString("CLIENTES_DIA")),2) + If c.GetString("MONTO_DIA") < 4000 Then + ImageView5.Bitmap = LoadBitmap(File.DirAssets, "tache_rojo.png") + Else if c.GetString("MONTO_DIA") > = 4000 And c.GetString("MONTO_DIA") < 6250 Then + ImageView5.bitmap = LoadBitmap(File.DirAssets, "alerta_amarilla.png") + Else + ImageView5.Bitmap = LoadBitmap(File.DirAssets, "palomita_verde.png") + End If + b.Close + c.Close + End If + c.Close + b.Close + e.Close + c=B4XPages.MainPage.skmt.ExecQuery("select ID_ALMACEN from CAT_ALMACEN") + C.Position =0 + ALMACEN = C.GetString("ID_ALMACEN") + c.Close + bu.Initialize + batterystatus = bu.BatteryInformation + + c=B4XPages.MainPage.skmt.ExecQuery("select usuario from usuarioa") + c.Position = 0 + usuario = c.GetString("USUARIO") + c.Close + + B4XPages.MainPage.montoActual = L_MONTOD.Text + B4XPages.MainPage.clientestotal = L_CUANTOST.Text + B4XPages.MainPage.clientesventa = l_cuantosc.Text + B4XPages.MainPage.clientesvisitados = l_porvisitar.TEXT + B4XPages.MainPage.ALMACEN = ALMACEN + B4XPages.MainPage.rutapreventa = l_ruta.text + + '////// Para el usuario global - Chv + c=B4XPages.MainPage.skmt.ExecQuery("select usuario from usuarioa") + c.Position = 0 + usuario = c.GetString("USUARIO") + B4XPages.MainPage.usuario = usuario + c.Close + '/////// + CallSub(Starter, "ENVIA_ULTIMA_GPS") +' panel_5.Visible = False +' Log("panel5 visible FALSE") +End Sub + +Sub Subir_Click + CARGA = "SUBIR" + P1.Visible = True + P1.BringToFront + 'trabajar.Visible = False + NUEVO.Visible =False + BUSCA.Visible=False + connecta.Visible=False + Subir.Visible=False + cargar.Visible=False + L_P_1.Visible = False + S_CC.Visible = False + L_P_3.Visible = False + S_CH.Visible = False + PB1.Visible = False + Resumen.Visible= False + + L_P_2.Text = "Envio de Pedidos" + L_P_3.Text = "Envio de Pedidos" + S_CH.Text = "EN PROCESO" + S_CP.Text = "EN PROCESO" + PB1.Progress = 0 + PB2.Progress = 0 + 'c=skmt.ExecQuery("SELECT sum(IFNULL(PE_DESC,0)) as DESCUENTO FROM PEDIDO") + 'c.Position =0 + 'If c.GetString("DESCUENTO") > 0 And PASO = 0 Then + 'P1.Visible = True + 'ELSE IF c.GetString("DESCUENTO") = 0 Then + PASO = 1 + 'End If + If PASO =1 Then + B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE not In (select PE_CLIENTE from pedido)") + c=B4XPages.MainPage.skmt.ExecQuery("select usuario from usuarioa") + c.Position = 0 + usuario = c.GetString("USUARIO") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select HGDATE, HGLAT, HGLON from HIST_GPS") + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "UPDATE_ACTUAL2_GPS_DIS" + cmd.Parameters = Array As Object(L_MONTOD.Text, L_CUANTOST.Text, l_cuantosc.Text,l_porvisitar.TEXT,c.GetString("hglat"),c.GetString("hglon"),batterystatus(0),LPT, STEYIN, STEYOUT,ALMACEN,l_ruta.Text ) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "inst_visitas") + Next + End If + c.Close + ' PEDIO_CLIENTE + + c=B4XPages.MainPage.skmt.ExecQuery("SELECT PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT, PC_COSTO_SIN, PC_RUTA, PC_ALMACEN FROM PEDIDO_CLIENTE ") + d=B4XPages.MainPage.skmt.ExecQuery("SELECT COUNT(*) as CUANTOS_PEDIDOSC FROM PEDIDO_CLIENTE ") + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_pedidos_DIS" + cmd.Parameters = Array As Object(C.GetString("PC_CLIENTE"),C.GetString("PC_FECHA"),C.GetString("PC_USER"),C.GetString("PC_NOART"),C.GetString("PC_MONTO"),C.GetString("PC_LON"),C.GetString("PC_LAT"),ALMACEN,l_ruta.text,C.GetString("PC_COSTO_SIN") ) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "ins_pedidos") + Next + End If + c.Close + d.Position=0 + cuantos_pedidosc = D.GetString("CUANTOS_PEDIDOSC") + d.Close + + ' ENVIO DE LOS CODIGOS QR + 'c=skmt.ExecQuery2("SELECT CAT_CL_NUM_SERIEFISICO,CAT_CL_CODIGO ,CAT_CL_LONG,CAT_CL_LAT, CAT_CL_FOTO FROM kmt_info where CAT_CL_NUM_SERIEFISICO = ?", Array As String("OK")) + + + c=B4XPages.MainPage.skmt.ExecQuery("SELECT CODIGOKMTS, CODIGOB, LAT, LON FROM HIST_CODIGO_BARRAS" ) + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_QR_2_DIS" + cmd.Parameters = Array As Object(C.GetString("CODIGOKMTS"),C.GetString("CODIGOB"),C.GetString("LON"),C.GetString("LAT"),ALMACEN,l_ruta.text ) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "ins_QR") + Next + End If + c.Close + + + c=B4XPages.MainPage.skmt.ExecQuery("SELECT CAT_CL_NUM_SERIEFISICO,CAT_CL_CODIGO ,CAT_CL_LONG,CAT_CL_LAT, CAT_CL_FOTO FROM kmt_info where CAT_CL_NUM_SERIEFISICO IS NOT NULL") + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + 's=skmt.ExecQuery2("SELECT HIST_VI_IMAGEN FROM HIST_VISITAS WHERE HIST_VI_CREDITO =?", Array As String (c.GetString("HIST_VI_CREDITO"))) + 's.Position =0 +' foto1 = c.GetBlob("CAT_CL_FOTO") + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_QR_DIS" + cmd.Parameters = Array As Object(C.GetString("CAT_CL_NUM_SERIEFISICO"),C.GetString("CAT_CL_CODIGO"),C.GetString("CAT_CL_LONG"),C.GetString("CAT_CL_LAT"),ALMACEN,l_ruta.text ) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "ins_QR") + Next + End If + c.Close + + c=B4XPages.MainPage.skmt.ExecQuery("SELECT HE_CLIE, HE_RES, HE_FECHA, HE_TIPO FROM HIST_ENCUESTA") + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_encuesta_DIS" + cmd.Parameters = Array As Object(C.GetString("HE_CLIE"),C.GetString("HE_RES"),C.GetString("HE_FECHA"), c.GetString("HE_TIPO"),ALMACEN,l_ruta.Text) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "inst_noventa") + Next + End If + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("SELECT PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO, PE_COSTO_SIN, PE_RUTA, PE_DESC, PE_FOLIO FROM PEDIDO") + d=B4XPages.MainPage.skmt.ExecQuery("SELECT COUNT(*) as CUANTOS_PEDIDO FROM PEDIDO") + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_pedido_DIS" + cmd.Parameters = Array As Object(C.GetString("PE_CEDIS"), ALMACEN, C.GetString("PE_COSTO_TOT"), C.GetString("PE_COSTOU"), C.GetString("PE_CANT"), C.GetString("PE_PRONOMBRE"), C.GetString("PE_PROID"), C.GetString("PE_CLIENTE"),C.GetString("PE_FECHA"),C.GetString("PE_USUARIO"),C.GetString("PE_RUTA"), C.GetString("PE_COSTO_SIN"),C.GetString("PE_DESC"),c.GetString("PE_FOLIO")) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "ins_pedido") + Next + End If + c.Close + d.Position=0 + cuantos_pedido = D.GetString("CUANTOS_PEDIDO") + d.Close + + ' NOVENTA + c=B4XPages.MainPage.skmt.ExecQuery("SELECT NV_CLIENTE,NV_FECHA,NV_USER,NV_MOTIVO,NV_COMM,NV_LAT,NV_LON FROM NOVENTA") + D=B4XPages.MainPage.skmt.ExecQuery("SELECT COUNT(*) AS CUANTOS_NOVENTA FROM NOVENTA") + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_noventa_DIS" + cmd.Parameters = Array As Object(C.GetString("NV_CLIENTE"),C.GetString("NV_FECHA"),C.GetString("NV_USER"),C.GetString("NV_MOTIVO"),C.GetString("NV_COMM"),C.GetString("NV_LAT"),C.GetString("NV_LON"), ALMACEN, l_ruta.Text) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "inst_noventa") + Next + End If + c.Close + d.Position=0 + cuantos_noventa = D.GetString("CUANTOS_NOVENTA") + d.Close + + ' DATOS DE KMTS PARA EL TIPO DE ABARROTE. + '''CAT_CL_GIRO = ? WHERE CAT_CL_CODIGO = ? And CAT_CL_NOMBRE = ? kmt_info +' c=B4XPages.MainPage.skmt.ExecQuery("Select CAT_CL_GIRO, CAT_CL_CODIGO from kmt_info") +' If c.RowCount>0 Then +' For i=0 To c.RowCount -1 +' c.Position=i +' Dim cmd As DBCommand +' cmd.Initialize +' cmd.Name = "insert_GIROS_ENC" +' cmd.Parameters = Array As Object(C.GetString("CAT_CL_CODIGO"),C.GetString("CAT_CL_GIRO")) +' B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "inst_noventa") +' Next +' End If +' c.Close + + + + +' ' GEO CERCA +' +' c=B4XPages.MainPage.skmt.ExecQuery("Select HGCLIENTE, HGDATE, HGLAT, HGLON from HIST_GEOCERCA") +' If c.RowCount>0 Then +' For i=0 To c.RowCount -1 +' c.Position=i +' Dim cmd As DBCommand +' cmd.Initialize +' cmd.Name = "insert_geocerca_GV2" +' cmd.Parameters = Array As Object(C.GetString("HGCLIENTE"),C.GetString("HGDATE"),C.GetString("HGLAT"),C.GetString("HGLON")) +' B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "inst_noventa") +' Next +' End If +' c.Close + + ' LO DEL LIKE + + c=B4XPages.MainPage.skmt.ExecQuery("Select HFCLIENTE, HFALIAS,HFRUTA,HFALMACEN from HIST_FACE") + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_face_like_DIS" + cmd.Parameters = Array As Object(C.GetString("HFCLIENTE"),C.GetString("HFALIAS"),C.GetString("HFRUTA"),C.GetString("HFALMACEN")) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "inst_noventa") + Next + End If + c.Close' + ' DROP + t1.Initialize("T1", 30000) ' 1000 = 1 second + t1.Enabled = True + Dim sDate,sTime As String + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + Dim cmd As DBCommand + cmd.Initialize + cmd.Name ="insert_drop_DIS" + cmd.Parameters = Array As Object(usuario,l_ruta.Text,sDate & sTime, l_porvisitar.Text,l_drop.Text,l_efectiva.Text,l_cuantosc.Text,l_cuantosn.Text, L_MONTOD.Text,"ENVIO",ALMACEN) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "inst_noventa") + img2.Visible =True + PORCENTAJE = Round(100/ (cuantos_noventa + cuantos_pedido + cuantos_pedidosc + 1)) + If Starter.marcaCel <> "Sony" Then ToastMessageShow("Se Actualizaran los datos, Este proceso podria tardar hasta un minuto, gracias "& l_ruta.text , True) + End If + +' Private x As Cursor = B4XPages.MainPage.skmt.ExecQuery("Select CLIENTE, ALMACEN, P1, P2, P3, P4, P5, P6, P7, P8, P9 from ENCUESTA_MODULO1") +' If x.RowCount>0 Then +' For i=0 To x.RowCount -1 +' x.Position=i +' Dim cmd As DBCommand +' cmd.Initialize +' cmd.Name = "insert_ENCUESTA_MODULO1" +' cmd.Parameters = Array As Object(x.GetString("CLIENTE"), x.GetString("ALMACEN"),x.GetString("P1"), x.GetString("P2"), x.GetString("P3"), x.GetString("P4"), x.GetString("P5"), x.GetString("P6"), x.GetString("P7"), x.GetString("P8"), x.GetString("P9")) +' B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "insert_ENCUESTA_MODULO1") +' Next +' End If +' x.Close +' Private x1 As Cursor = B4XPages.MainPage.skmt.ExecQuery("Select CLIENTE, ALMACEN, P1, P2, P3, P4, P5, P6 from ENCUESTA_MODULO2") +' If x1.RowCount>0 Then +' For i=0 To x1.RowCount -1 +' x1.Position=i +' Dim cmd As DBCommand +' cmd.Initialize +' cmd.Name = "insert_ENCUESTA_MODULO2" +' cmd.Parameters = Array As Object(x1.GetString("CLIENTE"), x1.GetString("ALMACEN"),x1.GetString("P1"), x1.GetString("P2"), x1.GetString("P3"), x1.GetString("P4"), x1.GetString("P5"), x1.GetString("P6")) +' B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "insert_ENCUESTA_MODULO2") +' Next +' End If +' x1.Close +' Private x2 As Cursor = B4XPages.MainPage.skmt.ExecQuery("Select CLIENTE, ALMACEN, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11 from ENCUESTA_MODULO3") +' If x2.RowCount>0 Then +' For i=0 To x2.RowCount -1 +' x2.Position=i +' Logcolor(x2.GetString("CLIENTE"),Colors.Red) +' Dim cmd As DBCommand +' cmd.Initialize +' cmd.Name = "insert_ENCUESTA_MODULO3" +' cmd.Parameters = Array As Object(x2.GetString("CLIENTE"), x2.GetString("ALMACEN"),x2.GetString("P1"), x2.GetString("P2"), x2.GetString("P3"), x2.GetString("P4"), x2.GetString("P5"), x2.GetString("P6"), x2.GetString("P7"), x2.GetString("P8"), x2.GetString("P9"), x2.GetString("P10"), x2.GetString("P11")) +' B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "insert_ENCUESTA_MODULO3") +' Next +' End If +' x2.Close +' Private x As Cursor = B4XPages.MainPage.skmt.ExecQuery("Select CLIENTE, ALMACEN, P1, P2, P3, P4, P5, P6, P7, P8 from ENCUESTA_MODULO4") +' If x.RowCount>0 Then +' For i=0 To x.RowCount -1 +' x.Position=i +' Dim cmd As DBCommand +' cmd.Initialize +' cmd.Name = "insert_ENCUESTA_MODULO4" +' cmd.Parameters = Array As Object(x.GetString("CLIENTE"), x.GetString("ALMACEN"),x.GetString("P1"), x.GetString("P2"), x.GetString("P3"), x.GetString("P4"), x.GetString("P5"), x.GetString("P6"), x.GetString("P7"), x.GetString("P8")) +' B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "insert_ENCUESTA_MODULO4") +' Next +' End If +' x.Close +' Private x As Cursor = B4XPages.MainPage.skmt.ExecQuery("Select CLIENTE, ALMACEN, P1, P2, P3, P4, P5, P6, P7, P8, P9 from ENCUESTA_MODULO5") +' If x.RowCount>0 Then +' For i=0 To x.RowCount -1 +' x.Position=i +' Dim cmd As DBCommand +' cmd.Initialize +' cmd.Name = "insert_ENCUESTA_MODULO5" +' cmd.Parameters = Array As Object(x.GetString("CLIENTE"), x.GetString("ALMACEN"),x.GetString("P1"), x.GetString("P2"), x.GetString("P3"), x.GetString("P4"), x.GetString("P5"), x.GetString("P6"), x.GetString("P7"), x.GetString("P8"), x.GetString("P9")) +' B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "insert_ENCUESTA_MODULO5") +' Next +' End If +' x.Close +End Sub + +Sub cargar_Click + CARGA = "CARGAR" + img2.Visible =True + L_P_1.Visible = True + S_CC.Visible = True + Btn_Ubicar.Visible=False +' P1.Visible = True + p_principal.Visible = False + Subs.panelVisible(P1, 0, 0) + Subs.centraPanel(P1, Root.Width) + Subs.centraPanelV(P1, Root.Height) +' trabajar.Visible = False + NUEVO.Visible =False + BUSCA.Visible=False + connecta.Visible=False + L_P_3.Visible = True + S_CH.Visible = True + PB1.Visible = True + Resumen.Visible= False + + L_P_1.Text = "Catalogo de Clientes" + L_P_2.Text = "Catalogos de Productos" + L_P_3.Text = "Catalogos Historicos" + S_CC.Text = "EN PROCESO" + S_CH.Text = "EN PROCESO" + S_CP.Text = "EN PROCESO" + PB1.Progress = 0 + PB2.Progress = 0 + EJECUTANDO = 1 + + 'c=skmt.ExecQuery("CREATE TABLE kmt_info (pr_cd_credito NUMERIC,pr_cd_nombre TEXT,pr_cd_calle TEXT,pr_cd_numero TEXT,pr_cd_num_int TEXT,pr_cd_entrecalle1 TEXT,pr_cd_entrecalle2 TEXT,pr_cd_colonia TEXT,pr_cd_poblacion TEXT,pr_cd_edo TEXT,pr_cd_cp TEXT,pr_cd_zona TEXT,pr_cf_credito NUMERIC,pr_cf_saldotot NUMERIC,pr_cf_saldooper NUMERIC,pr_cf_saldof1 NUMERIC, pr_cf_penalizacion NUMERIC)") + TOPE = 0 + ' NUEVOS CLIENTE + + B4XPages.MainPage.skmt.ExecNonQuery("delete from kmt_info") + B4XPages.MainPage.skmt.ExecNonQuery("delete from cod_result") + B4XPages.MainPage.skmt.ExecNonQuery("delete from hist_gest") + B4XPages.MainPage.skmt.ExecNonQuery("delete from cat_gunaprod") + B4XPages.MainPage.skmt.ExecNonQuery("delete from CAT_DETALLES_PAQ") + B4XPages.MainPage.skmt.ExecNonQuery("delete from telefonos") + B4XPages.MainPage.skmt.ExecNonQuery("delete from HIST_VENTAS") + B4XPages.MainPage.skmt.ExecNonQuery("delete from HIST_PROMOS") + B4XPages.MainPage.skmt.ExecNonQuery("delete from HIST_CLIENTE_CANT_PROMOS") + B4XPages.MainPage.skmt.ExecNonQuery("delete from PROMOS_COMP") + B4XPages.MainPage.skmt.ExecNonQuery("delete from CAT_VERIFICACION") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM MARCAS_RUTAS") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM HIST_STAY_STORE") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM HIST_GEOCERCA") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM HIST_MARCAS_CUOTAS") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM HIST_ENCUESTA_CLIENTE") + + c = B4XPages.MainPage.skmt.ExecQuery2("select count(CAT_VA_DESCRIPCION) as HoraIngreso from cat_variables where CAT_VA_DESCRIPCION = ? ", Array As String("HoraIngreso")) + c.Position = 0 + DateTime.TimeFormat = "HHmmss" + 'Valida si ya se cuenta con hora actualiza el valor si no lo inserta----------- + If c.GetString("HoraIngreso") > 0 Then + B4XPages.MainPage.skmt.ExecNonQuery2("Update cat_variables set CAT_VA_VALOR = ? WHERE CAT_VA_DESCRIPCION = ?" , Array As String(DateTime.Time(DateTime.Now),"HoraIngreso")) + Else + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_VALOR,CAT_VA_DESCRIPCION) VALUES (?,?)" , Array As String(DateTime.Time(DateTime.Now),"HoraIngreso")) + End If + c.Close + DateTime.TimeFormat = "HH:mm:ss" + c=B4XPages.MainPage.skmt.ExecQuery("select usuario from usuarioa") + c.Position = 0 + usuario = c.GetString("USUARIO") + c.Close +' + Dim sDate,sTime As String + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + + Dim P As PhoneId + imei = "" + cmd.Initialize + cmd.Name ="insert_drop_DIS" + cmd.Parameters = Array As Object(usuario,e_ruta.text,sDate,imei,sTime,"","","","","CARGA",ALMACEN) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "inst_noventa") + + cmd.Initialize + cmd.Name = "select_cat_gunaprod_DIS" + cmd.Parameters = Array As Object(ALMACEN,e_ruta.Text) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "gunaprod") + +' cmd.Initialize +' cmd.Name = "select_resum_apk_guna" ''' va el nombre de archivo de config +' cmd.Parameters = Array As Object(ALMACEN) +' B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "resum_apk") ''' donde regresa la info ver job_done + + cmd.Initialize + cmd.Name = "select_cat_paquetes_DIS3" + cmd.Parameters = Array As Object(ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "gunaprodp") + + cmd.Initialize + cmd.Name = "select_cat_paquetess_DIS2" + cmd.Parameters = Array As Object(ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "gunaprodp") + + cmd.Initialize + cmd.Name = "select_cat_detallepa_DIS2" + cmd.Parameters = Array As Object(ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "detallepaq") + + cmd.Initialize + cmd.Name = "select_cat_clientes_DIS" + cmd.Parameters = Array As Object(e_ruta.text, ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "kmt_datos") + + cmd.Initialize + cmd.Name = "select_hist_datos_DIS" + cmd.Parameters = Array As Object(e_ruta.text, ALMACEN,e_ruta.text, ALMACEN,e_ruta.text, ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "hist_datos") + + cmd.Initialize + cmd.Name = "select_hist_promos_DIS" + cmd.Parameters = Array As Object(e_ruta.text, ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "hist_promos") + + cmd.Initialize + cmd.Name = "select_hist_cliente_promos_DIS" + cmd.Parameters = Array As Object(e_ruta.text, ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "hist_cliente_promos") + + cmd.Initialize + cmd.Name = "select_HIST_MARCAS_CUOTAS_DIS" + cmd.Parameters = Array As Object( ALMACEN, e_ruta.text) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "HIST_MARCAS_CUOTAS") + + If E_RUTA2.text <> "" Then + cmd.Initialize + cmd.Name = "select_cat_clientes_DIS" + cmd.Parameters = Array As Object(E_RUTA2.text, ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "kmt_datos2") + + cmd.Initialize + cmd.Name = "select_hist_datos_DIS" + cmd.Parameters = Array As Object(E_RUTA2.text, ALMACEN,E_RUTA2.text, ALMACEN,E_RUTA2.text, ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "hist_datos") + + cmd.Initialize + cmd.Name = "select_hist_promos_DIS" + cmd.Parameters = Array As Object(E_RUTA2.text, ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "hist_promos") + + cmd.Initialize + cmd.Name = "select_hist_cliente_promos_DIS" + cmd.Parameters = Array As Object(E_RUTA2.text, ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "hist_cliente_promos") + End If + + cmd.Initialize + cmd.Name = "select_promo_comp_DIS" + cmd.Parameters = Array As Object(ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "hist_comp_promos") + +' cmd.Initialize +' cmd.Name = "select_verificacion_GV2" +' cmd.Parameters = Array As Object(e_ruta.text, ALMACEN) +' B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "cat_verificacion") + + cmd.Initialize + cmd.Name = "select_fecha_DIS" + cmd.Parameters = Array As Object(e_ruta.text, ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "fecha") + +' cmd.Initialize +' cmd.Name = "select_folio_DIS" +' cmd.Parameters = Array As Object(e_ruta.text, ALMACEN) +' B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "folio") + + cmd.Initialize + cmd.Name = "select_marcas_rutas_DIS" + cmd.Parameters = Array As Object( ALMACEN, e_ruta.text) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "marcas_rutas") + + cmd.Initialize + cmd.Name = "select_CUEST2_DIS" + cmd.Parameters = Array As Object(ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "CUESTIONARIO") + + cmd.Initialize + cmd.Name = "select_CLIENTE_ENCUESTA_DIS" + cmd.Parameters = Array As Object(e_ruta.text, ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "ENCUESTA_CLIENTE") + + + cmd.Initialize + cmd.Name = "select_HIST_CUOTAS_DIS" + cmd.Parameters = Array As Object( ALMACEN,e_ruta.text ) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "CUOTAS") + + cmd.Initialize + cmd.Name = "select_comis_cedex_DIS" + cmd.Parameters = Array As Object( ALMACEN,e_ruta.text ) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "COMISIONES") + + cargar.Visible = False + Subir.Visible = False + inv.Visible = False + If Starter.marcaCel <> "Sony" Then ToastMessageShow("Se Actualizaran los datos, Este proceso podria tardar hasta un minuto, gracias" , True) +End Sub + +Sub JobDone(Job As HttpJob) +' If Job.JobName = "DBRequest" Then +' Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) +' Log($"Tag: ${RESULT.tag}, success=${Job.Success}"$) +' End If + Log(Job.Tag) + If Job.Success = False Then + 'ToastMessageShow("Error: " & Job.ErrorMessage, True) + If Job.ErrorMessage = "STREAM" Then + If CARGA = "SUBIR" Then + PB2.Progress = PB2.Progress + PORCENTAJE + S_CP.Text = "SUBIENDO" + If PB2.Progress > 99 Then + S_CP.Text = "VALIDANDO" + End If + End If + End If + Else 'If Job Success then ... + LogColor("JobDone: '" & B4XPages.MainPage.reqManager.HandleJob(Job).tag & "' - Registros: " & B4XPages.MainPage.reqManager.HandleJob(Job).Rows.Size, Colors.Green) 'Mod por CHV - 211027 + 'Verificamos que el usuario guardado en BD sea VALIDO. + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "usuarioA" Then 'query tag + Private n As String = "Sin Usuario" + For Each records() As Object In RESULT.Rows + n = records(RESULT.Columns.Get("USUARIO")) + Next + LogColor("**************************"&n, Colors.Green) + If n = "OKActivo" Then + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "select_ruta_DIS" + cmd.Parameters = Array As Object(ALMACEN,e_ruta.text) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "ruta") + Log("Usuario guardado en BD es 'Valido'") + Else + Msgbox("Usuario o password No validos","") 'ignore + B4XPages.MainPage.skmt.ExecNonQuery("delete from usuarioa") + ExitApplication + End If + Log("***************** "&n) + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "kmt_datos" Then 'query tag + S_CC.TEXT = "CARGANDO" + For Each records() As Object In RESULT.Rows + Dim CAT_CL_CODIGO As String = records(RESULT.Columns.Get("CAT_CL_CODIGO")) + Dim CAT_CL_RUTA As String = records(RESULT.Columns.Get("CAT_CL_RUTA")) + Dim CAT_CL_NOMBRE As String = records(RESULT.Columns.Get("CAT_CL_NOMBRE")) + Dim CAT_CL_ATIENDE1 As String = records(RESULT.Columns.Get("CAT_CL_ATIENDE1")) + Dim CAT_CL_ATIENTE2 As String = records(RESULT.Columns.Get("CAT_CL_ATIENTE2")) + Dim CAT_CL_TELEFONO As String = records(RESULT.Columns.Get("CAT_CL_TELEFONO")) + Dim CAT_CL_EMAIL As String = records(RESULT.Columns.Get("CAT_CL_EMAIL")) + Dim CAT_CL_CALLE As String = records(RESULT.Columns.Get("CAT_CL_CALLE")) + Dim CAT_CL_NOEXT As String = records(RESULT.Columns.Get("CAT_CL_NOEXT")) + Dim CAT_CL_NOINT As String = records(RESULT.Columns.Get("CAT_CL_NOINT")) + Dim CAT_CL_CALLE1 As String = records(RESULT.Columns.Get("CAT_CL_CALLE1")) + Dim CAT_CL_CALLE2 As String = records(RESULT.Columns.Get("CAT_CL_CALLE2")) + Dim CAT_CL_COLONIA As String = records(RESULT.Columns.Get("CAT_CL_COLONIA")) + Dim CAT_CL_MUNI As String = records(RESULT.Columns.Get("CAT_CL_MUNI")) + Dim CAT_CL_EDO As String = records(RESULT.Columns.Get("CAT_CL_EDO")) + Dim CAT_CL_CP As String = records(RESULT.Columns.Get("CAT_CL_CP")) + Dim CAT_CL_LONG As String = records(RESULT.Columns.Get("CAT_CL_LONG")) + Dim CAT_CL_LAT As String = records(RESULT.Columns.Get("CAT_CL_LAT")) + Dim CAT_CL_MTOCOMPRA As String = records(RESULT.Columns.Get("CAT_CL_MTOCOMPRA")) + Dim CAT_CL_NUM_SERIEFISICO As String = records(RESULT.Columns.Get("CAT_CL_NUM_SERIEFISICO")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO kmt_info(CAT_CL_CODIGO,CAT_CL_RUTA,CAT_CL_NOMBRE,CAT_CL_ATIENDE1,CAT_CL_ATIENTE2,CAT_CL_TELEFONO,CAT_CL_EMAIL,CAT_CL_CALLE,CAT_CL_NOEXT,CAT_CL_NOINT,CAT_CL_CALLE1,CAT_CL_CALLE2,CAT_CL_COLONIA,CAT_CL_MUNI,CAT_CL_EDO,CAT_CL_CP,CAT_CL_LONG,CAT_CL_LAT,CAT_CL_MTOCOMPRA,CAT_CL_NUM_SERIEFISICO, gestion) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,0)", Array As Object (CAT_CL_CODIGO,e_ruta.Text,CAT_CL_NOMBRE,CAT_CL_ATIENDE1,CAT_CL_ATIENTE2,CAT_CL_TELEFONO,CAT_CL_EMAIL,CAT_CL_CALLE,CAT_CL_NOEXT,CAT_CL_NOINT,CAT_CL_CALLE1,CAT_CL_CALLE2,CAT_CL_COLONIA,CAT_CL_MUNI,CAT_CL_EDO,CAT_CL_CP,CAT_CL_LONG,CAT_CL_LAT,CAT_CL_MTOCOMPRA,CAT_CL_NUM_SERIEFISICO)) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_STAY_STORE(HSS_CODIGO, HSS_IN , HSS_OUT , HSS_TOT) VALUES (?,0,0,0)", Array As Object (CAT_CL_CODIGO)) + Next + Listo1 = 1 + S_CC.Text = "LISTO" +' If Starter.marcaCel <> "Sony" Then ToastMessageShow("Catalogo Clientes Actualizados." , True) + If Listo1 =1 And Listo2 =1 And Listo3 = 1 And Listo4 = 1 Then + B4XPage_Appear + img2.Visible=False + EJECUTANDO=0 + End If + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "kmt_datos2" Then 'query tag + S_CC.TEXT = "CARGANDO" + For Each records() As Object In RESULT.Rows + Dim CAT_CL_CODIGO As String = records(RESULT.Columns.Get("CAT_CL_CODIGO")) + Dim CAT_CL_RUTA As String = records(RESULT.Columns.Get("CAT_CL_RUTA")) + Dim CAT_CL_NOMBRE As String = records(RESULT.Columns.Get("CAT_CL_NOMBRE")) + Dim CAT_CL_ATIENDE1 As String = records(RESULT.Columns.Get("CAT_CL_ATIENDE1")) + Dim CAT_CL_ATIENTE2 As String = records(RESULT.Columns.Get("CAT_CL_ATIENTE2")) + Dim CAT_CL_TELEFONO As String = records(RESULT.Columns.Get("CAT_CL_TELEFONO")) + Dim CAT_CL_EMAIL As String = records(RESULT.Columns.Get("CAT_CL_EMAIL")) + Dim CAT_CL_CALLE As String = records(RESULT.Columns.Get("CAT_CL_CALLE")) + Dim CAT_CL_NOEXT As String = records(RESULT.Columns.Get("CAT_CL_NOEXT")) + Dim CAT_CL_NOINT As String = records(RESULT.Columns.Get("CAT_CL_NOINT")) + Dim CAT_CL_CALLE1 As String = records(RESULT.Columns.Get("CAT_CL_CALLE1")) + Dim CAT_CL_CALLE2 As String = records(RESULT.Columns.Get("CAT_CL_CALLE2")) + Dim CAT_CL_COLONIA As String = records(RESULT.Columns.Get("CAT_CL_COLONIA")) + Dim CAT_CL_MUNI As String = records(RESULT.Columns.Get("CAT_CL_MUNI")) + Dim CAT_CL_EDO As String = records(RESULT.Columns.Get("CAT_CL_EDO")) + Dim CAT_CL_CP As String = records(RESULT.Columns.Get("CAT_CL_CP")) + Dim CAT_CL_LONG As String = records(RESULT.Columns.Get("CAT_CL_LONG")) + Dim CAT_CL_LAT As String = records(RESULT.Columns.Get("CAT_CL_LAT")) + Dim CAT_CL_MTOCOMPRA As String = records(RESULT.Columns.Get("CAT_CL_MTOCOMPRA")) + Dim CAT_CL_NUM_SERIEFISICO As String = records(RESULT.Columns.Get("CAT_CL_NUM_SERIEFISICO")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO kmt_info(CAT_CL_CODIGO,CAT_CL_RUTA,CAT_CL_NOMBRE,CAT_CL_ATIENDE1,CAT_CL_ATIENTE2,CAT_CL_TELEFONO,CAT_CL_EMAIL,CAT_CL_CALLE,CAT_CL_NOEXT,CAT_CL_NOINT,CAT_CL_CALLE1,CAT_CL_CALLE2,CAT_CL_COLONIA,CAT_CL_MUNI,CAT_CL_EDO,CAT_CL_CP,CAT_CL_LONG,CAT_CL_LAT,CAT_CL_MTOCOMPRA,CAT_CL_NUM_SERIEFISICO, gestion) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,0)", Array As Object (CAT_CL_CODIGO,E_RUTA2.Text,CAT_CL_NOMBRE,CAT_CL_ATIENDE1,CAT_CL_ATIENTE2,CAT_CL_TELEFONO,CAT_CL_EMAIL,CAT_CL_CALLE,CAT_CL_NOEXT,CAT_CL_NOINT,CAT_CL_CALLE1,CAT_CL_CALLE2,CAT_CL_COLONIA,CAT_CL_MUNI,CAT_CL_EDO,CAT_CL_CP,CAT_CL_LONG,CAT_CL_LAT,CAT_CL_MTOCOMPRA,CAT_CL_NUM_SERIEFISICO)) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_STAY_STORE(HSS_CODIGO, HSS_IN , HSS_OUT , HSS_TOT) VALUES (?,0,0,0)", Array As Object (CAT_CL_CODIGO)) + Next + + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "resum_apk" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim HIST_RA_OBJMES As String = records(RESULT.Columns.Get("HIST_RA_OBJMES")) + Dim HIST_RA_VENTA As String = records(RESULT.Columns.Get("HIST_RA_VENTA")) + Dim HIST_RA_TENDENCIA As String = records(RESULT.Columns.Get("HIST_RA_TENDENCIA")) + Dim HIST_RA_ALCANCE As String = records(RESULT.Columns.Get("HIST_RA_ALCANCE")) + Dim HISR_RA_DRAOBJ As String = records(RESULT.Columns.Get("HISR_RA_DRAOBJ")) + Dim HIST_RA_DRAVTA As String = records(RESULT.Columns.Get("HIST_RA_DRAVTA")) + Dim HIST_RA_DSOBJ As String = records(RESULT.Columns.Get("HIST_RA_DSOBJ")) + Dim HIST_RA_DSVTA As String = records(RESULT.Columns.Get("HIST_RA_DSVTA")) + Dim HIST_RA_VPOOBJ As String = records(RESULT.Columns.Get("HIST_RA_VPOOBJ")) + Dim HIST_RA_VPOVTA As String = records(RESULT.Columns.Get("HIST_RA_VPOVTA")) + Dim HIST_RA_CTES As String = records(RESULT.Columns.Get("HIST_RA_CTES")) + Dim HIST_RA_COBCCC As String = records(RESULT.Columns.Get("HIST_RA_COBCCC")) + Dim HIST_RA_ECO As String = records(RESULT.Columns.Get("HIST_RA_ECO")) + Dim HIST_RA_VISITPLAN As String = records(RESULT.Columns.Get("HIST_RA_VISITPLAN")) + Dim HIST_RA_VISIREAL As String = records(RESULT.Columns.Get("HIST_RA_VISIREAL")) + Dim HIST_RA_COBVISIT As String = records(RESULT.Columns.Get("HIST_RA_COBVISIT")) + Dim HIST_RA_FRECCOMPOBJ As String = records(RESULT.Columns.Get("HIST_RA_FRECCOMPOBJ")) + Dim HIST_RA_FRECCOMREAL As String = records(RESULT.Columns.Get("HIST_RA_FRECCOMREAL")) + Dim HIST_RA_VENTAMES1 As String = records(RESULT.Columns.Get("HIST_RA_VENTAMES1")) + Dim HIST_RA_VENTAMES2 As String = records(RESULT.Columns.Get("HIST_RA_VENTAMES2")) + Dim HIST_RA_VENTAMES3 As String = records(RESULT.Columns.Get("HIST_RA_VENTAMES3")) + Dim HIST_RA_VENTAMES4 As String = records(RESULT.Columns.Get("HIST_RA_VENTAMES4")) + Dim HIST_RA_RECHAZO As String = records(RESULT.Columns.Get("HIST_RA_RECHAZO")) + Dim HIST_RA_RECHAZOPORCEN As String = records(RESULT.Columns.Get("HIST_RA_RECHAZOPORCEN")) + Dim HIST_RA_SEMANA1 As String = records(RESULT.Columns.Get("HIST_RA_SEMANA1")) + Dim HIST_RA_SEMANA1_DIAS As String = records(RESULT.Columns.Get("HIST_RA_SEMANA1_DIAS")) + Dim HIST_RA_SEMANA1_DRA As String = records(RESULT.Columns.Get("HIST_RA_SEMANA1_DRA")) + Dim HIST_RA_SEMANA2 As String = records(RESULT.Columns.Get("HIST_RA_SEMANA2")) + Dim HIST_RA_SEMANA2_DIAS As String = records(RESULT.Columns.Get("HIST_RA_SEMANA2_DIAS")) + Dim HIST_RA_SEMANA2_DRA As String = records(RESULT.Columns.Get("HIST_RA_SEMANA2_DRA")) + Dim HIST_RA_SEMANA3 As String = records(RESULT.Columns.Get("HIST_RA_SEMANA3")) + Dim HIST_RA_SEMANA3_DIAS As String = records(RESULT.Columns.Get("HIST_RA_SEMANA3_DIAS")) + Dim HIST_RA_SEMANA3_DRA As String = records(RESULT.Columns.Get("HIST_RA_SEMANA3_DRA")) + Dim HIST_RA_SEMANA4 As String = records(RESULT.Columns.Get("HIST_RA_SEMANA4")) + Dim HIST_RA_SEMANA4_DIAS As String = records(RESULT.Columns.Get("HIST_RA_SEMANA4_DIAS")) + Dim HIST_RA_SEMANA4_DRA As String = records(RESULT.Columns.Get("HIST_RA_SEMANA4_DRA")) + Dim HIST_RA_SEMANA5 As String = records(RESULT.Columns.Get("HIST_RA_SEMANA5")) + Dim HIST_RA_SEMANA5_DIAS As String = records(RESULT.Columns.Get("HIST_RA_SEMANA5_DIAS")) + Dim HIST_RA_SEMANA5_DRA As String = records(RESULT.Columns.Get("HIST_RA_SEMANA5_DRA")) + Dim HIST_RA_SEMANA1_LPT As String = records(RESULT.Columns.Get("HIST_RA_SEMANA1_LPT")) + Dim HIST_RA_SEMANA2_LPT As String = records(RESULT.Columns.Get("HIST_RA_SEMANA2_LPT")) + Dim HIST_RA_SEMANA3_LPT As String = records(RESULT.Columns.Get("HIST_RA_SEMANA3_LPT")) + Dim HIST_RA_SEMANA4_LPT As String = records(RESULT.Columns.Get("HIST_RA_SEMANA4_LPT")) + Dim HIST_RA_SEMANA5_LPT As String = records(RESULT.Columns.Get("HIST_RA_SEMANA5_LPT")) + Dim HIST_RA_RUTA As String = records(RESULT.Columns.Get("HIST_RA_RUTA")) + Dim HIST_RA_IDALMACEN As String = records(RESULT.Columns.Get("HIST_RA_IDALMACEN")) + + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_RESUM_APK(HIST_RA_OBJMES,HIST_RA_VENTA,HIST_RA_TENDENCIA,HIST_RA_ALCANCE,HISR_RA_DRAOBJ,HIST_RA_DRAVTA,HIST_RA_DSOBJ,HIST_RA_DSVTA,HIST_RA_VPOOBJ,HIST_RA_VPOVTA,HIST_RA_CTES,HIST_RA_COBCCC,HIST_RA_ECO,HIST_RA_VISITPLAN,HIST_RA_VISIREAL,HIST_RA_COBVISIT,HIST_RA_FRECCOMPOBJ,HIST_RA_FRECCOMREAL,HIST_RA_VENTAMES1,HIST_RA_VENTAMES2,HIST_RA_VENTAMES3,HIST_RA_VENTAMES4,HIST_RA_RECHAZO,HIST_RA_RECHAZOPORCEN,HIST_RA_SEMANA1,HIST_RA_SEMANA1_DIAS,HIST_RA_SEMANA1_DRA,HIST_RA_SEMANA2,HIST_RA_SEMANA2_DIAS,HIST_RA_SEMANA2_DRA,HIST_RA_SEMANA3,HIST_RA_SEMANA3_DIAS,HIST_RA_SEMANA3_DRA,HIST_RA_SEMANA4,HIST_RA_SEMANA4_DIAS,HIST_RA_SEMANA4_DRA,HIST_RA_SEMANA5,HIST_RA_SEMANA5_DIAS,HIST_RA_SEMANA5_DRA,HIST_RA_SEMANA1_LPT,HIST_RA_SEMANA2_LPT,HIST_RA_SEMANA3_LPT,HIST_RA_SEMANA4_LPT,HIST_RA_SEMANA5_LPT,HIST_RA_RUTA,HIST_RA_IDALMACEN) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", Array As Object (HIST_RA_OBJMES,HIST_RA_VENTA,HIST_RA_TENDENCIA,HIST_RA_ALCANCE,HISR_RA_DRAOBJ,HIST_RA_DRAVTA,HIST_RA_DSOBJ,HIST_RA_DSVTA,HIST_RA_VPOOBJ,HIST_RA_VPOVTA,HIST_RA_CTES,HIST_RA_COBCCC,HIST_RA_ECO,HIST_RA_VISITPLAN,HIST_RA_VISIREAL,HIST_RA_COBVISIT,HIST_RA_FRECCOMPOBJ,HIST_RA_FRECCOMREAL,HIST_RA_VENTAMES1,HIST_RA_VENTAMES2,HIST_RA_VENTAMES3,HIST_RA_VENTAMES4,HIST_RA_RECHAZO,HIST_RA_RECHAZOPORCEN,HIST_RA_SEMANA1,HIST_RA_SEMANA1_DIAS,HIST_RA_SEMANA1_DRA,HIST_RA_SEMANA2,HIST_RA_SEMANA2_DIAS,HIST_RA_SEMANA2_DRA,HIST_RA_SEMANA3,HIST_RA_SEMANA3_DIAS,HIST_RA_SEMANA3_DRA,HIST_RA_SEMANA4,HIST_RA_SEMANA4_DIAS,HIST_RA_SEMANA4_DRA,HIST_RA_SEMANA5,HIST_RA_SEMANA5_DIAS,HIST_RA_SEMANA5_DRA,HIST_RA_SEMANA1_LPT,HIST_RA_SEMANA2_LPT,HIST_RA_SEMANA3_LPT,HIST_RA_SEMANA4_LPT,HIST_RA_SEMANA5_LPT,HIST_RA_RUTA,HIST_RA_IDALMACEN)) + ' Msgbox("pasa","alo") + Next + Listo1 = 1 + S_CC.Text = "LISTO" +' If Starter.marcaCel <> "Sony" Then ToastMessageShow("Catalogo Resumen Actualizado." , True) + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "hist_promos" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim HP_CLIENTE As String = records(RESULT.Columns.Get("HP_CLIENTE")) + Dim HP_CODIGO_PROMOCION As String = records(RESULT.Columns.Get("HP_CODIGO_PROMOCION")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_PROMOS(HP_CLIENTE, HP_CODIGO_PROMOCION) VALUES (?,?)", Array As Object (HP_CLIENTE, HP_CODIGO_PROMOCION)) + Next +' If Starter.marcaCel <> "Sony" Then ToastMessageShow("Historico Promociones Actualizado." , True) + If PB1.Progress = 0 Then + PB1.Progress = 30 + S_CH.Text = "CARGANDO" + ELSE If PB1.Progress = 30 Then + PB1.Progress = 60 + ELSE IF PB1.Progress = 60 Then + PB1.Progress = 100 + S_CH.Text = "LISTO" + End If + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "hist_cliente_promos" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim HCCP_CLIENTE As String = records(RESULT.Columns.Get("HCCP_CLIENTE")) + Dim HCCP_PROMO As String = records(RESULT.Columns.Get("HCCP_PROMO")) + Dim HCCP_CANT As String = records(RESULT.Columns.Get("HCCP_CANT")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_CLIENTE_CANT_PROMOS(HCCP_CLIENTE, HCCP_PROMO, HCCP_CANT) VALUES (?,?,?)", Array As Object (HCCP_CLIENTE, HCCP_PROMO,HCCP_CANT)) + Next +' If Starter.marcaCel <> "Sony" Then ToastMessageShow(" Historico Clientes Promociones Actualizado." , True) + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "HIST_MARCAS_CUOTAS" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim HMC_MARCA As String = records(RESULT.Columns.Get("HMC_MARCA")) + Dim HMC_TOTAL As String = records(RESULT.Columns.Get("HMC_TOTAL")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_MARCAS_CUOTAS(HMC_MARCA, HMC_TOTAL) VALUES (?,?)", Array As Object (HMC_MARCA, HMC_TOTAL)) + Next +' If Starter.marcaCel <> "Sony" Then ToastMessageShow(" Historico Marcas" , True) + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "hist_comp_promos" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim CAT_PA_ID As String = records(RESULT.Columns.Get("CAT_PA_ID")) + Dim CAT_PA_MAXPROM As String = records(RESULT.Columns.Get("CAT_PA_MAXPROM")) + Dim CAT_PA_MAXPROMREC As String = records(RESULT.Columns.Get("CAT_PA_MAXPROMREC")) + Dim CAT_PA_MAXPROMCLIE As String = records(RESULT.Columns.Get("CAT_PA_MAXPROMCLIE")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PROMOS_COMP(CAT_PA_ID, CAT_PA_MAXPROM, CAT_PA_MAXPROMREC, CAT_PA_MAXPROMCLIE) VALUES (?,?,?,?)", Array As Object (CAT_PA_ID, CAT_PA_MAXPROM,CAT_PA_MAXPROMREC,CAT_PA_MAXPROMCLIE)) + Next + If PB1.Progress = 0 Then + PB1.Progress = 30 + S_CH.Text = "CARGANDO" + ELSE If PB1.Progress = 30 Then + PB1.Progress = 60 + ELSE IF PB1.Progress = 60 Then + PB1.Progress = 100 + S_CH.Text = "LISTO" + End If + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "cat_verificacion" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim CAT_VE_IDPROD As String = records(RESULT.Columns.Get("CAT_VE_IDPROD")) + Dim CAT_VE_NOMBRE As String = records(RESULT.Columns.Get("CAT_VE_NOMBRE")) + Dim CAT_VE_ORDEN As String = records(RESULT.Columns.Get("CAT_VE_ORDEN")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_VERIFICACION(CAT_VE_IDPROD, CAT_VE_NOMBRE,CAT_VE_ORDEN) VALUES (?,?,?)", Array As Object (CAT_VE_IDPROD, CAT_VE_NOMBRE,CAT_VE_ORDEN)) + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "marcas_rutas" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim HVD_MARCA As String = records(RESULT.Columns.Get("HVD_MARCA")) + Dim CLIENTES As String = records(RESULT.Columns.Get("CLIENTES")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO MARCAS_RUTAS(HVD_MARCA, CLIENTES) VALUES (?,?)", Array As Object (HVD_MARCA, CLIENTES)) + Next + End If + End If + + 'CUOTAS + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "CUOTAS" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim HC_RUTA As String = records(RESULT.Columns.Get("HC_RUTA")) + Dim HC_CUOTA1 As String = records(RESULT.Columns.Get("HC_CUOTA1")) + Dim HC_CUOTA2 As String = records(RESULT.Columns.Get("HC_CUOTA2")) + Dim HC_CUOTA3 As String = records(RESULT.Columns.Get("HC_CUOTA3")) + Dim HC_CUOTA4 As String = records(RESULT.Columns.Get("HC_CUOTA4")) + Dim HC_CUOTA5 As String = records(RESULT.Columns.Get("HC_CUOTA5")) + Dim HC_CUOTA6 As String = records(RESULT.Columns.Get("HC_CUOTA6")) + Dim HC_META1 As String = records(RESULT.Columns.Get("HC_META1")) + Dim HC_META2 As String = records(RESULT.Columns.Get("HC_META2")) + Dim HC_META3 As String = records(RESULT.Columns.Get("HC_META3")) + Dim HC_META4 As String = records(RESULT.Columns.Get("HC_META4")) + Dim HC_META5 As String = records(RESULT.Columns.Get("HC_META5")) + Dim HC_META6 As String = records(RESULT.Columns.Get("HC_META6")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_CUOTAS(HC_RUTA, HC_CUOTA1,HC_CUOTA2,HC_CUOTA3,HC_CUOTA4,HC_CUOTA5,HC_CUOTA6,HC_META1,HC_META2,HC_META3,HC_META4,HC_META5,HC_META6) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)", Array As Object (HC_RUTA, HC_CUOTA1,HC_CUOTA2,HC_CUOTA3,HC_CUOTA4,HC_CUOTA5,HC_CUOTA6,HC_META1,HC_META2,HC_META3,HC_META4,HC_META5,HC_META6)) + Next + + End If + End If + 'COMISIONES + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "COMISIONES" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim HCM_TOTAL_V As String = records(RESULT.Columns.Get("HCM_TOTAL_V")) + Dim HCM_TOTAL_VIVE As String = records(RESULT.Columns.Get("HCM_TOTAL_VIVE")) + Dim HCM_TOTAL_GUNA As String = records(RESULT.Columns.Get("HCM_TOTAL_GUNA")) + Dim HCM_TOTAL_BEB As String = records(RESULT.Columns.Get("HCM_TOTAL_BEB")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_COMISIONES_MOVIL (HCM_TOTAL_V , HCM_TOTAL_VIVE , HCM_TOTAL_GUNA , HCM_TOTAL_BEB) VALUES (?,?,?,?)", Array As Object (HCM_TOTAL_V , HCM_TOTAL_VIVE , HCM_TOTAL_GUNA , HCM_TOTAL_BEB)) + Next + End If + End If + + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "ENCUESTA_CLIENTE" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim HEC_CLIENTE As String = records(RESULT.Columns.Get("HEC_CLIENTE")) + Dim HEC_MODULO As String = records(RESULT.Columns.Get("HEC_MODULO")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_ENCUESTA_CLIENTE (HEC_CLIENTE , HEC_MODULO) VALUES (?,?)", Array As Object (HEC_CLIENTE , HEC_MODULO )) + Next + End If + End If + + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "gunaprod" Then 'query tag + If PB2.Progress < 30 Then S_CP.Text = "CARGANDO" 'Mod por CHV - 20211028 Agregue el "If PB2.Progress < 30 then" + For Each records() As Object In RESULT.Rows + Dim CAT_GP_ID As String = records(RESULT.Columns.Get("CAT_GP_ID")) + Dim CAT_GP_NOMBRE As String = records(RESULT.Columns.Get("CAT_GP_NOMBRE")) + Dim CAT_GP_IMP1 As String = records(RESULT.Columns.Get("CAT_GP_IMP1")) + Dim CAT_GP_IMP2 As String = records(RESULT.Columns.Get("CAT_GP_IMP2")) + Dim CAT_GP_PRECIO As String = records(RESULT.Columns.Get("CAT_GP_PRECIO")) + Dim CAT_GP_CLASIF As String = records(RESULT.Columns.Get("CAT_GP_CLASIF")) + Dim CAT_GP_STS As String = records(RESULT.Columns.Get("CAT_GP_STS")) + Dim CAT_GP_TIPO As String = records(RESULT.Columns.Get("CAT_GP_TIPO")) + Dim CAT_GP_SUBTIPO As String = records(RESULT.Columns.Get("CAT_GP_SUBTIPO")) + Dim CAT_GP_IMG() As Byte = records(RESULT.Columns.Get("CAT_GP_IMG")) + Dim CAT_GP_ALMACEN As Int = records(RESULT.Columns.Get("CAT_GP_ALMACEN")) + ' Dim CAT_GP_DEV As String = records(RESULT.Columns.Get("CAT_GP_DEV")) + Dim CAT_GP_TIPOPROD As Int = records(RESULT.Columns.Get("CAT_GP_TIPOPROD")) + Dim CAT_GP_INICIATIVA As Int = records(RESULT.Columns.Get("CAT_GP_INICIATIVA")) +' CAT_GP_INICIATIVA = 5 +' skmt.ExecNonQuery2("INSERT INTO CAT_GUNAPROD(CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG,CAT_GP_ALMACEN,CAT_GP_DEV) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)", Array As Object (CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG, CAT_GP_ALMACEN,CAT_GP_DEV)) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_GUNAPROD(CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG,CAT_GP_ALMACEN,CAT_GP_TIPOPROD,CAT_GP_INICIATIVA) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)", Array As Object (CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG, CAT_GP_ALMACEN,CAT_GP_TIPOPROD, CAT_GP_INICIATIVA)) + Next + Listo2=1 + If PB2.Progress = 0 Then + PB2.Progress = 30 + S_CP.Text = "CARGANDO" + ELSE If PB2.Progress = 30 Then + PB2.Progress = 60 + ELSE IF PB2.Progress = 60 Then + PB2.Progress = 100 + S_CP.Text = "LISTO" + End If +' If Starter.marcaCel <> "Sony" Then ToastMessageShow("Productos Actualizados." , True) + If Listo1 =1 And Listo2 =1 And Listo3 = 1 And Listo4 = 1 Then + B4XPage_Appear + img2.Visible=False + EJECUTANDO=0 + End If + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "gunaprodp" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim CAT_GP_ID As String = records(RESULT.Columns.Get("CAT_GP_ID")) + Dim CAT_GP_NOMBRE As String = records(RESULT.Columns.Get("CAT_GP_NOMBRE")) + Dim CAT_GP_IMP1 As String = records(RESULT.Columns.Get("CAT_GP_IMP1")) + Dim CAT_GP_IMP2 As String = records(RESULT.Columns.Get("CAT_GP_IMP2")) + Dim CAT_GP_PRECIO As String = records(RESULT.Columns.Get("CAT_GP_PRECIO")) + Dim CAT_GP_CLASIF As String = records(RESULT.Columns.Get("CAT_GP_CLASIF")) + Dim CAT_GP_STS As String = records(RESULT.Columns.Get("CAT_GP_STS")) + Dim CAT_GP_TIPO As String = records(RESULT.Columns.Get("CAT_GP_TIPO")) + Dim CAT_GP_SUBTIPO As String = records(RESULT.Columns.Get("CAT_GP_SUBTIPO")) + Dim CAT_GP_IMG() As Byte = records(RESULT.Columns.Get("CAT_GP_IMG")) + Dim CAT_GP_ALMACEN As Int = records(RESULT.Columns.Get("CAT_GP_ALMACEN")) + Dim CAT_GP_TIPOPROD As Int = records(RESULT.Columns.Get("CAT_GP_TIPOPROD")) + CAT_GP_TIPOPROD = "5" + If CAT_GP_ID = "PAQUNI003" Then + CAT_GP_ALMACEN = 60 + End If + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_GUNAPROD(CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG,CAT_GP_ALMACEN,CAT_GP_TIPOPROD) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)", Array As Object (CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG, CAT_GP_ALMACEN,CAT_GP_TIPOPROD)) + Next + If PB2.Progress = 0 Then + PB2.Progress = 30 + S_CP.Text = "CARGANDO" + ELSE If PB2.Progress = 30 Then + PB2.Progress = 60 + ELSE IF PB2.Progress = 60 Then + PB2.Progress = 100 + S_CP.Text = "LISTO" + End If +' If Starter.marcaCel <> "Sony" Then ToastMessageShow("Promociones Actualizados." , True) + Listo4=1 + If Listo1 =1 And Listo2 =1 And Listo3 = 1 And Listo4 = 1 Then + B4XPage_Appear + img2.Visible=False + EJECUTANDO=0 + Else If Listo4 = 1 And Listo3 = 1 And inve = 1 Then + B4XPage_Appear + img2.Visible=False + EJECUTANDO=0 + End If + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "gunaprodps" Then 'query tag + For Each records() As Object In RESULT.Rows + + Dim CAT_GP_ID As String = records(RESULT.Columns.Get("CAT_GP_ID")) + Dim CAT_GP_NOMBRE As String = records(RESULT.Columns.Get("CAT_GP_NOMBRE")) + Dim CAT_GP_IMP1 As String = records(RESULT.Columns.Get("CAT_GP_IMP1")) + Dim CAT_GP_IMP2 As String = records(RESULT.Columns.Get("CAT_GP_IMP2")) + Dim CAT_GP_PRECIO As String = records(RESULT.Columns.Get("CAT_GP_PRECIO")) + Dim CAT_GP_CLASIF As String = records(RESULT.Columns.Get("CAT_GP_CLASIF")) + Dim CAT_GP_STS As String = records(RESULT.Columns.Get("CAT_GP_STS")) + Dim CAT_GP_TIPO As String = records(RESULT.Columns.Get("CAT_GP_TIPO")) + Dim CAT_GP_SUBTIPO As String = records(RESULT.Columns.Get("CAT_GP_SUBTIPO")) + Dim CAT_GP_IMG() As Byte = records(RESULT.Columns.Get("CAT_GP_IMG")) + Dim CAT_GP_ALMACEN As Int = records(RESULT.Columns.Get("CAT_GP_ALMACEN")) + Dim CAT_GP_TIPOPROD As Int = records(RESULT.Columns.Get("CAT_GP_TIPOPROD")) + ' + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_GUNAPROD(CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG,CAT_GP_ALMACEN,CAT_GP_TIPOPROD) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)", Array As Object (CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG, CAT_GP_ALMACEN,CAT_GP_TIPOPROD)) + Next + If PB2.Progress = 0 Then + PB2.Progress = 30 + S_CP.Text = "CARGANDO" + Log("C4") + ELSE If PB2.Progress = 30 Then + PB2.Progress = 60 + ELSE IF PB2.Progress = 60 Then + PB2.Progress = 100 + S_CP.Text = "LISTO" + Log("3") + End If +' If Starter.marcaCel <> "Sony" Then ToastMessageShow("Promociones especiales Actualizados." , True) + + Listo4=1 + If Listo1 =1 And Listo2 =1 And Listo3 = 1 And Listo4 = 1 Then + B4XPage_Appear + img2.Visible=False + EJECUTANDO=0 + Else If Listo4 = 1 And Listo3 = 1 And inve = 1 Then + B4XPage_Appear + img2.Visible=False + EJECUTANDO=0 + End If + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "detallepaq" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim CAT_DP_ALMACEN As String = records(RESULT.Columns.Get("CAT_DP_ALMACEN")) + Dim CAT_DP_ID As String = records(RESULT.Columns.Get("CAT_DP_ID")) + Dim CAT_DP_IDPROD As String = records(RESULT.Columns.Get("CAT_DP_IDPROD")) + Dim CAT_DP_TIPO As String = records(RESULT.Columns.Get("CAT_DP_TIPO")) + Dim CAT_DP_PZAS As String = records(RESULT.Columns.Get("CAT_DP_PZAS")) + Dim CAT_DP_USUARIO As String = records(RESULT.Columns.Get("CAT_DP_USUARIO")) + Dim CAT_DP_FECHA As String = records(RESULT.Columns.Get("CAT_DP_FECHA")) + Dim CAT_DP_REGALO As String = records(RESULT.Columns.Get("CAT_DP_REGALO")) + Dim CAT_DP_CLASIF As String = records(RESULT.Columns.Get("CAT_DP_CLASIF")) + Dim CAT_DP_PRECIO As String = records(RESULT.Columns.Get("CAT_DP_PRECIO")) + Dim CAT_DP_PRECIO_SIMPTOS As String = records(RESULT.Columns.Get("CAT_DP_PRECIO_SIMPTOS")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_DETALLES_PAQ(CAT_DP_ALMACEN,CAT_DP_ID,CAT_DP_IDPROD,CAT_DP_TIPO,CAT_DP_PZAS,CAT_DP_USUARIO,CAT_DP_FECHA,CAT_DP_REGALO,CAT_DP_CLASIF,CAT_DP_PRECIO,CAT_DP_PRECIO_SIMPTOS) VALUES (?,?,?,?,?,?,?,?,?,?,?)", Array As Object (CAT_DP_ALMACEN,CAT_DP_ID,CAT_DP_IDPROD,CAT_DP_TIPO,CAT_DP_PZAS,CAT_DP_USUARIO,CAT_DP_FECHA,CAT_DP_REGALO,CAT_DP_CLASIF,CAT_DP_PRECIO,CAT_DP_PRECIO_SIMPTOS)) + Next + If PB2.Progress = 0 Then + PB2.Progress = 30 + S_CP.Text = "CARGANDO" + ELSE If PB2.Progress = 30 Then + PB2.Progress = 60 + ELSE IF PB2.Progress = 60 Then + PB2.Progress = 100 + S_CP.Text = "LISTO" + End If + Listo3 =1 + If Listo1 =1 And Listo2 =1 And Listo3 = 1 And Listo4 = 1 Then + B4XPage_Appear + img2.Visible=False + EJECUTANDO=0 + Else If Listo4 = 1 And Listo3 = 1 And inve = 1 Then + B4XPage_Appear + img2.Visible=False + EJECUTANDO=0 + End If + + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "hist_datos" Then 'query tag + Dim cont As Int = 0 + For Each records() As Object In RESULT.Rows + cont = cont +1 + + Dim HVD_CLIENTE As String = records(RESULT.Columns.Get("HVD_CLIENTE")) + Dim HVD_PRONOMBRE As String = records(RESULT.Columns.Get("HVD_PRONOMBRE")) + Dim HVD_CANT As String = records(RESULT.Columns.Get("HVD_CANT")) + Dim HVD_COSTO_TOT As String = records(RESULT.Columns.Get("HVD_COSTO_TOT")) + Log(cont &" " &HVD_CLIENTE&"--"&HVD_PRONOMBRE&"--"&HVD_CANT&"--"&HVD_COSTO_TOT) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_VENTAS(HVD_CLIENTE,HVD_PRONOMBRE,HVD_CANT,HVD_COSTO_TOT) VALUES (?,?,?,?)", Array As Object (HVD_CLIENTE,HVD_PRONOMBRE,HVD_CANT,HVD_COSTO_TOT)) + + Next + Listo3 =1 + If PB1.Progress = 0 Then + PB1.Progress = 30 + S_CH.Text = "CARGANDO" + ELSE If PB1.Progress = 30 Then + PB1.Progress = 60 + ELSE IF PB1.Progress = 60 Then + PB1.Progress = 100 + S_CH.Text = "LISTO" + End If +' If Starter.marcaCel <> "Sony" Then ToastMessageShow("Venta historico Actualizado." , True) + If Listo1 =1 And Listo2 =1 And Listo3 = 1 And Listo4 = 1 Then + B4XPage_Appear + img2.Visible=False + EJECUTANDO=0 + End If + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "variables" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim Cat_Va_Descripcion As String = records(RESULT.Columns.Get("CAT_VA_DESCRIPCION")) + Dim Cat_Va_Valor As String = records(RESULT.Columns.Get("CAT_VA_VALOR")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object (Cat_Va_Descripcion, Cat_Va_Valor)) + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "CUESTIONARIO" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim Cat_Va_Valor As String = records(RESULT.Columns.Get("CAT_VALOR")) + B4XPages.MainPage.skmt.ExecNonQuery2("DELETE FROM CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As Object ("CUESTIONARIO")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("CUESTIONARIO", Cat_Va_Valor)) + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "valida_pedido" Then 'query tag + For Each records() As Object In RESULT.Rows + + Dim CUANTOSP As Int = records(RESULT.Columns.Get("CUANTOSP")) + + If cuantos_pedido < = CUANTOSP Then + ' ToastMessageShow("rojo val ok 1 cuantosp." , True) + datos_iguales = "ok" + S_CP.Text = "INFO OK" + Else + If Starter.marcaCel <> "Sony" Then ToastMessageShow("No se cargo bien la info P. Sync Nuevamente" & CUANTOSP & " " & cuantos_pedido, True) + S_CP.Text = "ENVIAR DATOS (K-2)" + End If + + + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "valida_pedidoc" Then 'query tag + For Each records() As Object In RESULT.Rows + + Dim CUANTOSC As Int = records(RESULT.Columns.Get("CUANTOSC")) + + If cuantos_pedidosc = CUANTOSC Then + ' ToastMessageShow("rojo val ok 1 cuantosp." , True) + datos_iguales = "ok" + Else + If Starter.marcaCel <> "Sony" Then ToastMessageShow("No se cargo bien la info C. Sync Nuevamente" & CUANTOSC & " " & cuantos_pedidosc, True) + End If + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "valida_noventa" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim CUANTOSN As Int = records(RESULT.Columns.Get("CUANTOSN")) + If cuantos_noventa = CUANTOSN Then + ' ToastMessageShow("rojo val ok 1 cuantosp." , True) + datos_iguales = "ok" + Else + If Starter.marcaCel <> "Sony" Then ToastMessageShow("No se cargo bien la info N. Sync Nuevamente" & CUANTOSN & " " & cuantos_noventa, True) + End If + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "ins_pedido" Then 'query tag + For Each records() As Object In RESULT.Rows + PB2.Progress = PB2.Progress + 5 + S_CP.Text = "SUBIENDO" + Next + PB2.Progress = 100 + S_CP.Text = "LISTO" + Log("5") + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "version" Then 'query tag + For Each records() As Object In RESULT.Rows + B4XPages.MainPage.skmt.ExecNonQuery("delete from VERSION") + Dim CAT_VE_VERSION As String = records(RESULT.Columns.Get("CAT_VE_VERSION")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO VERSION(NOVERSION) VALUES (?)", Array As Object (CAT_VE_VERSION)) + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "count_cli" Then 'query tag + For Each records() As Object In RESULT.Rows + COUNT_CLIE = records(RESULT.Columns.Get("COUNT_CLIE")) + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "ruta" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim VALIDO As String = records(RESULT.Columns.Get("VALIDO")) + If VALIDO = "OK" Then + cargar.Visible = True + Subir.Visible = True + inv.Visible = True + connecta.Visible = False + If conn = "1" Then + ToastMessageShow("Existe Conexión con el Servidor." , True) + End If + Else + cargar.Visible = False + Subir.Visible = False + inv.Visible = False + connecta.Visible = False + ToastMessageShow("Ruta invalida." , True) + End If + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "usuario" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim name2 As String = records(RESULT.Columns.Get("VALIDO")) + Next + If name2 = "OK" Then + PASO = 1 + End If + P1.Visible = False + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "fecha" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim FECHA_HOY As String = records(RESULT.Columns.Get("FECHA")) + B4XPages.MainPage.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("FECHA")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("FECHA",FECHA_HOY)) + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "folio" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim FOLIO As String = records(RESULT.Columns.Get("FOLIO")) + B4XPages.MainPage.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("FOLIO")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("FOLIO",FOLIO)) + Next + End If + End If + End If + Job.Release +End Sub + +Private Sub B4XPage_CloseRequest As ResumableSub + 'Return True to close, False to cancel + If SCROLL_RESDIA.Visible Then + SCROLL_RESDIA.Visible = False + B_OK_RES_Click + Return False + Else + B4XPages.ShowPage("login") + End If + Return False +End Sub + +Sub connecta_Click + B4XPages.MainPage.reqManager.Initialize(Me, Starter.server) + teclado.HideKeyboard + connecta1 = connecta1 + 1 + 'imei = p.GetDeviceId + conn = "1" + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "select_version_DIS" + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "version") + ' Cuando nos conectamos verificamos que el usuario guardado en BD sea VALIDO. + c=B4XPages.MainPage.skmt.ExecQuery("select USUARIO, PASS from usuarioa") + c.Position=0 + If c.RowCount > 0 And c.GetString("USUARIO") <> "KMTS1" Then + Private usrT As String = c.GetString("USUARIO") + Private passT As String = c.GetString("PASS") + cmd.Initialize + cmd.Name = "select_usuario_DIS" + cmd.Parameters = Array As Object(usrT, passT) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "usuarioA") + End If + c.Close + +' If imei = "" Then +' cmd.Initialize +' cmd.Name = "select_ruta_GV2_70_2" +' cmd.Parameters = Array As Object(ALMACEN,e_ruta.text,imei) +' B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "ruta") +' Else +' Dim cmd As DBCommand +' cmd.Initialize +' cmd.Name = "select_ruta_GV2_70_2" +' cmd.Parameters = Array As Object(ALMACEN,e_ruta.text,imei) +' B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "ruta") +' End If + + If e_ruta.Text = "KMTS1" Then + cargar.Visible = True + Subir.Visible = True + e_ruta.Text = "" + End If + + If e_ruta.Text = "BERNA1" Then + cargar.Visible = True + Subir.Visible = True + e_ruta.Text = "" + End If + + ToastMessageShow("Validando Conexión." , True) + + If connecta1 / 2 = 1 Then + 'SERVER = "http://177.244.63.54:1782" + 'SERVER = "http://keymon.com.mx:1782" + 'SERVER = "http://201.99.139.28:1782" +' B4XPages.MainPage.SERVER = "http://187.189.244.154:1782" +' SERVER = "http://10.0.0.205:1782" + B4XPages.MainPage.reqManager.Initialize(Me, Starter.server) + Else + 'SERVER = "http://keymon.com.mx:1782" + 'SERVER = "http://201.99.139.28:1782" + 'SERVER = "http://177.244.63.54:1782" +' B4XPages.MainPage.SERVER = "http://187.189.244.154:1782" +' SERVER = "http://10.0.0.205:1782" + B4XPages.MainPage.reqManager.Initialize(Me, Starter.server) + End If +End Sub + +Sub BUSCA_Click + B4XPages.ShowPage("TicketsDia") +End Sub + +Sub b_mapa_Click + Log("mapClic") + B4XPages.GetPage("Mapas") +End Sub + +Sub e_ruta_EnterPressed + If e_ruta.Text = "FIN DIA" Then + RES = Msgbox2("Seguro que desa hacer el cierre todos los datos se borraran?","Cierre", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'ignore + If RES = DialogResponse.POSITIVE Then + e_ruta.Text = "" + B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente") + B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido") + B4XPages.MainPage.skmt.ExecNonQuery("delete from noventa") + B4XPages.MainPage.skmt.ExecNonQuery("delete from clie_act") + B4XPages.MainPage.skmt.ExecNonQuery("delete from kmt_info") + B4XPages.MainPage.skmt.ExecNonQuery("delete from cat_gunaprod") + B4XPages.MainPage.skmt.ExecNonQuery("delete from CAT_DETALLES_PAQ") + B4XPages.MainPage.skmt.ExecNonQuery("delete from HIST_VENTAS") + B4XPages.MainPage.skmt.ExecNonQuery("delete from HIST_VERIFICACION") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM HIST_ENCUESTA") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM HIST_STAY_OUT") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM HIST_GPS") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM HIST_FACE") + B4XPages.MainPage.skmt.ExecNonQuery("INSERT INTO HIST_STAY_OUT(HSO_INI, HSO_FIN) VALUES (0,0)") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM HIST_CODIGO_BARRAS") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM ENCUESTA_MODULO1") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM ENCUESTA_MODULO2") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM ENCUESTA_MODULO3") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM ENCUESTA_MODULO4") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM ENCUESTA_MODULO5") + B4XPage_Appear + End If + End If + If e_ruta.Text = "IWL" Then + ' trabajar.Visible = False + NUEVO.Visible =False + BUSCA.Visible=False + connecta.Visible=False + img3.Visible =True + Resumen.Visible= False + End If + If e_ruta.Text = "SUPLENCIA" Then + E_RUTA2.Visible = True + Panel11.Visible = True + End If +End Sub + +Sub inv_Click + img2.Visible =True + EJECUTANDO = 1 + inve = 1 + B4XPages.MainPage.skmt.ExecNonQuery("delete from cat_gunaprod") + B4XPages.MainPage.skmt.ExecNonQuery("delete from CAT_DETALLES_PAQ") + c=B4XPages.MainPage.skmt.ExecQuery("select usuario from usuarioa") + c.Position = 0 + usuario = c.GetString("USUARIO") + c.Close + cmd.Initialize + cmd.Name = "select_cat_gunaprod_DIS" + cmd.Parameters = Array As Object(ALMACEN,e_ruta.Text) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "gunaprod") + + cmd.Initialize + cmd.Name = "select_cat_paquetess_DIS2" + cmd.Parameters = Array As Object(ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "gunaprodp") + + cmd.Initialize + cmd.Name = "select_cat_detallepa_DIS2" + cmd.Parameters = Array As Object(ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "detallepaq") + + cargar.Visible = False + Subir.Visible = False + connecta.Visible = True + inv.Visible = False + ToastMessageShow("Se Actualizaran los datos, Este proceso podria tardar hasta un minuto, gracias" , True) +End Sub + +Sub t1_tick + cmd.Initialize + cmd.Name = "select_cuantos_pedido_DIS" + cmd.Parameters = Array As Object(ALMACEN,l_ruta.text) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "valida_pedido") + + cmd.Initialize + cmd.Name = "select_cuantos_noventa_DIS" + cmd.Parameters = Array As Object(ALMACEN,l_ruta.text) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "valida_noventa") + + cmd.Initialize + cmd.Name = "select_cuantos_pedidoc_DIS" + cmd.Parameters = Array As Object(ALMACEN,l_ruta.text) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "valida_pedidoc") + + If PB2.Progress = 0 Then + S_CP.Text = "ENVIAR DATOS (K-1)" + End If + img2.Visible=False + t1.Enabled = False +End Sub + +Sub B_OK_PAS_Click + If CARGA = "SUBIR" And S_CP.Text = "INFO OK" Then + P1.Visible = False + Btn_Ubicar.Visible=True + 'trabajar.Visible = True + NUEVO.Visible =True + BUSCA.Visible=True + connecta.Visible=True + Resumen.Visible= True + img2.Visible=False + Subs.panelVisible(p_principal, 0, 0) + Else If CARGA = "SUBIR" And S_CP.Text = "ERROR" Then + Msgbox("Tiene que subir de nuevo la información","Atención") 'ignore + P1.Visible = False + ' trabajar.Visible = True + NUEVO.Visible =True + BUSCA.Visible=True + connecta.Visible=True + Resumen.Visible= True + img2.Visible=False + Subs.panelVisible(p_principal, 0, 0) + Else if CARGA = "SUBIR" And S_CP.Text <> "INFO OK" Then + RES = Msgbox2("Seguro que desa abortar el proceso","Cierre", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'ignore + If RES = DialogResponse.POSITIVE Then + P1.Visible = False +' trabajar.Visible = True + NUEVO.Visible =True + BUSCA.Visible=True + connecta.Visible=True + Resumen.Visible= True + img2.Visible=False + Subs.panelVisible(p_principal, 0, 0) + ExitApplication + End If + End If + If CARGA = "CARGAR" And S_CP.Text = "LISTO" And S_CC.Text = "LISTO" And S_CH.Text = "LISTO" Then + P1.Visible = False + Btn_Ubicar.Visible=True + 'trabajar.Visible = True + NUEVO.Visible =True + BUSCA.Visible=True + connecta.Visible=True + Resumen.Visible= True + img2.Visible=False + Subs.panelVisible(p_principal, 0, 0) + Else if CARGA = "CARGAR" And (S_CP.Text <> "LISTO" Or S_CC.Text <> "LISTO" Or S_CH.Text <> "LISTO") Then + RES = Msgbox2("Seguro que desa abortar el proceso","Cierre", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'ignore + If RES = DialogResponse.POSITIVE Then + P1.Visible = False +' trabajar.Visible = True + NUEVO.Visible =True + BUSCA.Visible=True + connecta.Visible=True + Resumen.Visible= True + img2.Visible=False + Subs.panelVisible(p_principal, 0, 0) + B4XPages.MainPage.skmt.ExecNonQuery("delete from kmt_info") + B4XPages.MainPage.skmt.ExecNonQuery("delete from cod_result") + B4XPages.MainPage.skmt.ExecNonQuery("delete from hist_gest") + B4XPages.MainPage.skmt.ExecNonQuery("delete from cat_gunaprod") + B4XPages.MainPage.skmt.ExecNonQuery("delete from CAT_DETALLES_PAQ") + B4XPages.MainPage.skmt.ExecNonQuery("delete from telefonos") + B4XPages.MainPage.skmt.ExecNonQuery("delete from HIST_VENTAS") + B4XPages.MainPage.skmt.ExecNonQuery("delete from HIST_PROMOS") + B4XPages.MainPage.skmt.ExecNonQuery("delete from HIST_CLIENTE_CANT_PROMOS") + B4XPages.MainPage.skmt.ExecNonQuery("delete from PROMOS_COMP") + B4XPages.MainPage.skmt.ExecNonQuery("delete from CAT_VERIFICACION") + ExitApplication + End If + End If +End Sub + +Sub NUEVO_Click + B4XPages.ShowPage("NuevoCliente") +End Sub + +Sub B_OK_RES_Click + ' trabajar.Visible = True + NUEVO.Visible =True + BUSCA.Visible=True + connecta.Visible=True + Resumen.Visible= True + P_RESUMEN.Visible=False + Panel4.Visible = False + SCROLL_RESDIA.Visible = False + Btn_Ubicar.Visible=True + p_principal.Visible = True +End Sub + +Sub Resumen_Click + P_RESUMEN.Visible = True + +' NUEVO.Visible =False +' BUSCA.Visible=False +' connecta.Visible=False +' Subir.Visible=False +' cargar.Visible=False +' Resumen.Visible= False +End Sub + +Sub P_RESUMEN_click + +End Sub + + +Sub CARGA_Click + B4XPages.ShowPage("Productos") +End Sub + +Sub resdia_Click + p_principal.Visible = False + Btn_Ubicar.Visible=False + SCROLL_RESDIA.Visible = True + SCROLL_RESDIA.Panel.LoadLayout("RESDIA") + SCROLL_RESDIA.Panel.Height = Panel4.Height + Panel4.Visible = True + + NUEVO.Visible =False + BUSCA.Visible=False + connecta.Visible=False + Subir.Visible=False + cargar.Visible=False + Resumen.Visible= False + + d=B4XPages.MainPage.skmt.ExecQuery2("select COUNT(*) AS CUANTOS FROM HIST_ENCUESTA WHERE HE_TIPO = ?", Array As String("TELEFONO")) + d.Position = 0 + l_encuesta.Text = d.GetString("CUANTOS") + d.Close + + L_MARCAS.CLEAR + d=B4XPages.MainPage.skmt.ExecQuery2("select distinct HE_CLIE AS CLIENTE FROM HIST_ENCUESTA WHERE HE_TIPO = ?", Array As String("TELEFONO")) + If D.RowCount>0 Then + For i=0 To D.RowCount -1 + D.Position=i + c=B4XPages.MainPage.skmt.ExecQuery2("Select HE_RES from HIST_ENCUESTA where HE_CLIE = ? AND HE_TIPO = ?", Array As String(d.GetString("CLIENTE"), "TELEFONO")) + c.Position = 0 + Dim label1 As Label + label1 = L_MARCAS.TwoLinesLayout.Label + label1.TextSize = 13 + label1.TextColor = Colors.Black + Dim label2 As Label + label2 = L_MARCAS.TwoLinesLayout.SecondLabel + label2.TextSize = 13 + label2.TextColor = Colors.Black + L_MARCAS.AddTwoLines(d.GetString("CLIENTE"),"TELEFONO :" & c.GetString("HE_RES") ) + c.Close + Next + End If + d.Close + + c=B4XPages.MainPage.skmt.ExecQuery2("Select sum(PE_COSTO_TOT) As MONTO_DIA from pedido where PE_CLIENTE <> 0 and pe_proid in (Select CAT_GP_ID from cat_gunaprod where CAT_GP_TIPO = ? )", Array As String("RTEC")) + c.Position = 0 + l_monto_k.Text = c.GetString("MONTO_DIA") + If l_monto_k.Text = "null" Then + l_monto_k.Text = "0" + End If + c.Close + + c=B4XPages.MainPage.skmt.ExecQuery2("Select sum(PE_COSTO_TOT) As MONTO_DIA from pedido where PE_CLIENTE <> 0 and pe_proid in (Select CAT_GP_ID from cat_gunaprod where CAT_GP_TIPO = ? )", Array As String("PING")) + c.Position = 0 + l_monto_kp.Text = c.GetString("MONTO_DIA") + If l_monto_kp.Text = "null" Then + l_monto_kp.Text = "0" + End If + c.Close + +' c=skmt.ExecQuery2("Select sum(PE_COSTO_TOT) As MONTO_DIA from pedido where PE_CLIENTE <> 0 and pe_proid in (Select CAT_GP_ID from cat_gunaprod where CAT_GP_TIPO = ? )", Array As String("SALTY SNACKS")) +' c.Position = 0 +' l_monto_ks.Text = c.GetString("MONTO_DIA") +' If l_monto_ks.Text = "null" Then +' l_monto_ks.Text = "0" +' End If + ' +' c.Close + c=B4XPages.MainPage.skmt.ExecQuery("Select sum(PE_COSTO_TOT) As MONTO_DIA from pedido where PE_CLIENTE <> 0 ") + c.Position = 0 + l_monto_ks.Text = c.GetString("MONTO_DIA") + If l_monto_ks.Text = "null" Then + l_monto_ks.Text = "0" + End If + c.Close + Dim cuantos_obj As String + c=B4XPages.MainPage.skmt.ExecQuery("Select count(*) AS TOTAL from HIST_MARCAS_CUOTAS ") + c.Position = 0 + cuantos_obj = c.GetString("TOTAL") + c.Close + + If cuantos_obj > 0 Then + c=B4XPages.MainPage.skmt.ExecQuery("Select SUM(HMC_TOTAL) AS TOTAL from HIST_MARCAS_CUOTAS ") + c.Position = 0 + If c.GetString("TOTAL") > 0 Then + L_NES.Text = Round(c.GetString("TOTAL") / 25) + + Else + L_NES.Text = c.GetString("TOTAL") + + End If + c.Close + End If + L_REAL.Text = l_monto_ks.Text + L_ALCANCE.Text = Round2((L_NES.Text / L_REAL.Text + 1),2) + L_VPLAN.Text = l_porvisitar.Text + L_VREAL.Text = L_CUANTOST.text + L_EFEC_VIS.Text = Round2(L_VREAL.text / L_VPLAN.Text,2) + L_VISITCC.Text = l_cuantosc.text + L_EFEC_PV.Text = Round2(L_VISITCC.Text / L_VREAL.Text,2) + L_EFEC_PURA.Text = Round2(L_VISITCC.Text / L_VPLAN.Text,2) + L_LIN_TICK.Text = LPT + If l_monto_ks.Text <> "0" Then + + c=B4XPages.MainPage.skmt.ExecQuery2("Select COUNT(DISTINCT(PE_CLIENTE)) AS CUANTOS FROM PEDIDO WHERE PE_CEDIS = ? ", Array As String(ALMACEN)) + c.Position = 0 + L_CTE_PROMO.Text = c.GetString("CUANTOS") + c.Close + d=B4XPages.MainPage.skmt.ExecQuery2("Select sum(PE_COSTO_TOT) AS MONTO_DIA FROM PEDIDO WHERE PE_PROID IN (select CAT_GP_ID from cat_gunaprod where CAT_GP_TIPOPROD = ?) ", Array As String("PRIORITARIO")) + d.Position = 0 + '/////////////////////////////////////////////////////////////////////////////// + '//////////////////////////// ULTIMA LINEA ANTES DEL ERROR ////////////////// + '////////// java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference + ' + '/// Al parecer d.GetString("MONTO_DIA") regresa null y la funcion numberFormat truena + '///////////////////////////////////////////////////////////////////////////////// + Log("|"&d.GetString("MONTO_DIA")&"|") + 'L_PRIO.Text = NumberFormat(d.GetString("MONTO_DIA"),0,2) + L_PRIO.Text = d.GetString("MONTO_DIA") + d.Close + + d=B4XPages.MainPage.skmt.ExecQuery2("Select sum(PE_COSTO_TOT) AS MONTO_DIA FROM PEDIDO WHERE PE_PROID IN (select CAT_GP_ID from cat_gunaprod where CAT_GP_TIPOPROD = ?) ", Array As String("ESTRATEGICO")) + d.Position = 0 + L_SECUND.Text =d.GetString("MONTO_DIA") + d.Close + + d=B4XPages.MainPage.skmt.ExecQuery2("Select sum(PE_COSTO_TOT) AS MONTO_DIA FROM PEDIDO WHERE PE_PROID IN (select CAT_GP_ID from cat_gunaprod where CAT_GP_TIPOPROD = ?) ", Array As String("COMPLEMENTARIO")) + d.Position = 0 + L_COMP.Text =d.GetString("MONTO_DIA") + d.Close + Else + L_PRIO.Text = "0" + L_SECUND.Text = "0" + L_COMP.Text = "0" + End If + + c=B4XPages.MainPage.skmt.ExecQuery("Select COUNT(*) AS CUANTOS FROM PEDIDO WHERE PE_CEDIS = PE_PROID ") + c.Position = 0 + If c.GetString("CUANTOS") > 0 Then + d=B4XPages.MainPage.skmt.ExecQuery("Select sum(pe_cant) AS CUANTOS FROM PEDIDO WHERE PE_CEDIS = PE_PROID ") + d.Position = 0 + L_CTE_PROMO.Text = d.GetString("CUANTOS") + d.Close + L_REDEN_PROMO.TEXT = Round2(L_VISITCC.Text / L_CTE_PROMO.Text,2) + Else + L_CTE_PROMO.Text = 0 + L_REDEN_PROMO.Text = 0 + End If + c.Close + d=B4XPages.MainPage.skmt.ExecQuery("Select COUNT(*) AS CUANTOS FROM PEDIDO ") + d.Position = 0 + L_LIN_TICK.Text = Round2(d.GetString("CUANTOS") / L_VISITCC.Text,2) + d.Close + + d=B4XPages.MainPage.skmt.ExecQuery("Select count(*) as CUANTOS from HIST_CUOTAS ") + d.Position = 0 + If d.GetString("CUANTOS") > 0 Then + ' c=skmt.ExecQuery("Select HC_CUOTA1,HC_CUOTA2,HC_CUOTA3 from HIST_CUOTAS ") + ' c.Position = 0 + ' l_monto_c1.Text = Round( c.GetString("HC_CUOTA1") / 6) + ' l_monto_c2.Text = Round(c.GetString("HC_CUOTA2") / 6) + ' l_monto_c3.Text = Round(c.GetString("HC_CUOTA3") / 6) + ' c.Close + Else + l_monto_c1.Text = 4000 + l_monto_c2.Text = 2000 + l_monto_c3.Text = 1000 + End If + d.Close +End Sub + +Sub hacer_ped_Click + B4XPages.ShowPage("Clientes") +End Sub + +Sub nvo_cliente_Click + B4XPages.ShowPage("NuevoCliente") +End Sub + +Sub tickets_dia_Click + B4XPages.ShowPage("TicketsDia") +End Sub + +Sub GPS_LocationChanged (Location1 As Location) + +End Sub + +Sub Btn_Ubicar_Click + StartActivity(MAPA_RUTAS) +End Sub + +'''''''''''''''''''''''''''''''''''' VALIDAR CARACTERES +Sub e_ruta_TextChanged (Old As String, New As String) + Dim validChars As String ="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 " +' Log("Antes: " & Old & " | " & New) + If Old <> "KMTS1" Then +' Log("Desp: " & Old & " | " & New) + Try + If validChars.Contains(New.SubString(New.Length-1)) = False Then + e_ruta.Text = New.SubString2(0, New.Length-1) + e_ruta.SelectionStart = e_ruta.Text.Length + End If + Catch + Log(LastException) + End Try + End If +End Sub + +Sub B_COMM_Click + Btn_Ubicar.Visible=False + SCROLL_RESDIA.Visible = True + SCROLL_RESDIA.Panel.LoadLayout("COMIS") + SCROLL_RESDIA.Panel.Height = Panel_C.Height + Panel4.Visible = False + Panel_C.Visible = True + +' trabajar.Visible = False + NUEVO.Visible =False + BUSCA.Visible=False + connecta.Visible=False + Subir.Visible=False + cargar.Visible=False + Resumen.Visible= False +' + If l_ruta.Text <> 0 Then + c=B4XPages.MainPage.skmt.ExecQuery("Select HCM_TOTAL_V, HCM_TOTAL_VIVE, HCM_TOTAL_GUNA, HCM_TOTAL_BEB from HIST_COMISIONES_MOVIL") + If c.RowCount > 0 Then + c.Position = 0 + L_TOTAL_BA.Text = c.GetString("HCM_TOTAL_BEB") + L_TOTAL_GUNA.Text = c.GetString("HCM_TOTAL_GUNA") + L_TOTAL_MM.Text = c.GetString("HCM_TOTAL_V") + L_TOTAL_VIVE.Text = c.GetString("HCM_TOTAL_VIVE") + c.Close + L_TOTAL_COMIS.Text = 0 + End If + Else + L_TOTAL_BA.Text = 0 + L_TOTAL_GUNA.Text = 0 + L_TOTAL_MM.Text = 0 + L_TOTAL_VIVE.Text = 0 + L_TOTAL_COMIS.Text = 0 + End If +End Sub + +Sub B_OK_COMISS_Click + NUEVO.Visible =True + BUSCA.Visible=True + connecta.Visible=True + Resumen.Visible= True + P_RESUMEN.Visible=False + Panel_C.Visible = False + SCROLL_RESDIA.Visible = False + Btn_Ubicar.Visible=True +End Sub + +Sub B_MARCAS_Click + SCROLL_RESDIA.Visible = True + p_sombra.Width = Root.Width + p_sombra.Height = Root.Height + Subs.panelVisible(p_sombra, 0, 0) + p_marcasRes.Visible = True + p_marcasRes.Height = Root.Height * 0.8 + p_marcasRes.BringToFront +' Subs.panelVisible(p_marcasRes,0,0) + pnlTitle.Visible = False +' pnlTitle.SetLayoutAnimated(0, 5, 10, CLV1.AsView.Width-12, TitleHeight + DividerHeight - 15) +' pnlTitle.LoadLayout("CellTitle") +' pnlTitle.Height = 20dip + B_OK_PANEL5.Top = p_marcasRes.Height - (B_OK_PANEL5.Height + 20) + c=B4XPages.MainPage.skmt.ExecQuery("Select CAT_GP_CLASIF, SUM(TOTAL) AS TOTAL FROM TOTAL_MARCAS GROUP BY CAT_GP_CLASIF") + CLV1.Clear + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + AddTitle(c.GetString("CAT_GP_CLASIF")) + If c.GetString("CAT_GP_CLASIF") = "PROMOS" Then + d=B4XPages.MainPage.skmt.ExecQuery("SELECT SUM(PE_CANT) AS CUANTOS FROM PEDIDO WHERE PE_CEDIS = PE_PROID") + d.Position=0 + CLV1.AddTextItem("CANTIDAD DE PROMOS = " & d.GetString("CUANTOS"),"1") + d.Close + Else + f=B4XPages.MainPage.skmt.ExecQuery2("select COUNT(*) AS CUANTOS from HIST_MARCAS_CUOTAS where HMC_MARCA = ?", Array As String(c.GetString("CAT_GP_CLASIF"))) + f.Position=0 + If f.GetString("CUANTOS") > 0 Then + e=B4XPages.MainPage.skmt.ExecQuery2("select HMC_MARCA, HMC_TOTAL from HIST_MARCAS_CUOTAS where HMC_MARCA = ?", Array As String(c.GetString("CAT_GP_CLASIF"))) + e.Position=0 + d=B4XPages.MainPage.skmt.ExecQuery2("SELECT count(distinct(PE_CLIENTE)) AS CUANTOS FROM PEDIDO WHERE PE_PROID in (select CAT_GP_ID from cat_gunaprod WHERE CAT_GP_CLASIF =?)", Array As String (c.GetString("CAT_GP_CLASIF"))) + d.Position=0 + CLV1.AddTextItem("TOTAL VENTA = $" & c.GetString("TOTAL"),"1") + CLV1.AddTextItem("M E T A MES= $" & e.GetString("HMC_TOTAL"),"1") + CLV1.AddTextItem("M E T A D I A= $" & Round(e.GetString("HMC_TOTAL") / 25),"1") + CLV1.AddTextItem("FALTA DIA= $" & Round((e.GetString("HMC_TOTAL") / 25) - c.GetString("TOTAL")) ,"1") + CLV1.AddTextItem("CLIENTES = " & d.GetString("CUANTOS"),"1") + d.Close + e.Close + Else + d=B4XPages.MainPage.skmt.ExecQuery2("SELECT count(distinct(pe_cliente)) AS CUANTOS FROM PEDIDO WHERE PE_PROID in (select CAT_GP_ID from cat_gunaprod WHERE CAT_GP_CLASIF =?)", Array As String (c.GetString("CAT_GP_CLASIF"))) + d.Position=0 + CLV1.AddTextItem("TOTAL VENTA = $" & c.GetString("TOTAL"),"1") + CLV1.AddTextItem("M E T A = $" & "1000","1") + CLV1.AddTextItem("FALTA = $" & (1000 - c.GetString("TOTAL")) ,"1") + CLV1.AddTextItem("CLIENTES = " & d.GetString("CUANTOS"),"1") + d.Close + End If + f.Close + End If + Next + End If + c.Close +' c=B4XPages.MainPage.skmt.ExecQuery("Select HMC_MARCA, HMC_TOTAL from HIST_MARCAS_CUOTAS where HMC_MARCA in (SELECT CAT_GP_CLASIF FROM TOTAL_MARCAS )") +' If c.RowCount>0 Then +' For i=0 To c.RowCount -1 +' c.Position=i +' AddTitle(c.GetString("HMC_MARCA")) +' CLV1.AddTextItem("TOTAL PREVENTA = $ 0.00","1") +' CLV1.AddTextItem("M E T A = $" & C.GetString("HMC_TOTAL"),"1") +' CLV1.AddTextItem("CLIENTES = 0","1") +' Next +' End If +' c.Close +End Sub + +Sub AddTitle (Title As String) + Dim p_marcas As B4XView = xui.CreatePanel("") + p_marcas.SetLayoutAnimated(0, 0, 0, CLV1.AsView.Width, TitleHeight) + p_marcas.LoadLayout("CellTitle") + lblTitle.Text = Title + Dim td As TitleData + td.Title = Title + CLV1.Add(p_marcas, td) +End Sub + +Sub B_OK_PANEL5_Click + NUEVO.Visible =True + BUSCA.Visible=True + connecta.Visible=True + Resumen.Visible= True + P_RESUMEN.Visible=False + Panel4.Visible = False + SCROLL_RESDIA.Visible = False + p_marcasRes.Visible = False + p_sombra.Visible = False + Btn_Ubicar.Visible=True + p_principal.Visible = True +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. + +Private Sub p_marcasRes_Click + +End Sub + +Private Sub p_sombra_Click + +End Sub \ No newline at end of file diff --git a/B4A/C_Productos.bas b/B4A/C_Productos.bas new file mode 100644 index 0000000..6089c93 --- /dev/null +++ b/B4A/C_Productos.bas @@ -0,0 +1,651 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11.5 +@EndOfDesignText@ +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore + + Dim ruta As String + Dim q_buscar As String + Dim forzarbusqueda As Boolean = False + Dim skmt As SQL + Dim c As Cursor + Dim c2 As Cursor + Dim C3 As Cursor + Dim s As Cursor + Dim lv_catalogos As ListView + Dim lv_promos As ListView + Dim entro As String + Dim gest As Button + Dim lfila As Label + Dim marca As String + Dim tipo As String + Dim subtipo As String + Private BUSCA As EditText + Dim ya_entro As String + Dim TIENE_PROMOS As String + Dim RES As String + Dim S1 As Cursor + Dim bmp As Bitmap + Dim ciclo As String + Private b_qr As Button + Private p_productos As Panel + Dim clv_productos As CustomListView + Private ImageView1 As ImageView + Private Panel3 As Panel + Private p_prods As Panel + Private i_prod As ImageView + Private l_prodX As Label + Private b_prodMas As Button + Private l_pCant As Label + Private et_pCant As EditText + Private b_prodMenos As Button + Dim b_terminar1 As Button + Dim b_continuar As Button + Private l_total As Label + Private l_totProds As Label + Dim totalProds As Int = 0 + Dim totalCompra As Float = 0 + Dim etCantHasFocus As Boolean = False + Dim prodsMap As Map + Private l_Cargando As Label + Private l_info As Label + Private b_buscar As Button + Private p_botonesVenta As Panel +End Sub + +'You can add more parameters here. +Public Sub Initialize As Object + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + Root = Root1 + 'load the layout to Root +' Activity.RemoveAllViews + Root.LoadLayout("productos") + ruta = File.DirInternal + If File.Exists(ruta, "kmt.db") = False Then + File.Copy(File.DirAssets, "kmt.db", ruta, "kmt.db") + End If + ciclo = 1 + l_info.Width = Root.Width * 0.8 + l_info.Left = (Root.Width/2) - (l_info.Width/2) +' llenaCatalogo(False) +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. + +Sub B4XPage_Appear + prodsMap.Initialize + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE CAT_GUNAPROD SET CAT_GP_TIPOPROD = (?) WHERE CAT_GP_TIPOPROD = (?) ",Array As Object("PRIORITARIO","1")) + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE CAT_GUNAPROD SET CAT_GP_TIPOPROD = (?) WHERE CAT_GP_TIPOPROD = (?) ",Array As Object("ESTRATEGICO","2")) + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE CAT_GUNAPROD SET CAT_GP_TIPOPROD = (?) WHERE CAT_GP_TIPOPROD = (?) ",Array As Object("COMPLEMENTARIO","3")) + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE CAT_GUNAPROD SET CAT_GP_TIPOPROD = (?) WHERE CAT_GP_TIPOPROD = (?) ",Array As Object("CATALOGO REGULAR","0")) + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE CAT_GUNAPROD SET CAT_GP_TIPOPROD = (?) WHERE CAT_GP_CLASIF = (?) ",Array As Object("PROMOS","PROMOS")) + +' Private left = (Root.Width/2) - ((clv_productos.AsView.Width)/2) + clv_productos.GetBase.SetLayoutAnimated(100, 0dip, 140dip, Root.Width, Root.Height * 0.68) 'Cambiamos el tamaño y posición de la lista de productos + clv_productos.Base_Resize(clv_productos.GetBase.Width, clv_productos.GetBase.Height) 'Cambiamos el tamaño del panel interno de la lista para que ajuste al nuevo tamaño. +' Log($"ya_entro=${ya_entro}, entro=${entro}"$) + If B4XPages.MainPage.bTerminarClicked Then + lv_catalogos.Visible = True + lv_promos.Visible = False + clv_productos.AsView.Visible = False + B4XPages.MainPage.bTerminarClicked = False + End If + If ya_entro <> "1" Then + Log("ya_entro <> 1") + If BUSCA.Text <> "" Then BUSCA.Text ="" + entro ="3" + ya_entro = "1" : Log("ya_entro=1") + lv_catalogos.Clear + Sleep(100) + lfila.Text = "CATALOGOS" + p_productos.Height = Root.Height + clv_productos.AsView.Visible = False + lv_catalogos.Visible = True + p_botonesVenta.Visible = False + p_botonesVenta.Top = clv_productos.AsView.top + clv_productos.AsView.Height + lv_promos.Visible = False + End If + Dim label1 As Label + label1 = lv_catalogos.SingleLineLayout.Label + label1.TextSize = 13 + label1.TextColor = Colors.Black + lv_catalogos.Clear + lv_catalogos.AddSingleLine("CATALOGO") + c = B4XPages.MainPage.skmt.ExecQuery("select count(*) as hayPromos from cat_gunaprod where CAT_GP_TIPOPROD = 'PROMOS'") + c.Position = 0 + If c.GetInt("hayPromos") > 0 Then + lv_catalogos.AddSingleLine("PROMOS") + End If + Sleep(100) + l_total.Visible = False + l_totProds.Visible = False + l_total.Left = 5dip + l_totProds.Width = Root.Width * 0.19 + l_total.Left = l_totProds.Width + 20 + l_total.Width = Root.Width * 0.25 + llenaCatalogo(True) +End Sub + +Sub lv_catalogos_ItemClick (Position As Int, Value As Object) + clv_productos.AsView.Visible = False + BUSCA.Text = "" + Dim cliente As C_Cliente = B4XPages.GetPage("Cliente") + Log($"value=${Value}"$) + If Value = "PROMOS" And cliente.cuenta <> "N" Then + entro = "3" + marca = "PROMOS" + tipo = "PROMOS" + Else if Value = "PROMOS" And cliente.cuenta = "N" Then + entro = "5" + B4XPages.ShowPage("Cliente") + End If + If Value = "PROMOS" Then + LogColor("Promos" & " | " & marca & " | " & tipo, Colors.red) + c2=B4XPages.MainPage.skmt.ExecQuery2("select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_PRECIO, CAT_GP_ALMACEN, CAT_GP_IMG from cat_gunaprod where CAT_GP_PRECIO > 0 AND CAT_GP_ALMACEN > 0 and CAT_GP_TIPOPROD = ? AND CAT_GP_TIPO = ? AND CAT_GP_SUBTIPO = ? AND CAT_GP_ID NOT IN (SELECT PE_PROID FROM PEDIDO WHERE PE_CLIENTE IN (Select cuenta from cuentaa) )", Array As String(Value, marca, tipo)) + Else + LogColor("Catalogo", Colors.red) + c2=B4XPages.MainPage.skmt.ExecQuery("select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_PRECIO, CAT_GP_ALMACEN, CAT_GP_IMG, CAT_GP_TIPOPROD, CAT_GP_INICIATIVA from cat_gunaprod where CAT_GP_PRECIO > 0 AND CAT_GP_ALMACEN > 0 and CAT_GP_TIPOPROD <> 'PROMOS' ") + End If + If Value = "CATALOGO" Then + lv_catalogos.Visible = False + lv_promos.Visible = False +' lv_catalogos.Clear + lfila.text = "CATALOGO" +' Dim ins As InputStream +' Dim bmp As Bitmap +' Dim jpeg() As Byte + Log("PGS") + ProgressDialogShow("Cargando catalogo ...") + Sleep(100) + Private inicioContador As String = DateTime.Now + llenaCatalogo(False) + clv_productos.AsView.Visible = True + Log("PGH") + LogColor("TIEMPO DE PROCESO DEL CATALOGO: " & ((DateTime.Now-inicioContador)/1000), Colors.Red) + ProgressDialogHide + c2.Close + Else + clv_productos.AsView.Visible = False + lv_promos.Visible = True + lv_catalogos.Visible = False + lv_promos.Clear + Dim label1 As Label + label1 = lv_promos.TwoLinesLayout.Label + label1.TextSize = 13 + label1.TextColor = Colors.Black + Dim label2 As Label + label2 = lv_promos.TwoLinesLayout.SecondLabel + label2.TextSize = 13 + label2.TextColor = Colors.Black + Dim label13 As Label + label13 = lv_promos.TwoLinesAndBitmap.Label + label13.TextSize = 13 + label13.TextColor = Colors.Black + Dim label14 As Label + label14 = lv_promos.TwoLinesAndBitmap.SecondLabel + label14.TextSize = 13 + label14.TextColor = Colors.Black + lfila.text = "PROMOS" +' Dim ins As InputStream +' Dim bmp As Bitmap +' Dim jpeg() As Byte + If c2.RowCount > 0 Then + For i=0 To c2.RowCount -1 + c2.Position=i +' jpeg = c2.GetBlob("CAT_GP_IMG") +' ins.InitializeFromBytesArray(jpeg, 0, jpeg.Length) +' bmp.Initialize2(ins) +' ListView1.AddTwoLinesAndBitmap(c2.GetString("CAT_GP_NOMBRE"),"# " & c2.GetString("CAT_GP_ALMACEN") & " $ " & c2.GetString("CAT_GP_PRECIO"),bmp) + + Private tm As Map = Subs.procesaPromocion(c2.GetString("CAT_GP_ID"), Subs.traeCliente) + Log($"TM=${tm}"$) + If tm.Get("status") = "ok" Then 'Solo muestrala si hay producto. + lv_promos.AddTwoLines(c2.GetString("CAT_GP_NOMBRE"),"# " & c2.GetString("CAT_GP_ALMACEN") & " $ " & c2.GetString("CAT_GP_PRECIO") & " F:" & tm.Get("mp").As(Map).Get("prodsFijosCant") & " V:" & tm.Get("mp").As(Map).Get("prodsVariablesCant")) + End If + Next + End If + c2.Close + End If + entro = "4" +' Else If entro = "4" Then +' Log("Entro = 4") +' B4XPages.MainPage.skmt.ExecNonQuery("delete from PROID") +' B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PROID VALUES (?)", Array As Object(Value)) +' Dim promos As C_Promos = B4XPages.GetPage("Promos") +' promos.laPromo = Subs.traeProdIdDeBD.Get("id") +' promos.elCliente = Subs.traeUsuarioDeBD +' B4XPages.ShowPage("Promos") +End Sub + +Sub lv_promos_ItemClick (Position As Int, Value As Object) + clv_productos.AsView.Visible = False + Dim cliente As C_Cliente = B4XPages.GetPage("Cliente") +' Log($"Entro=${entro}, value=${Value}, cuenta=${cliente.cuenta}"$) + If Value = "PROMOS" And cliente.cuenta <> "N" Then + entro = "3" + marca = "PROMOS" + tipo = "PROMOS" + Else if Value = "PROMOS" And cliente.cuenta = "N" Then + entro = "5" + B4XPages.ShowPage("Cliente") + End If + If entro = "3" Then + LogColor("Promos YYY", Colors.red) + c2=B4XPages.MainPage.skmt.ExecQuery2("select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_PRECIO, CAT_GP_ALMACEN, CAT_GP_IMG from cat_gunaprod where CAT_GP_PRECIO > 0 AND CAT_GP_ALMACEN > 0 and CAT_GP_TIPOPROD = ? AND CAT_GP_TIPO = ? AND CAT_GP_SUBTIPO = ? AND CAT_GP_ID NOT IN (SELECT PE_PROID FROM PEDIDO WHERE PE_CLIENTE IN (Select cuenta from cuentaa) )", Array As String(Value, marca, tipo)) + clv_productos.AsView.Visible = False + lv_promos.Visible = True + lv_catalogos.Visible = False + lv_promos.Clear + Dim label1 As Label + label1 = lv_promos.TwoLinesLayout.Label + label1.TextSize = 13 + label1.TextColor = Colors.Black + Dim label2 As Label + label2 = lv_promos.TwoLinesLayout.SecondLabel + label2.TextSize = 13 + label2.TextColor = Colors.Black + Dim label13 As Label + label13 = lv_promos.TwoLinesAndBitmap.Label + label13.TextSize = 13 + label13.TextColor = Colors.Black + Dim label14 As Label + label14 = lv_promos.TwoLinesAndBitmap.SecondLabel + label14.TextSize = 13 + label14.TextColor = Colors.Black + lfila.text = "PROMOS" +' Dim ins As InputStream +' Dim bmp As Bitmap +' Dim jpeg() As Byte + If c2.RowCount > 0 Then + For i=0 To c2.RowCount -1 + c2.Position=i +' jpeg = c2.GetBlob("CAT_GP_IMG") +' ins.InitializeFromBytesArray(jpeg, 0, jpeg.Length) +' bmp.Initialize2(ins) +' ListView1.AddTwoLinesAndBitmap(c2.GetString("CAT_GP_NOMBRE"),"# " & c2.GetString("CAT_GP_ALMACEN") & " $ " & c2.GetString("CAT_GP_PRECIO"),bmp) + + Private tm As Map = Subs.procesaPromocion(c2.GetString("CAT_GP_ID"), Subs.traeCliente) + If tm.Get("status") = "ok" Then 'Solo muestrala si hay producto. + lv_promos.AddTwoLines(c2.GetString("CAT_GP_NOMBRE"),"# " & c2.GetString("CAT_GP_ALMACEN") & " $ " & c2.GetString("CAT_GP_PRECIO") & " F:" & tm.Get("mp").As(Map).Get("prodsFijosCant") & " V:" & tm.Get("mp").As(Map).Get("prodsVariablesCant")) + End If + Next + End If + c2.Close + entro = "4" + Else If entro = "4" Then + Log("Entro = 4") + B4XPages.MainPage.skmt.ExecNonQuery("delete from PROID") + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PROID VALUES (?)", Array As Object(Value)) + Dim promos As C_Promos = B4XPages.GetPage("Promos") + promos.laPromo = Subs.traePromoIdDeBD.Get("id") + Log(promos.laPromo) + promos.elCliente = Subs.traeUsuarioDeBD + B4XPages.ShowPage("Promos") + End If +End Sub + +Sub llenaCatalogo(limpiar As Boolean) + Log("LlenaCatalogo") + If limpiar Then clv_productos.Clear + Private c2 As Cursor + c2 = B4XPages.MainPage.skmt.ExecQuery($"select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_PRECIO, CAT_GP_ALMACEN, CAT_GP_IMG, CAT_GP_TIPOPROD, CAT_GP_INICIATIVA from cat_gunaprod where CAT_GP_PRECIO > 0 AND CAT_GP_ALMACEN > 0 and CAT_GP_TIPOPROD <> 'PROMOS' + order by + Case CAT_GP_TIPOPROD when 'PRIORITARIO' THEN 0 + WHEN 'ESTRATEGICO' THEN 1 + WHEN 'COMPLEMENTARIO' then 2 + Else 3 + End, CAT_GP_NOMBRE"$) + +' Select cAT_GP_ID, cat_gp_tipoprod from cat_gunaprod order by +' Case CAT_GP_TIPOPROD +' When 'PRIORITARIO' THEN 0 +' WHEN 'ESTRATEGICO' THEN 1 +' WHEN 'CATALOGO REGULAR' then 2 +' Else 3 +' End + + Private bgColor, textColor As Int + If c2.RowCount > 0 And clv_productos.Size <> c2.RowCount Then + clv_productos.Clear : Log("limpiamos productos") + For i=0 To c2.RowCount -1 + c2.Position=i + If c2.GetString("CAT_GP_TIPOPROD") = "PRIORITARIO" Then + bgColor = Colors.RGB(255, 212, 163) 'naranja + Else If c2.GetString("CAT_GP_TIPOPROD") = "COMPLEMENTARIO" Then + bgColor = Colors.RGB(177, 200, 249)'azul + else If c2.GetString("CAT_GP_TIPOPROD") = "CATALOGO REGULAR" Then + bgColor = Colors.White + else If c2.GetString("CAT_GP_TIPOPROD") = "ESTRATEGICO" Then + bgColor = Colors.RGB(241, 255, 163) 'amarillo + End If + textColor = Colors.Black + clv_productos.Add(CreateListItem(c2.GetString("CAT_GP_NOMBRE"), c2.GetString("CAT_GP_PRECIO"), c2.GetString("CAT_GP_ALMACEN"), clv_productos.AsView.Width, 50dip, bmp, c2.GetString("CAT_GP_ID"), bgColor, textColor), c2.GetString("CAT_GP_NOMBRE")) + Next + End If + ponProdsEnCero + c2.Close +End Sub + +Private Sub B4XPage_CloseRequest As ResumableSub +' BACK key pressed +' Return True To close, False To cancel +' ya_entro ="0" : Log("ya_entro=0") + If lv_catalogos.visible = True Then + B4XPages.ShowPage("Cliente") + Return False + ELSE If l_info.Visible Then + l_info.Visible = False + Return False + else if lv_promos.visible Then + lv_promos.Visible = False + lv_catalogos.Visible = True + p_botonesVenta.Visible = False + l_total.Visible = False + l_totProds.Visible = False + Return False + else if clv_productos.AsView.Visible Then + clv_productos.AsView.Visible = False + lv_catalogos.Visible = True + p_botonesVenta.Visible = False + l_total.Visible = False + l_totProds.Visible = False + Return False + else If entro = "4" Then + entro = "3" + B4XPage_Appear + Return True + Else If entro = "3" Then + B4XPages.ShowPage("Cliente") + Return False + Else + B4XPages.ShowPage("Cliente") + Return False + End If +End Sub + +Sub BUSCA_TextChanged (Old As String, New As String) + q_buscar = "%" & BUSCA.Text & "%" + Log($"old=${Old}, new=|${New}|"$) + Private bgColor, textColor As Int + Private se As Cursor + If New.Length > 2 Or forzarbusqueda Then + forzarbusqueda = False + Log("searching") + se=B4XPages.MainPage.skmt.ExecQuery2("select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_ALMACEN, CAT_GP_PRECIO, CAT_GP_TIPOPROD, CAT_GP_IMG from cat_gunaprod where CAT_GP_PRECIO > 0 AND CAT_GP_ALMACEN > 0 and CAT_GP_NOMBRE like ? and CAT_GP_CLASIF <> ?", Array As String(q_buscar,"PROMOS")) ' order by CAT_GP_NOMBRE asc +' lv_catalogos.Clear + lv_catalogos.Visible = False + lv_promos.Visible = False + clv_productos.AsView.Visible = True + clv_productos.Clear + If se.RowCount > 0 Then + If se.RowCount > 50 Then ProgressDialogShow("Buscando productos") + Sleep(100) + For i=0 To se.RowCount -1 + se.Position=i + If se.GetString("CAT_GP_TIPOPROD") = "PRIORITARIO" Then + bgColor = Colors.RGB(255, 212, 163) 'naranja + Else If se.GetString("CAT_GP_TIPOPROD") = "COMPLEMENTARIO" Then + bgColor = Colors.RGB(177, 200, 249)'azul + else If se.GetString("CAT_GP_TIPOPROD") = "CATALOGO REGULAR" Then + bgColor = Colors.White + else If se.GetString("CAT_GP_TIPOPROD") = "ESTRATEGICO" Then + bgColor = Colors.RGB(241, 255, 163) 'amarillo + End If + textColor = Colors.Black + clv_productos.Add(CreateListItem(se.GetString("CAT_GP_NOMBRE"), se.GetString("CAT_GP_PRECIO"), se.GetString("CAT_GP_ALMACEN"), clv_productos.AsView.Width, 50dip, bmp, se.GetString("CAT_GP_ID"), bgColor, textColor), se.GetString("CAT_GP_NOMBRE")) + Next + If se.RowCount > 50 Then ProgressDialogHide + ponProdsEnCero + End If + se.Close + entro= "4" + Else If New.Length <= 2 Then + llenaCatalogo(True) + End If +End Sub + +Sub b_QR_Click + If ciclo = 1 Then + ciclo = 2 +' b_qr.Visible = False + ya_entro = "0" + 'entro = 3 + B4XPage_Appear + else if ciclo = 2 Then + ciclo = 3 + ' ya_entro = 0 + ya_entro = "0" + B4XPage_Appear +' b_qr.Visible = False + else if ciclo = 3 Then + ciclo = 4 + ' ya_entro = 0 + ya_entro = "0" + B4XPage_Appear +' b_qr.Visible = False + else if ciclo = 4 Then + ciclo = 5 + ' ya_entro = 0 + ya_entro = "0" + B4XPage_Appear +' b_qr.Visible = False + else if ciclo = 5 Then + ciclo = 1 + ' ya_entro = 0 + ya_entro = "0" + B4XPage_Appear +' b_qr.Visible = False + End If +End Sub + +'**************************************************************************** +'***************** PARA EL MAS/MENOS ************************************* +'**************************************************************************** +Sub CreateListItem(Text As String, precioU As String, inv As Int, Width As Int, Height As Int, img As Bitmap, prodId As String, bc As Int, tc As Int) As Panel + Dim p As B4XView = xui.CreatePanel("") + p.SetLayoutAnimated(0, 0, 0, Width, Height) + p.LoadLayout("prodItem") + p_prods.Color = bc + l_prodX.TextColor = tc + l_prodX.Text = Text&CRLF&"# " & inv & " $ " & precioU + l_prodX.Tag = $"ID: ${prodId}${CRLF}${Text}${CRLF}Precio: $$1.2{precioU}${CRLF}Inv: ${inv} pzs"$ +' l_pCant.Text = 0 + l_pCant.Tag = precioU&"|"&inv&"|"&prodId + et_pCant.Tag = precioU&"|"&inv&"|"&prodId +' Log(l_pCant.Tag) + et_pCant.BringToFront +' i_prod.Bitmap = img + Return p +End Sub + +Sub b_prodMenos_Click + etCantHasFocus = False + LogColor("b_prodMenos_Click", Colors.Magenta) + Dim index As Int = clv_productos.GetItemFromView(Sender) + Dim pnl0 As B4XView = clv_productos.GetPanel(index) + Dim pnl As B4XView = pnl0.GetView(0) + Dim laCant As B4XView = pnl.GetView(2).GetView(3) +' Log($"precio|stock:${laCant.tag}"$) + If laCant.Text = "" Then laCant.Text = 0 + laCant.Text = $"$1.0{laCant.Text-1}"$ + If laCant.Text < 0 Then laCant.Text = 0 +' Dim chk As B4XView = pnl.GetView(2) + cuentaProds +End Sub + +Sub b_prodMas_Click + etCantHasFocus = False + LogColor("b_prodMas_Click", Colors.Magenta) + Dim index As Int = clv_productos.GetItemFromView(Sender) + Dim pnl0 As B4XView = clv_productos.GetPanel(index) + Dim pnl As B4XView = pnl0.GetView(0) + Dim laCant As B4XView = pnl.GetView(2).GetView(3) +' Log($"precio|stock:${laCant.tag}"$) +' Log($"Indice: ${index}, cant:${laCant.Text+1}, precioU: ${laCant.tag}"$) + Dim esteTag As List = Regex.Split("\|", laCant.Tag) +' Log(laCant.Tag&"|"&esteTag) + If laCant.Text = "" Then laCant.Text = 0 + If laCant.Text + 1 <= esteTag.get(1) Then + laCant.Text = $"$1.0{laCant.Text+1}"$ + cuentaProds + End If +' Log($"Total Prods: ${totalProds}, Total Compra: $$1.2{totalCompra}"$) +End Sub + +Private Sub et_pCant_TextChanged (Old As String, New As String) +' LogColor($"txt changed: ${Old}|${New}, hasfocus=${etCantHasFocus}"$,Colors.Magenta) + If Not(Old = "0" And New = "") And etCantHasFocus Then cuentaProds +End Sub + +Sub cuentaProds + totalProds = 0 + totalCompra = 0 +' Private inicioContador As String = DateTime.Now + For i = 0 To clv_productos.GetSize - 1 + Private p0 As B4XView = clv_productos.GetPanel(i) + Private p As B4XView = p0.GetView(0) + Private cant1 As B4XView = p.GetView(2).GetView(3) + If cant1.Text = "" Then cant1.Text = 0 +' Private cant2 As Int = 0 +' If cant1.Text <> "" Then cant2 = cant1.Text + totalProds = totalProds + cant1.Text + Private esteTag As List = Regex.Split("\|", cant1.Tag) + If cant1.Text > esteTag.Get(1) Then cant1.Text = esteTag.Get(1) + If cant1.Text > 0 Then + Log(esteTag.Get(2) & "|" & cant1.Text) + totalCompra = totalCompra + (esteTag.get(0) * cant1.text) + Log($"Cant: ${cant1.Text}, Suma: ${totalCompra}"$) + Private m As Map + m=CreateMap("cant":cant1.Text, "precio":esteTag.get(0)) + prodsMap.Put(esteTag.Get(2), m) + Else + prodsMap.Remove(esteTag.Get(2)) + End If + l_total.Visible = True + l_totProds.Visible = True + l_total.Text = $"Total: $$1.2{totalCompra}"$ + l_totProds.text = $"Prods: ${totalProds}"$ + Next +' LogColor("TIEMPO cuentaProds -=" & ((DateTime.Now-inicioContador)/1000), Colors.Red) + LogColor(prodsMap, Colors.blue) + p_botonesVenta.Visible = True + Log($"Total Prods: ${totalProds}, Total Compra: $$1.2{totalCompra}"$) +End Sub + +Sub ponProdsEnCero + Private inicioContador As String = DateTime.Now + Private prodsVendidosList As List + prodsVendidosList.Initialize + Private pr As Cursor = B4XPages.MainPage.skmt.ExecQuery($"Select PE_PROID from PEDIDO where PE_CLIENTE='${Subs.traeCliente}'"$) + If pr.RowCount > 0 Then + pr.Position = 0 + For i = 0 To pr.RowCount - 1 + pr.Position = i + prodsVendidosList.Add(pr.GetString("PE_PROID")) + Next + End If + pr.Close + Log("prodsVendidos="&prodsVendidosList) + For i = 0 To clv_productos.GetSize - 1 + Private p0 As B4XView = clv_productos.GetPanel(i) + Private lVendido As B4XView = p0.GetView(1) 'Label l_vendido + Private pProds As B4XView = p0.GetView(0) 'Panel p_prods + Private cant1 As B4XView = pProds.GetView(2).GetView(3) + Private x() As String = Regex.Split("\|", cant1.tag) 'El ultimo dato de cant1.tag es el id del producto. + If prodsVendidosList.IndexOf(x(x.Length-1)) > -1 Then 'Revisamos si el producto es en la tabla "PEDIDO". + lVendido.Visible = True + pProds.GetView(2).As(Panel).Visible = False + Else + lVendido.Visible = False + pProds.GetView(2).As(Panel).Visible = True + End If + cant1.Text = 0 + Next + LogColor("TIEMPO DE PROCESO DEL PONEMOSENCERO: " & ((DateTime.Now-inicioContador)/1000), Colors.Red) + Log("Ponems en CERO") +End Sub + +Private Sub et_pCant_FocusChanged (HasFocus As Boolean) +' LogColor($"focus changed=${HasFocus}"$, Colors.Magenta) + etCantHasFocus = HasFocus + cuentaProds +End Sub + +Private Sub b_terminar1_Click + Log("b_terminar1_Click") + cuentaProds + Private p1 As Map + For Each p As String In prodsMap.Keys + p1 = prodsMap.Get(p) + Log(p & "|" & p1) + Private pn As String = Subs.traeProdNombre(p) + Subs.guardaProducto(Subs.traeAlmacen, p1.Get("precio"), p1.Get("cant"), pn, p, Subs.traeCliente, Subs.traeFecha, Subs.traeUsuarioDeBD, Subs.traeRuta, 0, B4XPages.MainPage.tipo_venta) + Next + ya_entro = "0" : Log("ya_entro=1") + lv_promos.Visible = False + clv_productos.AsView.Visible = False + lv_catalogos.Visible = True + Log("Terminar") +' clv_productos.Clear + ponProdsEnCero + prodsMap.Initialize + B4XPages.ShowPage("Cliente") +End Sub + +Private Sub b_continuar_Click + Log("b_continuar_Click") + cuentaProds + Private p1 As Map + For Each p As String In prodsMap.Keys + p1 = prodsMap.Get(p) + Log(p & "|" & p1) + Private pn As String = Subs.traeProdNombre(p) + If pn <> "N/A" Then + Subs.guardaProducto(Subs.traeAlmacen, p1.Get("precio"), p1.Get("cant"), pn, p, Subs.traeCliente, Subs.traeFecha, Subs.traeUsuarioDeBD, Subs.traeRuta, 0, B4XPages.MainPage.tipo_venta) + End If + Next + Log("promos-inv, prods-inv, cat-vis") + lv_promos.Visible = False + clv_productos.AsView.Visible = False + lv_catalogos.Visible = True +' clv_productos.Clear + ponProdsEnCero + prodsMap.Initialize + Log("Continuar") +' Activity_KeyPress(KeyCodes.KEYCODE_BACK) +End Sub + +Private Sub l_prodX_LongClick + Log("longclic = "&Sender.as(Label).tag) + l_info.Text = Sender.as(Label).tag + l_info.Visible = True +End Sub + +Private Sub l_info_Click + l_info.Visible = False +End Sub + +Private Sub lv_promos_ItemLongClick (Position As Int, Value As Object) + Log("Promo longclic = "&Value) + Private id As String = "" + Dim c As Cursor = B4XPages.MainPage.skmt.ExecQuery($"select CAT_GP_ID from cat_gunaprod where CAT_GP_TIPO = 'PROMOS' and CAT_GP_NOMBRE = '${Value}'"$) + If c.RowCount > 0 Then + c.Position = 0 + id = c.GetString("CAT_GP_ID") + End If + l_info.Text = $"ID: ${id}${CRLF}${Value}"$ + l_info.Visible = True +End Sub + +Private Sub b_buscar_Click + forzarbusqueda = True + BUSCA_TextChanged("","") +End Sub \ No newline at end of file diff --git a/B4A/C_Promos.bas b/B4A/C_Promos.bas new file mode 100644 index 0000000..6a1170c --- /dev/null +++ b/B4A/C_Promos.bas @@ -0,0 +1,398 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11.5 +@EndOfDesignText@ +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI + Private l_promoDesc As Label + Private lv_prodsFijos As ListView + Private clv_prodsVariabes As CustomListView + Private l_prodsFijos As Label + Private l_prodsVariables As Label + Private i_prod As ImageView + Private l_prodX As Label + Private b_prodMenos As Button + Private et_pCant As EditText + Private b_prodMas As Button + Private l_pCant As Label + Dim totalProds As Int = 0 + Dim prodsVarReq As Int = 0 + Dim prodsVarReq2 As Int = 0 + Dim totalCompra As Float = 0 + Dim prodsFijosTot As Float = 0 + Dim tpf As Int = 0 + Dim tpf2 As Int = 0 + Dim maxCantPromos As Int = 1 + Private l_totProds As Label + Private l_total As Label + Private b_terminar1 As Button + Private p_promociones As Panel + Dim prodsIds, prodsCants, prodsPrecios, prodsIds2, prodsCants2, prodsPrecios2 As List + Dim estaPromo, esteCliente As String + Private b_promoMas As Button + Private b_promoMenos As Button + Private et_promoCant As EditText + Private l_promosCant As Label + Private b_continuar As Button + Private p_prodsVariables As Panel + Dim laPromo = "", elCliente = "" As String +End Sub + +'You can add more parameters here. +Public Sub Initialize As Object + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + Root = Root1 + 'load the layout to Root + Root.LoadLayout("promociones") + p_promociones.Top=0 + p_promociones.Left=0 + p_promociones.Height=Root.Height + p_promociones.Width=Root.Width + b_terminar1.Left = Root.Width - (b_terminar1.Width + 10) + b_continuar.Left = Root.Width - b_terminar1.Width - (b_continuar.Width + 20) +End Sub + +Sub B4XPage_Appear + prodsIds.Initialize + prodsCants.Initialize + prodsPrecios.Initialize + prodsIds2.Initialize + prodsCants2.Initialize + prodsPrecios2.Initialize + Log($"laPromo=${laPromo}, el cliente=${elCliente}"$) + If laPromo <> "" Then muestraPromo(laPromo, elCliente) +End Sub +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. + +Sub muestraPromo(promo As String, cliente As String) + Private thisLog As Boolean = False + Log(promo) + estaPromo = promo + esteCliente = cliente + Private mp As Map = Subs.traePromo(promo, cliente) + Private prodsPromo As Map = mp.Get("productos") 'Los productos de la promoción. + Private invDispPromo As Map = Subs.traemosInventarioDisponibleParaPromo(promo) +' If thisLog Then Log($"invDispPromo=${invDispPromo}"$) + Log("Max promos por inv de prods FIJOS: " & Subs.revisaMaxPromosProdsFijosPorInventario(mp)) + Log("Max promos por inv de prods VARIABLES: " & Subs.revisaMaxPromosProdsVariablesPorInventario(mp)) + maxCantPromos = Subs.revisaMaxPromosProdsVariablesPorInventario(mp) + et_promoCant.Text = 1 + l_promosCant.text = "Max promos: " & maxCantPromos + Private cs As CSBuilder + cs.Initialize + If thisLog Then Log(mp) + If thisLog Then Log(prodsPromo) + 'Ponemos la promo y descripción. +' Dim desc As String = $"Promoción: ${promo}${CRLF}${mp.Get("descripcion")}"$ +' Dim desc As String = cs.append("Promocion: ").Color(Colors.RGB(100,149,237)).Append(promo).pop.append(CRLF).Append(mp.Get("descripcion")).Popall + l_promoDesc.Text = cs.Color(Colors.RGB(100,149,237)).append("Promocion: ").pop.append(CRLF).Append(promo).append(CRLF).Append(mp.Get("descripcion")).Popall + prodsFijosTot = 0 + 'Ponemos el texto en las etiquetas de la cantidad de productos. +' Dim pf As List = mp.Get("prodsFijos") + Dim pv As List = mp.Get("prodsVariables") + If thisLog Then Log(mp) + tpf = 0 + For Each pfp As Int In mp.Get("prodsFijosPiezas").As(List) + tpf = tpf + pfp + Next + tpf2 = tpf +' tpf = tpf * maxCantPromos + l_prodsFijos.Text = $"Productos fijos (${tpf})"$ + prodsVarReq = mp.Get("prodsVariablesRequeridos") + prodsVarReq2 = prodsVarReq + l_prodsVariables.Text = $"Productos variables requeridos: ${prodsVarReq}"$ + If prodsVarReq = 0 Then + p_prodsVariables.Visible = False + Else + p_prodsVariables.Visible = True + End If + 'Llenamos el listview con los productos fijos. + Dim label1 As Label + label1 = lv_prodsFijos.SingleLineLayout.Label + label1.TextSize = 13 + label1.TextColor = Colors.black + lv_prodsFijos.SingleLineLayout.ItemHeight = 30dip + lv_prodsFijos.Clear +' If pf.Size < 1 Then pf.Add("Sin productos fijos.") + lv_prodsFijos.Clear + agregaFijosALista(mp, True) + If thisLog Then Log("Total prods fijos = " & prodsFijosTot) +' If thisLog Then Log("======="&prodsMap) + l_totProds.text = $"Productos: ${tpf}"$ + l_total.Text = $"Total: $$1.2{prodsFijosTot}"$ +' Dim ins As InputStream +' Dim bmp As Bitmap +' Dim jpeg() As Byte + + 'Llenamos el listview con los productos variables. + If thisLog Then Log(pv) + If thisLog Then Log("invDisp=" & invDispPromo) + clv_prodsVariabes.Clear + For Each p As String In pv + If invDispPromo.ContainsKey(p) Then 'Si no esta en la lista de productos con inventario no lo mostramos. +' c2.Position=i +' jpeg = c2.GetBlob("CAT_GP_IMG") +' ins.InitializeFromBytesArray(jpeg, 0, jpeg.Length) +' bmp.Initialize2(ins) + Private thisProd As Map = prodsPromo.Get(p) + If thisLog Then Log(thisProd) + clv_prodsVariabes.Add(CreateListItem(Subs.traeProdNombre(p)&CRLF&"Hay " & invDispPromo.Get(p) & " $" & thisProd.Get("precio"), thisProd.Get("precio"), invDispPromo.Get(p), clv_prodsVariabes.AsView.Width, 50dip, Null, p), p) + End If + Next + b_terminar1.Visible = False + b_continuar.Visible = False + cuentaProds +End Sub + +'Agregamos los productos fijos a una lista para despues meterlos en el pedido. +Sub agregaFijosALista(mp As Map, addListItem As Boolean) + Private thisLog As Boolean = False + Private cont As Int = 0 + prodsFijosTot = 0 + Dim pf As List = mp.Get("prodsFijos") + If pf.Size < 1 Then pf.Add("Sin productos fijos.") +' Private m As Map +' prodsMap.Put(estaPromo, CreateMap("cant":1, "precio":0)) +' prodsIds.Add(estaPromo) + prodsIds.clear + prodsCants.clear + prodsPrecios.clear + prodsIds.Add(estaPromo) + prodsCants.Add(et_promoCant.text.As(Int)) + prodsPrecios.Add(0) + For Each p As String In pf + Log($"cont=${cont}, mp=${mp}"$) + If mp.Get("prodsFijosPiezas").As(List).Size > 0 Then + Private tpi As String = mp.Get("prodsFijosPiezas").As(List).Get(cont) + Else + Private tpi As String = 0 + End If + If mp.Get("prodsFijosPrecios").As(List).Size > 0 Then + Private tpr As String = mp.Get("prodsFijosPrecios").As(List).Get(cont) + Else + Private tpr As String = 0 + End If + prodsFijosTot = prodsFijosTot + (tpi * tpr) + If thisLog Then Log("|"&tpi&"|"&p) + Private ntpi As Int = tpi * et_promoCant.text + If addListItem And tpi > 0 Then lv_prodsFijos.AddSingleLine(ntpi & " " & Subs.traeProdNombre(p) & " - $" & tpr) + cont = cont+1 +' m=CreateMap("cant":tpi, "precio":tpr) +' prodsMap.Put(p, m) + prodsIds.Add(p) + prodsCants.Add(tpi.As(Int)*et_promoCant.text.As(Int)) + prodsPrecios.Add(tpr) '*et_promoCant.text.As(Int) + Next +End Sub + +Sub CreateListItem(Text As String, precioU As String, inv As Int, Width As Int, Height As Int, img As Bitmap, prodId As String) As Panel 'ignore + Dim p As B4XView = xui.CreatePanel("") + p.SetLayoutAnimated(0, 0, 0, Width, Height) + p.LoadLayout("prodItem") + l_prodX.TextSize = 12 + l_prodX.Text = Text +' l_pCant.Text = 0 + l_pCant.Tag = precioU&"|"&inv&"|"&prodId + et_pCant.Tag = precioU&"|"&inv&"|"&prodId + et_pCant.BringToFront +' i_prod.Bitmap = img + Return p +End Sub + +Sub b_prodMenos_Click + Dim index As Int = clv_prodsVariabes.GetItemFromView(Sender) + Dim pnl0 As B4XView = clv_prodsVariabes.GetPanel(index) + Dim pnl As B4XView = pnl0.GetView(0) +' Dim laCant As B4XView = pnl.GetView(5) + Dim laCant As B4XView = pnl.GetView(2).GetView(3) +' Log($"precio|stock:${laCant.tag}"$) + laCant.Text = $"$1.0{laCant.Text-1}"$ + If laCant.Text < 0 Then laCant.Text = 0 +' Dim chk As B4XView = pnl.GetView(2) + cuentaProds +' l_total.Text = $"Total Compra: $$1.2{totalCompra}"$ +' l_totProds.text = $"Total Productos: ${totalProds}"$ +End Sub + +Sub b_prodMas_Click + If totalProds < prodsVarReq + tpf Then + Dim index As Int = clv_prodsVariabes.GetItemFromView(Sender) + Dim pnl0 As B4XView = clv_prodsVariabes.GetPanel(index) + Dim pnl As B4XView = pnl0.GetView(0) +' Dim laCant As B4XView = pnl.GetView(5) + Dim laCant As B4XView = pnl.GetView(2).GetView(3) +' Log($"precio|stock:${laCant.tag}"$) +' Log($"Indice: ${index}, cant:${laCant.Text+1}, precioU: ${laCant.tag}"$) + Dim esteTag As List = Regex.Split("\|", laCant.Tag) +' Log(esteTag) + If laCant.Text + 1 <= esteTag.get(1) Then + laCant.Text = $"$1.0{laCant.Text+1}"$ + cuentaProds + End If + End If +' Log($"Total Prods: ${totalProds}, Total Compra: $$1.2{totalCompra}"$) +' l_total.Text = $"Total Compra: $$1.2{totalCompra}"$ +' l_totProds.text = $"Total Productos: ${totalProds}"$ +End Sub + +Private Sub et_pCant_TextChanged (Old As String, New As String) +' LogColor("txt changed",Colors.Magenta) + cuentaProds +End Sub + +Sub cuentaProds + Log("=====================================================") + Log("Inicia cuentaProds") + Private thisLog As Boolean = False + If thisLog Then LogColor($"ProdsFijos=${tpf}, totalProds=${totalProds}, totalCompra=${totalCompra}"$, Colors.Red) + prodsIds2.Clear + prodsCants2.Clear + prodsPrecios2.Clear + lv_prodsFijos.Clear + agregaFijosALista(Subs.traePromo(estaPromo, esteCliente), True) +' Log(prodsIds) + Private tcpf As Float = 0 'Total de compra de productos fijos. + For pf = 0 To prodsIds.Size - 1 + If thisLog Then Log($"${tcpf} + ${prodsCants.Get(pf)} * ${prodsPrecios.Get(pf)} = ${(prodsPrecios.Get(pf) * prodsCants.Get(pf))}"$) + tcpf = tcpf + (prodsPrecios.Get(pf) * prodsCants.Get(pf)) + Next +' Log("Total compra pordsFijos = " & tcpf) + totalCompra = tcpf + totalProds = tpf 'Cantidad total de productos fijos. + For i = 0 To clv_prodsVariabes.GetSize - 1 + Private p0 As B4XView = clv_prodsVariabes.GetPanel(i) + Private p As B4XView = p0.GetView(0) + Private cant1 As B4XView = p.GetView(2).GetView(3) + If cant1.Text = "" Then cant1.Text = 0 + totalProds = totalProds + cant1.Text + Private esteTag As List = Regex.Split("\|", cant1.Tag) + If cant1.Text > esteTag.Get(1) Then cant1.Text = esteTag.Get(1) + If cant1.Text > 0 Then + Log(esteTag.Get(2) & "|" & cant1.Text) + totalCompra = totalCompra + (esteTag.get(0) * cant1.text) + If thisLog Then Log($"Cant: ${cant1.Text}, Suma: ${totalCompra}"$) + prodsIds2.Add(esteTag.Get(2)) + prodsCants2.Add(cant1.Text) + prodsPrecios2.Add(esteTag.get(0)) + End If +' Log(esteTag) +' Log($"Cant: ${cant1.Text}, Suma: ${totalCompra}"$) +' totalCompra = totalCompra * et_promoCant.Text +' totalProds = totalProds * et_promoCant.Text + + l_total.Text = $"Total: $$1.2{totalCompra}"$ + l_totProds.text = $"Productos: ${totalProds}"$ + Next + If thisLog Then Log($"Total Prods: ${totalProds}, Total: $$1.2{totalCompra}"$) + l_total.Text = $"Total: $$1.2{totalCompra}"$ + l_totProds.text = $"Productos: ${totalProds}"$ + If totalProds < prodsVarReq + tpf Or totalProds > prodsVarReq + tpf Then +' Log("INCOMPLETA") + b_terminar1.Visible = False + b_continuar.Visible = False + Else +' Log("COMPLETA") + b_terminar1.Visible = True + b_continuar.Visible = True + End If + If thisLog Then LogColor($"${prodsIds}${CRLF}${prodsCants}${CRLF}${prodsPrecios}"$, Colors.blue) + If thisLog Then LogColor($"${prodsIds2}${CRLF}${prodsCants2}${CRLF}${prodsPrecios2}"$, Colors.Magenta) + LogColor($"Total Prods: ${totalProds}, Total: $$1.2{totalCompra}"$, Colors.Blue) +End Sub + +Private Sub et_pCant_FocusChanged (HasFocus As Boolean) + LogColor("focus changed", Colors.Magenta) + cuentaProds +End Sub + +Private Sub b_promoMenos_Click + If et_promoCant.Text > 1 Then + et_promoCant.Text = et_promoCant.Text.As(Int) - 1 + End If + l_prodsFijos.Text = $"Productos fijos (${tpf2 * et_promoCant.Text.As(Int)})"$ + l_prodsVariables.Text = $"Productos variables requeridos: ${prodsVarReq2 * et_promoCant.Text.As(Int)}"$ + tpf = tpf2 * et_promoCant.Text.As(Int) + prodsVarReq = prodsVarReq2 * et_promoCant.Text.As(Int) + Log($"Max promos=${et_promoCant.Text.As(Int)}, Prods fijos=${tpf}, "$) + cuentaProds +End Sub + +Private Sub b_promoMas_Click + If et_promoCant.Text < maxCantPromos Then + et_promoCant.Text = et_promoCant.Text.As(Int) + 1 + l_prodsFijos.Text = $"Productos fijos (${tpf2 * et_promoCant.Text.As(Int)})"$ + l_prodsVariables.Text = $"Productos variables requeridos: ${prodsVarReq2 * et_promoCant.Text.As(Int)}"$ + tpf = tpf2 * et_promoCant.Text.As(Int) + prodsVarReq = prodsVarReq2 * et_promoCant.Text.As(Int) + Log($"Max promos=${et_promoCant.Text.As(Int)}, Prods fijos=${tpf}, "$) + End If + If et_promoCant.text > maxCantPromos Then et_promoCant.Text = maxCantPromos + cuentaProds +End Sub + +Private Sub b_terminar1_Click + cuentaProds + Log("====================================================================") +' Log($"${prodsIds}${CRLF}${prodsCants}${CRLF}${prodsPrecios}"$) + For t = 0 To prodsIds.Size - 1 'Guardamos los productos fijos de la promocion en pedido. + Private pn As String = Subs.traeProdNombre(prodsIds.Get(t)) + If prodsCants.Get(t) > 0 Then Subs.guardaProducto(estaPromo, prodsPrecios.Get(t), prodsCants.Get(t), pn, prodsIds.Get(t), Subs.traeCliente, Subs.traeFecha, Subs.traeUsuarioDeBD, Subs.traeRuta, 0, B4XPages.MainPage.tipo_venta) + Next + For t = 0 To prodsIds2.Size - 1 'Guardamos los productos variables de la promocion en pedido. + Private pn As String = Subs.traeProdNombre(prodsIds2.Get(t)) + Subs.guardaProducto(estaPromo, prodsPrecios2.Get(t), prodsCants2.Get(t), pn, prodsIds2.Get(t), Subs.traeCliente, Subs.traeFecha, Subs.traeUsuarioDeBD, Subs.traeRuta, 0, B4XPages.MainPage.tipo_venta) + Next + lv_prodsFijos.Clear + B4XPages.MainPage.bTerminarClicked = True + B4XPages.ShowPage("Cliente") +End Sub + +Private Sub b_continuar_Click + cuentaProds + Log("====================================================================") + Log($"${prodsIds}${CRLF}${prodsCants}${CRLF}${prodsPrecios}"$) + For t = 0 To prodsIds.Size - 1 'Guardamos los productos fijos de la promocion en pedido. + Private pn As String = Subs.traeProdNombre(prodsIds.Get(t)) + LogColor(pn,Colors.Red) + If pn <> "N/A" Then + Subs.guardaProducto(estaPromo, prodsPrecios.Get(t), prodsCants.Get(t), pn, prodsIds.Get(t), Subs.traeCliente, Subs.traeFecha, Subs.traeUsuarioDeBD, Subs.traeRuta, 0, B4XPages.MainPage.tipo_venta) + End If + Next + Log(prodsIds2) + For t = 0 To prodsIds2.Size - 1 'Guardamos los productos variables de la promocion en pedido. + Private pn As String = Subs.traeProdNombre(prodsIds2.Get(t)) + LogColor(pn,Colors.Green) + If pn <> "N/A" Then + Subs.guardaProducto(estaPromo, prodsPrecios2.Get(t), prodsCants2.Get(t), pn, prodsIds2.Get(t), Subs.traeCliente, Subs.traeFecha, Subs.traeUsuarioDeBD, Subs.traeRuta, 0, B4XPages.MainPage.tipo_venta) + End If + Next + lv_prodsFijos.Clear +' Activity_KeyPress(KeyCodes.KEYCODE_BACK) +' CallSubDelayed2(productos, "Activity_KeyPress", KeyCodes.KEYCODE_BACK) + Private prodspage As C_Productos + If prodspage.IsInitialized Then + prodspage.lv_catalogos.Visible = True + prodspage.lv_promos.Visible = False + prodspage.clv_productos.AsView.Visible = False + End If + B4XPages.MainPage.bTerminarClicked = True + B4XPages.ShowPage("productos") +End Sub + +'Sub Activity_KeyPress (key As Int) As Boolean 'ignore +' ' BACK key pressed +' Log("Keypress") +' If key=KeyCodes.KEYCODE_BACK Then +' Log("BACK") +' Return False +' End If +' Return False +' ' Returning False signals the system to handle the key +'End Sub \ No newline at end of file diff --git a/B4A/C_TicketsDia.bas b/B4A/C_TicketsDia.bas new file mode 100644 index 0000000..f4aa44c --- /dev/null +++ b/B4A/C_TicketsDia.bas @@ -0,0 +1,153 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11.5 +@EndOfDesignText@ +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore + Private p_ticketsdia As Panel + + Dim c As Cursor + Dim S As Cursor + Dim ruta As String + Dim ListView1 As ListView + Dim b_noventa As Button + Dim nombre_boton As String + Dim STIME As String +End Sub + +'You can add more parameters here. +Public Sub Initialize As Object + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + Root = Root1 + 'load the layout to Root + ruta = File.DirInternal + Root.LoadLayout("ticketsdia") + ListView1.Left = Round(Root.Width/2)-(ListView1.Width/2) + If File.Exists(ruta, "kmt.db") = False Then + File.Copy(File.DirAssets, "kmt.db", ruta, "kmt.db") + End If + c=B4XPages.MainPage.skmt.ExecQuery("select PC_CLIENTE,PC_MONTO,PC_NOART FROM PEDIDO_CLIENTE ORDER BY PC_FECHA asc") + ListView1.Clear + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim label1 As Label + label1 = ListView1.TwoLinesLayout.Label + label1.TextSize = 10 + label1.TextColor = Colors.Black + Dim label2 As Label + label2 = ListView1.TwoLinesLayout.SecondLabel + label2.TextSize = 15 + label2.TextColor = Colors.Blue + ListView1.AddTwoLines(c.GetString("PC_CLIENTE"),"Cantidad #"& c.GetString("PC_NOART")& " SubTotal $"& c.GetString("PC_MONTO")) + Next + End If +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. + +Sub B4XPage_Appear + nombre_boton = "NOVENTA" + c=B4XPages.MainPage.skmt.ExecQuery("select PC_CLIENTE,PC_MONTO,PC_NOART,(select CAT_CL_NOMBRE from kmt_info where cat_cl_codigo = pc_cliente ) as NOMBRE FROM PEDIDO_CLIENTE ORDER BY PC_FECHA asc") + ListView1.Clear + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim label1 As Label + label1 = ListView1.TwoLinesLayout.Label + label1.TextSize = 15 + label1.TextColor = Colors.Black + Dim label2 As Label + label2 = ListView1.TwoLinesLayout.SecondLabel + label2.TextSize = 10 + label2.TextColor = Colors.Blue + ListView1.AddTwoLines(c.GetString("PC_CLIENTE"),c.GetString("NOMBRE") &" Cantidad #"& c.GetString("PC_NOART")& " SubTotal $"& c.GetString("PC_MONTO")) + Next + End If + c.Close +End Sub + +Sub Regresar_Click + B4XPages.ShowPage("cliente") +End Sub +Sub Activity_KeyPress (key As Int) As Boolean + ' BACK key pressed + If key=KeyCodes.KEYCODE_BACK Then + ' I want to capture the key here so I return True + B4XPages.ShowPage("principal") + 'Return True + End If + ' Returning False signals the system to handle the key + Return False +End Sub +Sub ListView1_ItemLongClick (Position As Int, Value As Object) + B4XPages.MainPage.skmt.ExecNonQuery("delete from CUENTAA") + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CUENTAA VALUES (?)", Array As Object(Value)) + DateTime.TimeFormat = "HHmmss" + STIME=DateTime.Time(DateTime.Now) + s=B4XPages.MainPage.skmt.ExecQuery("SELECT COUNT(*) AS CUANTOS FROM HIST_STAY_STORE WHERE HSS_IN = 0 AND HSS_CODIGO In (select cuenta from cuentaa)") + s.Position = 0 + If s.GetString("CUANTOS") = 1 Then + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE HIST_STAY_STORE set HSS_IN = ? where HSS_IN = 0 AND HSS_CODIGO In (select cuenta from cuentaa)", Array As Object(STIME)) + Else + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_STAY_STORE(HSS_CODIGO, HSS_IN , HSS_OUT , HSS_TOT) VALUES (?,0,0,0)", Array As Object (Value)) + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE HIST_STAY_STORE set HSS_IN = ? where HSS_IN = 0 AND HSS_CODIGO In (select cuenta from cuentaa)", Array As Object(STIME)) + End If + DateTime.TimeFormat = "HH:mm:ss" + B4XPages.ShowPage("cliente") +End Sub + +Sub b_noventa_Click + If nombre_boton = "NOVENTA" Then + nombre_boton = "VENTA" + b_noventa.Text ="VENTA" + c=B4XPages.MainPage.skmt.ExecQuery("select NV_CLIENTE,NV_MOTIVO,NV_COMM, (select CAT_CL_NOMBRE from kmt_info where cat_cl_codigo = NV_CLIENTE ) as NOMBRE FROM NOVENTA ORDER BY NV_CLIENTE asc") + ListView1.Clear + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim label1 As Label + label1 = ListView1.TwoLinesLayout.Label + label1.TextSize = 15 + label1.TextColor = Colors.Black + Dim label2 As Label + label2 = ListView1.TwoLinesLayout.SecondLabel + label2.TextSize = 10 + label2.TextColor = Colors.Blue + ListView1.AddTwoLines(c.GetString("NV_CLIENTE"),c.GetString("NOMBRE") &" Motivo #"& c.GetString("NV_MOTIVO")& " Comentario $"& c.GetString("NV_COMM")) + Next + End If + Else + nombre_boton = "NOVENTA" + b_noventa.Text ="NO VENTA" + c=B4XPages.MainPage.skmt.ExecQuery("select PC_CLIENTE,PC_MONTO,PC_NOART,(select CAT_CL_NOMBRE from kmt_info where cat_cl_codigo = pc_cliente ) as NOMBRE FROM PEDIDO_CLIENTE ORDER BY PC_FECHA asc") + ListView1.Clear + + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim label1 As Label + label1 = ListView1.TwoLinesLayout.Label + label1.TextSize = 15 + label1.TextColor = Colors.Black + Dim label2 As Label + label2 = ListView1.TwoLinesLayout.SecondLabel + label2.TextSize = 10 + label2.TextColor = Colors.Blue + ListView1.AddTwoLines(c.GetString("PC_CLIENTE"),c.GetString("NOMBRE") &" Cantidad #"& c.GetString("PC_NOART")& " SubTotal $"& c.GetString("PC_MONTO")) + Next + End If + c.Close + End If +End Sub + +Private Sub p_ticketsdia_Click + +End Sub \ No newline at end of file diff --git a/B4A/C_UpdateAvailable.bas b/B4A/C_UpdateAvailable.bas new file mode 100644 index 0000000..8bd6e51 --- /dev/null +++ b/B4A/C_UpdateAvailable.bas @@ -0,0 +1,73 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11.5 +@EndOfDesignText@ +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore +End Sub + +'You can add more parameters here. +Public Sub Initialize As Object + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + Root = Root1 + 'load the layout to Root + Root.Color = Colors.Transparent +End Sub + +Sub B4XPage_Appear + Try + Do While Not(CanRequestPackageInstalls) + MsgboxAsync($"Por favor permita que ${Application.PackageName} instale actualizaciones"$, "Instalar actualización") + Wait For Msgbox_Result(Result As Int) + Dim in As Intent + in.Initialize("android.settings.MANAGE_UNKNOWN_APP_SOURCES", "package:" & Application.PackageName) + StartActivity(in) + Loop + Catch + Log("updateAvailable() Error - " & LastException.Message) + End Try + If appUpdater.newApp.update Then + ofreceActualizacion + Else + sinActualizacion + End If +End Sub + +'//////////////////////////////////////////////////////////////////////////////////////////// +'//// Esta es una actividad usada por el servicio appUpdater para mostrar notificaciones +'//// cuando hay alguna actualizacion de apk. +'//////////////////////////////////////////////////////////////////////////////////////////// + + +public Sub CanRequestPackageInstalls As Boolean + ' // https://www.b4x.com/android/forum/threads/version-safe-apk-installation.87667/#content + Dim ctxt As JavaObject + ctxt.InitializeContext + Dim PackageManager As JavaObject = ctxt.RunMethod("getPackageManager", Null) + Return PackageManager.RunMethod("canRequestPackageInstalls", Null) +End Sub + +Sub ofreceActualizacion + If Msgbox2(appUpdater.newApp.newMsg,"Actualización disponible","Si","","No",Null) = DialogResponse.Positive Then 'ignore +' StartService(DownloadService) + CallSubDelayed(appUpdater, "download_newApk") + End If + B4XPages.MainPage.ocultaProgreso + StartActivity(Main) +' Activity.Finish + B4XPages.ShowPage("Login") +End Sub + +Sub sinActualizacion + Msgbox(appUpdater.newApp.okMsg, "Aplicación al corriente") 'ignore +' StartActivity(Main) + B4XPages.MainPage.ocultaProgreso + B4XPages.ShowPage("Login") +End Sub \ No newline at end of file diff --git a/B4A/DBRequestManager.bas b/B4A/DBRequestManager.bas new file mode 100644 index 0000000..1a8b358 --- /dev/null +++ b/B4A/DBRequestManager.bas @@ -0,0 +1,272 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=6.8 +@EndOfDesignText@ +'Necesita la libreria RandomAccessFile + +'Class module +Sub Class_Globals + Private mTarget As Object + Type DBResult (Tag As Object, Columns As Map, Rows As List) + Type DBCommand (Name As String, Parameters() As Object) + Private link As String + Private bc As ByteConverter + Private T_NULL = 0, T_STRING = 1, T_SHORT = 2, T_INT = 3, T_LONG = 4, T_FLOAT = 5 _ + ,T_DOUBLE = 6, T_BOOLEAN = 7, T_BLOB = 8 As Byte + Private VERSION As Float = 0.9 + Private tempArray(1) As Object + Dim jobTagAnterior As String = "" 'Mod por CHV - 211027 +End Sub + +'Target - The module that handles JobDone (usually Me). +'ConnectorLink - URL of the Java server. +Public Sub Initialize (Target As Object, ConnectorLink As String) + mTarget = Target + link = ConnectorLink +End Sub + +'Sends a query request. +'Command - Query name and parameters. +'Limit - Maximum rows to return or 0 for no limit. +'Tag - An object that will be returned in the result. +Public Sub ExecuteQuery(Command As DBCommand, Limit As Int, Tag As Object) + Dim j As HttpJob + Dim ms As OutputStream + Dim out2 As OutputStream = StartJob(j,ms, Tag) + + WriteObject(Command.Name, out2) + WriteInt(Limit, out2) + WriteList(Command.Parameters, out2) + out2.Close + j.PostBytes(link & "?method=query", ms.ToBytesArray) +End Sub + +'Executes a batch of (non-select) commands. +'ListOfCommands - List of the commands that will be executes. +'Tag - An object that will be returned in the result. +Public Sub ExecuteBatch(ListOfCommands As List, Tag As Object) + Dim j As HttpJob + Dim ms As OutputStream + Dim out2 As OutputStream = StartJob(j,ms, Tag) + WriteInt(ListOfCommands.Size, out2) + For Each Command As DBCommand In ListOfCommands + WriteObject(Command.Name, out2) + WriteList(Command.Parameters, out2) + Next + out2.Close + j.PostBytes(link & "?method=batch", ms.ToBytesArray) +End Sub + +'Similar to ExecuteBatch. Sends a single command. +Public Sub ExecuteCommand(Command As DBCommand, Tag As Object) + ExecuteBatch(Array As DBCommand(Command), Tag) +End Sub + +Private Sub StartJob(j As HttpJob, MemoryStream As OutputStream, Tag As Object) As OutputStream + j.Initialize("DBRequest", mTarget) + j.Tag = Tag + MemoryStream.InitializeToBytesArray(0) + Dim compress As CompressedStreams + Dim out As OutputStream = compress.WrapOutputStream(MemoryStream, "gzip") + WriteObject(VERSION, out) + Return out +End Sub + +Private Sub WriteList(Parameters As List, out As OutputStream) + Dim data() As Byte + If Parameters = Null Or Parameters.IsInitialized = False Then + Dim Parameters As List + Parameters.Initialize + End If + data = bc.IntsToBytes(Array As Int(Parameters.Size)) + out.WriteBytes(data, 0, data.Length) + For Each o As Object In Parameters + WriteObject(o, out) + Next +End Sub + +Private Sub WriteObject(o As Object, out As OutputStream) + Dim data() As Byte + tempArray(0) = o + If tempArray(0) = Null Then + out.WriteBytes(Array As Byte(T_NULL), 0, 1) + Else If tempArray(0) Is Short Then + out.WriteBytes(Array As Byte(T_SHORT), 0, 1) + data = bc.ShortsToBytes(Array As Short(o)) + Else If tempArray(0) Is Int Then + out.WriteBytes(Array As Byte(T_INT), 0, 1) + data = bc.IntsToBytes(Array As Int(o)) + Else If tempArray(0) Is Float Then + out.WriteBytes(Array As Byte(T_FLOAT), 0, 1) + data = bc.FloatsToBytes(Array As Float(o)) + Else If tempArray(0) Is Double Then + out.WriteBytes(Array As Byte(T_DOUBLE), 0, 1) + data = bc.DoublesToBytes(Array As Double(o)) + Else If tempArray(0) Is Long Then + out.WriteBytes(Array As Byte(T_LONG), 0, 1) + data = bc.LongsToBytes(Array As Long(o)) + Else If tempArray(0) Is Boolean Then + out.WriteBytes(Array As Byte(T_BOOLEAN), 0, 1) + Dim b As Boolean = 0 + Dim data(1) As Byte + If b Then data(0) = 1 Else data(0) = 0 + Else If GetType(tempArray(0)) = "[B" Then + data = o + out.WriteBytes(Array As Byte(T_BLOB), 0, 1) + WriteInt(data.Length, out) + Else 'If o Is String Then (treat all other values as string) + out.WriteBytes(Array As Byte(T_STRING), 0, 1) + data = bc.StringToBytes(o, "UTF8") + WriteInt(data.Length, out) + End If + If data.Length > 0 Then out.WriteBytes(data, 0, data.Length) +End Sub + +Private Sub ReadObject(In As InputStream) As Object + Dim data(1) As Byte + In.ReadBytes(data, 0, 1) + Select data(0) + Case T_NULL + Return Null + Case T_SHORT + Dim data(2) As Byte + Return bc.ShortsFromBytes(ReadBytesFully(In, data, data.Length))(0) + Case T_INT + Dim data(4) As Byte + Return bc.IntsFromBytes(ReadBytesFully(In, data, data.Length))(0) + Case T_LONG + Dim data(8) As Byte + Return bc.LongsFromBytes(ReadBytesFully(In, data, data.Length))(0) + Case T_FLOAT + Dim data(4) As Byte + Return bc.FloatsFromBytes(ReadBytesFully(In, data, data.Length))(0) + Case T_DOUBLE + Dim data(8) As Byte + Return bc.DoublesFromBytes(ReadBytesFully(In, data, data.Length))(0) + Case T_BOOLEAN + Dim b As Byte = ReadByte(In) + Return b = 1 + Case T_BLOB + Dim len As Int = ReadInt(In) + Dim data(len) As Byte + Return ReadBytesFully(In, data, data.Length) + Case Else + Dim len As Int = ReadInt(In) + Dim data(len) As Byte + ReadBytesFully(In, data, data.Length) + Return BytesToString(data, 0, data.Length, "UTF8") + End Select +End Sub + +Private Sub ReadBytesFully(In As InputStream, Data() As Byte, Len As Int) As Byte() + Dim count = 0, read As Int + Do While count < Len And read > -1 + read = In.ReadBytes(Data, count, Len - count) + count = count + read + Loop + Return Data +End Sub + +Private Sub WriteInt(i As Int, out As OutputStream) + Dim data() As Byte + data = bc.IntsToBytes(Array As Int(i)) + out.WriteBytes(data, 0, data.Length) +End Sub + +Private Sub ReadInt(In As InputStream) As Int + Dim data(4) As Byte + Return bc.IntsFromBytes(ReadBytesFully(In, data, data.Length))(0) +End Sub + +Private Sub ReadByte(In As InputStream) As Byte + Dim data(1) As Byte + In.ReadBytes(data, 0, 1) + Return data(0) +End Sub + +'Handles the Job result and returns a DBResult. +Public Sub HandleJob(Job As HttpJob) As DBResult + Dim start As Long = DateTime.Now + Dim In As InputStream = Job.GetInputStream + Dim cs As CompressedStreams + In = cs.WrapInputStream(In, "gzip") + Dim serverVersion As Float = ReadObject(In) 'ignore + Dim method As String = ReadObject(In) + Dim table As DBResult + table.Initialize + table.Columns.Initialize + table.rows.Initialize + table.Tag = Job.Tag + If jobTagAnterior <> Job.Tag Then LogColor("HandleJob: '"&Job.Tag&"'", Colors.Blue) 'Mod por CHV - 211023 + jobTagAnterior = Job.Tag 'Mod por CHV - 211023 + If method = "query" Then + Dim numberOfColumns As Int = ReadInt(In) + For i = 0 To numberOfColumns - 1 + table.Columns.Put(ReadObject(In), i) + Next + Do While ReadByte(In) = 1 + Dim rowObjects(numberOfColumns) As Object + table.rows.Add(rowObjects) + For col = 0 To numberOfColumns - 1 + Dim o As Object = ReadObject(In) + rowObjects(col) = o + Next + Loop + Else If method = "batch" Then + table.Columns.Put("AffectedRows", 0) + Dim rows As Int = ReadInt(In) + For i = 0 To rows - 1 + table.rows.Add(Array As Object(ReadInt(In))) + Next + End If + In.Close +' Log("HandleJob: " & (DateTime.Now - start)) + Return table +End Sub +'Reads a file and returns the file as a bytes array. +Public Sub FileToBytes(Dir As String, FileName As String) As Byte() + Dim out As OutputStream + out.InitializeToBytesArray(0) + Dim In As InputStream = File.OpenInput(Dir, FileName) + File.Copy2(In, out) + out.Close + Return out.ToBytesArray +End Sub +'Converts an image to a bytes array (for BLOB fields). +Public Sub ImageToBytes(Image As Bitmap) As Byte() + Dim out As OutputStream + out.InitializeToBytesArray(0) + Image.WriteToStream(out, 100, "JPEG") + out.Close + Return out.ToBytesArray +End Sub +'Converts a bytes array to an image (for BLOB fields). +Public Sub BytesToImage(bytes() As Byte) As Bitmap + Dim In As InputStream + In.InitializeFromBytesArray(bytes, 0, bytes.Length) + Dim bmp As Bitmap + bmp.Initialize2(In) + Return bmp +End Sub +'Prints the table to the logs. +Public Sub PrintTable(Table As DBResult) + Log("Tag: " & Table.Tag & ", Columns: " & Table.Columns.Size & ", Rows: " & Table.Rows.Size) + Dim sb As StringBuilder + sb.Initialize + For Each col In Table.Columns.Keys + sb.Append(col).Append(TAB) + Next + Log(sb.ToString) + For Each row() As Object In Table.Rows + Dim sb As StringBuilder + sb.Initialize + For Each record As Object In row + sb.Append(record).Append(TAB) + Next + ToastMessageShow(sb.ToString, True) + Next +End Sub + + \ No newline at end of file diff --git a/B4A/Disruptive.b4a b/B4A/Disruptive.b4a new file mode 100644 index 0000000..9f31e61 --- /dev/null +++ b/B4A/Disruptive.b4a @@ -0,0 +1,256 @@ +Build1=Default,disruptive.keymon.com.mx +File1=alerta_amarilla.png +File10=ENCUESTA_M4.bal +File11=ENCUESTA_M5.bal +File12=ENCUESTA_PED.bal +File13=engrane.jpg +File14=engrane18.png +File15=engraneactual.png +File16=ESNCUESTA_M2.bal +File17=fondo_kmt.jpg +File18=gps20.png +File19=guna.png +File2=bus-ar.png +File20=guna18.png +File21=guna-fondo.png +File22=Hacer pedido.jpg +File23=hacerpedido30.png +File24=ic_cloud_download_white_24dp.png +File25=itembuttonblue.png +File26=login.bal +File27=Logo Guna_192x192.png +File28=logo-guna-18.png +File29=MainPage.bal +File3=carrito.png +File30=Malo.jpg +File31=mapa_rutas.bal +File32=mas-azul.png +File33=mas-azul-red.png +File34=mas-azul-red1.png +File35=menos.png +File36=menosred.png +File37=menos-red.png +File38=nota.bal +File39=noventa.bal +File4=celltitle.bal +File40=nuevocliente.bal +File41=nuevo-cliente20.png +File42=Nvo Cliente.jpg +File43=palomita_verde.png +File44=pedido.bal +File45=planfia_logo.png +File46=principal.bal +File47=proditem.bal +File48=productos.bal +File49=promociones.bal +File5=cliente.bal +File50=qr_gallina.jpg +File51=resdia.bal +File52=ResDia.jpg +File53=resdia20.png +File54=salma.jpg +File55=salma.png +File56=senial.jpg +File57=sync.png +File58=Ticket dia.jpg +File59=ticketdia20.png +File6=clientes.bal +File60=ticketsdia.bal +File61=Tiendita.jpg +File7=durakelo.png +File8=ENCUESSTA_M3.bal +File9=ENCUESTA.bal +FileGroup1=Default Group +FileGroup10=Default Group +FileGroup11=Default Group +FileGroup12=Default Group +FileGroup13=Default Group +FileGroup14=Default Group +FileGroup15=Default Group +FileGroup16=Default Group +FileGroup17=Default Group +FileGroup18=Default Group +FileGroup19=Default Group +FileGroup2=Default Group +FileGroup20=Default Group +FileGroup21=Default Group +FileGroup22=Default Group +FileGroup23=Default Group +FileGroup24=Default Group +FileGroup25=Default Group +FileGroup26=Default Group +FileGroup27=Default Group +FileGroup28=Default Group +FileGroup29=Default Group +FileGroup3=Default Group +FileGroup30=Default Group +FileGroup31=Default Group +FileGroup32=Default Group +FileGroup33=Default Group +FileGroup34=Default Group +FileGroup35=Default Group +FileGroup36=Default Group +FileGroup37=Default Group +FileGroup38=Default Group +FileGroup39=Default Group +FileGroup4=Default Group +FileGroup40=Default Group +FileGroup41=Default Group +FileGroup42=Default Group +FileGroup43=Default Group +FileGroup44=Default Group +FileGroup45=Default Group +FileGroup46=Default Group +FileGroup47=Default Group +FileGroup48=Default Group +FileGroup49=Default Group +FileGroup5=Default Group +FileGroup50=Default Group +FileGroup51=Default Group +FileGroup52=Default Group +FileGroup53=Default Group +FileGroup54=Default Group +FileGroup55=Default Group +FileGroup56=Default Group +FileGroup57=Default Group +FileGroup58=Default Group +FileGroup59=Default Group +FileGroup6=Default Group +FileGroup60=Default Group +FileGroup61=Default Group +FileGroup7=Default Group +FileGroup8=Default Group +FileGroup9=Default Group +Group=Default Group +Library1=appupdating +Library10=fileprovider +Library11=firebaseadmob +Library12=firebaseanalytics +Library13=firebasenotifications +Library14=fusedlocationprovider +Library15=googlemaps +Library16=googlemapsextras +Library17=gps +Library18=ime +Library19=javaobject +Library2=b4xpages +Library20=jhsicezxing1 +Library21=json +Library22=okhttputils2 +Library23=phone +Library24=randomaccessfile +Library25=rspopupmenu +Library26=runtimepermissions +Library27=serial +Library28=sql +Library29=togglelibrary +Library3=baqrcode +Library30=xcustomlistview +Library31=xui +Library32=xui views +Library33=preoptimizedclv +Library4=batteryprogressview +Library5=bitmapcreator +Library6=byteconverter +Library7=camera +Library8=compressstrings +Library9=core +ManifestCode='This code will be applied to the manifest file during compilation.~\n~'You do not need to modify it in most cases.~\n~'See this link for for more information: https://www.b4x.com/forum/showthread.php?p=78136~\n~AddManifestText(~\n~~\n~)~\n~SetApplicationAttribute(android:icon, "@drawable/icon")~\n~SetApplicationAttribute(android:label, "$LABEL$")~\n~CreateResourceFromFile(Macro, Themes.LightTheme)~\n~AddApplicationText(~\n~)~\n~CreateResourceFromFile(Macro, FirebaseAnalytics.GooglePlayBase)~\n~ 'End of default text.~\n~ ~\n~ ''''' CAMBIA LA CLAVE API~\n~AddApplicationText(~\n~~\n~ ~\n~)~\n~AddApplicationText(~\n~~\n~)~\n~AddManifestText(~\n~~\n~)~\n~''CreateResourceFromFile(Macro, FirebaseAnalytics.GooglePlayBase)~\n~ 'End of default text.~\n~ ~\n~SetApplicationAttribute(android:usesCleartextTraffic, "true")~\n~ AddManifestText(~\n~~\n~)~\n~AddPermission(android.permission.ACCESS_BACKGROUND_LOCATION)~\n~AddManifestText(~\n~~\n~)~\n~AddManifestText(~\n~~\n~) 'in order to access the device non-resettable identifiers such as IMEI and serial number.~\n~~\n~'///////////////////////// FLP Y PUSH /////////////~\n~' CreateResourceFromFile(Macro, FirebaseAnalytics.GooglePlayBase)~\n~' CreateResourceFromFile(Macro, FirebaseAnalytics.Firebase)~\n~' CreateResourceFromFile(Macro, FirebaseAnalytics.FirebaseAnalytics)~\n~' CreateResourceFromFile(Macro, FirebaseNotifications.FirebaseNotifications)~\n~ SetServiceAttribute(Tracker, android:foregroundServiceType, "location")~\n~'//////////////////////////////////////////////////////~\n~~\n~'/////////////////////// App Updating ////////////////~\n~ AddManifestText(~\n~ )~\n~ AddApplicationText(~\n~ ~\n~ ~\n~ ~\n~ )~\n~ CreateResource(xml, provider_paths,~\n~ ~\n~ ~\n~ ~\n~ ~\n~ ~\n~ )~\n~AddManifestText()~\n~AddManifestText()~\n~AddManifestText()~\n~AddManifestText()~\n~~\n~AddPermission(android.permission.REQUEST_INSTALL_PACKAGES)~\n~AddPermission(android.permission.INTERNET)~\n~AddPermission(android.permission.INSTALL_PACKAGES)~\n~AddPermission(android.permission.READ_EXTERNAL_STORAGE)~\n~AddPermission(android.permission.WRITE_EXTERNAL_STORAGE)~\n~AddPermission(android.permission.READ_PHONE_STATE)~\n~AddPermission(android.permission.WAKE_LOCK)~\n~CreateResourceFromFile(Macro, JhsIceZxing1.CaturePortrait)~\n~ ~\n~SetApplicationAttribute(android:largeHeap, "true")~\n~SetApplicationAttribute(android:allowBackup, "false")~\n~AddPermission(android.permission.BLUETOOTH_ADVERTISE)~\n~AddPermission(android.permission.BLUETOOTH_CONNECT)~\n~AddPermission(android.permission.BLUETOOTH_SCAN)~\n~AddManifestText() +Module1=appUpdater +Module10=C_NuevoCliente +Module11=C_Pedidos +Module12=C_Principal +Module13=C_Productos +Module14=C_Promos +Module15=C_TicketsDia +Module16=C_UpdateAvailable +Module17=DBRequestManager +Module18=EscPosPrinter +Module19=FirebaseMessaging +Module2=B4XMainPage +Module20=MAPA_RUTAS +Module21=Starter +Module22=Subs +Module23=Tracker +Module3=BatteryUtilities +Module4=C_Cliente +Module5=C_Clientes +Module6=C_Historico +Module7=C_Mapas +Module8=C_Nota +Module9=C_NoVenta +NumberOfFiles=61 +NumberOfLibraries=33 +NumberOfModules=23 +Version=12.8 +@EndOfDesignText@ +#Region Project Attributes + #ApplicationLabel: Disruptive + #VersionCode: 1 + #VersionName: 4.09.08 + 'SupportedOrientations possible values: unspecified, landscape or portrait. + #SupportedOrientations: portrait + #CanInstallToExternalStorage: False + #BridgeLogger: True + #AdditionalJar: com.android.support:support-v4 + #AdditionalJar: com.google.android.gms:play-services-location + #MultiDex: True +#End Region + +#Region Activity Attributes + #FullScreen: False + #IncludeTitle: False +#End Region + +Sub Process_Globals + Public ActionBarHomeClicked As Boolean +End Sub + +Sub Globals + +End Sub + +Sub Activity_Create(FirstTime As Boolean) + Dim pm As B4XPagesManager + pm.Initialize(Activity) +End Sub + +'Template version: B4A-1.01 +#Region Delegates + +Sub Activity_ActionBarHomeClick + ActionBarHomeClicked = True + B4XPages.Delegate.Activity_ActionBarHomeClick + ActionBarHomeClicked = False +End Sub + +Sub Activity_KeyPress (KeyCode As Int) As Boolean + Return B4XPages.Delegate.Activity_KeyPress(KeyCode) +End Sub + +Sub Activity_Resume + B4XPages.Delegate.Activity_Resume +End Sub + +Sub Activity_Pause (UserClosed As Boolean) + B4XPages.Delegate.Activity_Pause +End Sub + +Sub Activity_PermissionResult (Permission As String, Result As Boolean) + B4XPages.Delegate.Activity_PermissionResult(Permission, Result) +End Sub + +Sub Create_Menu (Menu As Object) + B4XPages.Delegate.Create_Menu(Menu) +End Sub + +#if Java +public boolean _onCreateOptionsMenu(android.view.Menu menu) { + processBA.raiseEvent(null, "create_menu", menu); + return true; + +} +#End If +#End Region + +'Program code should go into B4XMainPage and other pages. \ No newline at end of file diff --git a/B4A/Disruptive.b4a.meta b/B4A/Disruptive.b4a.meta new file mode 100644 index 0000000..5ddfc50 --- /dev/null +++ b/B4A/Disruptive.b4a.meta @@ -0,0 +1,75 @@ +ModuleBookmarks0= +ModuleBookmarks1= +ModuleBookmarks10= +ModuleBookmarks11= +ModuleBookmarks12= +ModuleBookmarks13= +ModuleBookmarks14= +ModuleBookmarks15= +ModuleBookmarks16= +ModuleBookmarks17= +ModuleBookmarks18= +ModuleBookmarks19= +ModuleBookmarks2= +ModuleBookmarks20= +ModuleBookmarks21= +ModuleBookmarks22= +ModuleBookmarks23= +ModuleBookmarks3= +ModuleBookmarks4= +ModuleBookmarks5= +ModuleBookmarks6= +ModuleBookmarks7= +ModuleBookmarks8= +ModuleBookmarks9= +ModuleBreakpoints0= +ModuleBreakpoints1= +ModuleBreakpoints10= +ModuleBreakpoints11= +ModuleBreakpoints12= +ModuleBreakpoints13= +ModuleBreakpoints14= +ModuleBreakpoints15= +ModuleBreakpoints16= +ModuleBreakpoints17= +ModuleBreakpoints18= +ModuleBreakpoints19= +ModuleBreakpoints2= +ModuleBreakpoints20= +ModuleBreakpoints21= +ModuleBreakpoints22= +ModuleBreakpoints23= +ModuleBreakpoints3= +ModuleBreakpoints4= +ModuleBreakpoints5= +ModuleBreakpoints6= +ModuleBreakpoints7= +ModuleBreakpoints8= +ModuleBreakpoints9= +ModuleClosedNodes0= +ModuleClosedNodes1= +ModuleClosedNodes10= +ModuleClosedNodes11= +ModuleClosedNodes12= +ModuleClosedNodes13= +ModuleClosedNodes14= +ModuleClosedNodes15= +ModuleClosedNodes16= +ModuleClosedNodes17= +ModuleClosedNodes18= +ModuleClosedNodes19= +ModuleClosedNodes2= +ModuleClosedNodes20= +ModuleClosedNodes21= +ModuleClosedNodes22= +ModuleClosedNodes23= +ModuleClosedNodes3= +ModuleClosedNodes4= +ModuleClosedNodes5= +ModuleClosedNodes6= +ModuleClosedNodes7= +ModuleClosedNodes8= +ModuleClosedNodes9= +NavigationStack=C_Productos,CreateListItem,443,0,C_Productos,llenaCatalogo,288,0,C_Productos,B4XPage_Appear,96,1,C_Productos,lv_catalogos_ItemClick,132,0,C_Productos,b_buscar_Click,640,0,C_Productos,Class_Globals,6,0,C_Productos,BUSCA_TextChanged,403,5,appUpdater,Process_Globals,74,2,B4XMainPage,i_engrane_Click,647,1,B4XMainPage,ocultaProgreso,642,0,Starter,Process_Globals,14,3 +SelectedBuild=0 +VisibleModules=1,2,3,4,5,6,7,8,9,10,13,21 diff --git a/B4A/EscPosPrinter.bas b/B4A/EscPosPrinter.bas new file mode 100644 index 0000000..f0a9536 --- /dev/null +++ b/B4A/EscPosPrinter.bas @@ -0,0 +1,1158 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=9.3 +@EndOfDesignText@ +#IgnoreWarnings: 9 +' 9 = unused variable + +Sub Class_Globals + ' 1.0 Initial version + ' 2.0 Added FeedPaper, changed many WriteString(.." & Chr(number)) instances to WriteBytes(params) + ' This is to avoid Unicode code page transformations on some numbers > 32 + ' Added PrintAndFeedPaper, setRelativePrintPosn, + ' Added user defined characters, DefineCustomCharacter, DeleteCustomCharacter and setUseCustomCharacters + ' Addedhelper methods CreateCustomCharacter, CreateLine, CreateBox and CreateCircle + Private Version As Double = 2.0 ' Printer class version + + Type AnImage(Width As Int, Height As Int, Data() As Byte) + + Private EventName As String 'ignore + Private CallBack As Object 'ignore + + Private Serial1 As Serial + Private Astream As AsyncStreams + Private Connected As Boolean + Private ConnectedError As String + + Dim ESC As String = Chr(27) + Dim FS As String = Chr(28) + Dim GS As String = Chr(29) + + 'Bold and underline don't work well in reversed text + Dim UNREVERSE As String = GS & "B" & Chr(0) + Dim REVERSE As String = GS & "B" & Chr(1) + + ' Character orientation. Print upside down from right margin + Dim UNINVERT As String = ESC & "{0" + Dim INVERT As String = ESC & "{1" + + ' Character rotation clockwise. Not much use without also reversing the printed character sequence + Dim UNROTATE As String = ESC & "V0" + Dim ROTATE As String = ESC & "V1" + + ' Horizontal tab + Dim HT As String = Chr(9) + + ' Character underline + Dim ULINE0 As String = ESC & "-0" + Dim ULINE1 As String = ESC & "-1" + Dim ULINE2 As String = ESC & "-2" + + ' Character emphasis + Dim BOLD As String = ESC & "E1" + Dim NOBOLD As String = ESC & "E0" + + ' Character height and width + Dim SINGLE As String = GS & "!" & Chr(0x00) + Dim HIGH As String = GS & "!" & Chr(0x01) + Dim WIDE As String = GS & "!" & Chr(0x10) + Dim HIGHWIDE As String = GS & "!" & Chr(0x11) + + ' Default settings + Private LEFTJUSTIFY As String = ESC & "a0" + Private LINEDEFAULT As String = ESC & "2" + Private LINSET0 As String = ESC & "$" & Chr(0x0) & Chr(0x0) + Private LMARGIN0 As String = GS & "L" & Chr(0x0) & Chr(0x0) + Private WIDTH0 As String = GS & "W" & Chr(0xff) & Chr(0xff) + Private CHARSPACING0 As String = ESC & " " & Chr(0) + Private CHARFONT0 As String = ESC & "M" & Chr(0) + Dim DEFAULTS As String = CHARSPACING0 & CHARFONT0 & LMARGIN0 & WIDTH0 & LINSET0 & LINEDEFAULT & LEFTJUSTIFY _ + & UNINVERT & UNROTATE & UNREVERSE & NOBOLD & ULINE0 + +End Sub + +'********** +'PUBLIC API +'********** + +'Initialize the object with the parent and event name +Public Sub Initialize(vCallback As Object, vEventName As String) + EventName = vEventName + CallBack = vCallback + Serial1.Initialize("Serial1") + Connected = False + ConnectedError = "" +End Sub + +' Returns any error raised by the last attempt to connect a printer +Public Sub ConnectedErrorMsg As String + Return ConnectedError +End Sub + +' Returns whether a printer is connected or not +Public Sub IsConnected As Boolean + Return Connected +End Sub + +' Returns whether Bluetooth is on or off +Public Sub IsBluetoothOn As Boolean + Return Serial1.IsEnabled +End Sub + +' Ask the user to connect to a printer and return whether she tried or not +' If True then a subsequent Connected event will indicate success or failure +Public Sub Connect As Boolean + 'leos +' Serial1.Connect("88:6B:0F:3E:53:9E") +' Return True + Try + If Starter.MAC_IMPRESORA = "0" Then + Dim PairedDevices As Map + PairedDevices = Serial1.GetPairedDevices + Dim l As List + l.Initialize + Log("aqui 1") + For i = 0 To PairedDevices.Size - 1 + l.Add(PairedDevices.GetKeyAt(i)) + Log("aqui 2") + DisConnect + Next + Dim Res As Int + Res = InputList(l, "Choose a printer", -1) 'show list with paired devices 'ignore + If Res <> DialogResponse.CANCEL Then + Serial1.Connect(PairedDevices.Get(l.Get(Res))) 'convert the name to mac address + 'Msgbox(PairedDevices.Get(l.Get(Res)),"mac") + Starter.mac_impresora = PairedDevices.Get(l.Get(Res)) + Return True + DisConnect + Log("aqui 3") + End If + Log("aqui 4") + Return False + Else + Serial1.Connect(Starter.mac_impresora) + ' Starter.mac_impresora = colonia.MAC_IMPRESORA + Return True + DisConnect + Log("aqui 5") + End If + Catch + Log(LastException) + Return False + End Try +End Sub + + +' Disconnect the printer +Public Sub DisConnect + Serial1.Disconnect + Connected = False +End Sub + +' Reset the printer to the power on state +Public Sub Reset + WriteString(ESC & "@") +End Sub + +'-------------- +' Text Commands +'-------------- + +' Print any outstanding characters then feed the paper the specified number of units of 0.125mm +' This is similar to changing LineSpacing before sending CRLF but this has a one off effect +' A full character height is always fed even if units = 0. Units defines the excess over this minimum +Public Sub PrintAndFeedPaper(units As Int) + WriteString(ESC & "J") + Dim params(1) As Byte + params(0) = units + WriteBytes(params) +End Sub + +' Set the distance between characters +Public Sub setCharacterSpacing(spacing As Int) + WriteString(ESC & " ") + Dim params(1) As Byte + params(0) = spacing + WriteBytes(params) +End Sub + +' Set the left inset of the next line to be printed +' Automatically resets to 0 for the following line +' inset is specified in units of 0.125mm +Public Sub setLeftInset(inset As Int) + Dim dh As Int = inset / 256 + Dim dl As Int = inset - dh + WriteString(ESC & "$" & Chr(dl) & Chr(dh)) + Dim params(2) As Byte + params(0) = dl + params(1) = dh + WriteBytes(params) +End Sub + +' Set the left margin of the print area, must be the first item on a new line +' margin is specified in units of 0.125mm +' This affects barcodes as well as text +Public Sub setLeftMargin(margin As Int) + Dim dh As Int = margin / 256 + Dim dl As Int = margin - dh + WriteString(GS & "L") + Dim params(2) As Byte + params(0) = dl + params(1) = dh + WriteBytes(params) +End Sub + +' Set the width of the print area, must be the first item on a new line +' margin is specified in units of 0.125mm +' This affects barcodes as well as text +' This appears to function more like a right margin than a print area width when used with LeftMargin +Public Sub setPrintWidth(width As Int) + Dim dh As Int = width / 256 + Dim dl As Int = width - dh + WriteString(GS & "W") + Dim params(2) As Byte + params(0) = dl + params(1) = dh + WriteBytes(params) +End Sub + +' Set the distance between lines in increments of 0.125mm +' If spacing is < 0 then the default of 30 is set +Public Sub setLineSpacing(spacing As Int) + If spacing < 0 Then + WriteString(ESC & "2") + Else + WriteString(ESC & "3") + Dim params(1) As Byte + params(0) = spacing + WriteBytes(params) + End If +End Sub + +' Set the line content justification, must be the first item on a new line +' 0 left, 1 centre, 2 right +Public Sub setJustify(justify As Int) + WriteString(ESC & "a" & Chr(justify + 48)) +End Sub + +' Set the codepage of the printer +' You need to look at the printer documentation to establish which codepages are supported +Public Sub setCodePage(codepage As Int) + WriteString(ESC & "t") + Dim params(1) As Byte + params(0) = codepage + WriteBytes(params) +End Sub + +' Select the size of the font for printing text. 0 = Font A (12 x 24), 1 = Font B (9 x 17) +' For font B you may want to set the line spacing to a lower value than the default of 30 +' This affects only the size of printed characters. The code page determines the actual character set +' On my printer setting UseCustomCharacters = while Font B is selected crashes the printer and turns it off +Public Sub setCharacterFont(font As Int) + WriteString(ESC & "M" & Chr(Bit.And(1,font))) +End Sub + +' Set the positions of the horizontal tabs +' Each tab is specified as a number of character widths from the beginning of the line +' There may be up to 32 tab positions specified each of size up to 255 characters +' The printer default is that no tabs are defined +Public Sub setTabPositions(tabs() As Int) + WriteString(ESC & "D") + Dim data(tabs.Length+1) As Byte + For i = 0 To tabs.Length - 1 + data(i) = tabs(i) + Next + data(tabs.Length) = 0 + WriteBytes(data) +End Sub + +' Set print position relative to the current position using horizontal units of 0.125mm +' relposn can be negative +' Unless I have misundertood this doesn't work as documented on my printer +' It only seems take effect at the beginning of a line as a one off effect +Public Sub setRelativePrintPosn(relposn As Int) + Dim dh As Int = relposn / 256 + Dim dl As Int = relposn - dh + WriteString(ESC & "\") + Dim params(2) As Byte + params(0) = dl + params(1) = dh + WriteBytes(params) +End Sub + +' Send the contents of an array of bytes to the printer +' Remember that if the printer is expecting text the bytes will be printed as characters in the current code page +Public Sub WriteBytes(data() As Byte) + If Connected Then + Astream.Write(data) + End If +End Sub + +' Send the string to the printer in IBM437 encoding which is the original PC DOS codepage +' This is usually the default codepage for a printer and is CodePage = 0 +' Beware of using WriteString with Chr() to send numeric values as they may be affected by Unicode to codepage translations +' Most character level operations are pre-defined as UPPERCASE string variables for easy concatenation with other string data +Public Sub WriteString(data As String) + WriteString2(data, "IBM437") +End Sub + +' Send the string to the printer in the specified encoding +' You also need to set the printer to a matching encoding using the CodePage property +' Beware of using WriteString2 with Chr() to send numeric values as they may be affected by codepage substitutions +' Most character level operations are pre-defined as UPPERCASE string variables for easy concatenatipon with other string data +Public Sub WriteString2(data As String, encoding As String) + Try + If Connected Then + Astream.Write(data.GetBytes(encoding)) + End If + Catch + Log("Printer error : " & LastException.Message) + AStream_Error + End Try +End Sub + +'----------------------------------------- +' User defined character commands commands +'----------------------------------------- + +' Delete the specified user defined character mode +' This command deletes the pattern defined for the specified code in the font selected by ESC ! +' If the code is subsequently printed in custom character mode the present code page character is printed instead +Public Sub DeleteCustomCharacter(charcode As Int) + WriteString(ESC & "?") + Dim params(1) As Byte + params(0) = charcode + WriteBytes(params) +End Sub + +' Enable the user defined character mode if custom is True, revert to normal if custom is False +' If a custom character has not been defined for a given character code then the default character for the present font is printed +' FontA and FontB have separate definitions for custom characters +' On my printer setting UseCustomCharacters = while Font B is selected crashes the printer and turns it off +' Therefore the cuatom character routines have not been tested on ont B +Public Sub setUseCustomCharacters(custom As Boolean) + If custom Then + WriteString(ESC & "%1") + Else + WriteString(ESC & "%0") + End If +End Sub + +' Define a user defined character +' The allowable character code range is the 95 characters) from ASCII code 32 (0x20) to 126 (0x7E) +' Characters can be defined in either font A (12*24) or font B (9*17) as selected by present setting of CharacterFont +' The programmer must ensure that the correct font size definition is used for the present setting of CharacterFont +' The user-defined character definition is cleared when Reset is invoked or the printer is turned off +' The vertical and horizontal printed resolution is approximaely 180dpi +' Characters are always defined by sets of three bytes in the vertical direction and up to 9 or 12 sets horizontally +' Each byte defines a vertical line of 8 dots. The MSB of each byte is the highest image pixel, the LSB is the lowest +' Byte(0+n) defines the topmost third of the vertical line, Byte(1+n) is below and Byte(2+n) is the lowest +' Set a bit to 1 to print a dot or 0 to not print a dot +' If the lines to the right of the character are blank then there set of three bytes can be omiited from the byte array +' When the user-defined characters are defined in font B (9*17) only the most significant bit of the 3rd byte of data is used +' charcode defines the character code for the character being defined +' bitdata is a Byte array containing the character definitiopn as described above. +' If the length of bitdata is not a multiple of 3 the definition is ignored and a value of -1 returned +Public Sub DefineCustomCharacter(charcode As Int, bitdata() As Byte) As Int + Dim excess As Int = bitdata.Length Mod 3 + If excess <> 0 Then Return -1 + Dim size As Int = bitdata.Length / 3 + WriteString(ESC & "&") + Dim params(4) As Byte + params(0) = 3 + params(1) = charcode + params(2) = charcode + params(3) = size + WriteBytes(params) + WriteBytes(bitdata) + Return 0 +End Sub + +' The third triangle point is hacked into spare bits keeping the generated Int human readable i hex for other shapes +' The shape array contains the character shapes and characterfont is 0 for a 12*24 character andd 1 for a 9*17 character +' Returns a Byte(36) for characterfont = 0 and a Byte(27) for characterfont = 1 +' The returned array can be directly passed to DefineCustomCharacter +' To define a custom character requires specifying up to 288 data points +' This is a lot of data and in most cases it is mainly white space +' This method takes a character definition that defines only the shapes in the character that are to be printed black +' It will be easier use the outputs from CreateLine, CreateTriangle, CreateBox and CreateCircle rather then building the actual Int values +' Each shape is defined by a single Int value containing four parameters in hex format plugs some single bit flags +' Taking the representation of the Int as eight hex characters numbered from the MS end as 0x01234567 +' 0 contains the shape to draw. 0 = Line, 1 = Box, 2 = Circle, 3 = Triangle +' 1 contains a value between 0 and 0xF. This is either an X coordinate or for a circle the radius +' 2 and 3 contain a value between 0 and 0x1F. This is either a Y coordinate or for a circle the quadrants to draw +' 4 contains a value between 0 and 0xF. This is 0 for an empty shope or 1 for a filled shape +' 5 contains a value between 0 and 0xF. This is an X coordinate +' 5 and 6 contain a value between 0 and 0x1F. This is a Y coordinate +' The coordinate 0,0 is at the top left of the character +' Line +' One point of the vector is contained in the top part of the Int and the other in the bottom half +' To define a single point place its coordinates as both sr=start and end of a line +' Box +' The two X,Y coordinates specify the top left and bottom right corners of the box +' Circle +' The left X parameter is now the radius of the circle, the left Y is the quadrants to be drawn +' The right X and Y parameters are the centre of the circle' +' The quadrants to draw are bit ORed together, UpperRight = 0x1, LowerRight = 0x2, LowerLeft = 0x4, Upper Left = 0x8 +' Triangle +' The left X and Y parameters are now one point of the triangle, the right X and Y parameters another point +' The third triangle point is hacked into spare bits keeping the generated Int human readable in hex for the other shapes +' The bit allocations of a shape are as follows. f = fill as 0 or 1, s = shape as 0 to 7, xn as 0 to 15, yn as 0 to 31 +' Shape 0 = line, 1 = box, 2 = triangle, 3 = circle, 4 to 7 = unused +' fsss xxxx -yyy yyyy xxxx xxxx yyyy yyyy +' 0000 220 0000 2222 1111 2221 1111 +' x0 y2 y0 x2 x1 y2 y1 +' The shape array contains the character shapes and characterfont is 0 for a 12*24 character andd 1 for a 9*17 character +' Returns a Byte(36) for characterfont = 0 and a Byte(27) for characterfont = 1 +' The returned array can be directly passed to DefineCustomCharacter +Public Sub CreateCustomCharacter(shapes() As Int, characterfont As Int) As Byte() + Dim masks(8) As Byte + masks(0) = 0x80 + masks(1) = 0x40 + masks(2) = 0x20 + masks(3) = 0x10 + masks(4) = 0x08 + masks(5) = 0x04 + masks(6) = 0x02 + masks(7) = 0x01 + ' rather than try to catch errors whenever we access this array we Dim it to the maximum possible values of X and Y + ' then copy the top left of it to the final character definition array of the correct size + Dim points(16,32) As Byte + ' initialise the character to all white + For x = 0 To 15 + For y = 0 To 31 + points(x,y) = 0 + Next + Next + Dim size As Int = 12 + If characterfont = 1 Then size = 9 + Dim charbyes(size * 3) As Byte + For c = 0 To charbyes.Length - 1 + charbyes(c) = 0 + Next + ' set the points array from the shapes provided + For i = 0 To shapes.Length -1 + Dim fill As Int = Bit.UnsignedShiftRight(Bit.And(0x80000000, shapes(i)), 31) + Dim shape As Int = Bit.UnsignedShiftRight(Bit.And(0x70000000, shapes(i)), 28) + Dim x0 As Int = Bit.UnsignedShiftRight(Bit.And(0x0f000000, shapes(i)), 24) + Dim y0 As Int = Bit.UnsignedShiftRight(Bit.And(0x001f0000, shapes(i)), 16) + Dim x1 As Int = Bit.UnsignedShiftRight(Bit.And(0x00000f00, shapes(i)), 8) + Dim y1 As Int = Bit.And(0x0000001f, shapes(i)) + Dim x2 As Int = Bit.UnsignedShiftRight(Bit.And(0x0000f000, shapes(i)), 12) + Dim y2 As Int = Bit.UnsignedShiftRight(Bit.And(0x00e00000, shapes(i)), 18) + Bit.UnsignedShiftRight(Bit.And(0x000000e0, shapes(i)), 5) + ' The bit allocations of a shape are as follows. f = fill as 0 or 1, s = shape as 0 to 7, xn as 0 to 15, yn as 0 to 31 + ' Shape 0 = line, 1 = box, 2 = triangle, 3 = circle, 4 to 7 = unused + ' fsss xxxx -yyy yyyy xxxx xxxx yyyy yyyy + ' 0000 220 0000 2222 1111 2221 1111 + ' x0 y2 y0 x2 x1 y2 y1 + Dim logmsg As String = ": Fill=" & fill & " : Points " & x0 & "," & y0 & " " & x1 & "," & y1 & " " & x2 & "," & y2 + If shape = 3 Then + Log("Triangle " & logmsg) + PlotTriangle(x0, y0, x1, y1, x2, y2, points, fill) + else If shape = 2 Then + Log("Circle " & logmsg) + PlotCircle(x0, y0, x1, y1, points, fill) + Else If shape = 1 Then + Log("Box " & logmsg) + PlotBox(x0, y0, x1, y1, points, fill) + Else + Log("Line " & logmsg) + PlotLine(x0, y0, x1, y1, points) + End If + ' map the points array onto the character definition array + For x = 0 To size -1 ' 9 or 12 horizontal bytes + For y = 0 To 2 ' 3 vertical bytes + Dim bits As Byte = 0 + For b = 0 To 7 ' 8 vertical bits + If points(x, y*8+b) <> 0 Then + bits = Bit.Or(bits, masks(b)) + End If + Next + charbyes(x*3+y) = bits + Next + Next + Next + Return charbyes +End Sub + +' This is a higher level method that builds the Int values to pass to CreateCustomCharacter in the shapes array +' Create the value to draw a line in a custom character +' The line starts at X0,Y0 and ends at X1,Y1 +Public Sub CreateLine(x0 As Int, y0 As Int, x1 As Int, y1 As Int) As Int + Dim line As Int = 0 + line = line + Bit.ShiftLeft(Bit.And(0xf,x0), 24) + line = line + Bit.ShiftLeft(Bit.And(0x1f,y0), 16) + line = line + Bit.ShiftLeft(Bit.And(0xf,x1), 8) + line = line + Bit.And(0x1f,y1) + Return line +End Sub + +' This is a higher level method that builds the Int values to pass to CreateCustomCharacter in the shapes array +' Create the value to draw a circle in a custom character +' The circle is centred on X1,Y1 and the quadrants to draw are bit ORed together +' UpperRight = 0x1, LowerRight = 0x2, LowerLeft = 0x4, Upper Left = 0x8 +Public Sub CreateCircle(radius As Int, quadrants As Int, x1 As Int, y1 As Int, fill As Boolean) As Int + Dim circle As Int = 0x20000000 + If fill Then circle = circle + 0x80000000 + circle = circle + Bit.ShiftLeft(radius, 24) + circle = circle + Bit.ShiftLeft(quadrants, 16) + circle = circle + Bit.ShiftLeft(x1, 8) + circle = circle + y1 + Return circle +End Sub + + +' This is a higher level method that builds the Int values to pass to CreateCustomCharacter in the shapes array +' Create the value to draw a triangle in a custom character +' The triangles corners are at X0,Y0 X1,Y1 and X2,Y2 +Public Sub CreateTriangle(x0 As Int, y0 As Int, x1 As Int, y1 As Int, x2 As Int, y2 As Int, fill As Boolean) As Int + Dim triangle As Int = 0x30000000 + If fill Then triangle = triangle + 0x80000000 + triangle = triangle + Bit.ShiftLeft(Bit.And(0xf,x0), 24) + triangle = triangle + Bit.ShiftLeft(Bit.And(0x1f,y0), 16) + triangle = triangle + Bit.ShiftLeft(Bit.And(0xf,x1), 8) + triangle = triangle + Bit.And(0x1f,y1) + triangle = triangle + Bit.ShiftLeft(Bit.And(0xf,x2), 12) ' extra X + triangle = triangle + Bit.ShiftLeft(Bit.And(0x7,y2), 5) ' extra Y lsbits * 3 + triangle = triangle + Bit.ShiftLeft(Bit.And(0x18,y2), 18) ' extra Y msbits * 2 + Return triangle +End Sub + +' This is a higher level method that builds the Int values to pass to CreateCustomCharacter in the shapes array +' Create the value to draw a box in a custom character +' The box top left start is X0,Y0 and bottom right is X1,Y1 +Public Sub CreateBox(x0 As Int, y0 As Int, x1 As Int, y1 As Int, fill As Boolean) As Int + Dim box As Int = 0x10000000 + If fill Then box = box + 0x80000000 + box = box + Bit.ShiftLeft(Bit.And(0xf,x0), 24) + box = box + Bit.ShiftLeft(Bit.And(0x1f,y0), 16) + box = box + Bit.ShiftLeft(Bit.And(0xf,x1), 8) + box = box + Bit.And(0x1f,y1) + Return box +End Sub + +'----------------------------------------- +' Private custom character drawing methods +'----------------------------------------- + +Private Sub PlotTriangle(x0 As Int, y0 As Int, x1 As Int, y1 As Int, x2 As Int, y2 As Int, points(,) As Byte, Fill As Int) + ' This is a pretty crude algorithm, but it is simple, works and it isn't invoked often + PlotLine(x0, y0, x1, y1, points) + PlotLine(x1, y1, x2, y2, points) + PlotLine(x2, y2, x0, y0, points) + If Fill > 0 Then + FillTriangle(x0, y0, x1, y1, x2, y2, points) + End If +End Sub + +Private Sub FillTriangle(x0 As Int, y0 As Int, x1 As Int, y1 As Int, x2 As Int, y2 As Int, points(,) As Byte) + ' first sort the three vertices by y-coordinate ascending so v0 Is the topmost vertice */ + Dim tx, ty As Int + If y0 > y1 Then + tx = x0 : ty = y0 + x0 = x1 : y0 = y1 + x1 = tx : y1 = ty + End If + If y0 > y2 Then + tx = x0 : ty = y0 + x0 = x2 : y0 = y2 + x2 = tx : y2 = ty + End If + If y1 > y2 Then + tx = x1 : ty = y1 + x1 = x2 : y1 = y2 + x2 = tx : y2 = ty + End If + + Dim dx0, dx1, dx2 As Double + Dim x3, x4, y3, y4 As Double + Dim inc As Int + + If y1 - y0 > 0 Then dx0=(x1-x0)/(y1-y0) Else dx0=0 + If y2 - y0 > 0 Then dx1=(x2-x0)/(y2-y0) Else dx1=0 + If y2 - y1 > 0 Then dx2=(x2-x1)/(y2-y1) Else dx2=0 + x3 = x0 : x4 = x0 + y3 = y0 : y4 = y0 + If dx0 > dx1 Then + While + Do While y3 <= y1 + If x3 > x4 Then inc = -1 Else inc = 1 + For x = x3 To x4 Step inc + points(x, y3) = 1 + Next + y3 = y3 + 1 : y4 = y4 + 1 : x3 = x3 + dx1 : x4 = x4 + dx0 + Loop + x4=x1 + y4=y1 + Do While y3 <= y2 + If x3 > x4 Then inc = -1 Else inc = 1 + For x = x3 To x4 Step inc + points(x ,y3) = 1 + Next + y3 = y3 + 1 : y4 = y4 + 1 : x3 = x3 + dx1 : x4 = x4 + dx2 + Loop + Else + While + Do While y3 <= y1 + If x3 > x4 Then inc = -1 Else inc = 1 + For x = x3 To x4 Step inc + points(x, y3) = 1 + Next + y3 = y3 + 1 : y4 = y4 + 1 : x3 = x3 + dx0 : x4 = x4 +dx1 + Loop + x3=x1 + y3=y1 + Do While y3<=y2 + If x3 > x4 Then inc = -1 Else inc = 1 + For x = x3 To x4 Step inc + points(x, y3) = 1 + Next + y3 = y3 + 1 : y4 = y4 + 1 : x3 = x3 + dx2 : x4 = x4 + dx1 + Loop + End If +End Sub + +Private Sub PlotBox(x0 As Int, y0 As Int, x1 As Int, y1 As Int, points(,) As Byte, Fill As Int) + ' This is a pretty crude algorithm, but it is simple, works and itsn't invoked often + PlotLine(x0, y0, x0, y1, points) + PlotLine(x0, y0, x1, y0, points) + PlotLine(x1, y0, x1, y1, points) + PlotLine(x0, y1, x1, y1, points) + If Fill > 0 Then + For x = x0 To x1 + PlotLine(x, y0, x, y1, points) + Next + End If +End Sub + + +Private Sub PlotCircle(radius As Int, quadrants As Int, x1 As Int, y1 As Int, points(,) As Byte, fill As Int) + ' This is a pretty crude algorithm, but it is simple, works and itsn't invoked often + Dim mask As Int = 1 + For q = 3 To 0 Step -1 + If Bit.And(quadrants, mask) <> 0 Then + For i = q*90 To q*90+90 Step 1 + Dim x,y As Double + x = x1 - SinD(i)*radius + y = y1 - CosD(i)*radius + If fill > 0 Then + PlotLine(x1, y1, x, y, points) + Else + points(Round(x), Round(y)) = 1 + End If + Next + End If + mask = Bit.ShiftLeft(mask, 1) + Next +End Sub + +' Bresenham's line algorithm - see Wikipedia +Private Sub PlotLine(x0 As Int, y0 As Int, x1 As Int, y1 As Int, points(,) As Byte ) + If Abs(y1 - y0) < Abs(x1 - x0) Then + If x0 > x1 Then + PlotLineLow(x1, y1, x0, y0, points) + Else + PlotLineLow(x0, y0, x1, y1, points) + End If + Else + If y0 > y1 Then + PlotLineHigh(x1, y1, x0, y0, points) + Else + PlotLineHigh(x0, y0, x1, y1, points) + End If + End If +End Sub + +Private Sub PlotLineHigh(x0 As Int, y0 As Int, x1 As Int, y1 As Int, points(,) As Byte ) + Dim dx As Int = x1 - x0 + Dim dy As Int = y1 - y0 + Dim xi As Int = 1 + If dx < 0 Then + xi = -1 + dx = -dx + End If + Dim D As Int = 2*dx - dy + Dim x As Int = x0 + For y = y0 To y1 + points(x,y) = 1 + If D > 0 Then + x = x + xi + D = D - 2*dy + End If + D = D + 2*dx + Next +End Sub + +Private Sub PlotLineLow(x0 As Int, y0 As Int, x1 As Int,y1 As Int, points(,) As Byte ) + Dim dx As Int = x1 - x0 + Dim dy As Int = y1 - y0 + Dim yi As Int = 1 + If dy < 0 Then + yi = -1 + dy = -dy + End If + Dim D As Int = 2*dy - dx + Dim y As Int = y0 + For x = x0 To x1 + points(x,y) = 1 + If D > 0 Then + y = y + yi + D = D - 2*dx + End If + D = D + 2*dy + Next +End Sub + + +'------------------- +' Image commands +'------------------- +' There are two different image printing options with different pixel formats. +' PrintImage prints an entire image at once with a maximum size of 576x512 +' PrintImage2 prints a slice of an image with a height of 8 or 24 and a maximum width of 576 +' One or other may look better on your particular printer + +' Printer support method for pre-processing images to print +' Convert the bitmap supplied to an array of pixel values representing the luminance value of each original pixel +Sub ImageToBWIMage(bmp As Bitmap) As AnImage + Dim BC As BitmapCreator 'ignore + Dim W As Int = bmp.Width + Dim H As Int = bmp.Height + Dim pixels(W * H) As Byte + + For y = 0 To H - 1 + For x = 0 To W - 1 + Dim j As Int = bmp.GetPixel(x, y) + ' convert color to approximate luminance value + Dim col As ARGBColor + BC.ColorToARGB(j, col ) + Dim lum As Int = col.r * 0.2 + col.b*0.1 + col.g*0.7 + If lum> 255 Then lum = 255 + ' save the pixel luminance + pixels(y*W + x) = lum + Next + Next + Dim ret As AnImage + ret.Width = bmp.Width + ret.Height = bmp.Height + ret.Data = pixels + Return ret +End Sub + +' Printer support method for pre-processing images to print +' Convert the array of luminance values to an array of 0s and 1s according to the threshold value +Sub ThresholdImage(img As AnImage, threshold As Int) As AnImage 'ignore + Dim pixels(img.Data.Length) As Byte + For i = 0 To pixels.Length - 1 + Dim lum As Int = Bit.And(img.Data(i), 0xff) ' bytes are signed values + If lum < threshold Then + lum = 1 + Else + lum = 0 + End If + pixels(i) = lum + Next + Dim ret As AnImage + ret.Width = img.Width + ret.Height = img.Height + ret.Data = pixels + Return ret +End Sub + +' Printer support method for pre-processing images to print +' Convert the array of luminance values to a dithered array of 0s and 1s according to the threshold value +' The dithering algorithm is the simplest one-dimensional error diffusion algorithm +' Normally threshold should be 128 but some images may look better with a little more or less. +' This algorithm tends to produce vertical lines. DitherImage2D will probably look far better +Sub DitherImage1D(img As AnImage, threshold As Int) As AnImage 'ignore + Dim pixels(img.Data.Length) As Byte + Dim error As Int + For y = 0 To img.Height - 1 + error = 0 ' reset on each new line + For x = 0 To img.Width - 1 + Dim lum As Int = Bit.And(img.Data(y*img.Width + x), 0xff) ' bytes are signed values + lum = lum + error + If lum < threshold Then + error = lum + lum = 1 + Else + error = lum - 255 + lum = 0 + End If + pixels(y*img.Width + x) = lum + Next + Next + Dim ret As AnImage + ret.Width = img.Width + ret.Height = img.Height + ret.Data = pixels + Return ret +End Sub + + +' Printer support method for pre-processing images to print +' Convert the array of luminance values to a dithered array of 0s and 1s according to the threshold value +' The dithering algorithm is the simplest two-dimensional error diffusion algorithm +' Normally threshold should be 128 but some images may look better with a little more or less. +' Anything more sophisticated might be overkill considering the image quality of most thermal printers +Sub DitherImage2D(img As AnImage, threshold As Int) As AnImage + Dim pixels(img.Data.Length) As Byte + Dim xerror As Int + Dim yerrors(img.Width) As Int + For i = 0 To yerrors.Length -1 + yerrors(0) = 0 + Next + For y = 0 To img.Height - 1 + xerror = 0 ' reset on each new line + For x = 0 To img.Width - 1 + Dim lum As Int = Bit.And(img.Data(y*img.Width + x), 0xff) ' bytes are signed values + lum = lum + xerror + yerrors(x) + If lum < threshold Then + xerror = lum/2 + yerrors(x) = xerror + lum = 1 + Else + xerror = (lum - 255)/2 + yerrors(x) = xerror + lum = 0 + End If + pixels(y*img.Width + x) = lum + Next + Next + Dim ret As AnImage + ret.Width = img.Width + ret.Height = img.Height + ret.Data = pixels + Return ret +End Sub + + +' GS v0 printing +'--------------- + +' Prints the given image at the specified height and width using the "GS v" command +' Image data is supplied as bytes each containing 8 bits of horizontal image data +' The top left of the image is Byte(0) and the bottom right is Byte(width*height-1) +' MSB of the byte is the leftmost image pixel, the LSB is the rightmost +' Maximum width is 72 bytes (576 bits), Maximum height is 512 bytes +' The printed pixels are square +' Returns status 0 : OK, -1 : too wide, -2 : too high, -3 : array too small +' The printer can take a long time to process the data and start printing +Public Sub PrintImage(img As AnImage) As Int + ' max width = 72 ' 72mm/576 bits wide + ' max height = 512 ' 64mm/512 bits high + If img.width > 72 Then Return -1 + If img.height > 512 Then Return -2 + If img.data.Length < img.width * img.height Then Return -3 + Dim xh As Int = img.width / 256 + Dim xl As Int = img.width - xh * 256 + Dim yh As Int = img.height / 256 + Dim yl As Int = img.height - yh * 256 + Dim params(5) As Byte + params(0) = 0 ' + params(1) = xl + params(2) = xh + params(3) = yl + params(4) = yh + WriteString(GS & "v0") + WriteBytes(params) + WriteBytes(img.data) + WriteString(CRLF) + Return 0 +End Sub + +' Printer support method for pre-processing images to print by PrintImage +' Takes an array of image pixels and packs it for use with PrintImage +' Each byte in the imagedata array is a single pixel valued zero or non-zero for white and black +' The returned array is 8 x smaller and packs 8 horizontal black or white pixels into each byte +' If the horizontal size of the image is not a multiple of 8 it will be truncated so that it is. +Public Sub PackImage(imagedata As AnImage) As AnImage + Dim xbytes As Int = imagedata.width/8 + Dim pixels(xbytes * imagedata.height) As Byte + Dim masks(8) As Byte + masks(0) = 0x80 + masks(1) = 0x40 + masks(2) = 0x20 + masks(3) = 0x10 + masks(4) = 0x08 + masks(5) = 0x04 + masks(6) = 0x02 + masks(7) = 0x01 + Dim index As Int = 0 + For y = 0 To imagedata.Height - 1 + For x = 0 To xbytes - 1 + Dim xbyte As Byte = 0 + For b = 0 To 7 + ' get a pixel + Dim pix As Byte = imagedata.Data(index) + If pix <> 0 Then + xbyte = xbyte + masks(b) + End If + index = index + 1 + Next + pixels(y*xbytes + x) = xbyte + Next + Next + Dim ret As AnImage + ret.Width = xbytes + ret.Height = imagedata.Height + ret.Data = pixels + Return ret +End Sub + + +' ESC * printing +'--------------- + +' Prints the given image slice at the specified height and width using the "ESC *" command +' Image data is supplied as bytes each containing 8 bits of vertical image data +' Pixels are not square, the width:height ratio varies with density and line height +' Returns status 0 = OK, -1 = too wide, -2 = too high, -3 = wrong array length +' Line spacing needs to be set to 0 if printing consecutive slices +' The printed pixels are not square, the ratio varies with the highdensity and dots24 parameter settings +' The highdensity parameter chooses high or low horizontal bit density when printed +' The dots24 parameter chooses 8 or 24 bit data slice height when printed +' Not(highdensity) +' Maximum width is 288 bits. Horizontal dpi is approximately 90 +' MSB of each byte is the highest image pixel, the LSB is the lowest +' highdensity +' Maximum width is 576 bits. Horizontal dpi is approximately 180 +' Not(dots24) +' Vertical printed height is 8 bits at approximately 60dpi +' One byte in the data Array represents one vertical line when printed +' Array size is the same as the width +' MSB of each byte is the highest image pixel, the LSB is the lowest +' dots24 +' Vertical printed height is 24 bits at approximately 180dpi +' Three consecutive bytes in the data array represent one vertical 24bit line when printed +' Array size is 3 times the width +' Byte(n+0) is the highest, byte (n+2) us the lowest +' MSB of each byte is the highest image pixel, the LSB is the lowest +Public Sub PrintImage2(width As Int, data() As Byte, highdensity As Boolean, dotds24 As Boolean) As Int + Dim d As String = Chr(0) + If Not(highdensity) And Not(dotds24 ) Then + d = Chr(0) + If width > 288 Then Return -1 + If data.Length <> width Then Return -3 + Else If highdensity And Not(dotds24) Then + d = Chr(1) + If width > 576 Then Return -1 + If data.Length <> width Then Return -3 + Else If Not(highdensity) And dotds24 Then + d = Chr(32) + If width > 288 Then Return -1 + If data.Length <> width*3 Then Return -3 + Else ' highdensity And dotds24 + d = Chr(33) + If width > 576 Then Return -1 + If data.Length <> width*3 Then Return -3 + End If + Dim xh As Int = width / 256 + Dim xl As Int = width - xh * 256 + Dim params(2) As Byte + params(0) = xl + params(1) = xh + WriteString(ESC & "*" & d) + WriteBytes(params) + WriteBytes(data) + WriteString(CRLF) + Return 0 +End Sub + +' Printer support method for pre-processing images to print by PrintImage2 +' Takes an array of image pixels and packs one slice of it for use with PrintImage2 +' Each byte in the imagedata array is a single pixel valued zero or non-zero for white and black +' The returned array packs 8 vertical black or white pixels into each byte +' If dots24 is True then the slice is 24 pixels high otherwise it is 8 pixels high +Public Sub PackImageSlice(img As AnImage, slice As Int, dots24 As Boolean) As Byte() + Dim bytes As Int = img.width + If dots24 Then + Dim pixels(bytes * 3) As Byte + Dim slicestart As Int = slice * bytes * 8 * 3 + Else + Dim pixels(bytes) As Byte + Dim slicestart As Int = slice * bytes * 8 + End If + + Dim masks(8) As Byte + masks(0) = 0x80 + masks(1) = 0x40 + masks(2) = 0x20 + masks(3) = 0x10 + masks(4) = 0x08 + masks(5) = 0x04 + masks(6) = 0x02 + masks(7) = 0x01 + ' You could compress this into a single code block but I left it as two to make it more obvious what's happening + If dots24 Then + For x = 0 To bytes - 1 + For s = 0 To 2 + Dim xbyte As Byte = 0 + For b = 0 To 7 + ' get a pixel + Dim pix As Byte = img.Data(slicestart + ((b + s*8) * bytes) + x) + If pix <> 0 Then + xbyte = xbyte + masks(b) + End If + Next + pixels(x*3+s) = xbyte + Next + Next + Else + For x = 0 To bytes - 1 + Dim xbyte As Byte = 0 + For b = 0 To 7 + ' get a pixel + Dim pix As Byte = img.Data(slicestart + (b * bytes) + x) + If pix <> 0 Then + xbyte = xbyte + masks(b) + End If + Next + pixels(x) = xbyte + Next + End If + Return pixels +End Sub + +'---------------- +'Barcode commands +'---------------- + +' Set the height of a 2D bar code as number of dots vertically, 1 to 255 +' Automatically resets to the default after printing the barcode +Public Sub setBarCodeHeight(height As Int) + WriteString(GS & "h") + Dim params(1) As Byte + params(0) = height + WriteBytes(params) +End Sub + +' Set the left inset of a 2D barcode, 0 to 255 +' This does not reset on receipt of RESET +Public Sub setBarCodeLeft(left As Int) + WriteString(GS & "x") + Dim params(1) As Byte + params(0) = left + WriteBytes(params) +End Sub + +' Set the width of each bar in a 2D barcode. width value is 2 to 6, default is 3 +' 2 = 0.250, 3 - 0.375, 4 = 0.560, 5 = 0.625, 6 = 0.75 +' Resets to default after printing the barcode +Public Sub setBarCodeWidth(width As Int) + WriteString(GS & "w") + Dim params(1) As Byte + params(0) = width + WriteBytes(params) +End Sub + +'Selects the printing position of HRI (Human Readable Interpretation) characters when printing a 2D bar code. +'0 Not printed, 1 Above the bar code, 2 Below the bar code, 3 Both above And below the bar code +' Automatically resets to the default of 0 after printing the barcode +' The docs say this can be Chr(0, 1 2 or 3) or "0" "1" "2" or "3" but the numeric characters don't work +Public Sub setHriPosn(posn As Int) + WriteString(GS & "H") + Dim params(1) As Byte + params(0) = posn + WriteBytes(params) +End Sub + +'Selects the font for HRI (Human Readable Interpretation) characters when printing a 2D bar code. +'0 Font A (12 x 24), 1 Font B (9 x 17) +' Automatically resets to the default of 0 after printing the barcode +' The docs say this can be Chr(0 or 1) or "0" or "1" but the numeric characters don't work +Public Sub setHriFont(font As Int) + WriteString(GS & "f" & Chr(font)) +End Sub + +' If given invalid data no barcode is printed, only strange characters +' CODABAR needs any of A,B,C or D at the start and end of the barcode. Some decoders may not like them anywhere else +' Bartype Code Number of characters Permitted values +' A | UPC-A | 11 or 12 characters | 0 to 9 | The 12th printed character is always the check digit +' B | UPC-E | 6 characters | 0 to 9 | The 12th printed character is always the check digit +' C | EAN13 | 12 or 13 characters | 0 to 9 | The 12th printed character is always the check digit +' D | EAN8 | 7 or 8 characters | 0 to 9 | The 8th printed character is always the check digit +' E | CODE39 | 1 or more characters | 0 to 9, A to Z, Space $ % + - . / +' F | ITF | 1 or more characters | 0 to 9 | even number of characters only +' G | CODABAR| 3 to 255 characters | 0 to 9, A to D, $ + - . / : | needs any of A,B,C or D at the start and end +' H | CODE93 | 1 to 255 characters | Same as CODE39 +' I | CODE128| 2 to 255 characters | entire 7 bit ASCII set +Public Sub WriteBarCode(bartype As String, data As String) + Dim databytes() As Byte = data.GetBytes("ASCII") + Dim dlow As Int = databytes.Length + Log("Barcode " & bartype & ", Size " & dlow & ", " & data) + WriteString(GS & "k" & bartype.ToUpperCase.CharAt(0)) + Dim params(1) As Byte + params(0) = dlow + WriteBytes(params) + WriteBytes(databytes) +End Sub + +' On my printer QR codes don't seem to be able to be decoded and on high ECs look obviously wrong :( +' size is 1 to 40, 0 is auto-size. Successive versions increase module size by 4 each side +' size = 1 is 21x21, 2 = 25x25 ... size 40 = 177x177 +' EC is error correction level, "L"(7%) or "M"(15%) or "Q"(25%) or "H"(30%) +' scale is 1 to 8, 1 is smallest, 8 is largest +Public Sub WriteQRCode(size As Int, EC As String, scale As Int, data As String) + Dim databytes() As Byte = data.GetBytes("ISO-8859-1") + Dim dhigh As Int = databytes.Length / 256 + Dim dlow As Int = databytes.Length - dhigh*256 + Log("QR Code : Size " & size & ", EC " & EC & ", Scale " & scale & ", Size " & dlow & " " & dhigh & " : Data = " & data) + Dim params(3) As Byte + params(0) = scale + params(1) = dlow + params(2) = dhigh + WriteString(ESC & "Z" & Chr(size) & EC.ToUpperCase.CharAt(0)) + WriteBytes(params) + WriteBytes(databytes) +End Sub + + +'**************** +' PRIVATE METHODS +'**************** + +'----------------------- +' Internal Serial Events +'----------------------- + +Private Sub Serial1_Connected (Success As Boolean) + If Success Then + Astream.Initialize(Serial1.InputStream, Serial1.OutputStream, "astream") + Connected = True + ConnectedError = "" + Serial1.Listen + Else + Connected = False + ConnectedError = LastException.Message + End If + If SubExists(CallBack, EventName & "_Connected") Then + CallSub2(CallBack, EventName & "_Connected", Success) + End If +End Sub + +'---------------------------- +' Internal AsyncStream Events +'---------------------------- + +Private Sub AStream_NewData (Buffer() As Byte) + If SubExists(CallBack, EventName & "_NewData") Then + CallSub2(CallBack, EventName & "_NewData", Buffer) + End If + Log("Data " & Buffer(0)) +End Sub + +Private Sub AStream_Error + If SubExists(CallBack, EventName & "_Error") Then + CallSub(CallBack, EventName & "_Error") + End If +End Sub + +Private Sub AStream_Terminated + Connected = False + If SubExists(CallBack, EventName & "_Terminated") Then + CallSub(CallBack, EventName & "_Terminated") + End If +End Sub diff --git a/B4A/Files/Logo Guna-01.png b/B4A/Files/Logo Guna-01.png new file mode 100644 index 0000000..3438338 Binary files /dev/null and b/B4A/Files/Logo Guna-01.png differ diff --git a/B4A/Files/alert2.png b/B4A/Files/alert2.png new file mode 100644 index 0000000..44d3b7e Binary files /dev/null and b/B4A/Files/alert2.png differ diff --git a/B4A/Files/alerta.jpg b/B4A/Files/alerta.jpg new file mode 100644 index 0000000..5edc6ba Binary files /dev/null and b/B4A/Files/alerta.jpg differ diff --git a/B4A/Files/alerta_amarilla.png b/B4A/Files/alerta_amarilla.png new file mode 100644 index 0000000..4f4beac Binary files /dev/null and b/B4A/Files/alerta_amarilla.png differ diff --git a/B4A/Files/amarillo.png b/B4A/Files/amarillo.png new file mode 100644 index 0000000..44e8c49 Binary files /dev/null and b/B4A/Files/amarillo.png differ diff --git a/B4A/Files/anterior.jpg b/B4A/Files/anterior.jpg new file mode 100644 index 0000000..48e56e4 Binary files /dev/null and b/B4A/Files/anterior.jpg differ diff --git a/B4A/Files/bus-ar.png b/B4A/Files/bus-ar.png new file mode 100644 index 0000000..60678c7 Binary files /dev/null and b/B4A/Files/bus-ar.png differ diff --git a/B4A/Files/carrito.png b/B4A/Files/carrito.png new file mode 100644 index 0000000..03889f6 Binary files /dev/null and b/B4A/Files/carrito.png differ diff --git a/B4A/Files/celltitle.bal b/B4A/Files/celltitle.bal new file mode 100644 index 0000000..0565ba8 Binary files /dev/null and b/B4A/Files/celltitle.bal differ diff --git a/B4A/Files/cliente.bal b/B4A/Files/cliente.bal new file mode 100644 index 0000000..34d90a2 Binary files /dev/null and b/B4A/Files/cliente.bal differ diff --git a/B4A/Files/clientes.bal b/B4A/Files/clientes.bal new file mode 100644 index 0000000..199f19b Binary files /dev/null and b/B4A/Files/clientes.bal differ diff --git a/B4A/Files/comis.bal b/B4A/Files/comis.bal new file mode 100644 index 0000000..ef941f9 Binary files /dev/null and b/B4A/Files/comis.bal differ diff --git a/B4A/Files/detalle_promo.bal b/B4A/Files/detalle_promo.bal new file mode 100644 index 0000000..c36e1c7 Binary files /dev/null and b/B4A/Files/detalle_promo.bal differ diff --git a/B4A/Files/durakelo.png b/B4A/Files/durakelo.png new file mode 100644 index 0000000..e1c956c Binary files /dev/null and b/B4A/Files/durakelo.png differ diff --git a/B4A/Files/durakelo1.png b/B4A/Files/durakelo1.png new file mode 100644 index 0000000..00cb434 Binary files /dev/null and b/B4A/Files/durakelo1.png differ diff --git a/B4A/Files/encuessta_m3.bal b/B4A/Files/encuessta_m3.bal new file mode 100644 index 0000000..2610037 Binary files /dev/null and b/B4A/Files/encuessta_m3.bal differ diff --git a/B4A/Files/encuesta.bal b/B4A/Files/encuesta.bal new file mode 100644 index 0000000..83e8e48 Binary files /dev/null and b/B4A/Files/encuesta.bal differ diff --git a/B4A/Files/encuesta_m4.bal b/B4A/Files/encuesta_m4.bal new file mode 100644 index 0000000..0e0addd Binary files /dev/null and b/B4A/Files/encuesta_m4.bal differ diff --git a/B4A/Files/encuesta_m5.bal b/B4A/Files/encuesta_m5.bal new file mode 100644 index 0000000..fc602f7 Binary files /dev/null and b/B4A/Files/encuesta_m5.bal differ diff --git a/B4A/Files/encuesta_ped.bal b/B4A/Files/encuesta_ped.bal new file mode 100644 index 0000000..154f5df Binary files /dev/null and b/B4A/Files/encuesta_ped.bal differ diff --git a/B4A/Files/engrane.jpg b/B4A/Files/engrane.jpg new file mode 100644 index 0000000..01159de Binary files /dev/null and b/B4A/Files/engrane.jpg differ diff --git a/B4A/Files/engrane18.png b/B4A/Files/engrane18.png new file mode 100644 index 0000000..525542a Binary files /dev/null and b/B4A/Files/engrane18.png differ diff --git a/B4A/Files/engraneactual.png b/B4A/Files/engraneactual.png new file mode 100644 index 0000000..525542a Binary files /dev/null and b/B4A/Files/engraneactual.png differ diff --git a/B4A/Files/errormanager.bal b/B4A/Files/errormanager.bal new file mode 100644 index 0000000..ff0d659 Binary files /dev/null and b/B4A/Files/errormanager.bal differ diff --git a/B4A/Files/esncuesta_m2.bal b/B4A/Files/esncuesta_m2.bal new file mode 100644 index 0000000..8818dee Binary files /dev/null and b/B4A/Files/esncuesta_m2.bal differ diff --git a/B4A/Files/fondo_kmt.jpg b/B4A/Files/fondo_kmt.jpg new file mode 100644 index 0000000..4055faf Binary files /dev/null and b/B4A/Files/fondo_kmt.jpg differ diff --git a/B4A/Files/foto.bal b/B4A/Files/foto.bal new file mode 100644 index 0000000..19097a0 Binary files /dev/null and b/B4A/Files/foto.bal differ diff --git a/B4A/Files/gps20.png b/B4A/Files/gps20.png new file mode 100644 index 0000000..23bea1a Binary files /dev/null and b/B4A/Files/gps20.png differ diff --git a/B4A/Files/guardagestion.bal b/B4A/Files/guardagestion.bal new file mode 100644 index 0000000..6272b4e Binary files /dev/null and b/B4A/Files/guardagestion.bal differ diff --git a/B4A/Files/guna-fondo.png b/B4A/Files/guna-fondo.png new file mode 100644 index 0000000..e29647b Binary files /dev/null and b/B4A/Files/guna-fondo.png differ diff --git a/B4A/Files/guna.png b/B4A/Files/guna.png new file mode 100644 index 0000000..1bbd69d Binary files /dev/null and b/B4A/Files/guna.png differ diff --git a/B4A/Files/guna18.png b/B4A/Files/guna18.png new file mode 100644 index 0000000..a8cfb51 Binary files /dev/null and b/B4A/Files/guna18.png differ diff --git a/B4A/Files/guna_viejo.png b/B4A/Files/guna_viejo.png new file mode 100644 index 0000000..d937027 Binary files /dev/null and b/B4A/Files/guna_viejo.png differ diff --git a/B4A/Files/hacer pedido.jpg b/B4A/Files/hacer pedido.jpg new file mode 100644 index 0000000..eee236f Binary files /dev/null and b/B4A/Files/hacer pedido.jpg differ diff --git a/B4A/Files/hacerpedido30.png b/B4A/Files/hacerpedido30.png new file mode 100644 index 0000000..ebb13a0 Binary files /dev/null and b/B4A/Files/hacerpedido30.png differ diff --git a/B4A/Files/ic_cloud_download_white_24dp.png b/B4A/Files/ic_cloud_download_white_24dp.png new file mode 100644 index 0000000..4c5d2d0 Binary files /dev/null and b/B4A/Files/ic_cloud_download_white_24dp.png differ diff --git a/B4A/Files/infonavit1.jpg b/B4A/Files/infonavit1.jpg new file mode 100644 index 0000000..b8cce4c Binary files /dev/null and b/B4A/Files/infonavit1.jpg differ diff --git a/B4A/Files/itembuttonblue.png b/B4A/Files/itembuttonblue.png new file mode 100644 index 0000000..af4dc0b Binary files /dev/null and b/B4A/Files/itembuttonblue.png differ diff --git a/B4A/Files/keymon_logo.png b/B4A/Files/keymon_logo.png new file mode 100644 index 0000000..945e546 Binary files /dev/null and b/B4A/Files/keymon_logo.png differ diff --git a/B4A/Files/kmt.db b/B4A/Files/kmt.db new file mode 100644 index 0000000..4930646 Binary files /dev/null and b/B4A/Files/kmt.db differ diff --git a/B4A/Files/login.bal b/B4A/Files/login.bal new file mode 100644 index 0000000..a0f910e Binary files /dev/null and b/B4A/Files/login.bal differ diff --git a/B4A/Files/logo guna_192x192.png b/B4A/Files/logo guna_192x192.png new file mode 100644 index 0000000..4dcd00c Binary files /dev/null and b/B4A/Files/logo guna_192x192.png differ diff --git a/B4A/Files/logo sanfer.jpg b/B4A/Files/logo sanfer.jpg new file mode 100644 index 0000000..791fe4f Binary files /dev/null and b/B4A/Files/logo sanfer.jpg differ diff --git a/B4A/Files/logo-guna-18.png b/B4A/Files/logo-guna-18.png new file mode 100644 index 0000000..e055817 Binary files /dev/null and b/B4A/Files/logo-guna-18.png differ diff --git a/B4A/Files/logo_exitus1.jpg b/B4A/Files/logo_exitus1.jpg new file mode 100644 index 0000000..b8cce4c Binary files /dev/null and b/B4A/Files/logo_exitus1.jpg differ diff --git a/B4A/Files/mainpage.bal b/B4A/Files/mainpage.bal new file mode 100644 index 0000000..acba0d3 Binary files /dev/null and b/B4A/Files/mainpage.bal differ diff --git a/B4A/Files/malo.jpg b/B4A/Files/malo.jpg new file mode 100644 index 0000000..bbf3c87 Binary files /dev/null and b/B4A/Files/malo.jpg differ diff --git a/B4A/Files/mapa.bal b/B4A/Files/mapa.bal new file mode 100644 index 0000000..7ed1bb4 Binary files /dev/null and b/B4A/Files/mapa.bal differ diff --git a/B4A/Files/mapa_rutas.bal b/B4A/Files/mapa_rutas.bal new file mode 100644 index 0000000..49d8033 Binary files /dev/null and b/B4A/Files/mapa_rutas.bal differ diff --git a/B4A/Files/maparutas.bal b/B4A/Files/maparutas.bal new file mode 100644 index 0000000..f12b8b6 Binary files /dev/null and b/B4A/Files/maparutas.bal differ diff --git a/B4A/Files/mas-azul-red.png b/B4A/Files/mas-azul-red.png new file mode 100644 index 0000000..2c9674d Binary files /dev/null and b/B4A/Files/mas-azul-red.png differ diff --git a/B4A/Files/mas-azul-red1.png b/B4A/Files/mas-azul-red1.png new file mode 100644 index 0000000..c17f050 Binary files /dev/null and b/B4A/Files/mas-azul-red1.png differ diff --git a/B4A/Files/mas-azul.png b/B4A/Files/mas-azul.png new file mode 100644 index 0000000..c3741aa Binary files /dev/null and b/B4A/Files/mas-azul.png differ diff --git a/B4A/Files/menos-red.png b/B4A/Files/menos-red.png new file mode 100644 index 0000000..d52b1c9 Binary files /dev/null and b/B4A/Files/menos-red.png differ diff --git a/B4A/Files/menos.png b/B4A/Files/menos.png new file mode 100644 index 0000000..9961ef2 Binary files /dev/null and b/B4A/Files/menos.png differ diff --git a/B4A/Files/menosred.png b/B4A/Files/menosred.png new file mode 100644 index 0000000..f13f1fd Binary files /dev/null and b/B4A/Files/menosred.png differ diff --git a/B4A/Files/nota (conflict 2022-07-08-00-16-40).bal b/B4A/Files/nota (conflict 2022-07-08-00-16-40).bal new file mode 100644 index 0000000..bbd9a5a Binary files /dev/null and b/B4A/Files/nota (conflict 2022-07-08-00-16-40).bal differ diff --git a/B4A/Files/nota.bal b/B4A/Files/nota.bal new file mode 100644 index 0000000..e000f71 Binary files /dev/null and b/B4A/Files/nota.bal differ diff --git a/B4A/Files/noventa.bal b/B4A/Files/noventa.bal new file mode 100644 index 0000000..9382024 Binary files /dev/null and b/B4A/Files/noventa.bal differ diff --git a/B4A/Files/nuevo-cliente20.png b/B4A/Files/nuevo-cliente20.png new file mode 100644 index 0000000..e36a2dc Binary files /dev/null and b/B4A/Files/nuevo-cliente20.png differ diff --git a/B4A/Files/nuevocliente.bal b/B4A/Files/nuevocliente.bal new file mode 100644 index 0000000..14bf083 Binary files /dev/null and b/B4A/Files/nuevocliente.bal differ diff --git a/B4A/Files/nvo cliente.jpg b/B4A/Files/nvo cliente.jpg new file mode 100644 index 0000000..f45ceab Binary files /dev/null and b/B4A/Files/nvo cliente.jpg differ diff --git a/B4A/Files/p&g.png b/B4A/Files/p&g.png new file mode 100644 index 0000000..5580a2c Binary files /dev/null and b/B4A/Files/p&g.png differ diff --git a/B4A/Files/palomita_verde.png b/B4A/Files/palomita_verde.png new file mode 100644 index 0000000..f8e11e6 Binary files /dev/null and b/B4A/Files/palomita_verde.png differ diff --git a/B4A/Files/pedido.bal b/B4A/Files/pedido.bal new file mode 100644 index 0000000..1841471 Binary files /dev/null and b/B4A/Files/pedido.bal differ diff --git a/B4A/Files/planfia_logo.png b/B4A/Files/planfia_logo.png new file mode 100644 index 0000000..4b784fa Binary files /dev/null and b/B4A/Files/planfia_logo.png differ diff --git a/B4A/Files/planfia_logo_old.png b/B4A/Files/planfia_logo_old.png new file mode 100644 index 0000000..4adb130 Binary files /dev/null and b/B4A/Files/planfia_logo_old.png differ diff --git a/B4A/Files/planfia_logo_old2.png b/B4A/Files/planfia_logo_old2.png new file mode 100644 index 0000000..316f337 Binary files /dev/null and b/B4A/Files/planfia_logo_old2.png differ diff --git a/B4A/Files/principal.bal b/B4A/Files/principal.bal new file mode 100644 index 0000000..0c37f28 Binary files /dev/null and b/B4A/Files/principal.bal differ diff --git a/B4A/Files/proditem.bal b/B4A/Files/proditem.bal new file mode 100644 index 0000000..f80efe2 Binary files /dev/null and b/B4A/Files/proditem.bal differ diff --git a/B4A/Files/productos.bal b/B4A/Files/productos.bal new file mode 100644 index 0000000..551a126 Binary files /dev/null and b/B4A/Files/productos.bal differ diff --git a/B4A/Files/promociones.bal b/B4A/Files/promociones.bal new file mode 100644 index 0000000..048191f Binary files /dev/null and b/B4A/Files/promociones.bal differ diff --git a/B4A/Files/qr.bal b/B4A/Files/qr.bal new file mode 100644 index 0000000..0faca59 Binary files /dev/null and b/B4A/Files/qr.bal differ diff --git a/B4A/Files/qr_gallina.jpg b/B4A/Files/qr_gallina.jpg new file mode 100644 index 0000000..95bce80 Binary files /dev/null and b/B4A/Files/qr_gallina.jpg differ diff --git a/B4A/Files/resdia.bal b/B4A/Files/resdia.bal new file mode 100644 index 0000000..c6ee66d Binary files /dev/null and b/B4A/Files/resdia.bal differ diff --git a/B4A/Files/resdia.jpg b/B4A/Files/resdia.jpg new file mode 100644 index 0000000..bbdc493 Binary files /dev/null and b/B4A/Files/resdia.jpg differ diff --git a/B4A/Files/resdia20.png b/B4A/Files/resdia20.png new file mode 100644 index 0000000..d6fd3ef Binary files /dev/null and b/B4A/Files/resdia20.png differ diff --git a/B4A/Files/rojo.png b/B4A/Files/rojo.png new file mode 100644 index 0000000..81d363d Binary files /dev/null and b/B4A/Files/rojo.png differ diff --git a/B4A/Files/salma.jpg b/B4A/Files/salma.jpg new file mode 100644 index 0000000..3293909 Binary files /dev/null and b/B4A/Files/salma.jpg differ diff --git a/B4A/Files/salma.png b/B4A/Files/salma.png new file mode 100644 index 0000000..a0c3190 Binary files /dev/null and b/B4A/Files/salma.png differ diff --git a/B4A/Files/seleccion.bal b/B4A/Files/seleccion.bal new file mode 100644 index 0000000..d1fb79b Binary files /dev/null and b/B4A/Files/seleccion.bal differ diff --git a/B4A/Files/senial.jpg b/B4A/Files/senial.jpg new file mode 100644 index 0000000..a758065 Binary files /dev/null and b/B4A/Files/senial.jpg differ diff --git a/B4A/Files/sync.png b/B4A/Files/sync.png new file mode 100644 index 0000000..ff7d32e Binary files /dev/null and b/B4A/Files/sync.png differ diff --git a/B4A/Files/tache_rojo.png b/B4A/Files/tache_rojo.png new file mode 100644 index 0000000..2f5f59d Binary files /dev/null and b/B4A/Files/tache_rojo.png differ diff --git a/B4A/Files/telefonos.bal b/B4A/Files/telefonos.bal new file mode 100644 index 0000000..1fe0b8b Binary files /dev/null and b/B4A/Files/telefonos.bal differ diff --git a/B4A/Files/ticket dia.jpg b/B4A/Files/ticket dia.jpg new file mode 100644 index 0000000..887000b Binary files /dev/null and b/B4A/Files/ticket dia.jpg differ diff --git a/B4A/Files/ticketdia20.png b/B4A/Files/ticketdia20.png new file mode 100644 index 0000000..03e33ce Binary files /dev/null and b/B4A/Files/ticketdia20.png differ diff --git a/B4A/Files/ticketsdia.bal b/B4A/Files/ticketsdia.bal new file mode 100644 index 0000000..bc29981 Binary files /dev/null and b/B4A/Files/ticketsdia.bal differ diff --git a/B4A/Files/tiendita.jpg b/B4A/Files/tiendita.jpg new file mode 100644 index 0000000..5f52563 Binary files /dev/null and b/B4A/Files/tiendita.jpg differ diff --git a/B4A/Files/verde.png b/B4A/Files/verde.png new file mode 100644 index 0000000..59edded Binary files /dev/null and b/B4A/Files/verde.png differ diff --git a/B4A/FirebaseMessaging.bas b/B4A/FirebaseMessaging.bas new file mode 100644 index 0000000..4ef721c --- /dev/null +++ b/B4A/FirebaseMessaging.bas @@ -0,0 +1,226 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Service +Version=10.2 +@EndOfDesignText@ +'/////////////////////////////////////////////////////////////////////////////////////// +'/// Agregar estas lineas al editor de manifiestos +' +' CreateResourceFromFile(Macro, FirebaseAnalytics.GooglePlayBase) +' CreateResourceFromFile(Macro, FirebaseAnalytics.Firebase) +' CreateResourceFromFile(Macro, FirebaseAnalytics.FirebaseAnalytics) +' CreateResourceFromFile(Macro, FirebaseNotifications.FirebaseNotifications) +' +'/// Agregar modulo de servicio nuevo FirebaseMessaging y copiar este modulo +' +'/// Bajar el archivo google-services.json de la consola de Firebase (https://console.firebase.google.com/) +'/// El nombre de la app en el archivo json tiene que ser el mismo que el nombre del paquete (Proyecto/Conf de Compilacion/Paquete) +' +'/// En Starter agregar esta linea +' +' Sub Service_Create +' CallSubDelayed(FirebaseMessaging, "SubscribeToTopics") +' End Sub +' +'/// En Main en Sub Process_Globals agregar esta linea +' +' Private const API_KEY As String = "AAAAv__xxxxxxxxxxxxx-xxxxxxxxxxxxxx-xxxxxxxxxxxx" +' +'/// Esta llave se consigue igualmente en la consola de Firebase, configuracion de proyecto, Cloud Messaging, +'/// es la clave de servidor. +'/// +'/// Se necesitan agregar las librerías: FirebaseAnalitics, FirebaseNotifications, JSON y OkHttpUtils2 +'/// ... JSON es necesario si se van a enviar mensajes, si solo se van a recibir, no es necesario. +' +'/////////////////////////////////////////////////////////////////////////////////////// + +Sub Process_Globals +' Private fm As FirebaseMessaging + Private const API_KEY As String = "AAAAv1qt3Lk:APA91bECIR-pHn6ul53eYyoVlpPuOo85RO-0zcAgEXwE7vqw8DFSbBtCaCINiqWQAkBBZXxHtQMdpU6B-jHIqgFKVL196UgwHv0Gw6_IgmipfV_NiItjzlH9d2QNpGLp9y_JUKVjUEhP" 'Api_Key cheveguerra@gmail.com/Pusher + Dim locRequest As String +' Dim phn As Phone + Dim pe As PhoneEvents + Dim c As Cursor + Public GZip As GZipStrings + Dim Sprvsr As String = "Sprv-Cedex" ' El topico al que se mandan los mensajes push + Dim Subscrito As String + Dim au As String 'ignore +End Sub + +Sub Service_Create +' fm.Initialize("fm") 'Inicializamos FirebaseMessaging + pe.Initialize("pe") 'Para obtener la bateria +End Sub + +'Public Sub SubscribeToTopics +'' fm.SubscribeToTopic("Trckr") 'Topico general Keymon +' fm.SubscribeToTopic("Trckr") 'Tracker Global +'' Log("Suscrito al tracker global") +' fm.SubscribeToTopic("Trckr-Cedex") 'Topico de Guna +' If "Cdx_"&B4XPages.MainPage.usuario <> Subscrito Then +' fm.SubscribeToTopic("Cdx_"&B4XPages.MainPage.usuario) 'Propio (you can subscribe to more topics) +' fm.UnsubscribeFromTopic(Subscrito) 'Unsubscribe from topic +' End If +'' Log("Subscrito a "&"Cdx_"&B4XPages.MainPage.usuario) +' Subscrito = "Cdx_"&B4XPages.MainPage.usuario +'' Log(fm.token) +'' fm.UnsubscribeFromTopic("Sprvsr") 'Unsubscribe from topic +'End Sub + +Sub Service_Start (StartingIntent As Intent) +' If StartingIntent.IsInitialized Then fm.HandleIntent(StartingIntent) + Sleep(0) + Service.StopAutomaticForeground 'remove if not using B4A v8+. + StartServiceAt(Me, DateTime.Now + 15 * DateTime.TicksPerMinute, True) 'Iniciamos servicio cada XX minutos +End Sub + +'Sub fm_MessageArrived (Message As RemoteMessage) +' Log("Message arrived") +' Log($"Message data: ${Message.GetData}"$) +'' getPhnId +' If Message.GetData.ContainsKey("t") Then +' Dim tipos As List = Regex.Split(",",Message.GetData.Get("t")) +' If tipos.IndexOf("pu") <> -1 Or tipos.IndexOf("au") <> -1 Then 'Si es una peticion de ubicacion +' Log("Es una peticion de ubicacion") +' locRequest="Activa" +' Log("Llamamos StartFLPSmall") +' CallSubDelayed(Tracker, "StartFLPSmall") +' CallSubDelayed(Tracker, "StartFLP") +' End If +' If tipos.IndexOf("au") <> -1 Then 'Si es una actualizacion de ubicacion +' au = 1 +' End If +' If tipos.IndexOf("ping") <> -1 Then 'Si es un ping +' Log("Es un ping") +' Log("Mandamos pong") +' Dim params As Map = CreateMap("topic":Sprvsr,"title":"pong", "body":B4XPages.MainPage.usuario&" - Recibi mensaje "&Message.GetData.Get("title"), "t":"pong") +' SendMessage(params) +' End If +' If tipos.IndexOf("bgps") <> -1 Then 'Si es una instruccion de borrar archivo gps +' Log("Es una instruccion de borrar archivo gps") +' Log("Borramos archivo gps") +' borramosArchivoGPS +' End If +' If tipos.IndexOf("dr") <> -1 Then 'Si es una peticion de ruta gps +' Log("Es una peticion de Ruta GPS") +' Dim rutaGpsCmp As String = dameRuta +' Dim params As Map = CreateMap("topic":Sprvsr,"title":"ruta", "body":B4XPages.MainPage.usuario&" - Recibi mensaje "&Message.GetData.Get("title"), "t":"ruta", "r":rutaGpsCmp) +' SendMessage(params) +' End If +' If tipos.IndexOf("bgps2") <> -1 Then 'Si es una instruccion de borrar DB gps +' Log("Es una instruccion de borrar BD gps") +' Log("Borramos BD gps") +' borraGPSHist +' End If +' If tipos.IndexOf("pu") = -1 And tipos.IndexOf("au") = -1 And tipos.IndexOf("ping") = -1 And tipos.IndexOf("dr") = -1 Then +' Log("No es ping ni solicitud de ubicacion o ruta, entonces no hacemos nada") +' End If +' End If +'' Dim n As Notification +'' n.Initialize +'' n.Icon = "icon" +'' n.SetInfo("Guna", "Guna", Main) +'' n.Notify(1) +'End Sub + +Sub Service_Destroy + +End Sub + +Sub SendMessage(params As Map) + Dim topic As String= params.Get("topic") + Dim title As String= params.Get("title") + Dim body As String= params.Get("body") + Dim tipo As String= params.Get("t") + If params.ContainsKey("r") Then + Log("Con ruta") + Dim rutaGpsCmp As String= params.Get("r") + Else + Log("Sin ruta") + Dim rutaGpsCmp As String = "" + End If + Dim Job As HttpJob + Job.Initialize("fcm", Me) + Dim m As Map = CreateMap("to": $"/topics/${topic}"$) + Dim data As Map = CreateMap("title":title, "body":body, "d":B4XPages.MainPage.usuario, "t":tipo, "b":B4XPages.MainPage.batt, "mt":B4XPages.MainPage.montoActual, "r":rutaGpsCmp, "v":B4XPages.MainPage.v) + m.Put("data", data) + Dim jg As JSONGenerator + jg.Initialize(m) + Job.PostString("https://fcm.googleapis.com/fcm/send", jg.ToString) + Job.GetRequest.SetContentType("application/json;charset=UTF-8") + Job.GetRequest.SetHeader("Authorization", "key=" & API_KEY) + Log(m) 'ignore +End Sub + +Sub mandamosLoc(coords As String) +' Log("Iniciamos mandamosLoc "&coords) +' Log("locRequest="&locRequest) + If locRequest="Activa" Then 'Si hay solicitud de ubicacion, entonces la mandamos ... + Dim params As Map = CreateMap("topic":Sprvsr,"title":"ubicacionRecibida", "body":coords, "t":"u") + SendMessage(params) + locRequest="Enviada" + CallSubDelayed(Tracker,"CreateLocationRequest") + End If +End Sub + +Sub guardaInfoEnArchivo(coords As String) 'ignore 'Escribimos coordenadas y fecha a un archivo de texto + Log("Guardamos ubicacion en BD") + Dim latlon() As String = Regex.Split(",", coords) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO RUTA_GPS(FECHA, LAT, LON) VALUES (?,?,?)", Array As Object (latlon(2),latlon(0),latlon(1))) +End Sub + +Sub borramosArchivoGPS + Dim out As OutputStream = File.OpenOutput(File.DirRootExternal, "gps.txt", False) + Dim s As String = "" + Dim t() As Byte = s.GetBytes("UTF-8") + out.WriteBytes(t, 0, t.Length) + out.Close +End Sub + +Sub pe_BatteryChanged (Level As Int, Scale As Int, Plugged As Boolean, Intent As Intent) + B4XPages.MainPage.batt=Level +End Sub + +Sub compress(str As String) As String + ' Compression + Private su As StringUtils + Dim compressed() As Byte = GZip.compress(str) + Log($"CompressedBytesLength: ${compressed.Length}"$) + Dim base64 As String = su.EncodeBase64(compressed) + Log($"CompressedBytes converted to base64 Length: ${base64.Length}"$) + Log($"CompressedBytes converted to base64: ${base64}"$) + Return base64 +End Sub + +Sub decompress(base64 As String) As String 'ignore + ' Decompression + Private su As StringUtils + Dim decompressedbytes() As Byte = su.DecodeBase64(base64) + Log($"decompressedbytesLength: ${decompressedbytes.Length}"$) + Dim bc As ByteConverter + Dim uncompressed As String = bc.StringFromBytes(decompressedbytes,"UTF8") + Log($"uncompressedLength: ${uncompressed.Length}"$) ' 6163 Bytes + Log($"Decompressed String = ${uncompressed}"$) + Return uncompressed +End Sub + +Sub dameRuta As String + Log("dameRuta") + Dim c As Cursor + c = B4XPages.MainPage.skmt.ExecQuery("select LAT, LON from RUTA_GPS order by FECHA desc limit 390") + c.Position = 0 + Dim ruta2 As String = "" + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + ruta2=ruta2&CRLF&c.GetString("LAT")&","&c.GetString("LON") + Next + End If + c.Close + Return compress(ruta2) +End Sub + +Sub borraGPSHist + c = B4XPages.MainPage.skmt.ExecQuery("delete FROM RUTA_GPS") +End Sub \ No newline at end of file diff --git a/B4A/Guna Vistas V3.1.b4a.meta b/B4A/Guna Vistas V3.1.b4a.meta new file mode 100644 index 0000000..7d52ecd --- /dev/null +++ b/B4A/Guna Vistas V3.1.b4a.meta @@ -0,0 +1,75 @@ +ModuleBookmarks0= +ModuleBookmarks1= +ModuleBookmarks10= +ModuleBookmarks11= +ModuleBookmarks12= +ModuleBookmarks13= +ModuleBookmarks14= +ModuleBookmarks15= +ModuleBookmarks16= +ModuleBookmarks17= +ModuleBookmarks18= +ModuleBookmarks19= +ModuleBookmarks2= +ModuleBookmarks20= +ModuleBookmarks21= +ModuleBookmarks22= +ModuleBookmarks23= +ModuleBookmarks3= +ModuleBookmarks4= +ModuleBookmarks5= +ModuleBookmarks6= +ModuleBookmarks7= +ModuleBookmarks8= +ModuleBookmarks9= +ModuleBreakpoints0= +ModuleBreakpoints1= +ModuleBreakpoints10= +ModuleBreakpoints11= +ModuleBreakpoints12= +ModuleBreakpoints13= +ModuleBreakpoints14= +ModuleBreakpoints15= +ModuleBreakpoints16= +ModuleBreakpoints17= +ModuleBreakpoints18= +ModuleBreakpoints19= +ModuleBreakpoints2= +ModuleBreakpoints20= +ModuleBreakpoints21= +ModuleBreakpoints22= +ModuleBreakpoints23= +ModuleBreakpoints3= +ModuleBreakpoints4= +ModuleBreakpoints5= +ModuleBreakpoints6= +ModuleBreakpoints7= +ModuleBreakpoints8= +ModuleBreakpoints9= +ModuleClosedNodes0= +ModuleClosedNodes1=5,7,8,9,10,11,12,13,14 +ModuleClosedNodes10= +ModuleClosedNodes11=6 +ModuleClosedNodes12=2,3,8,10,14,15 +ModuleClosedNodes13=6,10,11,13,14,16,17,20,21,22,23 +ModuleClosedNodes14= +ModuleClosedNodes15= +ModuleClosedNodes16= +ModuleClosedNodes17= +ModuleClosedNodes18= +ModuleClosedNodes19= +ModuleClosedNodes2= +ModuleClosedNodes20=3,4 +ModuleClosedNodes21=1 +ModuleClosedNodes22= +ModuleClosedNodes23= +ModuleClosedNodes3= +ModuleClosedNodes4= +ModuleClosedNodes5=7 +ModuleClosedNodes6= +ModuleClosedNodes7= +ModuleClosedNodes8= +ModuleClosedNodes9= +NavigationStack=B4XMainPage,Class_Globals,91,0,B4XMainPage,B4XPage_Created,144,6,B4XMainPage,i_engrane_Click,642,2,Diseñador Visual,login.bal,-100,6,C_Cliente,B_IMP_Click,1596,6,B4XMainPage,B4XSwitch1_ValueChanged,706,6,C_Principal,Class_Globals,0,0,C_Cliente,B4XPage_Appear,599,4,Diseñador Visual,cliente.bal,-100,1,B4XMainPage,B4XPage_Appear,299,6 +SelectedBuild=0 +VisibleModules=21,2,22,12,13,4,8,11,5,10 diff --git a/B4A/MAPA_RUTAS.bas b/B4A/MAPA_RUTAS.bas new file mode 100644 index 0000000..547eef8 --- /dev/null +++ b/B4A/MAPA_RUTAS.bas @@ -0,0 +1,320 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Activity +Version=9.3 +@EndOfDesignText@ +#Region Activity Attributes + #FullScreen: False + #IncludeTitle: False +#End Region + +'Activity module +Sub Process_Globals + Dim GPS As GPS + Dim rp As RuntimePermissions + Dim ruta As String + Dim skmt As SQL + Dim c As Cursor + Dim c2 As Cursor + Dim c22 As Cursor + Dim c3 As Cursor +End Sub + +Sub Globals + Private gmap As GoogleMap + Private MapFragment1 As MapFragment + Dim Latitud As Double = 0 + Dim Longitud As Double = 0 + Dim Lat2 As Double = 0 + Dim Lon2 As Double = 0 + Dim p1, p2 As Location + Dim Distance As Float + Dim boton1 As Button + Dim HUE_BLUE As Float + Dim HUE_RED As Float + Dim HUE_GREEN As Float + Private B_AZUL As Button + Private B_ROJO As Button + Private B_VERDE As Button + Private B_TODOS As Button + Dim Tienda As String + Dim LatitudRu As Double + Dim LongitudRU As Double + Dim LIST_AZUL As List + Dim LIST_ROJO As List + Dim LIST_VERDE As List + Dim MARK_AZUL As Marker + Dim MARK_ROJO As Marker + Dim MARK_VERDE As Marker + Dim MARK_CEDIS As Marker + Dim rojo As String + Dim azul As String + Dim verde As String + Dim todos As String + Dim NumSerie As Int + Dim OnInfoWindowClickListener1 As OnInfoWindowClickListener + Dim GoogleMapEXTRA As GoogleMapsExtras + Dim CODIGO As String + Private SEMANA As String +End Sub + +Sub Activity_Create(FirstTime As Boolean) + Activity.LoadLayout("MAPA_RUTAS") +' If File.ExternalWritable Then +' ruta = File.DirDefaultExternal +' Else + ruta = File.DirInternal +' End If + If File.Exists(ruta, "kmt.db") = False Then + File.Copy(File.DirAssets, "kmt.db", ruta, "kmt.db") + End If + skmt.Initialize(ruta,"kmt.db", True) + 'GPS + If(FirstTime) Then + GPS.Initialize("GPS") + End If + + If MapFragment1.IsGooglePlayServicesAvailable = False Then + ToastMessageShow("Please install Google Play Services.", True) + End If + + 'Boton velocidad' +' boton1.Initialize(0) +' boton1.Text = 0 &" "&"km/h" +' boton1.TextColor = Colors.Red +' boton1.TextSize = 15 +' Activity.AddView(boton1, 40%x, 5dip, 25%x, 40dip) + 'Fin Boton velocidad' + 'MARK_CEDIS.IsInitialized + MARK_AZUL.IsInitialized + MARK_ROJO.IsInitialized + MARK_VERDE.IsInitialized + + LIST_AZUL.Initialize + LIST_ROJO.Initialize + LIST_VERDE.Initialize + + verde = 0 + azul = 0 + rojo = 0 + todos = 1 + c=skmt.ExecQuery2("select count(*) AS CUANTOS from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("SEMANA")) + c.Position =0 + SEMANA = c.GetString("CUANTOS") + c.Close + + If SEMANA > 0 Then + c=skmt.ExecQuery2("select CAT_VA_VALOR from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("SEMANA")) + c.Position =0 + SEMANA = c.GetString("CAT_VA_VALOR") + c.Close + End If + + +End Sub + +Sub MapFragment1_Ready + Log("ENTRANDO MapFragment1_Ready") + gmap = MapFragment1.GetMap + gmap.IsInitialized + 'todos= 1 + 'permisos + + rp.CheckAndRequest(rp.PERMISSION_ACCESS_FINE_LOCATION) + Wait For Activity_PermissionResult (Permission As String, Result As Boolean) + gmap.MyLocationEnabled = Result + + Dim JavaMapsObject As JavaObject + JavaMapsObject = gmap.GetUiSettings + JavaMapsObject.RunMethod("setMapToolbarEnabled", Array As Object(True)) + '''''''----------------------------MARKER AZUL - POR VISITAR + If azul = 1 Or todos = 1 Then + c.IsInitialized + c=skmt.ExecQuery("select CAT_CL_CODIGO,CAT_CL_NOMBRE,CAT_CL_LAT,CAT_CL_LONG from kmt_info where gestion = 0 and CAT_CL_LAT is not null and CAT_CL_LONG is not null and CAT_CL_LAT <> 0 and CAT_CL_LONG <> 0 and CAT_CL_LAT <> ' ' and CAT_CL_LONG <> ' ' ") + skmt.Initialize(ruta,"kmt.db", True) + If c.RowCount > 0 Then + For i = 0 To c.RowCount - 1 + c.Position = i +' Log(i&"|"&c.GetString("CAT_CL_LAT")&"|") + LatitudRu = 0 + If c.GetString("CAT_CL_LAT") <> "" Then LatitudRu = c.GetString("CAT_CL_LAT") + LongitudRU = 0 + If c.GetString("CAT_CL_LONG") <> "" Then LongitudRU = c.GetString("CAT_CL_LONG") + CODIGO=c.GetString("CAT_CL_CODIGO") + Tienda= c.GetString("CAT_CL_NOMBRE") + MARK_AZUL = gmap.AddMarker2(LatitudRu, LongitudRU, CODIGO, gmap.HUE_BLUE) + MARK_AZUL.Snippet = Tienda + Next + End If + c .Close +' Log("4") + + If MARK_AZUL.IsInitialized Then LIST_AZUL.Add(MARK_AZUL) + End If + '''''''----------------------------MARKER VERDE - VENTA + If verde =1 Or todos = 1 Then + c2.IsInitialized + c2=skmt.ExecQuery("select CAT_CL_CODIGO, CAT_CL_NOMBRE,CAT_CL_LONG,CAT_CL_LAT from kmt_info where gestion = 2 and CAT_CL_LAT is not null and CAT_CL_LONG is not null and CAT_CL_LAT <> 0 and CAT_CL_LONG <> 0") + For i = 0 To c2.RowCount -1 + c2.Position = i + LongitudRU = c2.GetString("CAT_CL_LONG") + LatitudRu = c2.GetString("CAT_CL_LAT") + CODIGO=c2.GetString("CAT_CL_CODIGO") + Tienda= c2.GetString("CAT_CL_NOMBRE") + MARK_VERDE = gmap.AddMarker2(LatitudRu, LongitudRU, CODIGO, gmap.HUE_GREEN) + MARK_VERDE.Snippet = Tienda + Next + Else + If verde =1 Or todos = 1 Then + c2.IsInitialized + c2=skmt.ExecQuery("select CAT_CL_CODIGO, CAT_CL_NOMBRE,CAT_CL_LONG,CAT_CL_LAT from kmt_info where gestion = 2 and CAT_CL_LAT is not null and CAT_CL_LONG is not null and CAT_CL_LAT <> 0 and CAT_CL_LONG <> 0") + For i = 0 To c2.RowCount -1 + c2.Position = i + LongitudRU = c2.GetString("CAT_CL_LONG") + LatitudRu = c2.GetString("CAT_CL_LAT") + CODIGO=c2.GetString("CAT_CL_CODIGO") + Tienda= c2.GetString("CAT_CL_NOMBRE") + MARK_VERDE = gmap.AddMarker2(LatitudRu, LongitudRU, CODIGO, gmap.HUE_GREEN) + MARK_VERDE.Snippet = Tienda + Next + c2 .Close + If MARK_VERDE.IsInitialized Then LIST_VERDE.Add(MARK_VERDE) + End If + End If +' '''''''----------------------------MARKER ROJO - NO VENTA + + If rojo =1 Or todos = 1 Then + c3.IsInitialized + c3=skmt.ExecQuery("select CAT_CL_CODIGO, CAT_CL_NOMBRE,CAT_CL_LONG,CAT_CL_LAT from kmt_info where gestion = 3 and CAT_CL_LAT is not null and CAT_CL_LONG is not null and CAT_CL_LAT <> 0 and CAT_CL_LONG <> 0") + For i = 0 To c3.RowCount -1 + c3.Position = i + LongitudRU = c3.GetDouble("CAT_CL_LONG") + LatitudRu = c3.GetDouble("CAT_CL_LAT") + CODIGO=c3.GetString("CAT_CL_CODIGO") + Tienda= c3.GetString("CAT_CL_NOMBRE") + MARK_ROJO = gmap.AddMarker2(LatitudRu, LongitudRU, CODIGO, gmap.HUE_RED) + MARK_ROJO.Snippet = Tienda + Next + Else + If rojo =1 Or todos = 1 Then + c3.IsInitialized + c3=skmt.ExecQuery("select CAT_CL_CODIGO, CAT_CL_NOMBRE,CAT_CL_LONG,CAT_CL_LAT from kmt_info where gestion = 3 and CAT_CL_LAT is not null and CAT_CL_LONG is not null and CAT_CL_LAT <> 0 and CAT_CL_LONG <> 0") + For i = 0 To c3.RowCount -1 + c3.Position = i + LongitudRU = c3.GetDouble("CAT_CL_LONG") + LatitudRu = c3.GetDouble("CAT_CL_LAT") + CODIGO=c3.GetString("CAT_CL_CODIGO") + Tienda= c3.GetString("CAT_CL_NOMBRE") + MARK_ROJO = gmap.AddMarker2(LatitudRu, LongitudRU, CODIGO, gmap.HUE_RED) + MARK_ROJO.Snippet = Tienda + Next + If MARK_ROJO.IsInitialized Then LIST_ROJO.Add(MARK_ROJO) + c3.Close + End If + End If + ''------------------------------ + +' MARK_CEDIS = gmap.AddMarker3("19.3961802","-99.0784293","CEDIS", LoadBitmap(File.DirAssets, "marker-azul-0.png")) +' If MARK_VERDE.Visible Or MARK_ROJO.Visible Then +' MARK_CEDIS.Remove +' End If + Dim aa As CameraPosition + aa.Initialize(LatitudRu,LongitudRU,15)''' RECOMENDABLE CAMBIAR A 10 PARA QUE SE VEAN MAS MARCADORES + gmap.AnimateCamera(aa) + + '''''---------------------- ESTO ES PARA LOS CLICK EN LAS VENTANAS D INFORMACION----------- + Dim OnInfoWindowClickListener1 As OnInfoWindowClickListener + OnInfoWindowClickListener1.Initialize("OnInfoWindowClickListener1") + GoogleMapEXTRA.SetOnInfoWindowClickListener(gmap, OnInfoWindowClickListener1) + +End Sub +' +''''-------------------------- PRUEBA CON MARKER _CLICK + + +Sub OnInfoWindowClickListener1_click(Marker1 As Marker) + skmt.ExecNonQuery("delete from CUENTAA") + skmt.ExecNonQuery2("INSERT INTO CUENTAA VALUES (?) ", Array As Object(Marker1.Title)) + Activity.Finish + B4XPages.ShowPage("Cliente") +End Sub + + +Sub GPS_LocationChanged (Parametro As Location) + MARK_CEDIS.IsInitialized +' Dim sp As Int +' sp = Ceil(Parametro.Speed * 3.6) +' boton1.Text = sp &" "&"km/h" +' Latitud = Parametro.Latitude +' Longitud = Parametro.Longitude +' p2.Initialize2(Latitud,Longitud) +' p1.Initialize2(Lat2, Lon2) +' Distance = p1.DistanceTo(p2) +' If Latitud <> 0 And Longitud <> 0 Then +' If Distance > 10 Then +' Lat2 = Latitud +' Lon2 = Longitud +' Dim cp As CameraPosition +' cp.Initialize2(Parametro.Latitude, Parametro.Longitude, gmap.CameraPosition.Zoom, Parametro.Bearing, 0) +' gmap.AnimateCamera(cp) +' End If +' End If +End Sub + +Sub Activity_Resume + + If GPS.GPSEnabled = False Then + ToastMessageShow("Debe Activar el GPS del Equipo.", True) + StartActivity(GPS.LocationSettingsIntent) + Else + GPS.Start(0, 0) + End If +End Sub + +Sub Activity_Pause (UserClosed As Boolean) + GPS.Stop +End Sub + + +Sub B_TODOS_Click + todos =1 + verde = 0 + azul = 0 + rojo = 0 + + MapFragment1_Ready + +End Sub + +Sub B_VERDE_Click + verde = 1 + azul = 0 + rojo = 0 + todos = 0 + gmap.Clear + MapFragment1_Ready + +End Sub + +Sub B_ROJO_Click + rojo = 1 + verde = 0 + azul = 0 + todos = 0 + gmap.Clear + + MapFragment1_Ready + +End Sub + +Sub B_AZUL_Click + azul = 1 + verde = 0 + rojo = 0 + todos = 0 + gmap.Clear + + MapFragment1_Ready + +End Sub diff --git a/B4A/Starter.bas b/B4A/Starter.bas new file mode 100644 index 0000000..f9ef07e --- /dev/null +++ b/B4A/Starter.bas @@ -0,0 +1,123 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Service +Version=9.85 +@EndOfDesignText@ +#Region Service Attributes + #StartAtBoot: False + #ExcludeFromLibrary: True +#End Region + +Sub Process_Globals + 'These global variables will be declared once when the application starts. + 'These variables can be accessed from all modules. + Public gps As GPS + Dim ph As Phone + Public rp As RuntimePermissions + Public FLP As FusedLocationProvider +' Private flpStarted As Boolean + Dim reqManager As DBRequestManager + Dim server As String = "http://keymon.net:1782" +' Dim server As String = "http://192.168.100.54:1782" + Dim Timer1 As Timer + Dim Interval As Int = 30 + Dim ruta As String = File.DirInternal + 'Para los Logs + Private logs As StringBuilder + Private logcat As LogCat + Dim logger As Boolean = False + Dim marcaCel As String = ph.manufacturer + Dim muestraProgreso = 0 + Private BTAdmin As BluetoothAdmin + Dim MAC_IMPRESORA As String + Public BluetoothState As Boolean +End Sub + +Sub Service_Create + 'This is the program entry point. + 'This is a good place to load resources that are not specific to a single activity. + gps.Initialize("GPS") + CallSubDelayed(FirebaseMessaging, "SubscribeToTopics") 'Para Push FirebaseMessaging + BTAdmin.Initialize("admin") + Timer1.Initialize("Timer1", Interval * 1000) + Timer1.Enabled = True +' 'Para los Logs + #if RELEASE + logcat.LogCatStart(Array As String("-v","raw","*:F","B4A:v"), "logcat") + #end if + logs.Initialize + CallSubDelayed(FirebaseMessaging, "SubscribeToTopics") 'Para Push FirebaseMessaging +End Sub + +Private Sub BTAdmin_StateChanged (NewState As Int, OldState As Int) + If logger Then Log("BT state changed: " & NewState) + BluetoothState = NewState = BTAdmin.STATE_ON +' StateChanged +End Sub + + +Sub Service_Start (StartingIntent As Intent) + Service.StopAutomaticForeground 'Starter service can start in the foreground state in some edge cases. + Subs.revisaBD + Log(marcaCel) + reqManager.Initialize(Me, server) +End Sub + +Private Sub Timer1_Tick +' Log("Next run " & DateTime.Time(DateTime.Now + Interval * 1000)) + ENVIA_ULTIMA_GPS +End Sub + +Sub GPS_LocationChanged (Location1 As Location) +' CallSub2(Main, "GPS_LocationChanged", Location1) +End Sub + +Sub Service_TaskRemoved + 'This event will be raised when the user removes the app from the recent apps list. +End Sub + +Sub Service_Destroy + +End Sub + +Sub ENVIA_ULTIMA_GPS + LogColor("Iniciamos ENVIA_ULTIMA_GPS", Colors.Magenta) + Dim skmt As SQL + Dim cmd As DBCommand + skmt.Initialize(ruta,"kmt.db", True) +' cmd.Initialize +' cmd.Name = "select_fechat" +' B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "fechat") + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "UPDATE_ACTUAL2_GPS_DIS" + cmd.Parameters = Array As Object(B4XPages.MainPage.montoActual, B4XPages.MainPage.clientestotal, B4XPages.MainPage.clientesventa,B4XPages.MainPage.clientesvisitados,B4XPages.MainPage.lat_gps,B4XPages.MainPage.lon_gps,B4XPages.MainPage.batt,0, 0, 0,B4XPages.MainPage.ALMACEN,B4XPages.MainPage.rutapreventa) +' Log($"montoActual: ${B4XPages.MainPage.montoActual}, cTotal: ${B4XPages.MainPage.clientestotal}, cVenta: ${B4XPages.MainPage.clientesventa}, cVisitados: ${B4XPages.MainPage.clientesvisitados}, ${B4XPages.MainPage.lat_gps}, ${B4XPages.MainPage.lon_gps}, Batt: ${B4XPages.MainPage.batt}, 0, 0, 0, Almacen: ${B4XPages.MainPage.ALMACEN}, Ruta: ${B4XPages.MainPage.rutapreventa}"$) + reqManager.ExecuteCommand(cmd, "inst_visitas") + skmt.ExecNonQuery2("Update cat_variables set CAT_VA_VALOR = ? WHERE CAT_VA_DESCRIPCION = ?" , Array As String(DateTime.Time(DateTime.Now),"HoraIngreso")) + 'Reiniciamos el timer para cuando llamamos el Sub desde "seleccion" + Timer1.Enabled = False + Timer1.Interval = Interval * 1000 + Timer1.Enabled = True +End Sub + +'Para los Logs +Private Sub logcat_LogCatData (Buffer() As Byte, Length As Int) + logs.Append(BytesToString(Buffer, 0, Length, "utf8")) + If logs.Length > 4000 Then + logs.Remove(0, logs.Length - 2000) 'Obtenemos log de 2000 ~ 4000 chars + End If +End Sub + +'Return true to allow the OS default exceptions handler to handle the uncaught exception. 'Para los Logs +Sub Application_Error (Error As Exception, StackTrace As String) As Boolean + 'wait for 500ms to allow the logs to be updated. + Dim jo As JavaObject + Dim l As Long = 500: jo.InitializeStatic("java.lang.Thread").RunMethod("sleep", Array(l)) 'Sleep 500ms + logcat.LogCatStop + logs.Append(StackTrace) + Subs.revisaBD + Subs.errorLog.ExecNonQuery2("INSERT INTO errores(fecha, error) VALUES (?,?)", Array As Object (Subs.fechaKMT(DateTime.now), logs)) + Return True +End Sub \ No newline at end of file diff --git a/B4A/Subs.bas b/B4A/Subs.bas new file mode 100644 index 0000000..faa1ae8 --- /dev/null +++ b/B4A/Subs.bas @@ -0,0 +1,1162 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=StaticCode +Version=11 +@EndOfDesignText@ +'Code module +'Subs in this code module will be accessible from all modules. +Sub Process_Globals + 'These global variables will be declared once when the application starts. + 'These variables can be accessed from all modules. + Public GZip As GZipStrings 'Usa la libreria CompressStrings + Private su As StringUtils 'Usa la libreria StringUtils + Dim phn As Phone + Dim devModel As String + Dim kmt, errorLog As SQL 'Requiere la libreria "SQL" +' Dim wifi As MLwifi + Dim ssid As String 'ignore + Dim rutaMaxPoints As Int = 3000 + Dim rutaHrsAtras As Int = 48 +' Dim rutaInicioHoy As String = "" + Private subsLogs As Boolean = False + Dim skmt As SQL +End Sub + +'Pone el valor de phn.Model en la variable global "devModel" +Sub getPhnId As String 'ignore + 'Requiere la libreria "Phone" + devModel = phn.Model + If devModel.Length <= 3 Then 'Si phn.Model esta en blanco ... + Dim t As String = phn.GetSettings("android_id") 'Intentamos con "android_id" + devModel = t + End If + If devModel.Length >= 3 Then 'Si tenemos valor para phn.Model + File.WriteString(File.DirInternal, "phnId.txt", devModel) 'Sobreescribimos archivo phnId.txt with deviceId +' Log("Tenemos phnId: "&devModel&" "&File.DirInternal&"/phn.txt sobreescrito") + Else If devModel.Length < 3 Then ' Si no tenemos valor, lo leemos de phnId.txt + Dim s As String = File.ReadString(File.DirInternal, "phnId.txt") + devModel = s +' Log("Leemos id de "&File.DirInternal&"/phnId.txt") +' Log(devModel) + End If + Return devModel +End Sub + +'Comprime y regresa un texto (str) en base64 +Sub compress(str As String) As String 'ignore + 'Requiere la libreria "CompressStrings" + Dim compressed() As Byte = GZip.compress(str) +' Log($"UncompressedBytesLength: ${str.Length}"$) +' Log($"CompressedBytesLength: ${compressed.Length}"$) + Dim base64 As String = su.EncodeBase64(compressed) + Log($"Comprimido: ${base64.Length}"$) +' Log($"CompressedBytes converted to base64: ${base64}"$) + Return base64 +End Sub + +'Descomprime y regresa un texto en base64 +Sub decompress(base64 As String) As String 'ignore + Dim decompressedbytes() As Byte = su.DecodeBase64(base64) +' Log($"decompressedbytesLength: ${decompressedbytes.Length}"$) + Dim bc As ByteConverter + Dim uncompressed As String = bc.StringFromBytes(decompressedbytes,"UTF8") + Log($"Descomprimido: ${uncompressed.Length}"$) +' Log($"Decompressed String = ${uncompressed}"$) + Return uncompressed +End Sub + +'Convierte una fecha al formato yyMMddHHmmss +Sub fechaKMT(fecha As String) As String 'ignore +' Log(fecha) + Dim OrigFormat As String = DateTime.DateFormat 'save orig date format + DateTime.DateFormat="yyMMddHHmmss" + Dim nuevaFecha As String=DateTime.Date(fecha) + DateTime.DateFormat=OrigFormat 'return to orig date format +' Log(nuevaFecha) + Return nuevaFecha +End Sub + +'Genera una notificacion con importancia alta +Sub notiHigh(title As String, body As String, activity As Object) 'ignore + Private notif As Notification + notif.Initialize2(notif.IMPORTANCE_HIGH) + notif.Icon = "icon" + notif.Vibrate = False + notif.Sound = False + notif.AutoCancel = True + Log("notiHigh: "&title) + notif.SetInfo(title, body, activity) +' Log("notiHigh SetInfo") + notif.Notify(777) +End Sub + +'Regresa el objeto de una notificacion con importancia baja +Sub notiLowReturn(title As String, Body As String, id As Int) As Notification 'ignore + Private notification As Notification + notification.Initialize2(notification.IMPORTANCE_LOW) + Log("notiLowReturn: "&title) + notification.Icon = "icon" + notification.Sound = False + notification.Vibrate = False + notification.SetInfo(title, Body, Main) + notification.Notify(id) +' Log("notiLowReturn SetInfo") + Return notification +End Sub + +'Escribimos las coordenadas y fecha a un archivo de texto +Sub guardaInfoEnArchivo(coords As String) 'ignore + ' Cambiamos el formato de la hora + Dim OrigFormat As String=DateTime.DateFormat 'save orig date format + DateTime.DateFormat="MMM-dd HH:mm:ss" + Dim lastUpdate As String=DateTime.Date(DateTime.Now) + DateTime.DateFormat=OrigFormat 'return to orig date format + + Dim ubic As String = coords&","&lastUpdate + Dim out As OutputStream = File.OpenOutput(File.DirRootExternal, "gps.txt", True) + Dim s As String = ubic & CRLF + Dim t() As Byte = s.GetBytes("UTF-8") + out.WriteBytes(t, 0, t.Length) + out.Close +End Sub + +'Escribimos las coordenadas (latitud, longitud, fecha) y fecha a una BD +Sub guardaInfoEnBD(coords As String) 'ignore + Log("Guardamos ubicacion en BD - "&coords) + Try + Dim latlon() As String = Regex.Split("\|", coords) + If latlon.Length < 2 Then latlon = Regex.Split(",", coords) 'Si son menos de 2, entonces estan separadas por comas y no por "|" + If subsLogs Then Log("LatLon="&latlon) + kmt.ExecNonQuery2("INSERT INTO RUTA_GPS(FECHA, LAT, LON) VALUES (?,?,?)", Array As Object (latlon(2),latlon(0),latlon(1))) + Catch + LogColor(LastException, Colors.red) + End Try +End Sub + +'Regresa la ruta solicitada comprimida y en base64 +Sub dameRuta(inicioRuta As String, origenRuta As String) As String 'ignore + 'Requiere la libreria "SQL" + Dim fechaInicio As String + Try 'incioRuta es numero + inicioRuta = inicioRuta * 1 +' Log("fechaInicio numerica="&fechaInicio) + fechaInicio = fechaKMT(DateTime.Now - (DateTime.TicksPerHour * inicioRuta)) + Catch 'inicioRuta es string + fechaInicio = fechaInicioHoy +' Log("fechaInicio string="&fechaInicio) + End Try + If subsLogs Then Log("fechaInicio: "&fechaInicio&" | rutaHrsAtras="&rutaHrsAtras) 'fechaKMT(DateTime.Now) + Dim c As Cursor + If kmt.IsInitialized = False Then kmt.Initialize(Starter.ruta, "kmt.db", True) + If subsLogs Then Log("select FECHA, LAT, LON from "& origenRuta &" where FECHA > " & fechaInicio & " order by FECHA desc limit " & rutaMaxPoints) + c = kmt.ExecQuery("select FECHA, LAT, LON from "& origenRuta &" where FECHA > " & fechaInicio & " order by FECHA desc limit " & rutaMaxPoints) + c.Position = 0 + Dim ruta2 As String = "" + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + ruta2=ruta2&CRLF&c.GetString("LAT")&","&c.GetString("LON")&","&c.GetString("FECHA") + B4XPages.MainPage.fechaRuta = c.GetString("FECHA") + Next + End If + c.Close + Return compress(ruta2) +End Sub + +'Limpiamos la tabla RUTA_GPS de la BD +Sub deleteGPS_DB 'ignore + kmt.ExecNonQuery("delete from RUTA_GPS") + kmt.ExecNonQuery("vacuum;") + ToastMessageShow("Borramos BD Coords GPS", False) +End Sub + +'Limpiamos la tabla errorLog de la BD +Sub deleteErrorLog_DB 'ignore + errorLog.ExecNonQuery("delete from errores") + errorLog.ExecNonQuery("vacuum;") + ToastMessageShow("BD Errores Borrada", False) +End Sub + +'Borramos el archio "gps.txt" +Sub borramosArchivoGPS 'ignore + Dim out As OutputStream = File.OpenOutput(File.DirRootExternal, "gps.txt", False) + Dim s As String = "" + Dim t() As Byte = s.GetBytes("UTF-8") + out.WriteBytes(t, 0, t.Length) + out.Close +End Sub + +'Revisa que exista la BD y si es necesario crea algunans tablas dentro de ella +Sub revisaBD 'ignore +' Main.ruta = File.DirInternal + If Not(File.Exists(Starter.ruta, "kmt.db")) Then File.Copy(File.DirAssets, "kmt.db", Starter.ruta, "kmt.db") + If Not(kmt.IsInitialized) Then kmt.Initialize(Starter.ruta, "kmt.db", True) + kmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS RUTA_GPS(FECHA INTEGER, LAT TEXT, LON TEXT)") +' kmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS UUC(fecha INTEGER, lat TEXT, lon TEXT)") 'LastKnownLocation + kmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS bitacora(fecha INTEGER, texto TEXT)") 'Bitacora + 'Tabla para la bitacora de errores + If Not(errorLog.IsInitialized) Then errorLog.Initialize(Starter.ruta, "errorLog.db", True) + errorLog.ExecNonQuery("CREATE TABLE IF NOT EXISTS errores(fecha INTEGER, error TEXT)") +End Sub + +'Obtiene el ssid al que esta conectado el telefono +Sub getSSID 'ignore +' 'Requiere la libreria "MLWifi400" +' If wifi.isWifiConnected Then +' ssid = wifi.WifiSSID +' End If +End Sub + +'Convierte un texto en formato JSON a un objeto "Map" +Sub JSON2Map(theJson As String) As Map 'ignore + 'Requiere la libreria "JSON" + Try + Private json As JSONParser + json.Initialize(theJson) + Return json.NextObject + Catch + Log(LastException) + log2DB("JSON2Map: "&LastException) + Private m As Map = CreateMap("title":"Error generating JSON", "t":"Error", "Message":LastException, "text" : LastException) + Return m + End Try +End Sub + +'Convierte un mapa a formato JSON +Sub map2JSON(m As Map) As String 'ignore + 'Requiere la libreria "JSON" + 'Convierte un objecto "Map" a JSON + Dim jg As JSONGenerator + jg.Initialize(m) + Dim t As String = jg.ToString + Return t +End Sub + +'Mandamos "coords" en un mensaje a "Sprvsr" +'Sub mandamosLoc(coords As String) 'ignore +'' Log("Iniciamos mandamosLoc "&coords) +'' Log("locRequest="&Tracker.locRequest) +' guardaInfoEnBD(coords)'Escribimos coordenadas y fecha a una bd +' Dim t As String +' If Tracker.locRequest="Activa" Then +' If PushService.au = 1 Then +' t = "au" ' es una actualizacion +' Else +' t = "u" ' es una peticion +' End If +' Dim params As Map = CreateMap("topic":"Sprvsr", "coords":coords, "t":t, "b":PushService.battery, "mt":Main.montoActual) +' CallSub2(PushService, "mandaMensaje",params) +' Tracker.locRequest="Enviada" +' CallSubDelayed(Tracker,"CreateLocationRequest") +' End If +'End Sub + +'Regresa la fecha y hora de hoy a las 00:00 en el formato "yyMMddHHMMSS" +Sub fechaInicioHoy As String 'ignore + Dim OrigFormat As String = DateTime.DateFormat 'save orig date format + DateTime.DateFormat="yyMMdd" + Private h As String = DateTime.Date(DateTime.Now)&"000000" + DateTime.DateFormat=OrigFormat 'return to orig date format + Log("Hoy="&h) + Return h +End Sub + +'Guardamos "texto" a la bitacora +Sub log2DB(texto As String) 'ignore + LogColor(fechaKMT(DateTime.Now)&" - log2BD: '"&texto&"'", Colors.LightGray) + kmt.ExecNonQuery2("INSERT INTO bitacora(fecha, texto) VALUES (?,?)", Array As Object (fechaKMT(DateTime.now), texto)) +End Sub + +'Regresa verdadero si ya pasaron XX minutos de la fecha dada +Sub masDeXXMins(hora As Int, mins As Int) As Boolean 'ignore + If (hora + mins * DateTime.TicksPerMinute) < DateTime.Now Then + Return True + Else + Return False + End If +End Sub + +'Regresa verdadero si ya pasaron XX minutos de la fechaKMT dada +Sub masDeXXMinsKMT(hora As String, mins As Int) As Boolean 'ignore + Try + ' LogColor($"Hora=${fechaKMT(fechaKMT2Ticks(hora) + mins * DateTime.TicksPerMinute)}, Mins=${mins}, Actual=${fechaKMT(DateTime.Now)}"$,Colors.red) + If fechaKMT2Ticks(hora) + mins * DateTime.TicksPerMinute < DateTime.Now Then + ' Log("+++ +++ "&fechaKMT(fechaKMT2Ticks(hora) + mins * DateTime.TicksPerMinute) & " < " & fechaKMT(DateTime.Now)) + Return True + Else + ' Log("+++ +++ "&fechaKMT(fechaKMT2Ticks(hora) + mins * DateTime.TicksPerMinute) & " > " & fechaKMT(DateTime.Now)) + Return False + End If + Catch + Log(LastException) + End Try +End Sub + +'Limpiamos la tabla "bitacora" de la BD +Sub borraLogDB 'ignore + LogColor("Borramos BD de log", Colors.Magenta) + kmt.ExecNonQuery("delete from bitacora") + kmt.ExecNonQuery("vacuum;") +End Sub + +'Monitoreamos los servicios para ver si estan activos (No pausados), y si no, los reniciamos +'Sub Monitor 'ignore +' Private monitorStatus As Boolean = True +' LogColor("Corriendo Subs.Monitor", Colors.RGB(161,150,0)) +' If IsPaused(Tracker) Then +' log2DB("Reiniciando 'Tracker Pausado' desde Subs.Monitor") +' StartService(Tracker) +' monitorStatus = False +' Else +' CallSubDelayed(Tracker, "revisaFLP") +' End If +' If IsPaused(PushService) Then +' log2DB("Reiniciando 'PushService Pausado' desde Subs.Monitor") +' StartService(PushService) +' monitorStatus = False +' Else +' revisaPushService +' End If +' If monitorStatus Then LogColor(" +++ +++ Servicios Activos", Colors.Green) +'End Sub + +'Compara la UUG (Ultima Ubicacion Guardada) con FLP.LastKnowLocation y si +'cumple con los requisitos de distancia y precision la guardamos en la BD. +Sub revisaUUG 'ignore + Try +' revisaFLP + If Tracker.FLP.GetLastKnownLocation.IsInitialized Then + Dim daa As Int = Tracker.UUGCoords.DistanceTo(Tracker.FLP.GetLastKnownLocation) 'Distancia de la UUG a la actual de Tracker.FLP.GetLastKnownLocation + If Starter.Logger Then LogColor($"**** UUC "${fechaKMT(Tracker.FLP.GetLastKnownLocation.Time)}|$0.2{Tracker.FLP.GetLastKnownLocation.Accuracy}|$0.8{Tracker.FLP.GetLastKnownLocation.Latitude}|$0.8{Tracker.FLP.GetLastKnownLocation.Longitude}|$0.2{Tracker.FLP.GetLastKnownLocation.Speed}|"$, Colors.RGB(255,112,35)) + If daa > 40 And Tracker.FLP.GetLastKnownLocation.Accuracy < 35 Then 'Si la distancia de la ubicacion anterior es mayor de XX y la precision es menor de XX, la guardamos ... + kmt.ExecNonQuery2("INSERT INTO RUTA_GPS(fecha, lat, lon) VALUES (?,?,?)", Array As Object (fechaKMT(Tracker.FLP.GetLastKnownLocation.Time),Tracker.FLP.GetLastKnownLocation.Latitude,Tracker.FLP.GetLastKnownLocation.Longitude)) + If Starter.Logger Then Log("++++ Distancia a anterior="&daa&"|"&"Precision="&Tracker.FLP.GetLastKnownLocation.Accuracy) + End If + Tracker.UUGCoords = Tracker.FLP.GetLastKnownLocation + End If + Catch + LogColor("If Tracker.FLP.GetLastKnownLocation.IsInitialized --> "&LastException, Colors.Red) + End Try +End Sub + +'Revisamos que el FLP (FusedLocationProvider) este inicializado y activo +Sub revisaFLP 'ignore + LogColor("**** **** Revisamos FLP **** ****", Colors.RGB(78,0,227)) + Private todoBienFLP As Boolean = True + Try + If Not(Tracker.FLP.IsInitialized) Then + log2DB("revisaFLP: No esta inicializado ... 'Reinicializando FLP'") + Tracker.FLP.Initialize("flp") + todoBienFLP = False + End If + Catch + LogColor("If Not(Tracker.FLP.IsInitialized) --- "&LastException, Colors.Red) + End Try + Try + If Tracker.FLP.IsInitialized Then + Try + If Not(Tracker.FLP.IsConnected) Then + log2DB("revisaFLP: No esta conectado ... 'Reconectando FLP'") + ' Tracker.FLP.Connect + CallSubDelayed(Tracker,"StartFLP") + todoBienFLP = False + End If + Catch + LogColor("If Not(Tracker.FLP.IsConnected) --> "&LastException, Colors.Red) + End Try + Try + If Tracker.FLP.IsConnected And _ + Tracker.FLP.GetLastKnownLocation.IsInitialized And _ + Tracker.FLP.GetLastKnownLocation.DistanceTo(Tracker.UUGCoords) > 500 Then + log2DB("revisaFLP: 'No se esta actualizando, lo reiniciamos ...'") + StartService(Tracker) + todoBienFLP = False + End If + Catch + LogColor("If FLP.IsConnectctd and FLP.getLKL.IsInitialized --> "&LastException, Colors.Red) + End Try + End If + If todoBienFLP Then LogColor(" +++ +++ Sin errores en FLP", Colors.Green) + Catch + LogColor("If Tracker.FLP.IsInitialized --> "&LastException, Colors.Red) + End Try + ' revisar hora de lastKnownlocation y si es mayor de 10 minutos llamar StartFLP +End Sub + +'Revisamos que el servicio "PushService" este inicializado y activo +'Sub revisaPushService 'ignore +' Private todoBienPS As Boolean = True +' LogColor("**** **** Revisamos PushService **** ****", Colors.RGB(78,0,227)) +' If Not(PushService.wsh.IsInitialized) Then 'Si no esta inicializado ... +' log2DB("revisaPushService: No esta inicializado ... 'Reinicializando PushService'") +' CallSubDelayed(PushService, "Connect") +' todoBienPS = False +' End If +' If Not(PushService.wsh.ws.Connected) Then 'Si no esta conectado ... +' log2DB("revisaPushService: No esta conectado ... 'Reconectando PushService'") +' CallSubDelayed(PushService, "Connect") +' todoBienPS = False +' End If +' If masDeXXMinsKMT(Starter.pushServiceActividad, 5) Then 'Si mas de xx minutos de la ultima actividad entonces ... +' PushService.wsh.Close +' CallSubDelayed(PushService, "Connect") +'' StartService(PushService) +' log2DB("revisaPushService: 'Reconectamos 'PushService' por inactividad") +' Starter.pushServiceActividad = fechaKMT(DateTime.Now) +' todoBienPS = False +' End If +' If todoBienPS Then LogColor(" +++ +++ Sin errores en PushService", Colors.Green) +'End Sub + +'Borramos renglones extra de la tabla de errores +Sub borraArribaDe100Errores 'ignore + revisaBD + LogColor("Borramos BD de log", Colors.Magenta) + errorLog.ExecNonQuery("DELETE FROM errores WHERE fecha NOT in (SELECT fecha FROM errores ORDER BY fecha desc LIMIT 99 )") + errorLog.ExecNonQuery("vacuum;") + Log("Borramos mas de 100 de errorLog") +End Sub + +'Borramos renglones extra de la tabla de bitacora +Sub borraArribaDe600RenglonesBitacora 'ignore + revisaBD + LogColor("Borramos BD de log", Colors.Magenta) + kmt.ExecNonQuery("DELETE FROM bitacora WHERE fecha NOT in (SELECT fecha FROM bitacora ORDER BY fecha desc LIMIT 599 )") + kmt.ExecNonQuery("vacuum;") + Log("Borramos mas de 600 de bitacora") +End Sub + +'Inserta 50 renglones de prueba a la tabla "errores" +Sub insertaRenglonesPruebaEnErrorLog 'ignore + revisaBD + Log("insertamos 50 renglones a errorLog") + For x = 1 To 50 + errorLog.ExecNonQuery2("INSERT INTO errores(fecha, error) VALUES (?,?)", Array As Object (fechaKMT(DateTime.now), "abc")) + Log(x) + Next +End Sub + +'Regresa la tabla "errores" en una lista de mapas convertida a JSON +Sub dameErroresJSON(SQL As SQL, maxErrores As Int, comprimido As Boolean) As String 'ignore + Log("dameErroresJSON") + Private j As JSONGenerator + Private lim As String + Private cur As ResultSet + Private l As List + Private i As Int = 0 + l.Initialize + Dim m, m2 As Map + m2.Initialize + If maxErrores = 0 Then lim = "" Else lim = "limit "&maxErrores + cur = SQL.ExecQuery("select * from errores order by fecha desc "&lim) + Do While cur.NextRow + m.Initialize + m.Put("fecha", cur.GetString("fecha")) + m.Put("error", cur.GetString("error")) + m2.Put(i,m) + i = i + 1 + Loop + cur.Close + j.Initialize(m2) + Log(j.ToString) + If comprimido Then + Return compress(j.ToString) + Else + Return j.ToString + End If +End Sub + +'Convierte una fecha en formato YYMMDDHHMMSS a Ticks +Sub fechaKMT2Ticks(fKMT As String) As Long 'ignore + Try + If fKMT.Length = 12 Then + Private parteFecha As String = fKMT.SubString2(0,6) + Private parteHora As String = fKMT.SubString(6) + Private OrigFormat As String = DateTime.DateFormat 'save original date format + DateTime.DateFormat="yymmdd" + DateTime.TimeFormat="HHmmss" + Private ticks As Long = DateTime.DateTimeParse(parteFecha,parteHora) + DateTime.DateFormat=OrigFormat 'return to original date format + Return ticks + Else + Log("Formato de fecha incorrecto, debe de ser 'YYMMDDHHMMSS', no '"&fKMT&"' largo="&fKMT.Length) + Return 0 + End If + Catch + Log(LastException) + LogColor($"Fecha dada: ${fKMT}, Parte Fecha: ${parteFecha}, Parte Hora: ${parteHora}"$, Colors.Red) + Return 0 + End Try +End Sub + +Sub InstallAPK(dir As String, apk As String) 'ignore + If File.Exists(dir, apk) Then + Dim i As Intent + i.Initialize(i.ACTION_VIEW, "file://" & File.Combine(dir, apk)) + i.SetType("application/vnd.android.package-archive") + StartActivity(i) + End If +End Sub + +'Copia la base de datos del almacenamiento interno al externo en el directorio kmts +Sub copiaDB(result As Boolean) 'ignore + ToastMessageShow("copiaDB", False) + If result Then + Dim p As String + If File.ExternalWritable Then + p = File.DirRootExternal +' Log("Externo") + Else + p = File.DirInternal +' Log("Interno") + End If + Dim theDir As String + Try + File.MakeDir(File.DirRootExternal,"kmts") + theDir = "/kmts" + Catch + theDir = "" + End Try + Try + File.Copy(File.DirInternal,"kmt.db",File.DirRootExternal&theDir,"cedex_kmt.db") + File.Copy(File.DirInternal,"errorLog.db",File.DirRootExternal&theDir,"cedex_errorLog.db") + ToastMessageShow("BD copiada!", False) + Catch + ToastMessageShow("No se pudo hacer la copia: "&LastException, True) + End Try + Log("rootExternal="&p) + Log("File.DirInternal="&File.DirInternal) + Log("File.DirRootExternal="&File.DirRootExternal) + Else + ToastMessageShow("Sin permisos", False) + End If +End Sub + +'Hace visible y trae al frente el panel con los parametros "Top" y "Left" dados +Sub panelVisible(panel As Panel, top As Int, left As Int) 'ignore + panel.BringToFront + panel.Visible = True + panel.Top = top + panel.Left = left +End Sub + +'Centra una etiqueta dentro de un elemento superior +Sub centraEtiqueta(elemento As Label, anchoElementoSuperior As Int) 'ignore + elemento.Left = Round(anchoElementoSuperior/2)-(elemento.Width/2) +End Sub + +'Centra un panel horizontalmente dentro de un elemento superior +Sub centraPanel(elemento As Panel, anchoElementoSuperior As Int) 'ignore + elemento.Left = Round(anchoElementoSuperior/2)-(elemento.Width/2) +End Sub + +'Centra un panel verticalmente dentro de un elemento superior +Sub centraPanelV(elemento As Panel, altoElementoSuperior As Int) 'ignore + elemento.Top = Round(altoElementoSuperior/2)-(elemento.Height/2) +End Sub + +'Centra una barra de progreso dentro de un elemento superior +Sub centraProgressBar(elemento As ProgressBar, anchoElementoSuperior As Int) 'ignore + elemento.Left = Round(anchoElementoSuperior/2)-(elemento.Width/2) +End Sub + +'Regresa el usuario de la tabla USUARIOA si es que existe, si no existe, regresa "SinUsuario". +Sub buscaDBUsuario As String 'ignore + Private c As Cursor + Private usuario As String = "SinUsuario" + c=kmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + If c.RowCount > 0 Then usuario = c.GetString("USUARIO") + Return usuario +End Sub + +'Saca el usuario de la tabla USUARIOA +Sub dameUsuarioDeDB As String 'ignore + Private c As Cursor + Private u As String = "SinUsuario" + If Not(kmt.IsInitialized) Then revisaBD + c=kmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + If c.RowCount > 0 Then u = c.GetString("USUARIO") + c.Close + Return u +End Sub + +'Inserta un producto en la tabla "PEDIDO" +Sub guardaProductoX(cedis As String, costoTot As String, costoU As String, cant As String, nombre As String, prodId As String, clienteId As String, fecha As String, usuario As String, tipoV As String, precio2 As String, query As String) 'ignore +' LogColor("guardaProducto", Colors.Magenta) +' Log($"Guardamos producto ${prodId}"$) +' B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FECHA, PE_USUARIO, PE_TIPO, PE_PRECIO2, PE_RUTA) VALUES(?,?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (cedis, costoTot, costoU, cant, nombre, prodId, clienteId, fecha, usuario, tipoV, precio2, Starter.rutaV)) +' B4XPages.MainPage.skmt.ExecNonQuery2("update " & query & " set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? ", Array As Object(cant, prodId)) +' ToastMessageShow("guardaProd", False) +End Sub + +Sub guardaProductoSin(cedis As String, costoTot As String, costoU As String, cant As String, nombre As String, prodId As String, clienteId As String, fecha As String, usuario As String, rutaV As String, precioSin As String, tipoV As String, precio2 As String, query As String) 'ignore +' LogColor("guardaProductoSin", Colors.Magenta) +' B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FECHA, PE_USUARIO, PE_RUTA, PE_COSTO_SIN, PE_TIPO, PE_PRECIO2) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (cedis, costoTot,costoU, cant, nombre, prodId, clienteId, fecha, usuario, rutaV, precioSin, tipoV, precio2)) +' B4XPages.MainPage.skmt.ExecNonQuery2("update " & query & " set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? ", Array As Object(cant, prodId)) +' DateTime.DateFormat = "MM/dd/yyyy" +' Private sDate As String =DateTime.Date(DateTime.Now) +' Private sTime As String =DateTime.Time(DateTime.Now) +' Private c As Cursor = B4XPages.MainPage.skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE, SUM(PE_COSTO_SIN) AS TOTAL_CLIE_SIN FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") +' c.Position=0 +' B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)") +' B4XPages.MainPage.skmt.ExecNonQuery2("insert into pedido_cliente(PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT,PC_ALMACEN,PC_RUTA,PC_COSTO_SIN) VALUES (?,?,?,?,?,?,?,?,?,?)", Array As Object(clienteId, sDate & sTime, usuario, c.GetString("CANT_CLIE"),c.GetString("TOTAL_CLIE"), B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps, cedis, rutaV, c.GetString("TOTAL_CLIE_SIN"))) +' B4XPages.MainPage.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 2 where CAT_CL_CODIGO In (select cuenta from cuentaa)") +' c.Close + ToastMessageShow("guardaProdSin", False) +End Sub + +'Regresa el almacen actual de la base de datos. +Sub traeAlmacen As String 'ignore + Private c As Cursor + Private a As String + c=B4XPages.MainPage.skmt.ExecQuery("select ID_ALMACEN from CAT_ALMACEN") + c.Position = 0 + a = C.GetString("ID_ALMACEN") + c.Close + Return a +End Sub + +'Regresa el nombre del producto desde CAT_GUNAPROD +Sub traeProdNombre(id As String) As String + Private h As Cursor + Private n As String + h=B4XPages.MainPage.skmt.ExecQuery2("select CAT_GP_NOMBRE from CAT_GUNAPROD where CAT_GP_ID = ? ", Array As String(id.Trim)) + If h.RowCount > 0 Then + h.Position = 0 + n = h.GetString("CAT_GP_NOMBRE") +' Log(h.RowCount&"|"&id&"|"&n&"|") + End If + h.Close + If n = Null Or n="" Then n = "N/A" +' Log(h.RowCount&"|"&id&"|"&n&"|") + Return n +End Sub + +'Regresa la ruta actual de la base de datos. +Sub traeRuta As String 'ignore + Private c As Cursor + Private r As String + c=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_RUTA from kmt_info where CAT_CL_CODIGO In (Select cuenta from cuentaa)") + r = "0" + If c.RowCount > 0 Then + c.Position=0 + r = c.GetString("CAT_CL_RUTA") + End If + c.Close + Return r +End Sub + +Sub traeCliente As String 'ignore + Private c As Cursor + Private cl As String + c=B4XPages.MainPage.skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + cl = c.GetString("CUENTA") + c.Close + Return cl +End Sub + +Sub traeFecha As String 'ignore + DateTime.DateFormat = "MM/dd/yyyy" + Private sDate As String =DateTime.Date(DateTime.Now) + Private sTime As String =DateTime.Time(DateTime.Now) + Return sDate & sTime +End Sub + +'Regresa el usuario de la tabla USUARIOA +Sub traeUsuarioDeBD As String 'ignore + Private c As Cursor + Private u As String = "SinUsuario" + If Not(kmt.IsInitialized) Then revisaBD + c=kmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + If c.RowCount > 0 Then u = c.GetString("USUARIO") + c.Close + Return u +End Sub + +'Regresa verdadero si hay pedido en la tabla "PEDIDO" del cliente actual. +Sub hayPedido As Boolean + Private thisC As Cursor=B4XPages.MainPage.skmt.ExecQuery($"select count(PE_CLIENTE) as hayPedido from PEDIDO where PE_CLIENTE = '${traeCliente}'"$) + thisC.Position=0 + Private hay As Boolean = False + If thisC.GetInt("hayPedido") > 0 Then hay = True +' Log($"Cliente actual=${traeCliente}, hayPedido=${hay}"$) + Return hay +End Sub + +Sub guardaProducto(cedis As String, costoU As String, cant As String, nombre As String, prodId As String, clienteId As String, fecha As String, usuario As String, rutaV As String, precioSin As String, tipoVenta As String) + LogColor("guardaProducto: "&prodId&", cant="&cant&" - TV:"&tipoVenta, Colors.Magenta) + Private c As Cursor + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO,PE_RUTA,PE_COSTO_SIN,PE_FOLIO) VALUES(?,?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (cedis, (cant * costoU), costoU, cant, nombre, prodId, clienteId, fecha, usuario, rutaV, precioSin, tipoVenta)) + B4XPages.MainPage.skmt.ExecNonQuery2("update cat_gunaprod set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? ", Array As Object(cant, prodId)) + c=B4XPages.MainPage.skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE, SUM(PE_COSTO_SIN) AS TOTAL_CLIE_SIN FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + c.Position=0 + B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)") + B4XPages.MainPage.skmt.ExecNonQuery2("insert into pedido_cliente(PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT,PC_ALMACEN,PC_RUTA,PC_COSTO_SIN) VALUES (?,?,?,?,?,?,?,?,?,?)", Array As Object(clienteId, fecha, usuario, c.GetString("CANT_CLIE"), c.GetString("TOTAL_CLIE"), B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps, cedis, c.GetString("TOTAL_CLIE_SIN"))) + B4XPages.MainPage.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 2 where CAT_CL_CODIGO In (select cuenta from cuentaa)") +End Sub + + +'Regresa un mapa con la información de la promo. +'Regresa: {id, maxXcliente, maxRecurrente, maxPromos, historico, +' productos={idProducto={idProducto, preciosimptos, precio, almacen, tipo, piezas, usuario, fecha, regalo, clasif}} 'Mapa con los productos de la promo y los datos de cada uno. +' tipos={idProducto=tipo} 'Mapa con id y tipo del producto, 0 si es fijo y 1 si es variable. +' prodsFijos={idProducto,idProducto} 'Lista con los ids de los productos fijos. +' prodsVariables={idProducto,idProducto} 'Lista con los ids de los productos variables. +' resultado="OK" 'Ok si existe la promocion. +' prodsVariablesRequeridos=5} 'Cantidad de productos variables requeridos para la promoción. +Sub traePromo(promo As String, cliente As String) As Map + Log($"TRAE PROMO = ${promo}"$) + Private inicioContador As String = DateTime.Now + Private c As Cursor = B4XPages.MainPage.skmt.ExecQuery("Select * from promos_comp where cat_pa_id = '"& promo&"'") 'Obtenemos las el maximo de promocioones a otorgar. + Private siHistorico As String = 0 + Private promoMap As Map + Private prodsFijos, prodsFijosPrecios, prodsFijosPiezas, prodsVariables As List + promoMap.Initialize + prodsFijos.Initialize + prodsFijosPrecios.Initialize + prodsFijosPiezas.Initialize + prodsVariables.Initialize + c.Position = 0 + If c.RowCount > 0 Then promoMap = CreateMap("id":promo, "maxXcliente":c.GetString("CAT_PA_MAXPROMCLIE"), "maxRecurrente":c.GetString("CAT_PA_MAXPROMREC"), "maxPromos":c.GetString("CAT_PA_MAXPROM")) + c = B4XPages.MainPage.skmt.ExecQuery("Select count(*) as hist from HIST_PROMOS where HP_CLIENTE = '"& cliente & "' and HP_CODIGO_PROMOCION = '" & promo & "'") 'Revisamos si hay historico de la promoción. + c.Position = 0 + If c.GetString("hist") > 0 Then siHistorico = 1 + promoMap.Put("historico", siHistorico) +' c = B4XPages.MainPage.skmt.ExecQuery("Select * from CAT_DETALLES_PAQ where CAT_DP_ID = '"& promo & "'") 'Obtenemos los detalles de la promoción. + c = B4XPages.MainPage.skmt.ExecQuery("Select * from CAT_DETALLES_PAQ where CAT_DP_ID = '"& promo & "' order by cat_dp_tipo asc") + c.Position = 0 + If c.RowCount > 0 Then + Private prods, tipos As Map + prods.Initialize + tipos.Initialize + For i=0 To c.RowCount -1 + c.Position=i + prods.Put(c.GetString("CAT_DP_IDPROD"), CreateMap("idProducto":c.GetString("CAT_DP_IDPROD"), "precioSimptos":c.GetString("CAT_DP_PRECIO_SIMPTOS"), "precio":c.GetString("CAT_DP_PRECIO"), "almacen":c.GetString("CAT_DP_ALMACEN"), "tipo":c.GetString("CAT_DP_TIPO"), "piezas":c.GetString("CAT_DP_PZAS"), "usuario":c.GetString("CAT_DP_USUARIO"), "regalo":c.GetString("CAT_DP_REGALO"), "clasif":c.GetString("CAT_DP_CLASIF"))) + tipos.Put(c.GetString("CAT_DP_IDPROD"), c.GetString("CAT_DP_TIPO")) + If c.GetString("CAT_DP_TIPO") = "0" Then + prodsFijos.Add(c.GetString("CAT_DP_IDPROD")) + prodsFijosPrecios.Add(c.GetString("CAT_DP_PRECIO")) + prodsFijosPiezas.Add(c.GetString("CAT_DP_PZAS")) + End If + If c.GetString("CAT_DP_TIPO") = "1" Then prodsVariables.Add(c.GetString("CAT_DP_IDPROD")) +' Log($"id:${c.GetString("CAT_DP_IDPROD")}, tipo:${c.GetString("CAT_DP_TIPO")}"$) + Next + promoMap.Put("productos", prods) 'Mapa con los productos de la promocion (id, precio, almacen, tipo, piezas, etc.) + promoMap.Put("tipos", tipos) 'Mapa con los productos de la promoción y su tipo (fijo o variable). + promoMap.Put("prodsFijos", prodsFijos) 'Lista de los productos fijos de la promoción. + promoMap.Put("prodsVariables", prodsVariables) 'Lista de los productos variables de la promoción. + promoMap.Put("prodsFijosCant", prodsFijos.Size) + promoMap.Put("prodsFijosPrecios", prodsFijosPrecios) + promoMap.Put("prodsFijosPiezas", prodsFijosPiezas) + promoMap.Put("prodsVariablesCant", prodsVariables.Size) + promoMap.Put("resultado", "ok") + Else + promoMap.Put("resultado", "No hay datos de la promoción.") + End If + c = B4XPages.MainPage.skmt.ExecQuery("Select CAT_GP_STS, CAT_GP_NOMBRE from CAT_GUNAPROD where CAT_GP_ID = '"& promo & "'") 'Obtenemos las piezas requeridas de productos variables para la promoción. + c.Position = 0 + Private pvr As String = 0 + If c.RowCount > 0 Then + c.Position = 0 + pvr = c.GetString("CAT_GP_STS") + promoMap.Put("prodsVariablesRequeridos", pvr) 'Cantidad de productos variables requeridos para la promoción. + promoMap.put("descripcion", c.GetString("CAT_GP_NOMBRE")) + End If + c.Close +' Log($"Inv variables: ${cuantosVariablesTengoBD(promo)}"$) +' Log($"Inv dispo: ${traemosInventarioDisponibleParaPromo(promo)}"$) +' LogColor($"Promo ${promo}: ${promoMap}"$, Colors.Green) +' LogColor("TIEMPO para traePromo -=" & promo & "=- : " & ((DateTime.Now-inicioContador)/1000), Colors.Red) + Return promoMap +End Sub + +'Regresa un mapa con el inventario disponible por producto para la promoción (desde la base de datos). +Sub traemosInventarioDisponibleParaPromo(promo As String) As Map 'ignore + Private c As Cursor + c = B4XPages.MainPage.skmt.ExecQuery2("SELECT CAT_GP_ID, CAT_GP_ALMACEN FROM CAT_GUNAPROD WHERE CAT_GP_ID IN (select CAT_DP_IDPROD FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID = ?)", Array As String(promo)) +' Private prodInv As Map +' prodInv.Initialize + Private prods As Map + prods.Initialize + If c.RowCount > 0 Then + For i=0 To c.RowCount -1 + c.Position=i + prods.Put(c.GetString("CAT_GP_ID"), c.GetString("CAT_GP_ALMACEN")) +' Log($"prod:${c.GetString("CAT_GP_ID")}, inventario:${c.GetString("CAT_GP_ALMACEN")}"$) + Next +' prodInv.Put("inventarios", prods) + End If + Return prods +End Sub + +'Resta los productos fijos del inventario de la promoción (mapa) y regresa un mapa con el nuevo inventario. +'Hay que darle como parametro un mapa (traePromo(promo)) con toda la informacion de la promocion. +'Regresa en el mapa la llave "resultado" que nos da "ok" o "No hay suficiente producto para la promocion". +Sub restaFijosPromo(promoMap As Map) As Map 'ignore + Private thisLog As Boolean = False 'Si es verdadero, muestra los logs de este sub. + Private inventariosDisponiblesParaEstaPromo As Map = traemosInventarioDisponibleParaPromo(promoMap.Get("id")) 'Obtenemos un mapa con el inventario disponible para cada producto de la promocion desde la base de datos. + If thisLog Then LogColor(inventariosDisponiblesParaEstaPromo, Colors.red) + If thisLog Then LogColor("Inventario inicial antes de FIJOS: "&inventariosDisponiblesParaEstaPromo, Colors.Gray) 'Inventario inicial. + Private i As Int + Private prodsmap As Map = promoMap.Get("productos") 'Obtenemos un mapa con todos los productos de la promoción. + Private prodsFijos As List = promoMap.get("prodsFijos") 'Obtenemos una lista con los productos fijos de la promoción. + For p = 0 To prodsFijos.Size - 1 + Private t As String = prodsFijos.Get(p) 'Obtenemos el Id de este producto desde la lista de productos fijos. + Private p2 As Map = prodsmap.Get(t) 'Obtenemos un mapa con los datos de este producto (id, precio, almacen, tipo, piezas, etc.) + If thisLog Then Log($"T: ${t}, prod ${p2.Get("idProducto")}, piezas: ${p2.Get("piezas")}"$) 'Producto y piezas requeridas + If thisLog Then Log("inventariosDisponiblesParaEstaPromo="&inventariosDisponiblesParaEstaPromo) + If inventariosDisponiblesParaEstaPromo.ContainsKey(t) Then 'Si el mapa del inventario contiene el id del producto entonces ... + i = inventariosDisponiblesParaEstaPromo.get(t) 'Obtenemos del mapa el inventario de este producto. + If thisLog Then Log($"Nuevo inventario de ${t}: ${i}-${promoMap.Get("prodsFijosPiezas").As(List).get(p)} = $1.0{i - promoMap.Get("prodsFijosPiezas").As(List).get(p)}"$) 'El nuevo inventario. + inventariosDisponiblesParaEstaPromo.Put(t, $"${i - promoMap.Get("prodsFijosPiezas").As(List).get(p)}"$) 'Restamos del inventario las piezas requeridas para la promoción y guardamos el nuevo inventario en el mapa. + inventariosDisponiblesParaEstaPromo.Put("resultado", "ok") + Else 'Si en el mapa no esta el id del producto, entonces no tenemos inventario. + inventariosDisponiblesParaEstaPromo.Put("resultado", "No hay suficiente producto para la promocion.") + LogColor("Sin suficiente inventario fijo: " & t, Colors.Blue) + Exit + End If + If i - p2.Get("piezas") < 0 Then + inventariosDisponiblesParaEstaPromo.Put("resultado", "No hay suficiente producto para la promocion.") 'Si el inventario de este producto sale negativo, quiere decir que no tenemos suficiente inventario para la promoción. + Exit + End If + Next + If prodsFijos.Size = 0 Then inventariosDisponiblesParaEstaPromo.Put("resultado", "ok") 'No hay productos fijos. + If thisLog Then LogColor("Inventario final depues de FIJOS: "&inventariosDisponiblesParaEstaPromo, Colors.blue) 'Inventario final. + Return inventariosDisponiblesParaEstaPromo +End Sub + +'Revisa si tenemos los productos variables requeridos para la promoción (mapa). +'Hay que darle como parametro un mapa (traePromo(promo)) con toda la informacion de la promocion. +Sub alcanzanLosVariablesParaPromo(promoMap As Map, inventarioSinFijos As Map) As Boolean 'ignore + Private thisLog As Boolean = False 'Si es verdadero, muestra los logs de este sub. + If thisLog Then LogColor("Inventario inicial: "&inventarioSinFijos, Colors.Gray) 'Inventario inicial. + Private totalProdsVariables As Int = 0 +' Private prodsmap As Map = promoMap.Get("productos") 'Obtenemos un mapa con todos los productos de la promoción. + Private prodsVariables As List = promoMap.get("prodsVariables") 'Obtenemos un a lista con los productos variables de la promoción. + For p = 0 To prodsVariables.Size - 1 + Private t As String = prodsVariables.Get(p) 'Obtenemos el Id de este producto desde la lista de productos fijos. + If inventarioSinFijos.ContainsKey(t) Then 'Si existe el producto en la lista del inventario, entonces ... + Private p2 As String = inventarioSinFijos.Get(t) 'Obtenemos el inventario disponible este producto. + totalProdsVariables = totalProdsVariables + p2 + If thisLog Then Log($"prod ${t}, hay: ${p2}"$) 'Producto y piezas requeridas + End If + Next + If thisLog Then Log("Total prods variables=" & totalProdsVariables & ", requeridos=" & promoMap.Get("prodsVariablesRequeridos")) + Private res As Boolean = False + If totalProdsVariables >= promoMap.Get("prodsVariablesRequeridos") Then res = True 'Si el total de inventario de productos variables (totalProdsVariables) es mayor o igual a los productos requeridos entonces regresamos TRUE + Return res +End Sub + +'Regresa el numero máximo de promociones permitidas, tomando en cuenta recurrentes, clientes y maxPromos. +Sub traeMaxPromos(pm As Map) As Int + Private thisLog As Boolean = True 'Si es verdadero, muestra los logs de este sub. + Private maxPromos As List + Private vendidas As Int = 0 + maxPromos.Initialize +' If Starter.promosLog Then Log("==== HISTORICO:"&pm.Get("historico")) + If thisLog Then Log(pm) + If pm.Get("historico") = "1" Then maxPromos.Add(pm.Get("maxRecurrente")) 'Si hay historico, agregamos maxRecurrente + maxPromos.Add(pm.Get("maxPromos")) 'Agregamos maxPromos + maxPromos.Add(pm.Get("maxXcliente")) 'Agregamos maxXcliente + If thisLog Then Log(maxPromos) + maxPromos.Sort(True) + +' Log($"|${pm.Get("id").As(String).trim}|${traeCliente.Trim}|"$) + Private c As Cursor = B4XPages.MainPage.skmt.ExecQuery2("select sum(PE_CANT) as vendidas from PEDIDO where PE_PROID = ? and PE_CLIENTE = ? ", Array As String(pm.Get("id").As(String).trim, traeCliente.Trim)) + If c.RowCount > 0 Then + c.Position = 0 + vendidas = c.GetInt("vendidas") +' Log(vendidas) + End If + +' If Starter.promosLog Then Log(maxPromos) +' If Starter.promosLog Then Log("Max Promos="&maxPromos.Get(0)) +' LogColor($"maxPromos=${maxPromos.Get(0)} - vendidas=${vendidas}"$, Colors.red) + Return maxPromos.Get(0) - vendidas 'Regresamos el numero mas pequeño de las opciones. +End Sub + +'Regresa la cantidad de promos que se le han vendido al cliente. +Sub traePromosVendidas(promo As String, cliente As String) As Int + Private c As Cursor + Private pv As Int = 0 + c=B4XPages.MainPage.skmt.ExecQuery($"select PE_CANT from PEDIDO where PE_PROID = '${promo}' and PE_CLIENTE = '${cliente}'"$) + If c.RowCount > 0 Then + c.Position = 0 + pv = c.GetInt("PE_CANT") + End If + Return pv +End Sub + +'Sub procesaPromocion(idPromo As String, cliente As String) As Map 'ignore +' Private thisLog As Boolean = False 'Si es verdadero, muestra los logs de este sub. +' Private inicioContador As String = DateTime.Now +' If thisLog Then LogColor($"********* Iniciamos revision de Promo ${idPromo} *********"$, Colors.Magenta) +' 'Obtenemos el mapa con toda la info de la promoción. +' Private pm As Map = traePromo(idPromo, cliente) +' If thisLog Then LogColor(pm, Colors.Blue) +' If pm.Get("resultado") = "ok" Then 'Si encontramos la promoción, entonces ... +' 'Buscamos el máximo de promociones permitidas. +' If thisLog Then LogColor($"Promociones permitidas=${traeMaxPromos(pm)}"$, Colors.Blue) +' If thisLog Then Log("Promos vendidas: " & traePromosVendidas(idPromo, cliente)) +' If traePromosVendidas(idPromo, cliente) >= traeMaxPromos(pm) Then +' If thisLog Then LogColor("Ya se vendieron las promos PERMITIDAS para el cliente", Colors.red) +' Return CreateMap("status":"ko", "mp":pm) +' End If +' 'Restamos del inventario (mapa) las piezas necesarias para los productos fijos. +' Private inventarioSinFijos As Map = restaFijosPromo(pm) +' If thisLog Then LogColor("inventariosfijos="&inventarioSinFijos, Colors.Green) +' +' If inventarioSinFijos.Get("resultado") = "ok" Then +' 'Revisamos que los productos variables requeridos sean menos que el inventario total (mapa). +' Private pv As Boolean = alcanzanLosVariablesParaPromo(pm, inventarioSinFijos) +' If thisLog Then Log("Alcanzan los variables? --> " & pv) +' If pv Then Return CreateMap("status":"ok", "mp":pm) Else Return CreateMap("status":"ko", "mp":pm) +' Else +' If thisLog Then LogColor("NO HAY INVENTARIO SUFICIENTE " & idPromo, Colors.red) +' Return CreateMap("status":"ko", "mp":pm) +' End If +' End If +' ' Si tenemos suficiente inventario para los variables mostramos la promocion, si no ... +' ' break 'NO HAY INVENTARIO SUFICIENTE PARA LA PROMOCION. +' +' LogColor("TIEMPO DE PROCESO ESTA PROMO: " & ((DateTime.Now-inicioContador)/1000), Colors.Red) +'End Sub + +Sub procesaPromocion(idPromo As String, cliente As String) As Map 'ignore + Private thisLog As Boolean = False 'Si es verdadero, muestra los logs de este sub. + Private inicioContador As String = DateTime.Now + If thisLog Then LogColor($"********* Iniciamos revision de Promo ${idPromo} *********"$, Colors.Magenta) + 'Obtenemos el mapa con toda la info de la promoción. + Private pm As Map = traePromo(idPromo, cliente) + If thisLog Then LogColor(pm, Colors.Blue) + If pm.Get("resultado") = "ok" Then 'Si encontramos la promoción, entonces ... + 'Buscamos el máximo de promociones permitidas. + If thisLog Then LogColor($"Promociones permitidas=${traeMaxPromos(pm)}"$, Colors.Blue) + If thisLog Then Log("Promos vendidas: " & traePromosVendidas(idPromo, cliente)) + If traePromosVendidas(idPromo, cliente) >= traeMaxPromos(pm) Then + If thisLog Then LogColor("Ya se vendieron las promos PERMITIDAS para el cliente", Colors.red) + Return CreateMap("status":"ko", "mp":pm) + End If + 'Restamos del inventario (mapa) las piezas necesarias para los productos fijos. + Private inventarioSinFijos As Map = restaFijosPromo(pm) + If thisLog Then LogColor("inventariosfijos="&inventarioSinFijos, Colors.Green) + + If inventarioSinFijos.Get("resultado") = "ok" Then + 'Revisamos que los productos variables requeridos sean menos que el inventario total (mapa). + Private pv As Boolean = alcanzanLosVariablesParaPromo(pm, inventarioSinFijos) + If thisLog Then Log("Alcanzan los variables? --> " & pv) + If pv Then Return CreateMap("status":"ok", "mp":pm) Else Return CreateMap("status":"ko", "mp":pm) + Else + If thisLog Then LogColor("NO HAY INVENTARIO SUFICIENTE " & idPromo, Colors.red) + Return CreateMap("status":"ko", "mp":pm) + End If + End If + ' Si tenemos suficiente inventario para los variables mostramos la promocion, si no ... + ' break 'NO HAY INVENTARIO SUFICIENTE PARA LA PROMOCION. + + LogColor("TIEMPO DE PROCESO ESTA PROMO: " & ((DateTime.Now-inicioContador)/1000), Colors.Red) +End Sub + +'Regresa cuantas promos alcanzan con los productos FIJOS que hay en inventario. +Sub revisaMaxPromosProdsFijosPorInventario2(pm As Map) As Int + Private thisLog As Boolean = False + If thisLog Then Log($"pm=${pm}"$) +' Private prodsFijos As List = pm.get("prodsFijos") + Private invDispParaPromo As Map = traemosInventarioDisponibleParaPromo(pm.Get("id")) + If thisLog Then Log($"invDispParaPromo=${invDispParaPromo}"$) + Private maxPromos As String = traeMaxPromos(pm) + Private maxPromosFijosXinv As Int = 1 + Private fpf2, pdp2 As Int + Private salir As Boolean = False + Private pf As List = pm.Get("prodsFijos") + Private pfp As List = pm.Get("prodsFijosPiezas") + If thisLog Then Log($"maxPromos=${maxPromos}, prodsFijos=${pf}, piezas=${pfp}"$) + If thisLog Then LogColor($"InvFijo disponible=${invDispParaPromo}"$, Colors.Blue) + Private invFijoXpromo As Map + invFijoXpromo.Initialize + For p = 0 To pf.Size -1 'Generamos mapa con los productos fijo y piezas requeridos por promo. + invFijoXpromo.Put(pf.Get(p), pfp.Get(p)) + Next + If thisLog Then LogColor("Inv req. de prods fijos x promo" & invFijoXpromo, Colors.Green) + For i = 1 To maxPromos 'Revisamos cuantas promociones alcanzan, hasta llegar al máximo de promos permitadas. + If thisLog Then LogColor("Prods para promo " & (i+1), Colors.Magenta) + For q = 0 To pf.Size - 1 + Private q2 As String = pf.Get(q) + If thisLog Then Log("q="&q2) +' fpf2 = invFijoXpromo.Get(q2) * i 'Multiplicamos las piezas requeridas por la cantidad de promos. + fpf2 = pfp.Get(q) * i 'Multiplicamos las piezas requeridas por la cantidad de promos. + pdp2 = invDispParaPromo.Get(q2) + If thisLog Then Log($"pf=${q2}, Actual=${(i)}, max promos: ${pdp2}-${fpf2}=${pdp2 - fpf2}"$) + If pdp2 - fpf2 < 0 Then 'Si el inventario es negativo, entonces ya no alcanza para este producto. + salir=True + Exit + End If + Next + If salir Then Exit + maxPromosFijosXinv = i + Next + If thisLog Then LogColor("InvFijo requerido x promo="&invFijoXpromo, Colors.blue) + LogColor("Maximo de promociones de prodsFijos POR inventario = " & maxPromosFijosXinv, Colors.Red) + Return maxPromosFijosXinv +End Sub + +'Regresa cuantas promos alcanzan con los productos FIJOS que hay en inventario. +Sub revisaMaxPromosProdsFijosPorInventario(pm As Map) As Int + Private thisLog As Boolean = False + Private invFijoXpromo As Map + Private t As List + t.Initialize + t.Add(traeMaxPromos(pm)) ' Agregamos a la lista las promos maximas permitidas (recurrente, cliente y promo). + invFijoXpromo.Initialize + If thisLog Then LogColor($"pm=${pm}"$, Colors.Blue) + Private invDispParaPromo As Map = traemosInventarioDisponibleParaPromo(pm.Get("id")) + If thisLog Then Log($"invDispParaPromo=${invDispParaPromo}"$) + Private prodsFijosPiezas As List = pm.Get("prodsFijosPiezas") + Private idProdsFijos As List = pm.Get("prodsFijos") + For p = 0 To idProdsFijos.Size -1 'Generamos una lista con las promos disponibles por producto (dividimos el inventario total entre las piezas requeridas). + If thisLog Then Log($"id=${idProdsFijos.Get(p)}, inv=${invDispParaPromo.Get(idProdsFijos.Get(p))}, pzas=${prodsFijosPiezas.Get(p)}"$) + If thisLog Then Log($"${(invDispParaPromo.Get(idProdsFijos.Get(p)) / prodsFijosPiezas.Get(p))}"$) + Private x() As String = Regex.Split("\.", $"${(invDispParaPromo.Get(idProdsFijos.Get(p)) / prodsFijosPiezas.Get(p))}"$) 'Separamos el resultado de la division por el punto decimal. + If thisLog Then Log(x(0)) + t.Add(x(0).As(Int)) 'Solo guardamos la parte del entero de la division. + Next + t.Sort(True) 'Ordenamos la lista para que en el lugar 0 este el resultao mas pequeño. + If thisLog Then LogColor($"prodsFijos=${idProdsFijos}"$, Colors.Blue) + If thisLog Then LogColor($"prodsFijosPiezasReq=${prodsFijosPiezas}"$, Colors.Blue) + If thisLog Then LogColor($"invFijoXpromo=${invFijoXpromo}"$, Colors.Blue) + LogColor("Max promos de prodsFijos POR inventario = " & t.Get(0), Colors.red) + Return t.Get(0) 'Regresamos el resultado mas pequeño. +End Sub + +'Regresa cuantas promos alcanzan con los productos VARIABLES que hay en inventario. +'La cantidad de promos disponibles se calcula DESPUES de descontar los productos fijos, y si las +'promos por productos fijos llega al maximo, aunque se puedan mas de producos variables, solo se +'regresa el maximo por productos fijos. Ej. si las promos por variables es 10, pero el maximo por +'fijos es 5, entonces regresamos 5. +Sub revisaMaxPromosProdsVariablesPorInventario(pm As Map) As Int 'ignore + Private thisLog As Boolean = False + If thisLog Then Log("======================================================") + If thisLog Then Log("======================================================") + Private invFijoXpromo As Map + invFijoXpromo.Initialize + Private totalProdsVariablesDisponibles As Int = 0 + If thisLog Then LogColor($"pm=${pm}"$, Colors.Blue) + Private invDispParaPromo As Map = traemosInventarioDisponibleParaPromo(pm.Get("id")) + If thisLog Then Log($"invDispParaPromo=${invDispParaPromo}"$) + Private maxPromos As String = traeMaxPromos(pm) + Private maxPromosXFijos As Int = revisaMaxPromosProdsFijosPorInventario(pm) + Private idProdsVariables As List = pm.Get("prodsVariables") + Private prodsVariablesRequeridos As Int = pm.Get("prodsVariablesRequeridos") + Private prodsFijosPiezas As List = pm.Get("prodsFijosPiezas") + Private idProdsFijos As List = pm.Get("prodsFijos") + For p = 0 To idProdsFijos.Size -1 'Generamos mapa con los productos fijos y piezas requeridas por promo. + invFijoXpromo.Put(idProdsFijos.Get(p), prodsFijosPiezas.Get(p)) + Private idEsteProd As String = idProdsFijos.Get(p) + Private invEsteProd As Int = invDispParaPromo.Get(idEsteProd) + Private pzasReqEsteProd As Int = prodsFijosPiezas.Get(p) + If thisLog Then Log($"id=${idEsteProd}, inv=${invEsteProd}, pzas=${pzasReqEsteProd}"$) +' invDispParaPromo.Put( idEsteProd, (invEsteProd - (1)) ) + Next + If thisLog Then LogColor($"MaxPromos=${maxPromos}, promosXFijos=${maxPromosXFijos}"$, Colors.Blue) + If thisLog Then LogColor($"prodsFijos=${idProdsFijos}"$, Colors.Blue) + If thisLog Then LogColor($"prodsFijosPiezasReq=${prodsFijosPiezas}"$, Colors.Blue) + If thisLog Then LogColor($"prodsVariables=${idProdsVariables}${CRLF}Variables Req=${prodsVariablesRequeridos} "$, Colors.Blue) + If thisLog Then LogColor($"invFijoXpromo=${invFijoXpromo}"$, Colors.Blue) + If thisLog Then Log($"Prods variables disponibles = ${totalProdsVariablesDisponibles}"$) + Private maxPromosXVariables As Int = 0 + For x = 1 To maxPromosXFijos + If thisLog Then Log("=====================================================") + If thisLog Then Log("=====================================================") + For i = 0 To idProdsFijos.Size - 1 + If thisLog Then Log($"FIJO - ${idProdsFijos.Get(i)}, ${invDispParaPromo.Get(idProdsFijos.Get(i))} - ${prodsFijosPiezas.Get(i).As(Int)*(i+1)}"$) + invDispParaPromo.Put(idProdsFijos.Get(i), invDispParaPromo.Get(idProdsFijos.Get(i)).As(Int) - prodsFijosPiezas.Get(i).As(Int)*(i+1)) 'Restamos las piezas de los productos fijos del inventario disponible. + Next + If thisLog Then LogColor("Inv disponible despues de restar fijos = " & invDispParaPromo, Colors.Blue) + + totalProdsVariablesDisponibles = 0 + For i = 0 To idProdsVariables.Size - 1 'Obtenemos total de productos variables disponibes. + If invDispParaPromo.ContainsKey(idProdsVariables.Get(i)) Then + totalProdsVariablesDisponibles = totalProdsVariablesDisponibles + invDispParaPromo.Get(idProdsVariables.Get(i)) + End If + Next + 'Revisamos variables. + If thisLog Then Log($"Var disponibles - var requeridos : ${totalProdsVariablesDisponibles} - ${prodsVariablesRequeridos*x}"$) + totalProdsVariablesDisponibles = totalProdsVariablesDisponibles - (prodsVariablesRequeridos*x) + If thisLog Then Log("prodsVariables disponibles despues de promo = " & totalProdsVariablesDisponibles) + If totalProdsVariablesDisponibles < 0 Then Exit 'Ya no hay inventario disponible. + maxPromosXVariables = x + Next + 'Restamos fijos. + LogColor("Max promos de prodsVariables POR inventario = " & maxPromosXVariables, Colors.red) + Return maxPromosXVariables +End Sub + +'Regresa la suma del inventario de los productos variables de la promoción dada desde la base de datos. +Sub cuantosVariablesTengoBD(promo As String) As String 'ignore +' Private x As String = "0" +' If promo <> "" Then +' Private c As Cursor +' c = Starter.skmt.ExecQuery2("Select SUM(CAT_GP_ALMACEN) as variables FROM CAT_GUNAPROD2 WHERE CAT_GP_ID IN (Select CAT_DP_IDPROD FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID = ? and cat_dp_tipo = 1 GROUP BY CAT_DP_IDPROD)", Array As String (promo)) +' If c.RowCount > -1 Then +' c.Position = 0 +' If c.GetString("variables") <> Null Then x = c.GetString("variables") +' End If +' End If +' Return x +End Sub + +'Regresa un mapa con los datos del producto desde la base de datos. +'el mapa incluye: Id, nombre, tipo y subtipo del producto. +Sub traeProdIdDeBD As Map 'ignore + Private c As Cursor + Private m As Map + c=B4XPages.MainPage.skmt.ExecQuery("select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_TIPO, CAT_GP_SUBTIPO from CAT_GUNAPROD where CAT_GP_NOMBRE In (Select PDESC from PROID)") + If c.RowCount > 0 Then + c.Position = 0 + m = CreateMap("id":c.GetString("CAT_GP_ID"), "nombre":c.GetString("CAT_GP_NOMBRE"), "tipo":c.GetString("CAT_GP_TIPO"), "subtipo":c.GetString("CAT_GP_SUBTIPO")) + Else + m = CreateMap("id":"N/A", "nombre":"N/A", "tipo":"N/A", "subtipo":"N/A") + End If + c.Close + Return m +End Sub + + +'Regresa un mapa con los datos del producto desde la base de datos. +'el mapa incluye: Id, nombre, tipo y subtipo del producto. +Sub traePromoIdDeBD As Map 'ignore + Private c As Cursor + Private m As Map + c=B4XPages.MainPage.skmt.ExecQuery("select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_TIPO, CAT_GP_SUBTIPO from CAT_GUNAPROD where CAT_GP_NOMBRE In (Select PDESC from PROID) and CAT_GP_TIPO = 'PROMOS'") + If c.RowCount > 0 Then + c.Position = 0 + m = CreateMap("id":c.GetString("CAT_GP_ID"), "nombre":c.GetString("CAT_GP_NOMBRE"), "tipo":c.GetString("CAT_GP_TIPO"), "subtipo":c.GetString("CAT_GP_SUBTIPO")) + Else + m = CreateMap("id":"N/A", "nombre":"N/A", "tipo":"N/A", "subtipo":"N/A") + End If + c.Close + Return m +End Sub + +Sub agregaColumna(tabla As String, columna As String, tipo As String) 'ignore + Try 'Intentamos usar "pragma_table_info" para revisar si existe la columna en la tabla + Private c As Cursor = skmt.ExecQuery($"SELECT COUNT(*) AS fCol FROM pragma_table_info('${tabla}') WHERE name='${columna}'"$) + c.Position = 0 + If c.GetString("fCol") = 0 Then 'Si no esta la columna la agregamos + skmt.ExecNonQuery($"ALTER TABLE ${tabla} ADD COLUMN ${columna} ${tipo}"$) + Log($"Columna "${columna} ${tipo}", agregada a "${tabla}"."$) + End If + Catch 'Si no funciona "pragma_table_info" lo hacemos con try/catch + Try + skmt.ExecNonQuery($"ALTER TABLE ${tabla} ADD COLUMN ${columna} ${tipo}"$) + Log($"Columna "${columna} ${tipo}", agregada a "${tabla}".."$) + Catch + Log(LastException) + End Try + End Try +End Sub \ No newline at end of file diff --git a/B4A/Tracker.bas b/B4A/Tracker.bas new file mode 100644 index 0000000..035d91e --- /dev/null +++ b/B4A/Tracker.bas @@ -0,0 +1,301 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Service +Version=10.2 +@EndOfDesignText@ +#Region Service Attributes + #StartAtBoot: True +#End Region +'****************************************************************************** +'No olvidar agregar esta linea al editor de manifiesto: +' SetServiceAttribute(Tracker, android:foregroundServiceType, "location") +' +'En Starter agregar estas lineas en Process_Globals +' Public rp As RuntimePermissions +' Public FLP As FusedLocationProvider +' Private flpStarted As Boolean +' +'En Main agregar estas lineas a Activity_Resume +' Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_ACCESS_FINE_LOCATION) +' Wait For Activity_PermissionResult (Permission As String, Result As Boolean) +' If Result Then +' StartService(Tracker) +' Log("Start Tracker") +' Else +' ToastMessageShow("No permission", True) +' End If +' +'Se necesitan las librerias FusedLocationProvider, GPS, Phone y RunTimePermissions +' +'Y en Main agregar estas dos lineas: +'#AdditionalJar: com.android.support:support-v4 +'#AdditionalJar: com.google.android.gms:play-services-location + +Sub Process_Globals + Private nid As Int = 51042 + Private Tracking As Boolean + Private lock As PhoneWakeState + 'Para FusedLocationProvider (2 lineas) + Public FLP As FusedLocationProvider + Dim actualLR As LocationRequest + Private flpStarted As Boolean +' Dim locRequest As String + Dim UUGCoords As Location 'Ultima Ubicacion Guardada +End Sub + +Sub Service_Create + Service.AutomaticForegroundMode = Service.AUTOMATIC_FOREGROUND_NEVER 'we are handling it ourselves + 'Para FusedLocationProvider (2 lineas) + FLP.Initialize("flp") + FLP.Connect + lock.PartialLock + StartFLP +End Sub + +Sub flp_ConnectionSuccess + Log("Connected to location provider") + 'FLP.GetLastKnownLocation +End Sub + +Sub flp_ConnectionFailed(ConnectionResult1 As Int) + Log("Failed to connect to location provider") +End Sub + +Sub Service_Start (StartingIntent As Intent) + 'Para FusedLocationProvider (1 linea) + Service.StopAutomaticForeground + Service.StartForeground(nid, CreateNotification("...")) + Track + StartServiceAt(Me, DateTime.Now + 5 * DateTime.TicksPerMinute, True) + FLP.GetLastKnownLocation.Initialize +End Sub + +Public Sub Track +' Log("Inicia Track - Tracking : "&Tracking) + If Not(FLP.IsInitialized) Then FLP.Initialize("flp") + If Not(FLP.IsConnected) Then FLP.Connect + If Tracking And actualLR.IsInitialized Then +' Log(actualLR.GetSmallestDisplacement) + Return 'Si ya estamos "rastreando" no hacemos nada (return) + End If + If Starter.rp.Check(Starter.rp.PERMISSION_ACCESS_FINE_LOCATION) = False Then + Log("No permission") + Return + End If + StartFLP 'Iniciamos FusedLocationProvider + Tracking = True +End Sub + +Public Sub StartFLP + Log("StartFLP - flpStarted="&flpStarted) + Do While FLP.IsConnected = False + Sleep(500) +' Log("sleeping") + Loop +' If flpStarted = False Then +' Log("RequestLocationUpdates") + FLP.RequestLocationUpdates(CreateLocationRequest) 'Buscamos ubicacion + Log("Buscamos ubicacion") +' Log(actualLR.GetSmallestDisplacement) + flpStarted = True +' End If +End Sub + +Public Sub StartFLPSmall +' Log("StartFLPSmall - flpStarted="&flpStarted) + Do While FLP.IsConnected = False + Sleep(500) + Log("sleeping") + Loop + dameUltimaUbicacionConocida 'Regresamos ultima ubicacion conocida + FLP.RequestLocationUpdates(CreateLocationRequestSmallD) 'Buscamos ubicacion 2 peticiones +' Log("Buscamos ubicacion Small displacement") +' Log("GPSSmallestDisplacement = " & actualLR.GetSmallestDisplacement) +End Sub + +Private Sub CreateLocationRequest As LocationRequest +' Log("CreateLocationRequest") + Dim lr As LocationRequest + lr.Initialize + lr.SetInterval(10000) 'Intervalo deseado para actualizaciones de ubicacion + lr.SetFastestInterval(lr.GetInterval / 2) 'Intervalo minimo para actualizaciones de ubicacion + lr.SetSmallestDisplacement(50) 'Solo registra cambio de ubicacion si es mayor a XX mts + lr.SetPriority(lr.Priority.PRIORITY_HIGH_ACCURACY) + actualLR=lr + Return lr +End Sub + +Private Sub CreateLocationRequestSmallD As LocationRequest +' Log("Iniciamos CreateLocationRequestSmallD") + Dim lr As LocationRequest + lr.Initialize + lr.SetInterval(2000) 'Intervalo deseado para actualizaciones de ubicacion + lr.SetFastestInterval(lr.GetInterval / 2) 'Intervalo minimo para actualizaciones de ubicacion + lr.setNumUpdates(2) 'Solicitamos solo 2 actualizaciones con estos parametros + lr.SetSmallestDisplacement(1) 'Solo registra cambio de ubicacion si es mayor a XX mts + lr.SetPriority(lr.Priority.PRIORITY_HIGH_ACCURACY) + actualLR=lr + Return lr +End Sub + +Sub dameUltimaUbicacionConocida + If FLP.GetLastKnownLocation.IsInitialized Then 'Mandamos ultima ubicacion guardada +' If Main.logger Then Log("Mandamos UUC : "&formatoFecha(FLP.GetLastKnownLocation.Time)) + If Starter.Logger Then LogColor($"Mandamos UUC "${Subs.fechaKMT(FLP.GetLastKnownLocation.Time)}|Acc:$0.2{FLP.GetLastKnownLocation.Accuracy}|$0.8{FLP.GetLastKnownLocation.Latitude}|$0.8{FLP.GetLastKnownLocation.Longitude}|Spd:$0.2{FLP.GetLastKnownLocation.Speed}|"$, Colors.RGB(255,112,35)) + Dim coords As String = FLP.GetLastKnownLocation.Latitude&","&FLP.GetLastKnownLocation.Longitude&","&formatoFecha(FLP.GetLastKnownLocation.Time) + CallSubDelayed2(FirebaseMessaging,"mandamosLoc",coords) +' Subs.mandamosLoc(coords) + End If +End Sub + +Public Sub StopFLP + 'Log("StopFLP") + If flpStarted Then + FLP.RemoveLocationUpdates 'Eliminamos todas las solicitudes de ubicacion + flpStarted = False + End If +End Sub + +Sub flp_LocationChanged (Location1 As Location) +' ToastMessageShow("Loc changed", False) +' Log($"Loc changed:${Location1.Longitude},${Location1.Latitude}"$) + B4XPages.MainPage.lat_gps = Location1.Latitude + B4XPages.MainPage.lon_gps = Location1.Longitude + UUGCoords = Location1 +' Log("SmallestDisplacement="&actualLR.GetSmallestDisplacement) +' If DateTime.Now > LastUpdateTime + 10 * DateTime.TicksPerSecond Then +' Dim n As Notification = CreateNotification($"$2.5{Location1.Latitude} / $2.5{Location1.Longitude}"$) +' n.Notify(nid) +' LastUpdateTime = DateTime.Now +' End If + '/////// para la ultima localización FL + Dim sDate,sTime As String + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + If Not(B4XPages.MainPage.skmt.IsInitialized) Then B4XPages.MainPage.skmt.Initialize(Starter.ruta,"kmt.db", True) + Try + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_GPS (HGDATE, HGLAT, HGLON) VALUES(?,?,?) ", Array As Object (sDate & sTime, B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps)) + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM HIST_GPS") + Catch + LogColor(LastException, Colors.Red) + End Try + '/////// + Dim coords As String = Location1.Latitude&","&Location1.Longitude&","&formatoFecha(Location1.Time) +' Log("Loc changed : "&Location1.Latitude&","&Location1.Longitude&"|"&B4XPages.MainPage.usuario&"|") + Log("Mandamos Ubicacion") + Log(FirebaseMessaging.locRequest) + ' Solo mandamos la ubicacion si la precision es menor a XX mts + If Location1.Accuracy < 100 Then +' CallSubDelayed2(FirebaseMessaging,"mandamosLoc",coords) + End If + If B4XPages.MainPage.cliente.LA_GPS.IsInitialized Then + B4XPages.MainPage.cliente.LA_GPS.Text = "CON UBICACION GPS" + B4XPages.MainPage.cliente.LA_GPS.TextColor = Colors.blue + End If + LogColor(Location1.Latitude, Colors.red) + CallSub2(Starter, "GPS_LocationChanged", Location1) +' CallSub2(gestion, "GPS_LocationChanged", Location1) +' CallSub2(B4XPages.GetPage("Cliente"), "GPS_LocationChanged", Location1) +' CallSub2(nuevocliente, "GPS_LocationChanged", Location1) +End Sub + +Sub CreateNotification (Body As String) As Notification + Dim notification As Notification + notification.Initialize2(notification.IMPORTANCE_LOW) + notification.Icon = "icon" + notification.SetInfo("DISRUPTIVE", Body, Main) + Return notification +End Sub + +Sub Service_Destroy + If Tracking Then + StopFLP + End If + Tracking = False + lock.ReleasePartialLock +End Sub + +Sub formatoFecha(fecha As String) As String 'Convierte una fecha al formato yyMMddHHmmss +' Log(fecha) + Dim OrigFormat As String = DateTime.DateFormat 'save orig date format + DateTime.DateFormat="yyMMddHHmmss" + Dim lastUpdate As String=DateTime.Date(fecha) + DateTime.DateFormat=OrigFormat 'return to orig date format +' Log(lastUpdate) + Return lastUpdate +End Sub + +'Revisamos que el FLP (FusedLocationProvider) este inicializado y activo +Sub revisaFLP 'ignore + LogColor("**** **** Revisamos FLP **** ****", Colors.RGB(78,0,227)) + Private todoBienFLP As Boolean = True + Try + If Not(FLP.IsInitialized) Then + Subs.log2DB("revisaFLP: No esta inicializado ... 'Reinicializando FLP'") + FLP.Initialize("flp") + todoBienFLP = False + End If + Catch + LogColor("If Not(Tracker.FLP.IsInitialized) --> "&LastException, Colors.Red) + End Try + Try + If FLP.IsInitialized Then + Try + If Not(FLP.IsConnected) Then + Subs.log2DB("revisaFLP: No esta conectado ... 'Reconectando FLP'") + ' Tracker.FLP.Connect + StartFLP + todoBienFLP = False + End If + Catch + LogColor("If Not(Tracker.FLP.IsConnected) --> "&LastException, Colors.Red) + End Try + Try + If FLP.IsConnected And _ + FLP.GetLastKnownLocation.IsInitialized And _ + FLP.GetLastKnownLocation.DistanceTo(UUGCoords) > 500 Then + Subs.log2DB("revisaFLP: 'No se esta actualizando, lo reiniciamos ...'") + StartService(Me) + todoBienFLP = False + End If + Catch + LogColor("If FLP.IsConnectctd and FLP.getLKL.IsInitialized --> "&LastException, Colors.Red) + End Try + End If + If todoBienFLP Then LogColor(" +++ +++ Sin errores en FLP", Colors.Green) + Catch + LogColor("If Tracker.FLP.IsInitialized --> "&LastException, Colors.Red) + End Try + ' revisar hora de lastKnownlocation y si es mayor de 10 minutos llamar StartFLP +End Sub + +'Compara la UUG (Ultima Ubicacion Guardada) con FLP.LastKnowLocation y si +'cumple con los requisitos de distancia y precision la guardamos en la BD. +Sub revisaUUG 'ignore + Try +' revisaFLP + If FLP.IsInitialized And FLP.IsConnected Then + Try + If FLP.GetLastKnownLocation.IsInitialized Then +' Dim x As Location = FLP.GetLastKnownLocation + Dim daa As Int = UUGCoords.DistanceTo(FLP.GetLastKnownLocation) 'Distancia de la UUG a la actual de Tracker.FLP.GetLastKnownLocation + If Starter.Logger Then LogColor($"**** UUC "${Subs.fechaKMT(FLP.GetLastKnownLocation.Time)}|$0.2{FLP.GetLastKnownLocation.Accuracy}|$0.8{FLP.GetLastKnownLocation.Latitude}|$0.8{FLP.GetLastKnownLocation.Longitude}|$0.2{FLP.GetLastKnownLocation.Speed}|"$, Colors.RGB(255,112,35)) + If daa > 40 And FLP.GetLastKnownLocation.Accuracy < 35 Then 'Si la distancia de la ubicacion anterior es mayor de XX y la precision es menor de XX, la guardamos ... + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO RUTA_GPS(fecha, lat, lon) VALUES (?,?,?)", Array As Object (Subs.fechaKMT(FLP.GetLastKnownLocation.Time),FLP.GetLastKnownLocation.Latitude,FLP.GetLastKnownLocation.Longitude)) + If Starter.Logger Then Log("++++ Distancia a anterior="&daa&"|"&"Precision="&FLP.GetLastKnownLocation.Accuracy) + End If + UUGCoords = FLP.GetLastKnownLocation + End If + Catch + LogColor("FLP.GetLastKnownLocation.IsInitialized --> "&LastException, Colors.Red) + End Try + Else + Log("StartFLP") + StartFLP + End If + Catch + LogColor("If FLP.IsInitialized --> "&LastException, Colors.Red) + End Try +End Sub \ No newline at end of file diff --git a/B4A/appUpdater.bas b/B4A/appUpdater.bas new file mode 100644 index 0000000..ec39018 --- /dev/null +++ b/B4A/appUpdater.bas @@ -0,0 +1,286 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Service +Version=10.2 +@EndOfDesignText@ +#Region Service Attributes + #StartAtBoot: False +#End Region + +'//////////////////////////////////////////////////////////////////////////////////////////// +'//// Servicio para revisar si hay actualizacion de aplicación, usa la +'//// actividad "updateAvailable" para mostrar mensajes. +'//// +'//// https://www.b4x.com/android/forum/threads/update-your-app-without-using-the-gplaystore.109720/#content +'//// +'//// En la actividad del la cual se va a llamar la revision de actualizacion +'//// hay que agregar los siguientes Subs: +'//// +' Sub boton_que_llama_revision_Click +' StartService(appUpdater) +' End Sub +' +' appUpdater - Mostramos el anuncio de que se esta descargando el nuevo apk +' Sub muestraProgreso +' ProgressDialogShow("Descargando actualización") +' End Sub +' +' appUpdater - Ocultamos el anuncio de que se esta descargando el nuevo apk +' Sub ocultaProgreso +' ProgressDialogHide +' End Sub +'//// +'//// Requiere las siguientes librerias: +'//// +'//// * JavaObject +'//// * OkHttpUtils2 +'//// * Phone +'//// * RuntimePermissions +'//// * appUpdating +'//// +'//// Requiere las siguientes lineas en el manifiesto: +'//// +' AddManifestText( +' ) +' AddApplicationText( +' +' +' +' ) +' CreateResource(xml, provider_paths, +' +' +' +' +' +' ) +' AddPermission(android.permission.REQUEST_INSTALL_PACKAGES) +' AddPermission(android.permission.INTERNET) +' AddPermission(android.permission.INSTALL_PACKAGES) +' AddPermission(android.permission.READ_EXTERNAL_STORAGE) +' AddPermission(android.permission.WRITE_EXTERNAL_STORAGE) +' AddPermission(android.permission.READ_PHONE_STATE) +' AddPermission(android.permission.WAKE_LOCK) +'//// +'//////////////////////////////////////////////////////////////////////////////////////////// + +Sub Process_Globals + 'These global variables will be declared once when the application starts. + 'These variables can be accessed from all modules. + + 'Aqui va la liga al archivo .ver en el servidor que contiene la información de la aplicacion + Public lnk As String = "https://keymon.net/movil/Disruptive/cedex.ver" +' Public lnk As String = "https://10.0.0.205/Movil/Guna/cedex.ver" + '########################################## + '## La ruta en el servidor es: ## + '## \\10.0.0.205\e$\Cargas\Movil\Guna ## + '########################################## + '/// En el servidor se necesita un archivo de texto (.ver) que tenga los siguientes + '/// datos separados por un tabulador + '/// contents of ver file, each field is seperated by a tab + ' Field 0 = 2.226.19.09.19.01a <-- Esta es la version de la aplicación disponible + ' Field 1 = A new version of the MyAPP is available, Download and update now ? <-- Mensaje para cuando hay actualización + ' Field 2 = MyApp is up to date <--- Mensaje para cuando no hay actualización + ' Field 3 = http://www.mydomain.com/Public/myapp.apk <--- Liga al apk de la actualización + + Public nNewApp As Notification + Public nNewAppnID As Int = 16 + 'Para Download + Dim nativeMe As JavaObject + Dim n2 As Notification + Dim n2ID As Int = 16 + 'Para fileProvider + Public SharedFolder As String + Public UseFileProvider As Boolean + Private rp As RuntimePermissions + + Type mNewVersion(update As Boolean, nonewAPP As Boolean, notifyUser As Boolean, _ + version As String, newMsg As String, okMsg As String, appLink As String) + Public newApp As mNewVersion +End Sub + +Sub Service_Create + Log("appUpdater(), Service_Create") + newApp.Initialize + Service.AutomaticForegroundMode = Service.AUTOMATIC_FOREGROUND_NEVER + n2.Initialize + nativeMe.InitializeContext +End Sub + +Sub Service_Start (StartingIntent As Intent) + Log("appUpdater(), Service_Start") +' CallSubDelayed2(Main, "muestraProgreso", "Buscando actualización") + B4XPages.MainPage.muestraProgreso("Buscando actualización") + Log("Buscando actualización") + fileProvider_init + Wait For (Download(Me, lnk)) JobDone (j As HttpJob) + If j.Success Then + Try + Dim app() As String = Regex.Split(Chr(9),j.GetString) + ' // Set the data + newApp.appLink = app(3) 'Liga a nueva app + newApp.newMsg = app(1) 'Texto de que hay actualizacion + newApp.okMsg = app(2) 'Texto de app al corriente + newApp.version = app(0) 'Version actual + + Log($"Application.VersionName=${Application.VersionName}, newApp=${newApp}"$) + + ' // App version check + If newApp.version = Application.VersionName Then + newApp.update = False + Log("No new app") + B4XPages.ShowPage("updateAvailable") + 'Se puede mandar tambien una notificacion avisando que NO hay actualizaciones + CreateNotification2("Aplicacion al corriente","No hay actualizaciones disponibles","ic_file_download_white_24dp",Main,True,True,nNewApp,nNewAppnID) + End If + If newApp.version <> Application.VersionName Then + newApp.update = True + Log("New app true") + B4XPages.ShowPage("updateAvailable") + 'Se puede mandar tambien una notificacion avisando que hay actualizacion disponible +' CreateNotification2("Nueva aplicación disponible","Haga clic para descargar.","ic_file_download_white_24dp",C_UpdateAvailable,True,True,nNewApp,nNewAppnID) + End If + Catch + Log("appUpdater(), Job Failed, error " & LastException.Message) + End Try + Else + Log("appUpdater(), Job Failed " & lnk) + End If + j.Release +' StopService(Me) +End Sub + +Sub download_Start (StartingIntent As Intent) + download_newApk +End Sub + +Sub download_newApk +' CreateNotification("Descargando actualización", "Descargando apk", "ic_file_download_white_24dp", Main, False, True) +' CallSubDelayed2(Main, "muestraProgreso", "Descargando actualización") + Log("Descargando actualización") + B4XPages.ShowPage("login") + Starter.muestraProgreso = 1 + Dim job_newAPP As HttpJob + job_newAPP.Initialize("job_newAPP",Me) + job_newAPP.Download(newApp.appLink) + Wait for (job_newAPP) JobDone (job_newAPP As HttpJob) + If job_newAPP.Success = True Then + ' // Delete existing file + If File.Exists(SharedFolder,"newapp.apk") Then + File.Delete(SharedFolder,"newapp.apk") + End If + ' // Save new file + Dim outNewAPK As OutputStream = File.OpenOutput(SharedFolder,"newapp.apk", False) + File.Copy2(job_newAPP.GetInputStream, outNewAPK) + outNewAPK.Close + If Starter.Logger Then Log("APK dir: "&SharedFolder) + End If + job_newAPP.Release + ' // Install the app + Dim in As Intent + in.Initialize(in.ACTION_VIEW,"" ) + SetFileUriAsIntentData(in, "newapp.apk") + ' // Type must be set after calling SetFileUriAsIntentData + in.SetType("application/vnd.android.package-archive") + StartActivity(in) + n2.Cancel(nNewAppnID) + B4XPages.MainPage.ocultaProgreso +' Service.StopForeground(nNewAppnID) + StopService(Me) +' CallSubDelayed(Main,"ocultaProgreso") +End Sub + +Sub download_Destroy + n2.Cancel(n2ID) + Service.StopForeground(n2ID) +End Sub + +Sub Download (Callback As Object, link As String) As HttpJob + Dim j As HttpJob + j.Initialize("", Callback) + j.Download(link) + Return j +End Sub + +Private Sub CreateNotification2(Title As String, Content As String, _ 'ignore + Icon As String, TargetActivity As Object, Sound As Boolean, _ + Vibrate As Boolean, pN As Notification,pNID As Int) As Notification + pN.Initialize2(pN.IMPORTANCE_HIGH) +' pN.Number = pNID +' pN.Light = False + pN.Vibrate = Vibrate + pN.Sound = Sound +' pN.OnGoingEvent = False + pN.Icon = Icon + pN.AutoCancel = True + pN.SetInfo(Title, Content, TargetActivity) + pN.Notify(pNID) + Return pN +End Sub + +Private Sub CreateNotification(Title As String, Content As String, Icon As String, TargetActivity As Object, Sound As Boolean, Vibrate As Boolean) As Notification 'ignore + n2.Initialize + n2.Light = False + n2.Vibrate = Vibrate + n2.Sound = Sound + n2.OnGoingEvent = True + n2.Icon = Icon + n2.SetInfo(Title, Content, TargetActivity) + n2.Notify(nNewAppnID) +End Sub + +Sub Service_Destroy + Log("appUpdater(), Service_Destroy") +End Sub + +Sub fileProvider_init + Dim p As Phone + If p.SdkVersion >= 24 Or File.ExternalWritable = False Then + UseFileProvider = True + SharedFolder = File.Combine(File.DirInternal, "shared") + If Not(File.IsDirectory(File.DirInternal,"shared")) Then + File.MakeDir("", SharedFolder) + End If + Else + UseFileProvider = False + SharedFolder = rp.GetSafeDirDefaultExternal("shared") + End If + Log($"Using FileProvider? ${UseFileProvider}"$) +End Sub + +'Returns the file uri. +Sub GetFileUri (FileName As String) As Object + Try + If Not(UseFileProvider) Then + Dim uri As JavaObject + Return uri.InitializeStatic("android.net.Uri").RunMethod("parse", Array("file://" & File.Combine(SharedFolder, FileName))) + End If + Dim f As JavaObject + f.InitializeNewInstance("java.io.File", Array(SharedFolder, FileName)) + Dim fp As JavaObject + Dim context As JavaObject + context.InitializeContext + fp.InitializeStatic("android.support.v4.content.FileProvider") + Return fp.RunMethod("getUriForFile", Array(context, Application.PackageName & ".provider", f)) + Catch + Log("FileProvider::GetFileUri - error - " & LastException.Message) + Return "" + End Try +End Sub + +'Replaces the intent Data field with the file uri. +'Resets the type field. Make sure to call Intent.SetType after calling this method +Sub SetFileUriAsIntentData (Intent As Intent, FileName As String) + Dim jo As JavaObject = Intent + jo.RunMethod("setData", Array(GetFileUri(FileName))) + Intent.Flags = Bit.Or(Intent.Flags, 1) 'FLAG_GRANT_READ_URI_PERMISSION +End Sub diff --git a/B4A/google-services.json b/B4A/google-services.json new file mode 100644 index 0000000..7edcc98 --- /dev/null +++ b/B4A/google-services.json @@ -0,0 +1,126 @@ +{ + "project_info": { + "project_number": "821860097209", + "project_id": "pusher-4c091", + "storage_bucket": "pusher-4c091.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:821860097209:android:4a9c1af4c93ba100f24f68", + "android_client_info": { + "package_name": "flp2.chv.com" + } + }, + "oauth_client": [ + { + "client_id": "821860097209-ef17t5620111ghub7l0tple62otbb56v.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyDS-_5lpLX5IiKYrG-0Et-KCKx1bwlY7R0" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "821860097209-ef17t5620111ghub7l0tple62otbb56v.apps.googleusercontent.com", + "client_type": 3 + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:821860097209:android:7b6620b2a870f23cf24f68", + "android_client_info": { + "package_name": "gunav2.keymon.com.mx" + } + }, + "oauth_client": [ + { + "client_id": "821860097209-ef17t5620111ghub7l0tple62otbb56v.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyDS-_5lpLX5IiKYrG-0Et-KCKx1bwlY7R0" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "821860097209-ef17t5620111ghub7l0tple62otbb56v.apps.googleusercontent.com", + "client_type": 3 + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:821860097209:android:7780f81ae43bf0f3f24f68", + "android_client_info": { + "package_name": "pusher.chv.com" + } + }, + "oauth_client": [ + { + "client_id": "821860097209-ef17t5620111ghub7l0tple62otbb56v.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyDS-_5lpLX5IiKYrG-0Et-KCKx1bwlY7R0" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "821860097209-ef17t5620111ghub7l0tple62otbb56v.apps.googleusercontent.com", + "client_type": 3 + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:821860097209:android:7c55bc95da6d952df24f68", + "android_client_info": { + "package_name": "ths.keymon.com.mx" + } + }, + "oauth_client": [ + { + "client_id": "821860097209-ef17t5620111ghub7l0tple62otbb56v.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyDS-_5lpLX5IiKYrG-0Et-KCKx1bwlY7R0" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "821860097209-ef17t5620111ghub7l0tple62otbb56v.apps.googleusercontent.com", + "client_type": 3 + } + ] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/B4A/test.bas b/B4A/test.bas new file mode 100644 index 0000000..8dec78a --- /dev/null +++ b/B4A/test.bas @@ -0,0 +1,66 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Service +Version=11.5 +@EndOfDesignText@ +#Region Service Attributes + #StartAtBoot: False + +#End Region + +Sub Process_Globals + 'These global variables will be declared once when the application starts. + 'These variables can be accessed from all modules. + Dim timer As Timer +' Dim reqManager As DBRequestManager +End Sub + +Sub Service_Create + +End Sub + +Sub Service_Start (StartingIntent As Intent) + Service.StopAutomaticForeground 'Call this when the background task completes (if there is one) + timer.Initialize("Timer", 5000) + timer.Enabled = True + Starter.reqManager.Initialize(Me, Starter.server) +End Sub + +Private Sub Timer_Tick +' ToastMessageShow("Timer",False) +' Log("Next run " & DateTime.Time(DateTime.Now + Interval * 1000)) + testJobdone +End Sub + +Sub testJobdone + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "select_fechat" + Starter.reqManager.ExecuteQuery(cmd , 0, "fechat") + Log("sent......") +End Sub + +Sub JobDone(Job As HttpJob) + If Job.Success = False Then +' ToastMessageShow("Error: " & Job.ErrorMessage, True) + Log("Success NOT") + Else + LogColor("JobDone: '" & Starter.reqManager.HandleJob(Job).tag & "' - Registros: " & Starter.reqManager.HandleJob(Job).Rows.Size, Colors.Green) 'Mod por CHV - 211110 + If Job.JobName = "DBRequest" Then + Dim result As DBResult = Starter.reqManager.HandleJob(Job) + If result.Tag = "select_fechat" Then 'query tag + For Each records() As Object In result.Rows + For Each k As String In result.Columns.Keys + Log("select_fechat: " & k & ": " & records(result.Columns.Get(k))) + Next + Next + End If + End If + End If + Job.Release +End Sub + +Sub Service_Destroy + +End Sub diff --git a/B4A/updateAvailable.bas b/B4A/updateAvailable.bas new file mode 100644 index 0000000..36fa8d1 --- /dev/null +++ b/B4A/updateAvailable.bas @@ -0,0 +1,24 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11.5 +@EndOfDesignText@ +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore +End Sub + +'You can add more parameters here. +Public Sub Initialize As Object + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + Root = Root1 + 'load the layout to Root + +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. \ No newline at end of file diff --git a/Logo Disruptive.pdf b/Logo Disruptive.pdf new file mode 100644 index 0000000..01dedaa --- /dev/null +++ b/Logo Disruptive.pdf @@ -0,0 +1,6171 @@ +%PDF-1.5 % +5 0 obj <>/OCGs[24 0 R]>>/Pages 1 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + Adobe Photoshop 24.0 (Windows) + 2024-02-20T13:40:43-06:00 + 2024-03-12T22:59:29-06:00 + 2024-03-12T22:59:29-06:00 + + + + 256 + 256 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9I3F/eJcSIslFViAKL0+ 7FVo1C9/35+C/wBMVXC/vP8Afn4L/TFWxfXf+/PwX+mKt/Xbv/fn4D+mKt/Xbv8A35+A/pirvrt3 /P8AgP6Yq39cu/5/wH9MVd9cu/5/wH9MVd9cu/5/wH9MVd9cu/5/wH9MVd9cu/5/wH9MVd9cu/5/ wH9MVd9cu/5/wH9MVd9cu/5/wH9MVd9cu/5/wH9MVd9cuv5/wH9MVb+uXX8/4D+mKu+t3X8/4D+m Ku+t3X8/4D+mKu+t3X8/4D+mKu+t3X8/4D+mKu+t3X8/4D+mKu+uXX8/4D+mKtfXLr+f8B/TFXfX Lr+f8B/TFWvrt3/vz8B/TFWjfXf+/PwX+mKrTf3n+/PwX+mKrTqF7/vz8F/piq06lff78/4Vf6Yq rWF9dS3SpI/JCDUUA6D2GKoe6H+lS/6x/Xiq0DFV4GKrguKthcVXBcVdxxVvjiruOKu44q3xxV3H FXccVdxxV3HFXccVdxxVvjiruOKu44q7jiruOKu44q1xxV3HFVvHFWiuKrSuKrSMVWEYqsYYqr6X /vanyb9WKuuR/pUv+sf14qtAxVeBiq8Liq4DFV3HFW+OKu44q3xxV3HFXccVb44q7jiruOKu44q7 jiruOKu44q7jirfHFXccVdxxVrjiruOKtFcVWkYq0Riq0jFVhGKrGGKqTDFVfTP97U+R/Virdz/v TL/rHFWlGKrwMVXgYquC4quAxVumKt8cVb44q7jirfHFXccVdxxV3HFXccVdTFXUxV3HFXccVdxx VumKtccVdTFWqYq0RirRGKrSMVWEYqsIxVTYYqpsMVVtN/3tT5H9WKt3H+9Mn+scVcoxVeBiq8DF V4GKrgMVbAxVdTFXUxVumKupirqYq3TFXUxV1MVdxxV1MVdxxV3HFXccVdTFXUxVqmKtEYq1TFVp GKrSMVWEYqsYYqptiqkwxVW03/exPkf1Yq3P/vRJ/rHFXKMVVFGKqgGKrgMVXAYquAxVumKt0xV1 MVbpirqYq6mKupirqYq6mKupirqYq3TFWqYq6mKupirVMVcRiq0jFVpGKrSMVWEYqsYYqpMMVUmx VV07/exPkf1Yqun/AN6JP9Y4q5RiqqoxVeBiq8DFVwGKrsVbpirqYq3TFXUxVumKupirqYq6mKup irqYq3TFXUxVqmKupirVMVdTFWqYq0Riq0jFVpGKrCMVU2xVSbFVJsVVdO/3sX5H9WKrp/8AeiT/ AFjira4qqLiqoBiq4YquGKrhirdMVbpirdMVWSzQwryldUHixA/XhAtBkBzQj65pamnrVPsrH+GS 8OTWc0e9pdd0tjT1qfNWH8MfDkvjx70XDcW8wrFIr/6pByJBDYJA8lWmBLqYq6mKrWeNftOB8yBj SLa9aD/fi/eMNLYSzWdZFoqpblXmfevUKPHbvk4Qvm1ZcvDySo6hr8KC6cv6R7so4mvtTLOGJ2ae OY3TzR9Qa+tTI6hZFYqwXp0BB3+eVTjRcjFPiCNpkGxqmKtHFVpGKrTiqw4qpsMVUmxVSbFVTT/9 7E+R/Viq+b/eiT/WOKuXFVVcVVBiq4YquGKrhirYGKqF5f2togaZ6E/ZUbsfkMlGJPJhOYjzSl59 Z1IhrVTb21aBuXEmncn7X3ZbUY82gynPlsFcaFaRI1xfTNKVHKRiSB7/AOUcj4h5Bl4AG8i3HN5b CtxERCjkSyE7f7IdfbEiaQcaJjstPktVmmtoYwy8jQAAA+9BkTI3zZCESLICFj0S1kulmhVooEIZ WD159/h6kD3rkjkNMBhBNjkmV3e2toga4k4BjRepJ+gVysRJ5N0piPNI7vzHczSelYoVB2DEcnJ9 hvlwxAc3GlnJ2iojT/Mc/wBtpAr9eUlBv4rX+GHiiEcGQqieVbsj45kB9qn+mDxQkac97f8AhOf/ AJaF/wCBOPjJ/LnvQOoaVPp0kbvSWIkHlTaoNeJGSjPia54zFNb/AF+wl0+RI6tLKvH0yp+Go6k9 NsrjjILdPNExd5VhdbeaU/ZdgF/2I3P445TuunGxKd5U5DRGKtHFVpxVacVWHFVNsVUmxVSbFVTT /wDetfkf1Yqvm/v5P9Y4q5cVVVxVeuKrxiq4YquGKoXUdRisYQzDk7bJHWhOShC2vJkEQgLDSJbi QXuonmzbrCR91f6ZZKdbBqhiJPFJOwAAANgOgylyVC+sY7yJYpCQgYMQO9O2SjKmE4CQopZrbacm nyQQGNZFdSY1Ary+j275Zju7ac3CI0FukxzahaRLcMPqtu3H0x1kKio5ey4zPCdua4gZDfkEdquq xWEQAAadh+7j7D3PtkIQtsyZBH3pHZadeavK1xcSFY/9+EVqa/ZUVG2WykI7Bx4wMzZZHZafa2cf CFaE/ac7sfmcplIlyoQEeSJyLN2KuxVZNDFPE0Uqho3FGBwg0gi9ilieWdMWTmebD+Qtt+AB/HJ+ IWoYIpmkaRoERQqKKKo2AGVtwDZGKtYq0cVWnFVpxVTYYqptiqm2KqTYqv0//etfkf1Yqvm/v5P9 Y4q2uKqi4qqDFV4xVcMVczqiM7GiqCWJ7AYqTTHLSSDU9YLXNShB9GI9Dx6A/rzINxjs4cSJz3TP Utdgs5PSVfVlH21BoB9O++Vxx23ZMwjshb7zC4toXtVCtKG5FtyvE027ZKOPfdhPPsKSW51C8uTW aZn9ug+4UGWiIDjymTzW2ds91dRwL1c0J8B1J+7GRoIhGzTMJXtdMsCQOMUQoq9yT2+k5jC5FzyR CLHdOtJtWv3nuN4geUp3ofBBl0jwig4sImcrLK0REQIgCoooqjoBmO5oC7FXYq7FXYq7FXYq7FWs VSzXNSaxtlMVPWkNFr2AG7UycI2WvLPhCQ/pjXvS9bm3pdPU9NeP38aZbwRcfxJ80+0nU1v7csQF mTaRR036EexymUacjHPiCMORbFhxVTbFVJsVUmxVUsP961+R/Viq+b+/k/1jira4qqLiq8YqvGKr hiqUeZrhktY4B/u5iWPslNvvIy3EN7cfUS2pI9OvPql2k/HkFqGX2Iptl0hYpxscuE2j9dtrJEju oORa6YvyqONCKnbrWpyGMnkejbmiOY6pNlrQ6uKp75UgYzzXH7Kr6Y+ZIP8ADKcp6OTpxva3zPM8 t/FbIeXBR8A/nc/0pjiG1ozmzTILC2+r2cMNACiAMB/NT4vxymRsuTCNClemBk3TFXUxVLNa1eOx i4IQ10/2E8B/McnCFtWTJw+9jtvpGp36G5VeQcn43NCx7nfLjIDZxxjlLdU/wzq38i/8EMHiBPgy a/wzqv8AIv8AwQx8QL4Mnf4Z1X+Rf+CGPiBfBk7/AA1qv8i/8EMHiBfBkhr7Sb2yjWSdAEY8QQQd +tMkJAoljI5p8fMWmfUvtH1eFPQ4nrSlK0plXAbb/FjSE8q28vKacikZART4mtT92HIWOAdWQHKn IUziqxsVUmxVSbFV9h/vWvyP6sVXzf38n+scVbXFVVcVXjFV4xVcMVY15nmLXkcXaNK/Sx/szIxD Zw9Qd6SbLWhM9NgOpRixZvT9HlKktOWxIBXjt33rXK5Hh3boDi9KZT+VYWC+jMYyFo3IcuR8eopk BlbTpx0Y/d2lxaymKZCrDoexHiDloILjSiQd2U+Wogmlq/eVmY/QeP8AxrlGQ7uXgHpY/PehNbku nT1BHKSErSvHZd6Hwy0D0045l67TP/F//Lp/yU/5tyHhebb+Y8mv8Yf8un/JT/m3HwvNfzHk7/GH /Lp/yU/5tx8LzX8x5NP5wYqQlqAxB4kvUA/LiMfCX8x5IbSNLm1O4a7uyTDWrMert4D2wylWwY44 GRsssVVVQqgKqigA2AAyhy28VaxV2KuOKqNzbQXMJinQOh7Hx8RhBpBAPNJ/8KWPPl6snD+Tb9dM n4havACbxxRxIscahEUUVR0GVtoFOOKVhxVTbFVJsVUmxVUsP961+R/Viq+X+/f/AFjirlxVVXFV 4xVeMVXDFWJ+Yq/pR/8AVX9WZOPk4Wf6ksybSy3y5bQJp6TqP3stebfJiAMx8h3c3BEcNptlbchd Ssku7SSJlDPxJiJ2o9NjXJRlRYTjYW6LG8emQI6lHUHkpFCDyOM+aMQqIY9p1vDNr0sM6B0Lyjif EE5dI+lx4AGdFkP6F0r/AJZk/HKeMuT4ce5KvMGi28VqLi0i4FD+9C1pxPenscshPfdqy4wBYQ3l 1dNuOVtcxK09S0bHuO6/R1w5LG4Y4eE7FPv0JpX/ACzJ+OVcZb/Dj3IuONI0WONQqKKKo2AGRZgL sVdirWKuxVxxVacVaOKrTiq04qsOKqbYqpNiqk2Kqlh/vWvyP6sVXy/3z/6xxVtcVVBiq8YqvGKr hirGfNERW9jlp8MiUr7qd/1jL8R2cTUDdJctaE+8s6kUl+pSH4HqYvZu4+RyrJHq5GCe9MmyhynY q3irE7k/UvMwkf4UaQNX/JkFCfxOXjeLiH0zZZlDluxVh3mDTWsrsTQqVgkPJWHRX6lR+sZfCVhx MsKNhkej6lFfWqkNWdFAmU7Hl0r9OVSjRcjHOwjsizdiqUav5hgsi0MI9W5GxBrxXbv4/Rk4wtqn lrZLrbzXdJMBeRL6Td0BVh77k1yZxjowGY3uyO3uIbiFZoW5xvurD+3KiKbwbVMCVpxVo4qtOKrT iqw4qptiqk2KqTYqqWH+9a/I/qxVfN/fP/rHFW1xVUGKrxiq8YquGKpN5otXktY516QEhh7PQV+8 ZbiO7RnjYtjFcvcRE6YrvqNsqmh9Rdx4A1P4ZGXJnAeoM7zFc9QvL62s4fVnbivRQNyT4AYQLYyk AN0t0nW3vtSlTjwh9Osak1Pwn9Z5ZOUKDXjycUkH5ttXEsN0N0K+k3sQSw++uSxHowzx6p3pN2t1 p8MoPJgoWTx5KKHK5Ci3QlYReRZqV3axXVu8EoqjinuD2I+WEGkSFimFMt/pV/IsTMsiEqH47Mp6 GhqN8v2IcPeJVf8AEGuf7+P/AACf804OAJ8SXe7/ABBrn+/j/wAAn/NOPAE+JLvQ1pODqsU92a1l Dysdtya1PthI22YxPq3TzzVdWkllEkciSS+oGAUgkLxNenbK8YNt2YikT5VWQaVV/stIxT/V2H66 4MnNlh5JxkG1birRxVacVWnFVM4qsbFVJsVUmxVUsP8Aetfkf1Yqvl/vn/1jira4qqDFV4xVeMVX DFXSRpLG0cg5I4IZfEHEIItg+pWn1O9lg6qpqh8VIqMyomw4M40aX6Nx/SltyNBzH39vxwT5Jx/U GZXl5b2kBmnbio2A7k+AGY4FuZKQAssM1PUpr64Mjmka1ESfyr/XxzIjGnDnMyKhaXUtrcJPEaOh r8x3B+eEi0RNG2cUtNTsBUcoZlr7g/1BzH3Bc3aQYxp17PpOptbSN+49ThMDsKVoHHhtvlshxBxo SMTTMQQQCDUHococt2KuxV2KuxVLdT0KzvyZGBjuCKCVfbpUdDkozIa5YwUBa+UYEl5XMxmQf7rU ca/M1JyRyMRh70+iijijWONQqIKKo7AZW3ALsVWnFWjiq04qtOKqZxVY2KqTYqpNiqpYf71r8j+r FV839+/zOKtriqoMVVBiq4YquGKrhiqD1PTYr+39NvhkXeOTwP8AQ5KMqYTgJBh0sNzZXKiVDHNG QwB9jUHbrmRduGQYlHa7qEN8ttNG24UiSI9VbY/j45CApsyy4qKU5Y1OrgVOPL+spYu0M5pbSHly ArxalK7eNMhONt2LJWxT7V9Mh1K0Dx0MyrygkFPiBFQK+ByuMqLdOHEEh0/Ur3Rpzb3kbeidzHts T+0p6H78skBLk0xkYGiyaz1XT7zaCYM38hqrfcaZSYkORGYPJFYGTsVdirjirWKoK91nTrOT055e MlOXAKxND8hTJCJLEzAWW2vaVcyLFHNSR9lRlZanwqRTExKBMFHZFm0cVWnFVpxVYcVU2xVSbFVJ sVVLD/etfkf1Yqvm/v3/ANY4q2uKqi4qqDFVwxVcMVXDFW8VQuo6bb38Ppy1DA1Rx1ByUZUxnASD GdQ8t31t8UNbiOm7KKMD/q1Jy2OQFxpYiEpIIJBFCNiDk2pquKWsVTnR/Mc1oqwTKZYKgKa/Egr2 8fllcoW2wyEbMnubSz1K2USqWjb4kbdWHuK75UCQ5BAkEhufKEy1a1uAxrUK44n/AIIV/VlgyNJw 9ygLzzLp3wyK7Rp/OvNaD/KH9cNRKLnFVTzlcgfvLZGPirFf11weGkZiu/xnJ/yyj/gz/THw0+N5 O/xnJ/yyD/gz/THw18bya/xnJ/yyj/gz/wA04+GvjeSD0ixXV7+aS6kO37xwOrVPSvYDDI0GMI8R 3b17TItLuIJbWQjmSyqdypQg1B+nGMrWceE7MstZjNawzEUMiK5HgWFcqLkA2FQ4ErTiq04qptiq xsVUmxVSbFV9h/vWvyP6sVVJf79/9Y4q2uKqi4qqDFVwxVcMVbxVdireKuxVDXGm2FzX14Ecn9ql G+8UOESIYmIPND/4b0b/AJZ/+Hf/AJqyXGWPhRd/hvRf+Wf/AId/+asHGV8KKIttK062IMNuisOj EcmH0mpwGRLIQARWBk7FXYqpvb27mrxIx8SoP68bRS36nZ/74j/4Bf6YbWg42dp/viP/AIFf6Y2t Br6naf74j/4Bf6Y2tBjWoaNqFhe/WdLVzGRUBNypPVab1GWCQI3aZQINhSt9J1jUrxJtQVhECOZk +ElQfsqopSuJkByQIEndloVVUKooqigHgBlTkOOKrTiq04qptiqmcVU2xVSfFV9h/vWvyP6sVVJf 79/9Y4q2uKqi4qvGKrxiq4Yq3iq7FWmdEUs7BVHUk0GKrFu7ViFWZCx6AMCf14qveRI15OwVR1Zj QfjirvWi9P1Oa+n/AD1HH78VaS5t5EMiSo8a9XVgQPmRirS3VqzBVmRmPQBgSfxxVc80KMFd1Vm+ yCQCflXFW5JI415SMEXpViAPxxVY11arTlMgqARVgNj0PXFVwnhMZkEimMdXBFPvxVZ9ds/9/wAf /Br/AFxVxu7Wgb1o+JNAeQpUfT74quSaF2Ko6sy/aUEEj54q3JLFGAZHVAdgWIH68VUzeWg2M8YI 6jkv9cVXJLFICY3VwNiVIP6sVbOKrTiq04qpnFVNsVU2xVSbFV9h/vWvyP6sVXzf37/6xxVtcVVF xVeMVXjFVwxVdirYxVK/NP8Ayj95/qr/AMTGKpBoXlXT9S0VLh2dLly4DqdhRiB8JxVBfpK7l8v6 hp90xke1ePhITU09TiVqfAjbFVmoNKNH0UTczp9G9UJ3PqGvtXj0riqYW9t5eOn6jc6ZNJ6n1V1a 2kNCoI60pv8AecVSiO20X9ANcPOV1MMfTiDVr8Q6r8u+Kou4e7ZvL7XVTKabt9or63wE/wCxpirI PPR/3CL/AMZk/U2KsbuIrWbVdMiu2CW72tsJWLBQB6Y/aPTFVe1trL/EZ07T5Wm064XhMFaoK8an 4h1oe+KrdT0Swt/Mtpp8Yb6vN6fMFqn4mIO/0Yqv84aXaabBYwWoIjZ5nPI1NSIx/wAa4qjL1f0P 5whuh8NtfbP4fHs/3NRsVb10HVvNFrpi7wW+81Om/wAT/wDCgD54qk/HR/8AEOoDUyy2wlm4cK15 +rt9keFcVZpoFppkFgH07kbeclwXrUkfD3+WKpicVWHFVpxVY2KqbYqptiqi2Kqlh/vWvyP6sVXz f38n+scVbXFVRcVXjFV4xVcMVXDFWxiqWeZo5JNDu0jUu7KtFUEk/EOwxVj2kaxq9jpiWNvpc0k4 LcZWV+I5Gv2ePavjiq1/Lt7aeXryWdGe+unjJiT4iFDg78e5PXFUVb32r2GkWEQ0w3Np6bfWFKkt yLnbjQ028VxVAW+l3txJqOoJZNZW7QSLFb0IJZkpRVoCR36Yq3D5bln8ti4jgZNRhkZuJBDulelD 94xVWvrfVdV06zv0hcahYnjNEylWalCrqDSvToMVdqV3rvmBIbFdPe2VXDyyNyC1AIqSwWg3O2+K u1DRS/mSztngeWySOKJ3AYKVRabsvTp44qyqw0fTdP5G0gWItszbsxHhyYk4qx7WbW5fzhYzJE7R L6XKQKSooxrU9MVd59tbmf6j6ETy8fV5cFLUrwpWmKpj5v0xr3SS0Slp7c+pGFFSR0YD6N/oxVB+ TdPuVN1qN4rC5nbgvqAhqfaY7+Jp92KpRGZ7LzDqFzNpkl5DJJMqKYyRvJUMKqw6DFWWaJfm8tmP 1NrJY24rEwptStQKL44qjziq04qtbFVjYqptiqk2KqTYqqWH+9a/I/qxVdN/fyf6xxVtcVVFxVeu Krxiq4YquGKt4qhdWuJbfTp5ojxkRaq1AaGoHQ4qskt9UjQvDd+s6ioilRAre1UCkfPFW4dQM8tk 0W0NzE8hUjeo4UH0cjiqjp815eL64vAkiuRJacEKoFYjg3STlQdeX0YquuI7+O5to1vn4zuyn4It gqFtvh9sVbmN4t7aWn1p6SRzPJIFj5EoU49VI/bPbFVJ769hg1VGkEr2UPqQz0APIxs3FgPhqpWv yOKoh5LiW7ghWZolaBpWKBCSwZR+0rfzYqhzfXkdvqSmQStZgelOABUlalWA+HkvtiqZ3LsltK67 MqMyn3AriqWX8l/HprXsd0yMI0cR8IytSBXqtcVVbxryztGl+stKxkhQclQUDyqrfZA6hsVXSTXd zeS29vJ9Xit+IllChnLsvIKoaqgBSCSRirkmu7a8it7iX6xFcchFKQFcOq8uLBaKQVBIIGKqWk6l PN+5u6CZ+TwONhJGGp/wS9x8jiqJs55JfX5mvCZ0X5ClMVVzirRxVYcVWHFVNsVU2xVSbFVSw/3r X5H9WKtzH9/J/rHFW1xVUU4qqDFVwxVfirYxVvFUFras2lXIRSzFdlUEk7jsMVdJqyshFrDLPOR8 C+m6LXtydwqgfTiqnbWj2sunw7v6MMqu4GxY8Puqa4qoXrQXXBoLWWLU+S8JDEyMlGFS8gHErT/K IOKphdqxvLEgEhZHLEDoDEw3xVQ1C0S51SzEsZeIRT8iKgAkx03H04qhWhkttKv9MERPG3lNvKi/ 3ispG9B/eA7Hx64qqXkdmby1a9gEsQt2A5RGUB+SdgrUNK4qsjs2li1CGzia2s5YgsCurIPW+Lky owBVfs9sVV7jU3ns3gjtpheyoU9Fo3AVmFKtIRw4jxrviq/VYXGiSwIC7LGqgAVJpQdBiq/WVd7H iilj60BoBU0E6E/cMVUy72N7cSPG72t0Vk9SNS5SQKEYMq1ahCg1A+eKtc3v723kSN0tbUtJ6kis heQqUUKrUagDE1p8sVWwWLT6VClTDcREvBJTdHDGhp4HoR3GKr9HNwYJmuIvRlaZyydq7bg9x4Yq jjiq04qtOKrDiqm2KqbYqpNiqpYf71r8j+rFXT/70Sf6xxVtTiqouKrwcVXg4quBxVcDireKt1xV uuKuxVvFXVxV1cVdXFXVxV1cVdXFXVxV2KtYq6uKtVxVquKtE4qtOKrTiqwnFVjYqpNiqm2Kqlh/ vWvyP6sVanP+kSf6xxVynFVQHFVQHFVwOKrgcVXA4q3irdcVbrirq4q3XFXVxV1cVdXFW64q1XFX VxVuuKtVxV1cVarirsVarirRxVaTiq0nFVhOKrDiqmxxVSbFVXT/APetfkf1YqtuD/pMn+scVaU4 qqKcVVFOKrwcVXA4q2Diq4HFW64q6uKt1xV1cVdXFXVxV1cVdXFXVxV1cVdXFXVxV1cVdXFWq4q1 XFWicVWk4qtJxVaTiqxjiqm2KqbHFVTT/wDetfkf1YqsuD/pMv8ArHFWlOKqinFV4OKrwcVXA4qu BxVuuKt1xV1cVbrirq4q7lirdcVdXFXVxV1cVdXFXVxV1cVarirq4q1XFWq4q4nFVpOKrScVWk4q sJxVTY4qsY4qq6f/AL1r8j+rFVK5P+lS/wCsf14q0pxVUBxVeDiq4Niq4Niq4HFW+WKt8sVdyxV3 LFW+WKu5Yq7liruWKu5Yq7liruWKurirq4q6uKurirVcVa5Yq1yxVotiq0tiq0nFVhOKrCcVWMcV VtO/3sX5H9WKqN0f9Kl/1j+vFVqnFVQHFV4OKrg2KrgcVb5Yq3yxV3LFW+WKu5Yq3yxV3LFXcsVd yxV3LFXcsVdyxV3LFXcsVdyxV3LFWuWKtcsVaLYq1yxVotiq0tiqwtiq0nFVhOKq+mn/AExPkf1Y q65s7prmRljJUsSDtiq0WV3/AL7P4YquFndf77P4YquFpdf77OKrvqtz/IcVbFtc/wAhxVv6tcfy HFW/q9x/IcVd9XuP5Dirvq9x/IcVb+r3H8hxV31e4/kOKu+r3H8hxV31e4/kOKu+r3H8hxV3oT/y HFXehP8AyHFXfV5/5DirvQn/AJDirvq8/wDIcVd9Xn/kOKu+r3H8hxVr6vcfyHFXfV7j+Q4q19Wu P5DirRtrn+Q4q19Vuf8AfZxVo2tz/vs4qtNpdf77P4Yq0bO6/wB9n8MVWGyu/wDfZ/DFVewtbmO6 V3QqoBqfoxV//9k= + + + + application/pdf + 3 + Adobe RGB (1998) + + + + DISRUPTIVE DISTRIBUTION + DISRUPTIVE DISTRIBUTION + + + + + + 14BE306823C253169716851B5F74021F + + + uuid:f51ff013-d744-4786-bfe4-e6b5886bce49 + xmp.did:3eea08dc-5cc7-274e-bd28-b0283ab6e375 + xmp.did:3eea08dc-5cc7-274e-bd28-b0283ab6e375 + proof:pdf + + + + created + xmp.iid:3eea08dc-5cc7-274e-bd28-b0283ab6e375 + 2024-02-20T13:40:43-06:00 + Adobe Photoshop 24.0 (Windows) + + + + 1 + 3000000/10000 + 3000000/10000 + 2 + 65535 + 1181 + 1181 + Adobe Photoshop for Windows -- Image Conversion Plug-in + 1 + True + False + + 63.000000 + 63.000000 + Millimeters + + + + Cyan + Magenta + Yellow + Black + + + + + + Grupo de muestras por defecto + 0 + + + + Adobe Illustrator + + + + + + + + + + + + + + + + + + + + + + + + + +endstream endobj 1 0 obj <> endobj 6 0 obj <>/Resources<>/Properties<>/XObject<>>>/Rotate 0/Thumb 32 0 R/TrimBox[0.0 0.0 178.583 178.583]/Type/Page>> endobj 26 0 obj <>stream +HwVu6PprqV*2P0430Ӻ0FQ*WBP{Bz1Pm[K>W !Dhp @4 +endstream endobj 27 0 obj <> endobj 32 0 obj <>stream +8;WRlYn[?q#X`6#a"Uj8_lumTi6Di$;T*l6&<_R"VoPb'k+%O=&C-uhl:8o*[jOYL +.,E/qfp0Q;>$*,*13MQa45MHX)5::"\L#"tCL:AJoWGX'p>eqTWSL@OX+hP>B2A6j +BeAbl5W'o05ILE_IEHsK!514&i;~> +endstream endobj 33 0 obj [/Indexed/DeviceRGB 255 34 0 R] endobj 34 0 obj <>stream +8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 +b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` +E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn +6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( +l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> +endstream endobj 30 0 obj <>/ProcSet[/PDF/ImageC]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +283.4399937 0 0 283.4399937 -52.2086639 -53.6685245 cm +/Im0 Do +Q + +endstream endobj 31 0 obj <>/ExtGState<>/ProcSet[/PDF/ImageC/ImageI]/XObject<>>>/Subtype/Form>>stream +q +52.083 43.374 m +51.345 43.083 50.722 42.697 50.215 42.214 c +50.215 42.214 l +49.707 41.729 49.323 41.178 49.061 40.559 c +49.061 40.559 l +48.799 39.941 48.668 39.306 48.668 38.656 c +48.668 38.656 l +48.668 37.847 48.779 37.166 49.001 36.616 c +49.001 36.616 l +49.224 36.064 49.515 35.604 49.876 35.236 c +49.876 35.236 l +50.236 34.867 50.648 34.569 51.107 34.343 c +51.107 34.343 l +51.567 34.116 52.04 33.926 52.523 33.772 c +52.523 33.772 l +53.006 33.618 53.479 33.476 53.939 33.35 c +53.939 33.35 l +54.399 33.222 54.809 33.076 55.17 32.909 c +55.17 32.909 l +55.531 32.743 55.822 32.532 56.045 32.279 c +56.045 32.279 l +56.266 32.025 56.378 31.695 56.378 31.291 c +56.378 31.291 l +56.378 30.593 56.175 30.083 55.771 29.762 c +55.771 29.762 l +55.366 29.441 54.799 29.281 54.069 29.281 c +54.069 29.281 l +53.53 29.281 53.062 29.356 52.666 29.507 c +52.666 29.507 l +52.269 29.658 51.918 29.823 51.613 30.006 c +51.613 30.006 l +51.307 30.189 51.034 30.355 50.792 30.506 c +50.792 30.506 l +50.55 30.657 50.31 30.732 50.072 30.732 c +50.072 30.732 l +49.89 30.732 49.719 30.689 49.56 30.601 c +49.56 30.601 l +49.402 30.514 49.279 30.399 49.191 30.256 c +49.191 30.256 l +48.001 28.376 l +48.344 28.036 48.743 27.726 49.203 27.449 c +49.203 27.449 l +49.664 27.17 50.155 26.931 50.679 26.729 c +50.679 26.729 l +51.203 26.527 51.744 26.37 52.303 26.259 c +52.303 26.259 l +52.862 26.148 53.411 26.092 53.951 26.092 c +53.951 26.092 l +54.934 26.092 55.813 26.24 56.587 26.538 c +56.587 26.538 l +57.359 26.835 58.01 27.245 58.537 27.764 c +58.537 27.764 l +59.065 28.283 59.467 28.892 59.745 29.59 c +59.745 29.59 l +60.022 30.288 60.161 31.037 60.161 31.838 c +60.161 31.838 l +60.161 32.56 60.05 33.178 59.828 33.689 c +59.828 33.689 l +59.606 34.201 59.314 34.634 58.954 34.992 c +58.954 34.992 l +58.593 35.348 58.18 35.642 57.716 35.871 c +57.716 35.871 l +57.253 36.102 56.778 36.302 56.295 36.473 c +56.295 36.473 l +55.811 36.643 55.337 36.797 54.873 36.937 c +54.873 36.937 l +54.409 37.076 53.996 37.228 53.635 37.395 c +53.635 37.395 l +53.275 37.561 52.983 37.76 52.761 37.99 c +52.761 37.99 l +52.539 38.219 52.428 38.509 52.428 38.857 c +52.428 38.857 l +52.428 39.406 52.612 39.839 52.981 40.161 c +52.981 40.161 l +53.35 40.482 53.911 40.643 54.664 40.643 c +54.664 40.643 l +55.101 40.643 55.49 40.585 55.831 40.47 c +55.831 40.47 l +56.171 40.355 56.475 40.226 56.74 40.083 c +56.74 40.083 l +57.006 39.941 57.245 39.812 57.454 39.696 c +57.454 39.696 l +57.665 39.581 57.861 39.523 58.044 39.523 c +58.044 39.523 l +58.25 39.523 58.418 39.572 58.549 39.667 c +58.549 39.667 l +58.68 39.762 58.805 39.905 58.924 40.095 c +58.924 40.095 l +59.923 41.963 l +59.614 42.249 59.263 42.504 58.871 42.731 c +58.871 42.731 l +58.478 42.956 58.055 43.15 57.604 43.314 c +57.604 43.314 l +57.151 43.476 56.673 43.599 56.17 43.682 c +56.17 43.682 l +55.666 43.766 55.148 43.807 54.617 43.807 c +54.617 43.807 l +53.665 43.807 52.821 43.663 52.083 43.374 c +144.965 43.617 m +144.965 26.283 l +156.126 26.283 l +156.126 29.375 l +149.011 29.375 l +149.011 33.504 l +154.459 33.504 l +154.459 36.479 l +149.011 36.479 l +149.011 40.524 l +156.126 40.524 l +156.126 43.617 l +h +140.874 43.617 m +140.541 43.617 140.259 43.528 140.029 43.349 c +140.029 43.349 l +139.799 43.17 139.645 42.971 139.566 42.748 c +139.566 42.748 l +136.234 33.468 l +136.091 33.064 135.947 32.623 135.8 32.148 c +135.8 32.148 l +135.652 31.672 135.524 31.172 135.413 30.649 c +135.413 30.649 l +135.278 31.172 135.133 31.672 134.978 32.148 c +134.978 32.148 l +134.824 32.623 134.671 33.064 134.521 33.468 c +134.521 33.468 l +131.165 42.748 l +131.071 43.01 130.911 43.22 130.69 43.379 c +130.69 43.379 l +130.468 43.538 130.182 43.617 129.833 43.617 c +129.833 43.617 l +126.597 43.617 l +133.546 26.283 l +137.186 26.283 l +144.134 43.617 l +h +121.362 26.283 4.046 17.334 re +121.362 43.617 m +106.158 43.617 m +106.158 40.428 l +111.036 40.428 l +111.036 26.283 l +115.057 26.283 l +115.057 40.428 l +119.935 40.428 l +119.935 43.617 l +h +92.759 43.617 m +92.759 26.283 l +96.781 26.283 l +96.781 32.077 l +98.874 32.077 l +100.072 32.077 101.109 32.221 101.985 32.512 c +101.985 32.512 l +102.862 32.801 103.586 33.203 104.157 33.719 c +104.157 33.719 l +104.728 34.234 105.152 34.853 105.43 35.574 c +105.43 35.574 l +105.708 36.296 105.846 37.089 105.846 37.954 c +105.846 37.954 l +105.846 38.755 105.711 39.5 105.441 40.19 c +105.441 40.19 l +105.172 40.881 104.753 41.479 104.187 41.987 c +104.187 41.987 l +103.62 42.494 102.898 42.893 102.022 43.183 c +102.022 43.183 l +101.145 43.472 100.096 43.617 98.874 43.617 c +98.874 43.617 l +h +96.781 40.607 m +98.874 40.607 l +99.383 40.607 99.821 40.543 100.189 40.416 c +100.189 40.416 l +100.558 40.289 100.864 40.109 101.105 39.875 c +101.105 39.875 l +101.347 39.641 101.528 39.361 101.647 39.037 c +101.647 39.037 l +101.766 38.712 101.824 38.35 101.824 37.954 c +101.824 37.954 l +101.824 37.057 101.595 36.36 101.135 35.86 c +101.135 35.86 l +100.675 35.36 99.922 35.111 98.874 35.111 c +98.874 35.111 l +96.781 35.111 l +h +86.714 43.617 m +86.714 33.35 l +86.714 32.738 86.637 32.194 86.482 31.713 c +86.482 31.713 l +86.327 31.234 86.103 30.828 85.81 30.495 c +85.81 30.495 l +85.516 30.161 85.157 29.906 84.733 29.727 c +84.733 29.727 l +84.309 29.548 83.827 29.46 83.288 29.46 c +83.288 29.46 l +82.749 29.46 82.266 29.548 81.842 29.727 c +81.842 29.727 l +81.418 29.906 81.059 30.163 80.765 30.5 c +80.765 30.5 l +80.472 30.838 80.248 31.245 80.093 31.726 c +80.093 31.726 l +79.939 32.206 79.861 32.75 79.861 33.362 c +79.861 33.362 l +79.861 43.617 l +75.839 43.617 l +75.839 33.35 l +75.839 32.287 76.01 31.311 76.352 30.423 c +76.352 30.423 l +76.693 29.534 77.184 28.769 77.827 28.127 c +77.827 28.127 l +78.469 27.484 79.25 26.985 80.171 26.627 c +80.171 26.627 l +81.091 26.271 82.13 26.092 83.288 26.092 c +83.288 26.092 l +84.438 26.092 85.473 26.271 86.393 26.627 c +86.393 26.627 l +87.313 26.985 88.094 27.484 88.736 28.127 c +88.736 28.127 l +89.379 28.769 89.873 29.534 90.218 30.423 c +90.218 30.423 l +90.563 31.311 90.735 32.287 90.735 33.35 c +90.735 33.35 l +90.735 43.617 l +h +61.564 43.617 m +61.564 26.283 l +65.585 26.283 l +65.585 32.695 l +66.608 32.695 l +66.918 32.695 67.157 32.648 67.327 32.552 c +67.327 32.552 l +67.498 32.458 67.647 32.298 67.774 32.077 c +67.774 32.077 l +70.654 27.044 l +70.946 26.536 71.43 26.283 72.104 26.283 c +72.104 26.283 l +75.745 26.283 l +72.057 32.314 l +71.882 32.6 71.678 32.842 71.444 33.041 c +71.444 33.041 l +71.211 33.239 70.959 33.404 70.689 33.539 c +70.689 33.539 l +71.252 33.755 71.749 34.028 72.182 34.361 c +72.182 34.361 l +72.614 34.694 72.979 35.073 73.276 35.498 c +73.276 35.498 l +73.573 35.922 73.797 36.383 73.949 36.883 c +73.949 36.883 l +74.099 37.383 74.174 37.914 74.174 38.477 c +74.174 38.477 l +74.174 39.216 74.048 39.897 73.794 40.524 c +73.794 40.524 l +73.54 41.15 73.134 41.693 72.574 42.153 c +72.574 42.153 l +72.015 42.614 71.294 42.972 70.409 43.23 c +70.409 43.23 l +69.525 43.488 68.456 43.617 67.202 43.617 c +67.202 43.617 l +h +65.585 40.607 m +67.202 40.607 l +68.242 40.607 69.009 40.393 69.504 39.965 c +69.504 39.965 l +70 39.536 70.249 38.941 70.249 38.18 c +70.249 38.18 l +70.249 37.799 70.193 37.444 70.082 37.115 c +70.082 37.115 l +69.971 36.786 69.792 36.499 69.547 36.252 c +69.547 36.252 l +69.301 36.006 68.985 35.814 68.601 35.675 c +68.601 35.675 l +68.215 35.536 67.75 35.467 67.202 35.467 c +67.202 35.467 l +65.585 35.467 l +h +42.601 26.283 4.046 17.334 re +42.601 43.617 m +25.182 43.617 m +25.182 26.283 l +31.916 26.283 l +33.264 26.283 34.492 26.499 35.598 26.931 c +35.598 26.931 l +36.705 27.363 37.651 27.967 38.435 28.74 c +38.435 28.74 l +39.221 29.512 39.829 30.429 40.262 31.487 c +40.262 31.487 l +40.694 32.547 40.91 33.702 40.91 34.955 c +40.91 34.955 l +40.91 36.201 40.694 37.353 40.262 38.411 c +40.262 38.411 l +39.829 39.471 39.221 40.385 38.435 41.153 c +38.435 41.153 l +37.651 41.923 36.705 42.527 35.598 42.962 c +35.598 42.962 l +34.492 43.399 33.264 43.617 31.916 43.617 c +31.916 43.617 l +h +29.227 40.524 m +31.916 40.524 l +32.685 40.524 33.371 40.395 33.974 40.137 c +33.974 40.137 l +34.576 39.879 35.087 39.51 35.503 39.03 c +35.503 39.03 l +35.919 38.551 36.238 37.966 36.461 37.276 c +36.461 37.276 l +36.682 36.585 36.794 35.812 36.794 34.955 c +36.794 34.955 l +36.794 34.091 36.682 33.314 36.461 32.623 c +36.461 32.623 l +36.238 31.934 35.919 31.349 35.503 30.868 c +35.503 30.868 l +35.087 30.389 34.576 30.02 33.974 29.762 c +33.974 29.762 l +33.371 29.505 32.685 29.375 31.916 29.375 c +31.916 29.375 l +29.227 29.375 l +h +131.875 22.303 m +131.039 21.953 130.322 21.46 129.721 20.822 c +129.721 20.822 l +129.121 20.185 128.653 19.416 128.32 18.516 c +128.32 18.516 l +127.986 17.616 127.82 16.616 127.82 15.517 c +127.82 15.517 l +127.82 14.411 127.986 13.407 128.32 12.507 c +128.32 12.507 l +128.653 11.608 129.121 10.839 129.721 10.202 c +129.721 10.202 l +130.322 9.564 131.039 9.072 131.875 8.725 c +131.875 8.725 l +132.711 8.377 133.632 8.204 134.637 8.204 c +134.637 8.204 l +135.654 8.204 136.582 8.377 137.418 8.725 c +137.418 8.725 l +138.254 9.072 138.973 9.564 139.573 10.202 c +139.573 10.202 l +140.173 10.839 140.638 11.608 140.968 12.507 c +140.968 12.507 l +141.299 13.407 141.464 14.411 141.464 15.517 c +141.464 15.517 l +141.464 16.616 141.299 17.616 140.968 18.516 c +140.968 18.516 l +140.638 19.416 140.173 20.186 139.573 20.827 c +139.573 20.827 l +138.973 21.467 138.254 21.962 137.418 22.309 c +137.418 22.309 l +136.582 22.656 135.654 22.829 134.637 22.829 c +134.637 22.829 l +133.632 22.829 132.711 22.654 131.875 22.303 c +132.305 9.538 m +131.601 9.829 130.993 10.25 130.485 10.803 c +130.485 10.803 l +129.976 11.356 129.581 12.029 129.301 12.82 c +129.301 12.82 l +129.022 13.613 128.881 14.512 128.881 15.517 c +128.881 15.517 l +128.881 16.514 129.022 17.411 129.301 18.207 c +129.301 18.207 l +129.581 19.003 129.976 19.678 130.485 20.23 c +130.485 20.23 l +130.993 20.783 131.601 21.207 132.305 21.499 c +132.305 21.499 l +133.01 21.793 133.788 21.94 134.637 21.94 c +134.637 21.94 l +135.5 21.94 136.285 21.793 136.993 21.499 c +136.993 21.499 l +137.702 21.207 138.307 20.783 138.809 20.23 c +138.809 20.23 l +139.311 19.678 139.701 19.003 139.977 18.207 c +139.977 18.207 l +140.254 17.411 140.392 16.514 140.392 15.517 c +140.392 15.517 l +140.392 14.512 140.254 13.613 139.977 12.82 c +139.977 12.82 l +139.701 12.029 139.311 11.356 138.809 10.803 c +138.809 10.803 l +138.307 10.25 137.702 9.829 136.993 9.538 c +136.993 9.538 l +136.285 9.249 135.5 9.104 134.637 9.104 c +134.637 9.104 l +133.788 9.104 133.01 9.249 132.305 9.538 c +47.652 22.521 m +47.136 22.315 46.702 22.043 46.351 21.702 c +46.351 21.702 l +46 21.361 45.734 20.968 45.551 20.523 c +45.551 20.523 l +45.368 20.078 45.277 19.616 45.277 19.139 c +45.277 19.139 l +45.277 18.524 45.38 18.014 45.586 17.605 c +45.586 17.605 l +45.792 17.198 46.064 16.857 46.401 16.583 c +46.401 16.583 l +46.739 16.311 47.122 16.087 47.551 15.911 c +47.551 15.911 l +47.98 15.736 48.42 15.577 48.873 15.436 c +48.873 15.436 l +49.325 15.295 49.766 15.149 50.195 15 c +50.195 15 l +50.623 14.852 51.007 14.668 51.344 14.449 c +51.344 14.449 l +51.682 14.231 51.953 13.957 52.16 13.63 c +52.16 13.63 l +52.366 13.303 52.468 12.887 52.468 12.381 c +52.468 12.381 l +52.468 11.915 52.387 11.479 52.225 11.072 c +52.225 11.072 l +52.063 10.663 51.829 10.311 51.521 10.014 c +51.521 10.014 l +51.215 9.717 50.838 9.484 50.393 9.311 c +50.393 9.311 l +49.946 9.139 49.441 9.053 48.873 9.053 c +48.873 9.053 l +48.461 9.053 48.093 9.094 47.769 9.176 c +47.769 9.176 l +47.444 9.256 47.157 9.355 46.908 9.473 c +46.908 9.473 l +46.658 9.591 46.439 9.719 46.249 9.858 c +46.249 9.858 l +46.06 9.995 45.898 10.123 45.763 10.242 c +45.763 10.242 l +45.628 10.36 45.514 10.46 45.419 10.541 c +45.419 10.541 l +45.325 10.622 45.247 10.661 45.186 10.661 c +45.186 10.661 l +45.078 10.661 44.984 10.611 44.903 10.51 c +44.903 10.51 l +44.62 10.065 l +45.132 9.485 45.729 9.028 46.41 8.695 c +46.41 8.695 l +47.091 8.361 47.903 8.194 48.848 8.194 c +48.848 8.194 l +49.576 8.194 50.223 8.307 50.79 8.533 c +50.79 8.533 l +51.357 8.758 51.835 9.067 52.226 9.458 c +52.226 9.458 l +52.617 9.849 52.915 10.309 53.121 10.839 c +53.121 10.839 l +53.327 11.368 53.429 11.933 53.429 12.533 c +53.429 12.533 l +53.429 13.119 53.327 13.61 53.121 14.004 c +53.121 14.004 l +52.915 14.399 52.643 14.731 52.305 15 c +52.305 15 l +51.968 15.271 51.584 15.494 51.156 15.674 c +51.156 15.674 l +50.727 15.852 50.286 16.016 49.834 16.165 c +49.834 16.165 l +49.381 16.312 48.941 16.462 48.512 16.614 c +48.512 16.614 l +48.083 16.766 47.7 16.952 47.363 17.176 c +47.363 17.176 l +47.025 17.398 46.753 17.667 46.547 17.985 c +46.547 17.985 l +46.341 18.301 46.238 18.703 46.238 19.188 c +46.238 19.188 l +46.238 19.559 46.308 19.913 46.446 20.25 c +46.446 20.25 l +46.585 20.587 46.787 20.885 47.055 21.14 c +47.055 21.14 l +47.322 21.397 47.653 21.599 48.049 21.748 c +48.049 21.748 l +48.445 21.896 48.903 21.97 49.424 21.97 c +49.424 21.97 l +49.945 21.97 50.383 21.906 50.738 21.778 c +50.738 21.778 l +51.094 21.65 51.389 21.509 51.627 21.358 c +51.627 21.358 l +51.863 21.207 52.051 21.068 52.189 20.943 c +52.189 20.943 l +52.328 20.819 52.441 20.757 52.529 20.757 c +52.529 20.757 l +52.644 20.757 52.732 20.812 52.792 20.928 c +52.792 20.928 l +53.035 21.393 l +52.549 21.878 52.011 22.24 51.421 22.475 c +51.421 22.475 l +50.829 22.712 50.162 22.829 49.42 22.829 c +49.42 22.829 l +48.758 22.829 48.169 22.727 47.652 22.521 c +154.465 22.667 m +154.465 10.661 l +154.465 10.473 154.475 10.278 154.496 10.075 c +154.496 10.075 l +145.229 22.475 l +145.169 22.556 145.111 22.609 145.057 22.632 c +145.057 22.632 l +145.004 22.656 144.93 22.667 144.835 22.667 c +144.835 22.667 l +144.33 22.667 l +144.33 8.356 l +145.229 8.356 l +145.229 20.402 l +145.229 20.585 145.22 20.776 145.2 20.979 c +145.2 20.979 l +154.505 8.558 l +154.6 8.423 154.723 8.356 154.879 8.356 c +154.879 8.356 l +155.375 8.356 l +155.375 22.667 l +h +123.533 8.356 1.042 14.312 re +123.533 22.667 m +110.071 22.667 m +110.071 21.787 l +115.128 21.787 l +115.128 8.356 l +116.159 8.356 l +116.159 21.787 l +121.187 21.787 l +121.187 22.667 l +h +107.188 22.667 m +107.188 13.818 l +107.188 13.15 107.088 12.528 106.889 11.952 c +106.889 11.952 l +106.691 11.374 106.402 10.875 106.025 10.45 c +106.025 10.45 l +105.646 10.025 105.187 9.692 104.644 9.453 c +104.644 9.453 l +104.101 9.213 103.486 9.094 102.798 9.094 c +102.798 9.094 l +102.109 9.094 101.495 9.215 100.952 9.458 c +100.952 9.458 l +100.409 9.7 99.95 10.035 99.577 10.46 c +99.577 10.46 l +99.202 10.885 98.915 11.385 98.717 11.961 c +98.717 11.961 l +98.518 12.538 98.419 13.16 98.419 13.828 c +98.419 13.828 l +98.419 22.667 l +97.376 22.667 l +97.376 13.818 l +97.376 13.028 97.501 12.291 97.752 11.608 c +97.752 11.608 l +98 10.923 98.36 10.327 98.828 9.817 c +98.828 9.817 l +99.296 9.308 99.867 8.908 100.537 8.618 c +100.537 8.618 l +101.209 8.329 101.962 8.184 102.798 8.184 c +102.798 8.184 l +103.634 8.184 104.387 8.329 105.059 8.618 c +105.059 8.618 l +105.73 8.908 106.299 9.308 106.768 9.817 c +106.768 9.817 l +107.237 10.327 107.596 10.923 107.845 11.608 c +107.845 11.608 l +108.094 12.291 108.219 13.028 108.219 13.818 c +108.219 13.818 l +108.219 22.667 l +h +85.047 22.667 m +85.047 8.356 l +89.69 8.356 l +90.453 8.356 91.133 8.445 91.733 8.624 c +91.733 8.624 l +92.334 8.802 92.84 9.06 93.25 9.397 c +93.25 9.397 l +93.662 9.734 93.976 10.146 94.191 10.632 c +94.191 10.632 l +94.407 11.117 94.515 11.663 94.515 12.27 c +94.515 12.27 l +94.515 13.221 94.211 13.986 93.605 14.566 c +93.605 14.566 l +92.999 15.146 92.131 15.52 91.005 15.689 c +91.005 15.689 l +91.471 15.803 91.883 15.971 92.245 16.189 c +92.245 16.189 l +92.605 16.409 92.911 16.666 93.16 16.963 c +93.16 16.963 l +93.409 17.26 93.6 17.583 93.73 17.934 c +93.73 17.934 l +93.863 18.284 93.928 18.649 93.928 19.027 c +93.928 19.027 l +93.928 19.599 93.832 20.111 93.64 20.564 c +93.64 20.564 l +93.448 21.015 93.156 21.398 92.765 21.712 c +92.765 21.712 l +92.374 22.026 91.88 22.263 91.283 22.425 c +91.283 22.425 l +90.687 22.586 89.981 22.667 89.165 22.667 c +89.165 22.667 l +h +86.08 21.848 m +89.165 21.848 l +90.439 21.848 91.382 21.601 91.992 21.105 c +91.992 21.105 l +92.602 20.61 92.907 19.879 92.907 18.915 c +92.907 18.915 l +92.907 18.544 92.836 18.183 92.695 17.833 c +92.695 17.833 l +92.553 17.482 92.332 17.168 92.031 16.892 c +92.031 16.892 l +91.732 16.616 91.348 16.393 90.879 16.225 c +90.879 16.225 l +90.41 16.056 89.845 15.972 89.185 15.972 c +89.185 15.972 l +86.08 15.972 l +h +86.08 15.214 m +89.68 15.214 l +90.281 15.214 90.816 15.146 91.289 15.011 c +91.289 15.011 l +91.76 14.876 92.158 14.682 92.482 14.429 c +92.482 14.429 l +92.806 14.176 93.054 13.87 93.226 13.509 c +93.226 13.509 l +93.398 13.148 93.484 12.741 93.484 12.29 c +93.484 12.29 l +93.484 11.305 93.163 10.542 92.523 9.999 c +92.523 9.999 l +91.882 9.456 90.931 9.185 89.671 9.185 c +89.671 9.185 l +86.08 9.185 l +h +79.878 8.356 1.041 14.312 re +79.878 22.667 m +67.549 22.667 m +67.549 8.356 l +68.582 8.356 l +68.582 14.828 l +70.453 14.828 l +70.729 14.828 70.933 14.799 71.065 14.738 c +71.065 14.738 l +71.196 14.677 71.32 14.573 71.434 14.424 c +71.434 14.424 l +76.016 8.618 l +76.09 8.524 76.166 8.456 76.243 8.417 c +76.243 8.417 l +76.321 8.375 76.414 8.356 76.522 8.356 c +76.522 8.356 l +77.422 8.356 l +72.496 14.545 l +72.367 14.714 72.222 14.849 72.061 14.951 c +72.061 14.951 l +72.688 15.018 73.251 15.161 73.75 15.38 c +73.75 15.38 l +74.249 15.599 74.676 15.88 75.029 16.22 c +75.029 16.22 l +75.384 16.56 75.655 16.957 75.844 17.408 c +75.844 17.408 l +76.033 17.86 76.126 18.359 76.126 18.904 c +76.126 18.904 l +76.126 20.139 75.719 21.074 74.903 21.712 c +74.903 21.712 l +74.087 22.349 72.853 22.667 71.201 22.667 c +71.201 22.667 l +h +68.582 21.848 m +71.201 21.848 l +72.475 21.848 73.446 21.602 74.114 21.109 c +74.114 21.109 l +74.782 20.617 75.116 19.863 75.116 18.844 c +75.116 18.844 l +75.116 18.345 75.024 17.896 74.842 17.5 c +74.842 17.5 l +74.66 17.101 74.396 16.762 74.048 16.478 c +74.048 16.478 l +73.701 16.195 73.276 15.977 72.774 15.826 c +72.774 15.826 l +72.272 15.674 71.703 15.598 71.069 15.598 c +71.069 15.598 l +68.582 15.598 l +h +54.158 22.667 m +54.158 21.787 l +59.215 21.787 l +59.215 8.356 l +60.247 8.356 l +60.247 21.787 l +65.273 21.787 l +65.273 22.667 l +h +40.693 8.356 1.041 14.312 re +40.693 22.667 m +25.45 22.667 m +25.45 8.356 l +30.669 8.356 l +31.687 8.356 32.614 8.521 33.45 8.851 c +33.45 8.851 l +34.286 9.181 35.005 9.657 35.605 10.278 c +35.605 10.278 l +36.205 10.898 36.671 11.65 37.001 12.533 c +37.001 12.533 l +37.331 13.416 37.497 14.411 37.497 15.517 c +37.497 15.517 l +37.497 16.616 37.331 17.607 37.001 18.49 c +37.001 18.49 l +36.671 19.373 36.205 20.126 35.605 20.746 c +35.605 20.746 l +35.005 21.367 34.286 21.841 33.45 22.172 c +33.45 22.172 l +32.614 22.503 31.687 22.667 30.669 22.667 c +30.669 22.667 l +h +26.492 21.829 m +30.669 21.829 l +31.532 21.829 32.318 21.687 33.025 21.404 c +33.025 21.404 l +33.734 21.12 34.34 20.708 34.842 20.169 c +34.842 20.169 l +35.344 19.63 35.734 18.969 36.01 18.187 c +36.01 18.187 l +36.286 17.405 36.424 16.514 36.424 15.517 c +36.424 15.517 l +36.424 14.512 36.286 13.619 36.01 12.837 c +36.01 12.837 l +35.734 12.054 35.344 11.393 34.842 10.854 c +34.842 10.854 l +34.34 10.314 33.734 9.903 33.025 9.619 c +33.025 9.619 l +32.318 9.337 31.532 9.194 30.669 9.194 c +30.669 9.194 l +26.492 9.194 l +h +W n +q +/GS0 gs +283.4399937 0 0 283.4399937 -48.2086639 -53.6685245 cm +/Im0 Do +Q +Q + +endstream endobj 38 0 obj <> endobj 40 0 obj <>stream +H +٥ biH1KVf[lrXm_saun9Ͷ/չV:7Vf[lrXm_saun9Ͷ/չV:7Vf[lrXm_saun9Ͷ/չV:7Vf[lrXm_saun9Ͷ/չV:7Vf[lrXm_saun9Ͷ/չV:7Vf[lrXm_saun9Ͷ/չV:7Vf[lrXm_saun9Ͷ/չV:7Vf[lrXm_saun9Ͷ/չV:7Vf[lrXm_saun9Ͷ/չV:7Vf[lrXm_saun9Ͷ/չV:7Vf[lrXm_saun9Ͷ/չV:7Vf[lrXm_saun9Ͷ/չV:7Vf[lrXm_saun_vd/saun9Ͷ/չV:7Vf[lrXm_saun9Ͷ/չV:7Vf[lrXm_saun9Ͷ/չV:7Vf[lrXm_saun9Ͷ/չV:7Vf[lrXm_saun9Ͷ/չV:7Vf[lrXm_saun9Ͷ/չV:7Vf[lrXm_saun9Ͷ/չV:7Vf[lrXm_saun9Ͷ/չV:7Vf[lrXm_saun9Ͷ/չV:7Vf[lrXm_saun`* +endstream endobj 39 0 obj [/Indexed/DeviceRGB 1 41 0 R] endobj 41 0 obj <>stream + +endstream endobj 36 0 obj <> endobj 35 0 obj <> endobj 37 0 obj <>/Filter/FlateDecode/Height 1181/Intent/RelativeColorimetric/Length 618849/Name/X/Subtype/Image/Type/XObject/Width 1181>>stream +Hms9'.~;,,|vV1YU#.?tRV󹸸 ]tuuu}}= +פޭߦ8LM777>}9S?W}>(jF+|"Bqתi$C帍op Qϊzҏ?.W<;GߏA\ʸ"HLj) `BKHJM:в,U>hA$UJ>/y/H 1\?qwir" cWLYrHWϟ}$tݥsOpKsv#n4G|;cho5 +~)Mқ=>>J@tCeWzL\{UcI@lV)aI1@"2M$_-ҫŃG£c|bUiSab!-ńeB)& +*xx&Q o9 kz%vo ~>ly8Q>=<|X078))R`<2#Lmp 4 +b]v_,v~ЛUU(&zJX4PQ.q +}EYP7:;=l!4*abc c(xO8(J&9ӣJ) T.=w4[\R k9b--%Ut|D?*,/`QK]UBm&Sv"H&3;hF ׷iVc1Ue>#χuUS5nJjFGiM;SGe!KKxq]|ʞXyK|cr.*4PNJ,>D|DQ,?_S?OPN~غ3 >$s\ +w9ٹIss(0p +@'z:0{x]x)1E"baޚ.Is`ݸ4'X4bj( ӉDFnQN6 6 |1a8e:4r}E=V ǥGf܎6qΌ8:La13Hoj,?e}}#zb!A\dc55sQϹZ +_thOsMHMJX&PGda3A,/gYbKLL#?J( ӊr@z S.'c1F1}H1m|G*ϟ?qݜ 2si6mrKTjwӓwEi74"̷;:ps\ %lT06m*C3o=8Պ ܁)@ ]Lugggq  +B@&h.nǣ/*3tc,d2oΠoQ8I+>7:|_)9y19v56lČRGƺx:622?u+"C*HzֺrpHλc*_+qL)&Lp".f4** Bal9J^j.n93L|itYQ`S[ %ñƏ9s5Ya>"CI8bKf |Xش<PETdҬE! |'Ȗh \}[wN|?@9%Џh#Z9F9^(Ob|p9ʕ龮d߈P|QO+V[upg#؍m-huhq[e^_2G:h|VIt_IRt&dx4kfIMtm=fvLX>q #٫x8Æy +vY4Gʣ]KcNݟK|L%%DESuRtfH\ׯM\M'fX>){47sZߟBgG(<5ŽGBp_= gOdCnvS օ[<nwâ32ͱ&ź) c$Xe]\P`p 491н;VqM#88: `ʱCo?F8ltconu* qI+NZ@-9PYaZJdr WnEIҠ9{aԲʭh9$}W+M >Oz3miZY 9f*=c +dɀ/vXϙq'{5/mW. xgra5[Zez|28 "tog*WSc_jPv Y c(Ǐ@v^' GX5u.b@vqwNv w:(h5.tu(CXїc8f:cݘEt a +4fcmJpVa798.>PJvx`Yq#ᶧ~մ^T_K[6O{_*,7^ -'IrǼSٟZ ٦TiO"}̈wdySQ.TK4]f$x~t NGꟊsKL@0〗~k2EO&e}3.HTYt2,ȯU3yjIG#af2Jl^NvO5>L8ӿ9.BvCA?0O=fgg8y>ô + '%Sd?&TF%qwc_"EZzn~"WW#VњE7 %ZNIiG_.IM|a}FƩ6קZ ׷o`WIHOJ%ln{۸bwf>P@;M&p(p:6qVA(֧&cS$n&mx^MЛU+\uH+y2IrttF d",Cq2Pto~owc!13qbS P)qb;=7Z̼рrׁےb:`p8| uvzeN݈ox.yl D˅;/*Ch|8/>96ovg˷4 }?n S#d|&)rؑ_./"QyɡO%9: '<WQ-ÑN~/=Z7~%jj="wt*"Qr OOOE Xd8?#[qukqUGikI\]j%xCn5+ q l~>DbؿA{|o(+fXĦ-Ƴw+:X." ,xp1j sBJEtBv,FDoœWAJƋGV#jw:+.h2U%.ڦ<JQc +L\FG760_턛;ω)QI;+-YqS+7Ws‘6;&AjyNt @ZLH0@\ڎg9)gzCne{`.F/zZ2aOyv\ 1.?EW Xt5@K>Hy.UEUE4"sͧ ^Kŋ'`ݬx8+Q8DL_K8kXΊ#II9@Or=qef`6ygXwg"qb+6sLH$#Te떵fcҨ> LX!_Уúpf;~^+zwSɮú"?bsuwQtt໵~~QBNj1!&o_I1Ah]oX8Dʿ#Ê3]W>NZrb\I-8aY;ɽzY2n>]-WnB47 $`<@Xrzz7&\_y)S<316%;7qo3r$O_63z;]探L4$zOGD/pty)~~v̑^" ]:HK?qAU% ,sǎ`и|Iy\GS_]0h>*D'${B</6`3 q񵞰dn<,ɯ"!"9f!4ۯgUX+r8 |ݷIwXo=Ihn)bG :G9|Ss:,V&X'$^W4L7co:ALmuKkVOdYQu?$DNqs*s !F."#ԽRR7{!$;%^I4._!sp9&֫Бnj5\~I!3Z^NxV_o>[l.b;5xKT\+W&2/i7 +:UE.]Br.\"_B2 EDU$zyIGmF;zJS۔5z_|z3e>x<Ǵd/ Vvoظwg20rv)ohɳs;::8F7uxeeVZ/3r$;txuh]wQVĉVn0nn`Dا@s%X'do +3Ǔ ˗_uruݖQ|vƪK +19 by8$b8i;9%rBq&᷒o^1`bC;<'^1ޛ[;v}`wxzsh8qS{ih}.ga \ $maH6QBLϿVu]^Łs- xN'vѵv%ؙį~`/obq>ɷ!W}{o_؁<؄;16;0x`:I13吀Ift[Vt ;F 0H$_T,Lb;]|M+Ьs\@W*&&WI2WXEp`:h4$iZLvվK=7t3ف G)V|͇K(T4:82<ӝ)T9xLvbEN s<\Insҽv9 d%W@1CuyUs#Uvԅ1d$>-:Eq >D8x0Blw|AdByK>}K0)|= ljx,VvbW>nb$Q %Rn! i:\^b~_*cd3:8|UZa]tBvߓJMҀu#C'吮DSڡz:/P& aq֓73]㠈ץPc::95"$̀# qn&^_C^U*{m׆?.SbCcQg%0ƳnNxwf@ +8#z$so ܝz$N':p *׊Xk-zQS17ye-f'+UNpHuOU%wjDE$^>yItTO^<4i +#8{a~.@?aACc~K`0 !D`"U懤 p'+2 WU)-D&,pw3u@pWpQ@f%w s[R]^WOGEꫯӭwHs8ʱSif.L'p_?{- \/NU4PZiF9Jx zp9СܩdžC@1f78×U./%'0h`dpӺbv}xr1].gP/A^52'v8ãc;7_ saS6?2KQs+-K%xJ$ĴR~r*1&kK,)N#LqlC<ïa")~:J"$9!l|9xVH8_zL{!BH^t:{aęHU2±ٛU"!~vÌr1(a:7yP󃉱ᮐ;#Ңz薐+aO&S+Mq;XLǿג\F,?k 1:vƴ^+ZkG7[9\+| XcsX3_Xfgg;v?]rvoK.ќ=XXGq WxS.B-_nmf +xb?F`^_nn؈GX؉avϑflUMJ b8Է .ArVgj Q)_&zXIO>M'۬ +ʳ:\ۓʱBKYeKf` ۸xڭy% À'b:="|UcL3?:tbuJvFy9 $ͧau9"^rt*úd:ET~Y}hQО /z| NeֺVu֖5k~Dz(@X@"a|Ȭ|b^ +MKIX:4Ý":H@\bUn |/"u9fEWXTu\\uKd:]̶;K3u{͘;Tw./ n0͓CڌxiB~dXcbR]~ZMu}z׼U+QXR%2kQfpF.+M0ʺq?lrx)m+/쬭y0 Tm`A+=kq:kr3St̜{@jQ*'RP`a l{c0 +t h*d dhRqKeYV`x맠\\;\xd[`wˤOMuoUw:32BCk^Hb̪SgRj 5ai:aZ:}OwQD%J#UAy^d(%, tFv>ɰ.N+iLG/oJӡߋ4gXS)u= qx5J4Y$ӑΠJw+_%)%1G +_H(x遦fyBV4织=y89j)9fWџ=XC}ײ  Є>Zd x&m8t5Vg+xϲXe ә"zȹj;E m.Q6Oc ʆid~'J"C0Dz1W̷GAú۞6[]]p7C\!$2eju#Xʖt>5*y?\lIMg2@j VJU S[iZb5tذɎRK(XpǴ"9NNi%;ӻA)uL@Wa]Hi@VL:$tKGNS5E:r"r鞅rNwGlU7% ߺFT8;#)%遣 Wt nUb] +Vx< ߌYV-/Ou]Y\\xςAuAj:SK_O8/߈҂Ҡ}]O mi qi×?_Nb;<e>XSR01ݟk:2bo*)A)H@XGe߿b`0&B3stB1:\o ;.n=˓LEϒl7'_t;q3M#) B>n`:ihE<~ Lb:0.%]]15 l&xgϨkg D^RS(gdG3ec*QΘXk7w?Hvz. e:,$c(wt).tҽ4H ]<hdNr١H=U V[~™\Y<p5L- _%#6z㋰Efd=eYػe`WJ؍Ul6S׌n(xPNDzfaa^Ͱ 5obl@f2 y,m5A& LgpMI 3y}k^֟YCvy?+d'YԚ-0Γh-<^_t r2Lj(?ZrLr Xf`Ƙf}Z tS9CÓdfx4WR]7 9df~dG[]Ivtrx("Q߉:^E-|#}sN.!ۻStp#!YΰP+$-q%-p e4@3Ⱥu#'9NOĒ0IӄVn8lO$֔NȔ].]:lyY! 3oam~#o{}ck[a'am)вY3y@Ҹcng_͚3]YP¯%Ͱ1ɶiwX&f?|{_t] + +h Ӵj XWݙ:-!}yت 15mu Ym<چaY̲е:躳je˛Sy[H1hQg`f?XdN]ݕXW2a]xpFvcXG2۸; $^1U4yGlrK}u1 QGQwut%A߉ub<ٻ᛽@&@iٛc+Ėx2ud:@H6OLiObBʌ42΀Xy+hKr`cϔ ܠ\O +,q]X0Eع_5f˾v."㿫~@dzldrVPXaaheI.{n2ݴg505BϯeyaWխq+9Ic,_:IMnm*f#[. 2.iHO断Xw;wq_AJ^v}u9!9FvCIJurGg @7FB [Fb鉶?.R LNb)lAM !/ #v2ZQ;]ei#cRݕ׮!:vt /˴յڈJ+ۡ+8iG2g m\ DsO;7 rPNm$tZQ-g VR;u_3Jkehwl:,5kYG_GWBUea0`j$ @d2TD}iZ7ş}ٟlnNR✌nnخ9S ʝ~)ϻXT00a}(FQEuV']p;$h=*ٙHiSƫ}53S3+|Gɧ' )Dtw&/"N/ّZ7%֑l"tu`:`IDqώN3333#!}W؍t MtؼnH+P*%,`)O<$Փ!);wA^|Z~޵i\gU^6ҟtϰ +V5ʺG&FujOʎ` pJ`rU&\0Y`Ol󃀕&H Lx!$L͖-d2Mp&Waue}1ѱϵUȑu֠KMw|g9i|9sOy)y W* #;m'Lxˢ\HiTSx Th_1s!Hvu*Z}]2!.CلLp94DI2>!`uwX``6;Xg@GԜJ; YfBQi2'H6oX8TQ|zv)ip˃1I=~q +t]+oBIgJ˥k˷vX;\eL/OwB?eLDnv}p;)v T +0`s/y][2y<@6b*þ|gclԯDKh`VWe,?YJO4g`1B6bXWŢCNF&R x2 t5oR.HLd' ,١@-OFI 毁':;7Jaen* <(%_b] ti&bcHe:u@6T;:zZsưNJuuNsJ3L"ٙ)n5F_?~! %ٽ XG{hu4M+΀N M+͑HvqJvĺJ;u'9=qYrD&ĺV.JX9C@ӴRAvxIkf(~.I2u,swZe˥!͖_ל%`ڏ3ճ3-XqNN?'ח? 14ϵLxshVQ#T'MP TA'it9_Kx QuNOo'_K,dq{+lX4fׯYU8c +th,ҥ~ػuz=؝-ybY.SMPϠȦ.rJᦘPcVR^ +Ӧ+D9b5;:]Kb.V#L MQIK w+uU:7e:=#;L(hN.3D9=Z:;HiV ()߭h;e+ݗ4N똎dW2]bC%ʩ |ggzאߚLG3XL7cz*}x݀le8dr~%LP[9ozS;*$5:Onv&+*g:;ƕ,;b2a9'H#v7嚓OJmM]UnR{%`I 6E]J_t2]$ +pllr.{L\{yYݯ4jM]mSfb/չwƮgHQxAMW-"0vP2._rL[l3i[NVW9^W4NJh`ms  οe-:6̭:xevo !.mI3M)E륞M9 YON$ qI!dXVD_ | .i.NA_!b1 hRWq:@vMҜTt)źPHNɎ4n=ZRr`/]pu7$8(9gq s:|!Ä1$ ðSzziEv&/g8K0>zڃ>c=KbթW+V1])׊p mro79z3 +_K,7[BּQi\i-Ǻ-+,$Dd9KQFllwك692NZ VG'M'S,އȯ=NxqyzϏT6~o\BzAsO@:GDOVz355N05h!ΉMN9]5Yx(H#9窛쫓V5Ics^Ȼy9Waq" `޼^^Bq tem Ygh~i2QKRS +_:އ+O8;Jv0%Hv t HaZf3C_gV%H֕a+%ϖL/wG2u?$qz+S("2k[ut$;ҜPn 4[z]t4gLack.i.f9sBU|CˌJ#%q_v$9.SAj9C[F'%YSYf=ёͮBld Eekÿ6땭Z^띺'cپNș [g΄mҁL׬y2Kwo C-ӝ{̘5篬[mvVfX0I&2x)a@z:Kٷ S\fN4T*hpNgYe9K!P*3u 0jGXe_ë^zI]<\֬5]H7CSdv 7Bz?b!L&aAaJ# 1JdW2"t|{_ SJ}{7|^ ;wYKDC4~3Bު 1뜹,2![N'?')mĐ>~FdnΖkNP:HpP~e9hY CD~K!'htJF+0.ΓiSO*snoye1߂X.K^,{,omR(/:fB,"m԰^iJ{bI> Na 0_2 ?W*M;Ni#;p +zM@,ߊ+A")}Bc>ĺ.nu1( 8:yNi?^@< +M iV\2ynP3ӄYl[pySs#I;8Rr\n@ά|JC.ήq) +#=E_[kBwm$+I|a%)v[O"IuىoK~i>1ֹ2Fa}e645xaHOIgh5u8 p[ ۆ]ί4j`?ՙ.GMׇ9{a3~#F8W |xH?q/.*CBk*XEn).-N-ݟll~`tޏ:xt,t6CA(Lɰ..G#!gj.so@g+9NL@( ΰVByC;c͠"pZ5ӱےbëf2۱8-#h6[ l;=_BFd&٭yp<d%NYPGLzdú+21!5鲕URC"K{piap4޲l~"w<cMc36+src M[E_ôVaW'ڢE3vH#5c:&fAu5R̖'tHd% +|.݄NglȶCܷݮvfYmǝǬ Wzkլ׮zS QfO%֙=yW#;i)?#EXGSb#^Nv$ܭb؄)T)<0c@g$Qu9$f92Q'aZfk%b&$+u:,r]XoXXx62VUl8u%٩:3Sq'ٹX_xP"]:a}z2' ,5|EB3{}x[ͬ7`ڬ y2R- ۙ9sЮv&XJ?*lɜfT4-LgZFHKp9RSڄFnw=<>s`.tގfxp-|~꫷j[iZ`_bjeֆcdƲϮ{]soں\e>|5hCևO3lHc%lvmNyYD,j&! \3OԕiZ[Z;(tt@<%E 2gfէW+XHig=wRׂw} @tIvĺv%ӱFvy:b]"-.ɹl^ߤZOnu1(ܨ[rD9X$; ٰA2[Hs+QLgi'7=d,N+͎2~¡hWz@~-!aǵRQ"]ݵW5ۧ+8W8;T3~<Y4P άxqJopAc5SUX90"V1ltOԵȱˆNYF].V5.݄ynoU6`ꈣ +?SIb5TAgVË_Be+^e;RUI֓;SeϜrzW'eZmҲ zC.cvYK^yN (Μ-JIsuXpgVpEGws6A=QWMLyVGmu ;e:OMwd!T#-) މu$;0a#QJ9JF%}???ݘ/*c:@0z=]\$MnuD\ݾ) 2@=:*y-()uNB:qzJ.Kv##e;n]FEv*4.և^̺U1ڲS$;`xh0tLelٜʚXy9"1 7zsnr6RV XݎlbPK= t`:Pێ4AC|`OhJ:FeǺ8*ݻ^罁>uh~jǬԶI똿\?xTXCUW;s;nyIӕoΣ9 ^BRT3Cs*NL]\"y<$ed:úaF2͈b`;# `O]P.XpgX4PN+XŋtKT#NrtP9:2]umLgdLGpXǵZrҠ6d:źJ 4XW͠ N*kCc12؝ +hGK4S.&p=a'[Uakv9˪9ۥi\Jo49Jp7^7MCΉzw+uA [J)dFeE02OWD*M{Q2r=+tURS%ӑ(D0#W~)ǭ'N%"LsaSmnPJsk'24>]wtX839Fm')et"A_WֽSC"n܀u ;ʰX|[)Lg?G-8JWB֧.Zgm.x8$f,_ t3Qc'RwXGWrLhGh tIR2OR.psĔX++UL4h O^㥩Vp}wwAv:$ ~:.[M_i" B*3$Pdl"V~[קr i1S?&:V 2I4˦5,R(|jpN9!C~*g;L= 5_eh9𲟥qsP%q b~D Fջa6KK΄ðN-(z%u"3TU_ JV ʣVXLWOϴb?jX'9iP.adg|.V3ց}Y XgZ5hd: +gLǁ`!R+l4_H9NqlB'DьNU\8tতN8x)gXSYy% qVn;٭ Erc ﻤiU*X1{|є> aDCOV $j=MМ<khhǘ"X!˩(θ +jA[?ɳ pJ%"3䵡րǏ>:_C!-?"UbӅ-NP'w + {۶O u`-symd5eS\ "dS}+Y : +uL (Rru^.0] wr-}ֳ:TŎ: \GvFsJ[$;$~ aòe4p5vόҍv +q3g: ̅"^Uqtv]32̥҃P3SRm7>O hWp7 S׼V 䩢$p)|9g`˾]̲9!O'9|e3m5h&AR7H5 +վv4iC(~Q<W[ 0 oJoѷ_C]wz{{$!Bv44c{{j-9`9r^$ȡ `b:Ӹ?6m6k>[òiJy'>g>hC,3oӞ3 VD<+fx33+>o#ʼIm*n֍ xi3CÍ0;9x]1 ӚxC'qzN@j^'A'5u52r.U.4~fW6.Z[n;]!+5&Mx ;Qߵ|VnCmtۂlmf~[W+D&呞yzkµ4Yd6S?0iPXG;hhRGG3GshXG/4gp7L,O"=͕z-hxoveݥ@7 ;a(RH.D9pCwJ_RFv(2X|r׀8.b TtD9$;9jԼڥց)Ǒ nu.3b$zjYo]*){]f_`&kq4[\gP²9WƠah$e ++bO/3(t^ ȆUT.;CgU> pjC06V6{|7̰fFeioBy; 蘫`~1^5@}/c1Cp[z޵"#,Z3e 2l@m\cQ6b!R;Y6ON&}2g]cP3* &ә[02ӂ[^ S,3fu) #L)|GvEvgOݵ!vie`@}tJ%H:Jv`:KY OCTĺq +{!XGxǭȎaˈ(ǂ- +D }K9 Pk$8޲L7vlҜnrʚڒJMSC@bNjJv˖D9"[rze J[ayz֞Ce>TuYcTYQ7Ip(38hsxLy\öHpkoWA [ިsWa$י#.*:Z9\/g_ rwVji,e9j&w0LzruR{Ny 8GzS쓳j2e(@t - n WOl'Ä8,=DR]&+:zk(gb(IKdz[u4* JpͪǙnZ ;Z4d`(dgp`b(|,ú; (4gX#u$:C:2_omdg+fdb::_p47ĚE%^"ʕX- +tG+sV-$ǭp()qG3.hvU z&|FtEӐ2=iˬ4W§l'ɒ=̱Dc& ^Җ9鵢$:&Lz%Y jflb,5s):lVZ)y/35Q;=mδh[!L:aPOz^x&4fbytLe{Wt/ 6g[7Oym +fXfC-'bevPd::'95|Y3 e>GWD=LlR:+:.184= &XG3H3̅Y{uq!ө WW:ᎆ"Е2 @ +D`1]Q:X['wPd7hW4G5ĺj"5R u˘/!r_nH/9nAvcÐr8faϳ̟26CLW<1pCf4ge%5Eνq*Z%S=0ШVGC>(AxiUB6˾YU3sA0lzvΠw *#4alYPgf7Ӈ?kEi*)?;Fo#dH6mv),[&` Hmf:`Ad/ Y$\O,QEK+sv})fع>W~2~貙[nf%t^'n;١{6BH(W]e'ֆ#Xxِر6f9vHS 4[m$YzfqE`MjplX|Zqkp7ov)٩%æuF +Ժ;%;(laa(ݨ+]t-npz1 Xc+i2M34}+n!2=[d}YrW;_.ˊu%e /j:8ow%%S<3ߔpjyu*4><5#4P4Y\*l +AEFv7KΰL%oLU$Xb|/7#_ RWui|rW]əfy" {˅Zβ&颭o2B>өJf6޺+x2P_] ,aٞucM\qm:m7tR_ + ƿ|w'LvMFGګ,cZvx $g9ź=+_mԉяi.L]iig̲WCdWb]`QXRPP#ʁP)壒u_R͡0t$;\YFd))ǁ(ܥ9D,V$ܱ6cp/͠ۃ[;*"إ8n]ú$; q5K{m[A Fl AA[IڠŖ]J(mÙŻ(rq>g|UKS!h`P))ezW z2$ %eQ]yf1+n"yM2vFZo[ڝ82#]3|B͍,m&jnoO#@KPMԦϟQ,=sVs +:1VՇA +6ȺL).G_ݪ*+i$Hstr׵Dk|;m2!VwB9;) U< 呱I,:-F[$d*/P@:МT>54<]~= +9&Xgoc$멍(H*AZ\&)A0;(1u$;ÓE2 +t@G}yQu_2Ǒ?]Nː\iNV O!-Z9[?J.NQ Uc qSd^8<*;ˊr8`:^KSR3LӢJD6au̓m neE/@ZcVbmvR'PMHRkO +6OFn"sJjJ;, vH7g9V9PilUO昱V@GPϲs -[fj ·3לPY*chX:IP5JM*Rs7&5jͳ,ͳGi[9ϗUޖ* +ͣCRԸ'4!^^o4 +pP`7X2sk,B=:>O)wLW5̰wÙ3Q2b*Hv$;e5h9v%@ t5LG={vt:~J+…Jz@G(?8ΘúrL+)֑VI GXGS%RXȎ90Y2rv7%r5##nK@^+._/ Z/)yr{_yA[ѭrOs(nb qQF8KZi ӡA`#@$3a&^J<[uwґ x:2s2P^=PBiZblNTִ|J'MQMpx?e~V7$ky;dgpfs'vzVm95WE5=t4*%ۨQ4Nĺ'd'CXGO!fA:OՔ9a1Vȋ2B鰮g9rd:(VJXV]]n ,݄ߢPN)=@htܡ>CVB9o,Z:e3W1*?Vͥ6ʶَS_> @ M_6lu&~ +R[Gvۅm'tJmtMRbӚp9J'Yk2M4`wl3>d&,F;ŷɮ8L+%MN=ɤ o цHC֥KcuW$;dvXF1;4GWWW@v%#"@s7GF&Xgp@GS#EHn.LlEĒ:%;1HҜF% ފJl'2M.I/>FfᕇWFOtl#pi"ixڅٌbe*)twMyh9" 8m׼᳓-_lV^nGSN;V0f@}itEY8E-);LCt 'ʜC:"PelL|J$V*ϗL4R~FBֿBs,)uHy?_dYL-we/}]W֙C xTv<3PkQy)"mT x(.J]9K~nXGqwu4% ivXg@Ġ;"^'@ a1cXgdz2SCBn\bQJvaXL!Gד+}w\wFsu;{u :3Sj+;2*45;z,YG ӝb$h>bTCbr(`?|4h+*8RkŠ\kpݎcvhvul~;^#Z9t72BMF=uZ҄/ lrasJ&k>ТHĺ/m9ù)?̯;u"9Y_WAȹ>uڥ>aTP2%Xʞ1ӆm\CϽw _lҤn3O_'z2ݏAicWv`Ka=ހzOu'e@G@uQo3+f:Zb%Vn3h2fi2xWdKOf7OS(+W|aݐ :u9M@`v)鈊ulK3S3SO`~ܥ4i6!nQs3wqD9OB'QN-;sCH#i.%;"!GcGcͮ֔ %+FqtcRUI" Sk`h1J"z˯Z];&Vd=RbZ_m۬y91 +2:fX`=RӢ|aUs] r&]l5996bQ:#.vh=aY?;4ݏGznM\ 嵜'J9]XE9vX_?-Xop&gN6˩,nGծ Xוʉxtĺ4I|::뒾EٍL/f#'('QfO9!;piz4"f?+QoE]uOKX' Y4oDoD9v?9)ٍ4]Cy'ٍFՓ4m@DtJvdoEU9NHv~x\)n3݁:u'E R#)VKXa!뷣NQ3vL4 nWa~_(yiBn2( 2A^Z`Mn)m9i#s㙙#͆R嫚%N\[(|m?tl'N/~BgE}d~8)tPc]o#hTVbl5?Ⱥ՜>|scQ[JpC"묥~w +2Ye͓:_w}ht+"әhhS 鬈%J6e47j13;ARmaNΓtNy 8&TH#Smw) K.@ПC PHDu,仯* 2Snh]u#ŋAĺ!3>k4?eQ, BJADDמ\GSzKsڞ١~XvO=N>8OtnDbtu9.?Kzټ-4Lj|0c#(PU 2-~R+t-)ӽєpGO~|nsxu2]=iK409B= (@D<5IHvJ.`:b]APaݗ!`8;2]eJ׳CoC9Hg:]d:b] :S-)`B7Ji.-pwJnzj+%٥xxR?E-dӴ̺p^U^oZZUhW$`j@g!Fs_D93nLT5;id*84X6?Ce޳zvڪ-3h_SkF O5ZWvӅjk=vdOZi[جe)u + 鮭EJ,hۊfoG= j; '6KI>唭 b56uoMf:7n[{^\Mr?tp׌ a}jV7rt)W2c沔 ө  L<&`e[3@y;%;::s;zx{ +2O&b]!a2 Z+4'}qW* ;<)1Ia]:XjK?*/cCa;֪n a"iXq-֩x'AzPo,C +n|Bϋr&dC?%,oR$J(hQX6_C&|#/ |)mfɌ-)WNvjJ?mG:g )3V٧.^E嫖dj;YfQ4'!.]h/4[XE)C\ l:HF +,F(V׀ŊYZ ;'>ҕzNxQ&uMp⮘ +սap-V-靟cиqV:+Hw:xiQï [`Ω3Q ɯjJertȇ-o;=!AFȰN1TbtcLXDzTUԳMN.:>[+LP]q:T(|b4G%MXgdgX|hbTw";݊ 3'd^t؞X XQJ!9F4> MGyaM +A]틿.6icAۥ~fZi2LO27okкPY/ ih?E<;zNQu4jn 'әVk(M;,=! #;A}k2@v9}B ;W"RI@9P_>.:tg}F#)(0Xl밼D9oH7)!2ջN 3 pv(RW=bv%J"^[ +tFjJvcU73e8PR=\ ߌZXǾ+'oM1Xk2mu?QRt (;b:`N3Sp3{]#2R~HWplqjq3 YO#KnPn3mGvh[k[h91^һ`Kh%ZaB}n +O˴ZX˨{8Elz#McczVvFΊt0e5=ygLۯ}Ri;S$XѕZSS5hEid׻%S6s%Zlc/wsqj v[}ShMɀ |e:>U<&͌ `Pc9:U n dQtrJ:廂? Nx~{aCJ+R#ܵXTϯLFs&:zRךb>:9:$݅M: +;4_mtދo +tzx *QW(@bŢhvpŵx^4]r^$5y3.(i (lчqPnbjM=kh``Z]ie;QV4?f&1}Zhaնҿmf7s4mVei}LkOl~k \=[v֜2 umz݇Ǐ|Dvllm/BQ:<)u{}2lgq6[ܷyr"Fd0HuTQ:Hvx|-S :_!56];5*bD-%\1-+9ՑukP,@sEHCuJvHuyx͛/E#t Jp:]R-du`:ʰn\bE#Q $}'+`v>PPeH*ө9Rw }\kyWXgB hu5 'c~mCZKnQ}m˼f^M6I[uWكAȃЬ(`][~G:+e#ij_չmGV&Զs\!mgo;ruԬ"A.R`Q#Bb'e1-/=´(jhǀA4cAmZ=jE[kA3s{m[~١`]隵Ϧ3;-PV 'iݡ5(i_WB€gcB\Ҋu'dgX~,2 -L5sX/#lq +# m{ej{Wp3Au#6_..BJbעڥL)Ao.R +3{2bݫWuEH@ylo*8e:`]2]_SdGӜbĩ37nF+: VKl->3΀F ;.\ kzppPVSۺPPT髳9]+ZV0/,In6V +m׎˾l";i 7l{tj(o2V$sE^&P0JS%A#.h׭YuCQhQmb~/2B߼;$DKl~,=ſ+͜ySuRe=u)xM|y}h/nҜKo`XG(PsIgxE@4b,ݡ.x69XG+n:zCqyue::8JKD$ց;!u/@\|gdwցu+u*֍dHs$//B%i(޷*Xg(g tzI3 ΰn 8utD6 ,ju\,=1w.2R[׬滴j[#fE/Hy4O^ғƬSb<'o ;.h0=U:ΓtnŠ4s{1ws3|)@&GoqdD[_7Ons*ٮbJ%\h}mkV[%bu8C@S9 tj򪷖yN* ^8ٯu>wm(t2МX |XG";ɤ<ʳ<tg+OpS]",I2uh:3Xi_q臉ut1 <" ($Au;,SK 2BXYESjX 3ȀNi:aDWә~Hsi+qML6qa+/ײqݠ4&bns|Î. #v"49֛ig2i]'k~n*)LY>yˤ'wm:5^diߚԼI'!N5Qvsf;)mޗ,`OL>%ݭA-;^ٻRR>:_*5$0RZIZڠ[ rfHjZ OsbtZw_DP zb +A8(Ty[ii]8GE.P?=]igLw;zYsM4c9t|kDfv߬ҙ[5hO%kt@F?~Ԝ;Xrs0h.Ѭ|]i$h1,y-Gƪw1t + +5(R[,oݱSʒ!u(x= B҈CPnpxx0OXѼ#ߥ-4ӨRm]QMtJviaȇEiW@Qdad[:GQNHv`9%!X7/f&:9a uJv8K:qqr0ݘ?lp:R5H%tC\L’@dJp(YxK9N/!)uܫ(g٣V ed}H]aU9>3|gi^if`.e콶#<@ܰVAKOHsu$ߩ50Wth[JӃS{߫:>#VOn:kpF}xź/.ءd!0p`lkH u`: 4VcPui8o.VQEV9:v \ҙ29% ))L#2O|894KPatևmS7@`s_%%)֕\/y,׳nI3Xc;GI}6v?3@[K<~J24UZI,UFZ.UzIGi+O^<_;e+=g|tRM>EOG w[Gʷ&ܔze`$31YV8RNk{q[;x2Y3^M=Ư!bE5ެĺ$a5Pa* pfp?~NQc:TdLބ@v:vJFkͱʀ.Xd0Ct"WNQqz4tnr㨂 Kq VH DE ,C{yіT[uw@}NO_QmXgdGdźV( > +c"ۣ=0n +enwyC5Ԧ{[źݻn7íH1?A,籒[┎pqM}-?mvndo6Œ) +fܶ} /X6iy`Km#M0ri'dGhƣ}eu[,~3myw.jOFtK;n̬d ~ݒu-7nj́ 4cĩ%%ߐlNXׄ; +f;s$`K8qV_oD:pVD·"JɎ%%~stˀXiL"[NہF47:D\-X9*CpUw 8(*PX_! 2a4Pp6xgL3l<&puW zPCXZk|>꫕Nħ +z5>$#K1Vac mm  +̞֝;cXyh0LCackVk(~m)Vp%l ϶;/W.",$BDTpisNi;.ڽe')(i&iN!yq6Nb* t-ɱ&YhÒLIsu&XGމwpŚ&)!aג6T$ F x$;:>pt:$M: ++wu˫&dJL(%a`:|NXGU8ĺ"ӑX%eFC됋р k>QA&8Tav66oQkmWq%4 NN=0q&q 'iF@3Sz(^myC(`bn`kvnȇE9 ^r +w$_M )#t%ɎHbR,NםFX>{nOoE֑>AQAsLljN'YZXZu.]Jn}tnMwY]=u"Ȅnx>@g٢'"R|i#< E|lx-1"zzW^ŷ]HSF62]WԠ-#R; +@g]`Uc{@=DRtS4'i]t1KGnLeJsM94i­B[N'uPBMsڡjYVAy0-UYV$4$)!*Ӵe5SL+j( д;urr6iw&jvʹk)LUo [⸘֫DלּVĒu8#sě1KЃGBZ)/=9::E<_wVG_Qջlu;:]m2|% LGUdXW"//2) +TFv7+S{)@}ֱ;\=9BDֱLGVB'\$@緝ۤ~A$ D;[èMN9HJD=bn !HmxrE4Irt+OT7 |Rdypy%=yA^v53;lt5=񡤹ulo٘yoWDOnjbFv틅u1Nם0R5ϓ93xOjz~'-o ;cdWJ.&s9TgI0yCKU367>??gSHs>)).kjUhZ<@,u \'Y ˬHq4^gINbg&z[Oe.3%%hя)Mp7";3$;FIG?Wh4Gp%)ց2bKQu$#:@"*Auru 8%߆ +&X7Iv:<),Ck4aV1oo|C?źRu%]]H%!yuEjLPlab'b"77ub[訬Cy4ĉo?m2sdb&433kwsV\u)Cu't,fpˆVQ#Veҟh$JbZ^B;<ӊ2:H;2=[֚:,6ewں-l'ұFV4 n[0s癭k5Y,zI;ua2&R}(0*xeIȣ-+ipT3O\k6Kad2Q0smƟ{r5rѻL-gjbˋ<6636cԷۤ:kDvpt-IL^i,*M,-obrtHY~Xnh@@8A?ugu":C*]խ>LdOEqx}` +#AuJvo6vt*: o64K+bӰS.E<]x5Oa;(%1@G+1ibvzt&bݺ@j&W`=R!sSbR4HQ4~Sts#ӵ449Rę`:t:``Iy^;G~G%#ذ,XY$.b3 O҄:svQvuUe|x<ɮXǘXg"i#!KX~qQut%؝%(GDV֑֪떾%֩HstQ`7%8Fb"P%}[4aOVbzTpi//Q+!8u8PzÝn]W*ٝXghcN`HМʄǺ̆fĄ>r._,)%%yٻy5>wz7"q,/ݯlʴ)#+HQkk{'tz9-Z]<ņ`{<[LGӡjgw)uvԍVl]y):]e0b? 4rf%5 rw͖I&b/5}=&zj$VCnj`Ivut} c噽T3GJSJ^-+ܕXw\{: r*"ܭX.zF%Qĺʽ;}ut&LdgXGEPNKʑrc(֑(ہa4.i^< P#];Hin:bBy R|K8NϒpQUbMCJ+KkyIg^!kr}+`rпJOʜ+-Lo93st6oZ#,7 <^F;+kgnk fqCGe#\^6@ +OwN`MRUkL=5 +qpMu `gwg櫕Lw:݁yxsڿg.~һ'3b-kLY A3^;~nT6),hNJsup+%QXMCvQX#P"|*vAuD?nRK[ENnASNn St*2D3[Z/Bu)})Dʰ{o%[6FvL xl(~*gV>::b +j/T+=wZy)Se:ʸƵBw'+/Pk:+[]p<_peٰfK`SkHV~}kFy$)i1Ku{i&I(cI&9}%׳kVlel +l˅-kfMe7ZKZfUdC2vSh$5"T൩yR!|>n -Gp`]q_͚o;=]z-^h*[zt6&KțzĽ/Qb/"C)ܩbLC!֙S^r=&т*1}LGc k SM[fԓڔ@˽ |g23^K4a1L7lbFb[DI40}r (,;1^I:#a1jX-Mssd1$P4XsB8EQb^5.+rA%֕dRήym[ UPanaYZ]MښVFb3ک3te5 ޟ{7WOjݍ}K ktиY6WR(ӮNPXqy0IVc.l|Xl;>2ٻ(Y_3 b ׷t3%!]a,KlM/=Sxy%>W[yr_&SwM36p% 50ۨrGzD<8x4~uZ΅ҩv(gXJv*E<źeKSXg|W1DNMd:_:ǢĺrJv܇~ߥ3Xq(!ӭ8Qnbk,4RҜa8:bVn?T/:n (RݏHs:>9ueyw}ugW)٥|ku%30/b]fDŽDRY-S+*Y[3'켩,%1M-amGRr ^pA9;)?{+=K=Խh%w·:~;lPņ]Zq5z)䀵l:hH!KI_ lPH㯶^g6R׍(a>C.oԼ 궚ie.]C<(wAsbB 9tDNXt2M)͵nbe}0o*{4o :|2e%C2@M H1 %' +LL>#t:2dԩXVd:Fs7%%^l::#K4m~_6ʃf8Ni.YK 9(g4Ua=E4q{'bOR+Gt.:e8&#7iW4KYb-4{ߕyb6"@W:a%ښyJun]ԵVD] u +JqF;Opc'{1㭓*]V^wc(G%%ek׊\eLXPoaAyCĚ.ҡAo|R-p,vĈf5U>M@6g^c׉mu +>Wڒ#D->,|>gKɕ6$v6VoFִr:ƹih'5>jW?'MA&͜^ ;(V:L&Y(WfXǥjth<꩞fz8|7Z؞zΡfTa.=GG+U&ƆpDm6jrh---6ooL#ujUނq[Y'cczBkJjm~[!]&f{G$޾}k]S'=e8R3Gsupuc@\*yI?u7;У6)̓B>͔ni-oM .ħC@ W`.u O&XGo"G3IcFwGkN=!b ޒG++k% IVXGM/R3'O @F0 1FXc`pGXpWqՓJ-ź!} `ljaQdXg`XWSW:_t%R@gXgg% 0j(qw)ӵX[l +uLGÒ:kAaU3cYi3V`ӔI@Ivdwy +*!juV`MN`*KZy/gÝV`}O)NIX[[\j6G-&zӞaQߖCb KObE&glDk_=V#⒍dV8p7v]Mnd,Klr3[:ϲ/wnYjI[~B{%Dnzct%!OXhBF#e2#MNˍpKYy&֡,p7º )iLL/Ed;%wD=ĸ(EuQQ@_e:bN(u@hp9*cW0-P|W +qT(%֡X{30ź7*] HvD #Zt qs%$卬 43k/zy~"tu lVٰX)vúr wÄ +/cȮTB#pHvD;ȮAݣG렏C;źź9\?U_Z4#10K5]t8uu}^uֺ%;ww6*ʹoɘ9A9!еjNoJsc@Le@gnuZ؂4lWّC,e5ghcj]d/Smh2GM-MF^_DD`8r' +;"Y/:Z^>o;F\O*h_x|9xxIUYB`uӴ T$8:ު)-i_%ӕ1;c:%;}&'i=R3SCVVʄOȮTWxxx#XGBr1Ę&:2ΤpXGzףFdͩHv$A:zhuy8%ә9LCzQ::8LXGm~[Qo:X@7:izyV)֑FXW@I:nժ/z"2+_jRLeL4g@7ALFĠ9Hw|;0/Nur-MYOGLPnu4Пa~yu|bZ4ci*YC#懁,Z}cJ5\u_WPʲ}Rtkt@򣊯yE{L܅-LNdڨ ow0?u^=3v"GZ^V`ϨFW9- i ařLq--Mܤ +c<Ō"0#:`dڮj[֑#Ks44g.e +JYi-W +.c`8Ί +b+:ݥ47';z-CN/GGN4:\@*,DL y6SMXW0-)(5%֑J`:b ae:boC:nnn *)_ddU\Vت'z +[zX2QUuX0ɎBU]DIs#GV5#ǭ_A9VרJAv3-h'婦65icc>71&XfyԶG( V86Ynq k-00J:t-)4) nO8*P"ә]YiƜmz\wjgxA:^(w{nͶvz%L bʢ{b˘5r\rSB|;ףr4Iv":7'Wx #8vHgKlN3m=uZj5)gN(twsAؼELbNRz9]bDp<0몹SWuǵWAiWZVw[۷Xg@7!;:˟"^t"F젖w7'}d@@vt%NJu@J&E \͑ay}$:n>wbW>9|o:E9_N?E@pt8G*@*ҋO9JΤN'fgGyyfD9A0Y]C cVeJ[tTO5Y |du?GSX"{B#ǨcBsK319챵'SHYUHS1{v + t }vL;umfKC>DIv\Wu P"d̋*TaESW0fc;fRj]&`$)Z],;̡Lld{,).g(]jqqW ?8Ǖ"9ۜz|KvU:-V=5"&b7 eZ\ۏ[c.C)]G{sc֏mfxwBtQ*ňdQ_N븖u5pWN2bq4~;QN)ϘNE*tPyfѮLK[Ӯp7º + ^FL#)ّqu~Q>@X;9XWi$Iu'l@ 2#aAs#w^Ɠ;i_>6ݛLwHS3K~O +?>䁖4Kg3L)!*yY +BrFpzJi?;\TY В%5cslDEc:-Y| h(:=:=`ŷF`mhE- R; +GL\f,.G6/r?W7>>Z:^]Wv,hbmv:/+AdMn6n{n ۠\.ێvFמAVvh?ck-ol)M} wڸAKɲVdۉu٭ZXQdr>25h{?S0\U$!L?dJXWpVފwd:sC<0pX%;Pa2Lpz2랉w_"֕ +|q\AA`;Q@bNJdHl$]]%):۫(cLS?oB#S+p5%jk3(G# >Hs1.N!ΘN2"8oO_3N7fgdA(:Pׂ%ͥDFvGnLVX7I44y񑦹Į.>5.ِmqr̄/1XgiatLʺ54fx!X9iw;q#/-<#uټe,6ڨc~,v48bĢIk8`.]L" .]U$JaNSϧhb0>y6ۖ,CEi!Xnk5M|LXLzy<;Q +c'ugD3sDmQC Px")myNݷS㨫XX::pPNodwuJv_aLW + tIv>4TEv7 Xw=źO2%Uutt!󡆟UuuJvm*cNIvuuSBb!NOgPo_nRSyzdQ6,4^Z"X,K9]LC묆J{;nHLlCl'EG#3H'nŤϬ-F_sz9ikվ F514)H¶EYk[euɷ^"s1{)#q%?c^.?MjL%Jݨ4`laѨ  ol-ӱ[>"%٥, Z\|ze@E9ĵX7ϧ-Fx2y煻1bd0LHөIǜ,zt:9DXyN<9`^dSLL{k[KYa^#Vur) l;fveN"-qrWַ;p +G k7BuuW~JrI8c T l#@-4l9H/s迃ru`7 +TP2H >ʶƌӜ쬦•a3Օ5`W^Gʃe=.NL/ j[{ |gۯD$:4A ܑM,uZ^$:]ut:ju%@WemMWV5þ^:e:Azz= M(dD9:=x-))pq-1mNv :4BF 8rЀTXN.ɅLW;÷LLlU5.˄FĮ̂McLiLmevKiG#[d5Hs}b tڡ ;t쫫fje^,Ν[kܞ.q~WahcX"@ vM!̛7o^o²Y.Mdk^\unL-6dqP[da SZD@{(;;8y\GON@zE(c6,D4HU64:s_deXhΘv :b:e76Tjի+ut`dW*PS0,Dd ٍΰź6))h9ցu\]x~IIXWזq!d:: P݄usqNBb]x^߅S2~Ldw~{TuJv:AdX]vg?qsXQ_D_ě`Ӑ3 F"ܡ#@NG+!;zyN  gPnNv4)ey'hF3X3jqij\ML7V`@oWvgj]J3C0{0uw&{~HA5<dN'Q ž:h.:F#+iffqM4Y,E;@C6K5}\fV~v4]޾}7R|wmd=_; iC\"$4;AD3Jy4Z63"H٬j&*֙4nbLzߪ%W&$;ִd[b FXW..J3+WSj(ЄJ"ORQ+"(}:&^ dpSP׻utʡu|?n2{]IFXGULW ֕ +?fL9e:UzL崌c2)#\e7^2aI4 +,Ah69 -)lzK!kX9rM&#j33k:˒XgY{#ga 6k!.i&~f0D:ڞ/b}*ԉw[*sxeTѮ2lꪮϒ^w\U7yDRRº_ ٪]uuwU_/h ZvJEQ@*5Y|MdW`7܈13Jy +t(p JsHgI3 v*(r-hENO4uDNdB+!t%OwpGHu&bݯ6㈙`:\ZapQs#{x(ʱ2.U2NN'588A*),6N&%ZX.[;ϖZcOic+3[@:7_dy}`A vѧ(BJ`0/aɀ-]EoΎ@[7*Ęֆtx2?NM?QF#Ԓ (SMjـ>CNW[ +EE0<|Fk`e:lzBT*ӽփD_n;wU~W0!$@.pL8 !NR 3&,ҔjVvQOOW}9f :e %)ցI))}TlB4XLM%:IKS&&>8{_D#AzI0MQׄZZC,XyhtԗgLX}8ڢFvty(pOHz`؎0W=o~D9bs=YFj4b]jZ33| @,N1&YZ)H m325lK=?mI3!Xi{NlMFchceM~YYj&a2k|WY,*׻O׍雙6`Z|H~IPJ0!i#c)DC1[!!a?eɦaY:쟭; `~~*Y=B dxupJ8,iH}yPF[ ӈ̸p| D Ll)A|{ uxE:@Ellgyĺߕ%i:ΰdGL7A 4 \XG)Sa +4*,C<a]%aNtfwtqx~zS-`uXv$twu#S@v܍Q-]Ҝ%r仿G27aW=\;+Koxa]{oͱd:D|M.#i1Pep7nh!&i8ֺЊ(}uF6|X5.|Ge_JK6Oo]i5gC0YlB4V+65`mgRWðU}h6 hRl&QI2PiqFԒZvJX5ks;v);28o޼)i9h M[qX;rtZLW 7TQ tȵ4-Kjm9-ikz  ~ IsU V +Krߜ Fْ 'm狛ZQ#S ;2b\= ?,D, R)n~&R+tjdG+CGHs: +LbݣG.XG̶XG#t:C9ú_Xqw= ilE:ݴd:!WpXxp&XGZ|ɘkA/ 8^5| 'C@|1qi,xA{,8&Qk/%j`Ue5'BpD1KVy}&5s&ױEVغ˾M#Ů+5`ZSgmhM]X'; ivFmv&LیF1l_J3%cMCt*랊:I2^Z" &dWjB27J(Cud:`5gX3+_?"oU+q̱;LiېشtJv):eVI2  HpHx%е|7x͸/mq")Д%T9A<Y,Ƭ6fӯm4jN3VӎIg&THPqvT[[gn-Lƀ_s4ko~Q6W+nݵMLqS|UFf b`-\諎!3ęl.+2vTt}8 +lo"0sv@{>>bL[\X',Sڠ2kcJ.o:mHKaDMB=5Xg-9f4"QgɮT~i[#!wFvu)hAtx RNNXGV2Z+c*S+|燇 @sqd:b]q'%;Jsu['"*Dbg_# R")ai%:/)]b펚챽̗k-oƖ4Gin$; .3GSr +(ߍ.q>D3𫡜ihR4caS@u +wRV[]bI!wuD-еpXN:'g= X|WXW9!pXWSwS2 +a:MiLXGK#ߍtN~3I&`݋C7$p( *!mhNNo \^ɋ4BOtu+wtɑ&)9c\35BSe0`6pklYBۗ6aQYMVsZY*k::vgl{/K`ܶ#eO;dfۯVqD;.˨+09`+k6>ڪ5ٓ§77MKu ۪X#aWɷob̛5{lrP5]^z582d$Xi323k7o% OKvkRSdGk..m!=$ Mw%ܚ+*%֕ʊ ֙XG%FdC- +M+X!h2+c(G{GtaNu 8X[M#}v@ud:~o=;uv(ܨqh+'^r8HTo98^5oew?EGژp'b% YZr,lbjL"XVbW,' FxEmZ0?ȡ.\גf2?iڶI7` t#ǍHMKR["^#8b]Zlk R`"0>GWJ_m.>DGW#5{ҞfoS+Y]rvNs:<#|y7v #_A4Ȼɪa篮}6׻2QS B= |%iۻۓM:Ͳw{^Hb6|ۇwzzuMqGgwVň{V7^ +:k%@O -m" \R_dKOçXSDsJӘkhe)58ul))`_/mb;A|}Tĺ >uj-e%TNd@vO>U"Ge?TXW33#  !k&))!1ŏXs} QNdq~ +ٮ=k@n(10dkLP{@ Iu el4@3p>tYF(ǣZedUZi7[*>҇s:FohTMBB]`r\-.uzv G.\\zK̥?P;ډhmNrr;)V>oxe+(7 x3pڧۜǖŷk}z^b)GQ27cZY7%ݻ]l$ѨYu9@3ӷ;&F{5gs۩{Ö{~0u vhr=K83}N.i #*$ 9mNVolh|F:n随fԶZ]^ 85?VDsw|];ܫGzܐ-ٓAeHԺ8mN%%-Ճ|cG(T `L-eNU"x`F;y5*{)'o]R>Um)֗sNcB:v56[}ok'1SźA#3߅@ $;EQ[@sh1Qw:h4:'Ǒd/00,HMuk)Б@sSS{Lwqqe QRju\:;^%%ӓX4גd:C9 ~ +(Gcߡ!6Fykl5^mmųȊ(1#Q'Mjb]r\ʐMkM[Fܷ푲OnmT2DvM2MGdWcУ R'gkCμ`uwlΩ|IBٹ{pr۱cc@kJ{F|L{)< ɏ,AXmGvw ,jd>FF8MRZjuiooi bT|,D\ǷkZAv0߅@ +WkIuJ_T|bsXWW4bnua] &Ӎ!فp$10B@gXGZ?jtTsѝMXEѮv}2'X709&HȎIReb+/P@g"/d=-CW &9#:kd5)|dt}0v0,20ǺT^UaQp&6vo;3^c~m3Ƕ䜓׌@g{NoXA;q.xj>y>} Ԍ$'th?֦`C1@>}UmϞz,yA6Ӎ lC 9y +fُom-sBq׊< +@NO㤶Qﴉu-rLXg|7:C9\kº`ݛ/OX  +H"@v_A/N*V2=܀ퟯSNLGdG3A-IN*ȷ4º:~8uฤ91oiiź6{w}F H3Sij1uu4CKd_OG'aZغTŻU\~\kqg-̃ + N#rpX6yErܮ?կz9R-:mNN+VÛam>kz6zQ'$e?fJNlӶ#m`7wֆpd!VS$ⵉX/޲e h!`6`?Vf ueʉ%ўcoC4r:Urc h}Zf+SwM˝XXVLrtbT:CrX22Pΰ:u'bO>ssȎ|[@wu5rd`uXeXWItFv?t)͙t OcG qJs8_/w|#ߵXBKp-iT8ZVVdF<> U#-Yf5VYyGe*d&Z%2e=k^+r5{:c`~ Bt,5BrVIO5ԨNЎ,j?`Y[Xrrr X߮Tִ˧X;զT;Q3b'\עY-.o. إ?ij.eWXf8SǦ#aѰ+h,_he5~faДǵ4-Zkβ'oIm"+1;:Zd:ֳ<5EQuSKSģS'l%;S wJv:d:褹Ga]|Ҝ^:ʉutJvutuJvoV:tU(aTe%;.=)فp0u[LKuKSzͱUW8 +ZS&ijW,:D@tFvN +9x-o5^ZUf-Cd^EGYe]eC*$i˕mJ t|fqni{327_lk#SleՀ7:u1CӚk$w3{ЧIssxۊYd5a5-T+Af Qv.uw f3 +J6B_v`a'q{mAβ6mm8 +沇wf!!ᭁZûp=R6[2ţOhJt:!N@Z)0_#өكKO +j*)% UVZ:c::t>DD/v X#AցJໂ8`ݧ"v: .- +:SED@#Qǥ믢Er]k$aaᶥ9m\W7&KYf=S#%d!G%m;[YiԆێsnGɧV$[)òOզyŦz{k->wx봞!۷㮶F [mб7%Me7KFvszt`p9T:x'OVC}Q~~g94v¢s]+~q#鋹da|~} ]dg{t:c +w)͕zuv%`]bx3Ɏ?:]uCea:R^-֑젿uΐMFs%| GZ]vlZ)Qt0|24l-[Dc]C'%=*q$;8mيt9KXTQp=%1?cH˔b 3Q'ͰeIc>1ɺ5h?:v863?\07W^O܎s;+uft}Llv߱CLXE&#%"(Ȭ|ϑ)Mt݅c3}N}}unS'kzlf-h̷XD *%e>:*ms4XG`XjZۏ[)ӑp00JsiFfzX8u4W:W_.")}U2]5rd::]QPDKv bQnDvJ &]bĺ8u%eB@v@9\*9'ɒ ?odnutX/]Ge:]q +gZ"qRDcU9ΰW%;]u ;;$;Bz +woFst-֍ aMuUԆhW-Y#3HnMP^RR6vFv}˴`4 ֵ^X]$e`~F4&V'9NM>oMN^-~ji,mOZI۪u-|F*WG:Hvs[Fc@'3-l$@`Ў[g/|>duG;N:c$DZ|;P_[Fmm9nG +Y؍eMd?duwOQ1s7M*85Ԯд1%M|n}U{0olWkLj2N4;Wb.!ٵXAϰ @S;%eDr,*2xQ> +@y$;-źR1Uu _]"an*~KrV~gw#=[dťP%q!ad":#ڢ֡\X7b: (@j(gzUa&4 +Q.P(Ks +q[˲fE9j#ۑ2ߌЮ 1n``[XK8u-͊#3f̮ufx MP4ok~e;8?4:ӖF ٍVߞ 3#lC۷7~uFӛ|ݧg?P_jd/,.HJgٶ}Ve$VP$ V21ib-͌2jY3uAP_/CҜQHIv-wԞC `X +,Xaw wKW}(W*@@W`eDtD=~֕>|k 4G ^ud:̊ȹuw'c~dǑ|+ź[AآebND '-鉫3HSXfjCAu /,d"!YRFEF;t(h5TY@=u'#;#8 9.mxivf ǵLDz:54!oBj38©RiɎޞ-93uw1tb2s#^0m773_}/ a#LR7ڑ/O[\ڭz?AaSu#žSSZߦnٮB;E%礛6i+3eOU0*L#ᮮ03bre:ڒXS|W +vRIЫ+\+lm24g:#֙ tx$r(: L]slUXWh2W=UU}]q{Jh o(:Ƥ9#;bVе ;:nBcZ0F5|]LdzP:uLpUi JOho$;m8êW! 5VMHvcHsJv]3SS:FxJӁfFiHkFkڑlyR:%.{IN{xYΆuY6v}̃]ZxG&;kgWTObB +:=s딡nDI Z)'f˞6aBҷ > YR@F1&KS,5LZfj7 Lcw q#F!h7,V pvaNSyC9dhpݢ4#SJ`N-ց\NQN>_l.RuaREU +t&ّHv[4:ց +po)gĵXWC#aQ̀ c|GaG) ݿ(YnP8uIs tJv#("%Y#iuAm(() Y 2b]B>2Ӽ6/i7{2kt٨9݌ è?,e#&GiF}[5r_#޸OZHKorw^2k^0Urل/ŖsW;\]V?vsCgݻwߋndCV9`Ϸ:Y;F?mѫIN fEUp5#XK#]wLIPmw-%ʱ=۪9ޢu>?4:a|)}:Iv-ш;fXF bEt(.x:ݧ9d(")Rh*`[ZJBIvdg/>[XQ2]Wˤ9 3Ql8lEcoV*PN NQ2!DW!i + . P`Xd@Gp+Ϙ.r b]134ZW&wA5:ٓ+ _AopZI#~zS٭#qztfkX {|dko?Rf~DaoNhB[mnm#ldĪf¡]q棷W9t{]]@qw/yY{<=bf>Ÿd1!-,ވ2hJbVfZnׂ~Sec=@}5P+% iΌ42[\+?rHvZ0 + +:,"ע]{렧!cB:ɟCBѰNY 3hљasHxɡ5}r) 1? +xD$d[F R /W9zk:a!l4-5oϔM‘m|h3[ Pl^`/nvU{VI%bj/i]j(ײ*뾙B{% ̇(ɘNzڧߑ2Mx-aAģ#=u[aȮ8NɎv]|t$ĺj"(bȳ&ɎLDP*nb0))XdS@aݓ'Omz8Utua]SQaQ/-1J#>PU$;n-dX7g:moEJv)kʰ@p +w[S{j3 z^w7%@|bVdSk 3#LIv,+2JjU{[[3b=B̢SuU; kZCu##WsoMFejZZJ+MOU߿_]/e1'e%>ۆY but/\Kf{#/׬{n{ /k_S%ﵥ?{6$gULg4Gʳ`okngZK+֊1o6dysR5o3yDk  Zqx,4Q*nBysSS#mx*=d7:ĺLfk) h\Ѧ}Ž+ցt4ؿڔX,X^H#):Nq0 XGJpG{z @~)Qqu4tx}`]u > +VaJ-ıҽ] y*Y~+B\u:MIvz +|{%b'T7{(? wȷ qќl@wnFgZ}e#jk'pWC|!ьzz-xLBxsqxINMYڑmKxBN˺gNKlyA:55jݗ̈́[No9a5V`Sjq:vٜv]jpJ-b؍kl v]iemƌfN'Ol̄Z@;Fn NXO'vzƏc^=ToW-K:מV)nyVj;Ey +pZ#w@vLt>)9ЍhAqwfVʖ= tX9o${`iNL4:p 0ǘ@džBS`Jtr;0] m`]2ݣGp$ӑHs:u?jHv\U,2 NZ+a/MϡW}B|k.5E9?2]be)$d:M'/:e4rT$1jynͰHed74WcdVĚҠ?43첑T?2#`vb.a-M;^asdfD-8+㽦 ^;:Nx-4`dypn׷__e39xN&_D?1ǜhK+kn*˷=̄u4dg+G͜ϝ]ߎ ~M9oU`{)ĺ/6X&N2ݳM`:.`uyt"u-͑t_nQ*两9c:`h*t-֕`t#{ C 6 Xp|5: @2^D5Z֝]VC9;)a}Z8Ic%8Jvd4-h}xFhūsۆc[ wRuQ'tdV?d>_:DmGSʀ$F>V 6j9Z|P'╃&<.M6 OG1՛lFN憶>a~&9Ye1sfy'vZK%yՊ͡G PZ9Zq-Js@0xj?tahuhxHsj몡֋.K)/źQk@G;;0"lXnrt82+M?b:ݟEo" +vAl pDkQn*ّpeXdgXwsscXG|#].K-~_\ mlntu-e' 7?e:Fd7 !Kٽڋz Z05(2;MIp9SꡘÕ.m;kZ +UzZIm,8ģ}4S:~πm7AZۡiX/Bk޺7n;9]ms;dF ;9ڗI]mDoaWq331sJ{ RX G Er~QʀNc\nGdcFbU`M쟧V ҲQ^[L,R,Z.XwXč<ݏ"50qi=Uupbȍn:"^9~Mn}2Q@G`щuyh:^F&s#}(A!UJhPNLpX]b]ɰWUQ',_Wu-֡XGSOɏ'"ou>}:B9w866ZHs;ĺY*2bΘԦ1!bZla4fjbݷ4u|bUfnVlJ|7*W`WUe}r׋-c+zF7LHnzXZO3#޼]_h4~}=K\×;9d<۫yFA+'&[OrM&n2~ڄFsG#Ѳ[ԭugCYvTqorM~RbnIi#VzjX7) +tIv&e:y +_!t1S#dd>ꛐ6ҼJHM:վd9?Vs^2lD?:aALd7:Qb{c p +^U:#Zw^b'Cb|9֑ ] 8IN_4G㇮_:LȎL}h{۵VaWGfXg-t1]2ČCQ3kee2d JtHVŲjU֗ҍXCGeW۵:XoTVIҨ/W.iFi'.~ϢlQ?Narˑ=] mb8:#_:8WjxQX2M*i13.Y$oEoK69N/EW@e`ϔhh8;:ACL7? #!LVpK4-1#uW;>SFXˁu9PQźR]b] 8ź~Fv:3ѣbh8d7_tX[HW*od>v:l֑Tt-B 6vc؍|7ĺUaL4y ,FeG12*RQ*?#k)2? eXUB=ң)ĵU5UPwGKpDif،ˬNcAҏW{) fd7Q:&z((sn',hо~;>Q&sY31гq {̦]l%Un]&?^vvNS\dNf"y=joJ!nbEλzuw +t<-0)lI wir1:ԞO&L)+l0϶:u$;ozr<|bVrɮ'[L.S@D>p|ѻYD#֕@s8ݿ_ɮ[I~ȎoomXx$8V4g@@bxIswt#Öaq#_$֙SP._b8Ė+Z#Y`@rNmr 8mAffF&%MXB ۵$QN1 ݞRpF\GueVF# Qdb5j֘@&gz,je{6祻rz9y ye۷s9:[tZyիWF>J-֞+3Q +Z"^bེeSœpO#lFp8bR)+t 봘SWf쉌n8Vh42:ҜRڕGY8NL7J al9( Z{qtFve<%/$S8&)A?\D+|3*\ ;b]AbR{k+úGȘ9!\kEAX))! ֕lK bUMު~ hI[u϶|W}&ߟBbbdL>LG#vcZcOreHmlhfW5R465X,Fd#NAȮLF@ +FguΪmw*ZS[`o|1>mwLv՛}G\|l9MlN5toX y{eљ5w-¥]9T;> +bJph9Ra]];_!_mdgũk՛$7wZM'a=bKV/21;#33ӫ(k.[NӊЍ$鑞^N)Cct_RSKS#JLG˅%r+:v~әLW1E:"EF 2(4E&,)-)֑AI+!1tĺ9?82C`Bt%]:cupNanWq?~UCٯG ^s4 %h(Ǥ\ou$8b(M BjRc=R(SFYȎW" +h,bZے bzWuvcd4]SC5rV]4vPziׯsނĈ3őEݽݖ"ܑEMׇ2Fs82=.<%#@9Uzb׫PFF>v6ɮ55tѥrVy<$ֵS 2"27 +8봆hjݭt @d|(7jA萖G5ZJvPb];MNnԝĪť iΘ.Ɏvt*:;pcd㭀'  :!|G Ɏ"ֽHvZuѽ{0N8nDnuD9ú߮jLG#QXTtUG<:ŔLXIG +q wL,dnh$⛵ @c̴ +0ј@)'@ɎbQcҲE6-s ⎔Tht(n t.kmv@Vag[KӚۑuW6]]sxx׼Z֋fptZ`ґ${Ehe{M/oZStG!Fhu^h=tnJLEĺl&ʆj\"/@!!wϔO\z;wgo +!&)"JCmJI+|AzMpG㙳M`뵽{OsL.v쩃&:pǂRRBXuYGLGܨ3MK| X;]2Lcź9ّZ#)c,:ό4N|x9sueIv@s?qac܇{)Jĺ{* O]XUu82dLc1]utur7na'SU+)7Q1h@ͱϛ? %qZJ7'; eH@su)7}'j#M iL4hɓG$X]bڵP5EAˍݨPG)Hۍ etw .Qω{4c#Ǖ7D3_e4i=*|Y>UQǵ (,aGFn?vZ;m(1dK Sz)m2γKaj t~%A, v>Q[Pmѯl]c<eSnq5nIdZ=%YiXRd2Ԗ6T%-m(,m9ڔ[ru^E9 ZZ:94?ڛru +wp_t\4f#z@dN\AK#*#.O잉2.Ppx"w!E)09zp$ H"Qt:2:UP(+#֑~&IvuFsdUSa.HNbbݓUOEt*IPiN +^liRb݄鰋Apt+Ny4g@gX"IUS"f LcDX#))%%`m{,#3K4c]Z,ѯ >Gh#KvPG4OG5r6ryH9I#E#owڻw΍{q@TmV!e~c~AR#Mf>n4#v߾Zw[;8rr1,,,{ԫzos<]WƆYbe3zguZC?^߸u&BO 6mu +w : ш>X׽ ;%GhLWĐ +&} +1dہҽUEL(#)8ItM: (#ɎIc`(LgX ?'M}8-Ņ@c]E+V_ 1ur ב]Ɏb~`aX(1 "16Zpcn-Af-i%b<hFF#[ΔLY,,HeZ^$5(ӄ.r\CX.>KR7hPy4?Λ[tzO4O0I{o_ FT19'_c4# T!q~;㗫jiG/x9,VEIu-?s,{Wz+Sii9,UUI3V,XZڬ&߱B t +zg>½ i@7rQ 8b Z`]uF^tnFvs+%%өFLg.W1]4L' =@=)Vk(wC#:XWP{(MuPPG]q2&0ZXLgXG#\d:b0?M)qt((:[۶GLG|#֍d[+q=t +-H_u͘NdL8S^elKZ(v jeAQjSv+dIgL[Pa[:k5")zKB kQos|HO irth2kvj 捯($Wtgh7kX#'Μ41G8>9c7dDȑļg=?h19ŕ,>'h&m{-ƴضhQl'Uժ8YZS`ݨ|k'iqg@uwdARS&xG:;?Q>K")܍dG@gXW(LGxS t% XG#&dWXwwbMt ܹ@_zg]=wuFv`9N+)ٕHstO6U̟MBX6 8+]fU(GkXW{q7db8blCXc\w<캘', +R%ĩoZ5HmĺpgjήZ#ګtuVC:·e.zeOt&z)]h̉˞ݥJ;wx)ol|ud_$yKj[F2z.>7$@<}е5y'tz^ʻ kL}=Gg?]]uUd-L#û8W;0)s&iM/i] Wum1mO"@jYNEKt:RiT\z<:%;XGc=Mt%iL}L7:=0(G^0} LG@=A *()>twS70Nt[t@syLG% |ԉ__OZ?>dI~}b +7e> kX׶1b_ؒ(Jk n$ +& +ka ,&iҖ +*i0-y;{&֑آX>q wZEC UiKo⿡=R)Q9nge@s#ߥ P;(7:#:h [搳5i,7|8~7)zVcYq5^Ľ&/~s[fz=yvXM KrbD7{X0HB)iKlaS+63C)G7CEϠ8)%Dݪ+!%8旛̗4`atr= +d#@*0>ߋBS**0RR@9D";:a]*[u +t7W)1lu:Tuӿx(@uN(.C +tc%Atu6lKv t-ėG!n.ı,BbKd!$W;Җj{z{mU鮏(ɤ3EHPXfԆԪw4gc?R#):T w1Q {PwXwջ .7 茴?69+tSELȹթAYOMynjhz:˵)ឝ]zpo7u[y߶ E%hDFa \ؼ!<֮5IC7n̠h92|`(4 sd 63㥒.J31:s,?$5pc߶mCwhB: Jc𧭲/]ht:$;r]i_h@dif: RݣEPާ>@<ȈX> +LpՇI#S3{ON TE\SN  t:/EW3+pXSPOb(:#;Jž]X.s|n,o0(ԤɐgLfbRe⧁2i)s8C F\f{+Eh])o)M 8%,kxf1fh-Ѽ63eŃS؃}l#bvN0uMwqu"8Į4Ɔgw#ҏՃ'5 jYͲ;HAu h{jǦ5N.䡲JeQ;JJp@!Z +%* m-3_FX#au#UGV<6LQ'I:zVǑ," )w +tu +w$8~ʰ@@t "PSIGq|=ίycйmOMS2^Nb77}21UijXӨcU[5]HLW\L x2SKFf*Y w4]H'bݳE%=]T=<=}~u2~+lbM9:]c} +@8>X2]&B'~Vɮĺ>_d#}#7ť]Seqe#ne"i@JS`sSSe<đ0*52Xib'e#)i*91+5rL]zzKB]0eҞ=8rv)_QSbZirú)Q:%s}jsPG\b6yxdoC 3gd@#DUYE /י]>Hfݑw HۉWznHD:[Ns}(.w%)_W&(hu DqtIxQEr#Kښɛ\; tJv6pm>";3 2( +q%ߩɱƗ;E0:ﷂU33[ dpG1VVnƺgo?K`iqq$8H%E."L]Z@sq nQNiA藋@vzHv:&bueEӌu +_<^e@GddqtйXǍ}Er#XGw[sݔrR)N;0U2c)&j"T#E9%X״5{5EڒQ]T-Glݢm٤ 1 <2l~lԼ|Li= ncn_Q5s„\`>!Xv7׋j+{SrblY죌ۼ:8gunSдMsJG(a/9ܢ(u0iEfg<>QC2?^(N Ljq`:TQGLGg(6X.V"~"RC`L) )>@t$2 +z:p؇G#"zNX|X(. +1P|Eu졏W)A%ٛl!_u: +/3/a +Z렃@Wb]Hʰb::搿'10iv42!Z'/F9](ndfZV|QA +D8c:6j+[ +keRH$|Ke) +Ar(u#:6NeB>ǼSn]s7ij^>7{Rzqz{ֽ}un9Q<y +;U0p3mY m=%e:VdS{6xفRu4+׿>=ۧY8v#h]Ym]밚]s<(7(K,vhGC7z:ցz#)e'E :S%;::85LlUuqɉu友(0bBuF@Hf:]M杌u/ +n@!D8%@vV5XgLw=`Dĺ+bR+ΰ.NN_5ΰN.N\xQt!p$)(:Kg=Ohm,at;7Xt^^bR*m 0* d7zTc&g OڡQ"AWѧ,KZٵ]>Ok쁚iŴԆKJ5>Ģ[~'3c]i^=)q ڼRף=$>X,`"JP%r AK9[^Ntڂ֖sN>wdu4YNDYˉ,k֬=-,"s$xBe r Kڹ2Еǫ%'t)b[2|W,_XD00{G! ^l<@`y` q@H~4}g׆cԷ=wuV~D%BCCYrI;/|>u<  7($?]UhCDY%1M=|d72Ւ5PvzO#b jggd[ Mo Y7dǴSiXӲe|٥e4%܌}k  +1ֱm8.tp?wiv٩ : :TrVsh6jIbў=umIJc:28SXʍV|~;*;eI'G[>^bG>Rk|ޝYq<1gbtٓUvj} 'k^o$x(npMw1'Zo>LC_?zbG]iʱq\1g}kO:˰3ɺZb*Ova?V{t6aX)#ͩ4i:Vr+֡jMҋUYCQWAXrQu-P2:TNZQv/Zt-먃_mC֙8Рjil*%46X"1i: 3C Y5f:#xF&r.Y.O[5O7Šji-2F#"M]V4&;j#.s0!j"F Lp +7۵ U6L +' &$uΒgckYLӹfX Њ"-Kl*왔.y9u?_ɶnκt]jd{ ^3,mt:;YGY%inºLc4q(ǟ +:f2gb=I9tf3VpDsI {Xl8: +2JF,Qwܦem3&k?mʵ[еV0seϞ([x9Tae@0D\hs4qR˫^Rz괲Nwd[I˱ aէy+#{r>n<-aNfa!4JkGvf:4ʡKVcJiM܁ugq*i B3ݜuXT|JW]ua]:k~XPP_Ru 8S)wIJFndȏ":,,Qw&+bM:\W;S9ͳ%ؿ|Y?t\i*_Z_lCСi:etǫ}h`4 1Q)4:V@c#֪tCTYбySRB_j2{N£afl^VͣbۢzΖ9w3H[)ig[M鹰vmehkےrωv)yY=2*zZ[v am6ZUG>nq6Ϧu;=Bn4 ˃ +My9N[]ckڇk\/~|uk5Џ6cjxG&vnª&ӜjKwz*0Dά;QPqٚ6ZiuW :#ӵr՜QZ t:-YuZ4*; qGSݲ0iA' |t?^R{LW c݃5)бZr}ʎkYK:LGd]>gd-w#)),!_D}/4(8@93.-} ^G(@h:9epۙomF`cQD/ ?Df\Ϝ^jn(#tyq-X 9P,vR6;UirNyd]5xG <՟y.8oy*ha?ڀQ6F8.(8 ^uF#kPz#X*l{ێ\V;B|)>O6=R?nsg_Qqr9Vb.жbm4O)5Ɏ|:ndD= 7PܥB3tGUJ貐CܱAӱzlYgg*Bth(ZAv/꧱۠OбMu4dmRuhjY)$t`C~())wddw XWKi r]5Jd Tv\31YgQe[4tBs/<)/k2sWۤ'YWfjnn:ӜBCYLցi\ɹJYǡs7a3Emf.)LY΀iHsD!UU< N{+w mb?Avr$ZU v.ݥ-)Ygd<';k5Ǵm>$FRœX!E?uvHkhT핷;xPXz6NnGvAyѣ*np\w|D׃o'1F^?'t UXS)F3*dŃY7oe:YJ ,,*2aamu eRZYuuiÂx.l Y$7uj!VvO<)UaIAvɺKrh|Q!ź2/.LWˏ%Oqf:>z);Nwa:}%t{@ikM`k?d>O~1m ~KGrs!:uj2tpjӱ_:v&rv "g nN[wΕZ7t}Ŵx%'}tw68a-Wl5Wlm~9\N[۞b$ ce:(ݻw]?iwG_[dcz.aX{- Eؘ %fP ʨBYAX4ÑՖE9QBgwHY f3J(G/4Q6G'FW YyujV4^QeqXWY|:dfNNMJ㩢ӵ>^D>?^4a:b&==8{k=K΢;"qJ6O2KɎL7ǺO:LWo)֑X:êc֍Ȯ6vEb]:*-N=b|I)@3;=LSR%g9ХPRt'5"Kv͎-Ќs8"sS1q鎴^srtXz3ReX1r}=:9a AmLFvx1Ns=^F <}-#< .<-I70zvJ{4kFn#W[o9mnAjvfLȶ_ym's32|>|޺21ݮtE|7)Vdne>Հڤ7jgn7^x*eݜb"JvyVjЍv%d:mkK:O&XgJG/G[H#Jt09͠ҾU9+.^d㭈G(fk~V'!úB Ub](XõuoºuΝEtDt+f!\5qE-A@9#;;%;ʘNCdXW1]Kv͢Z/²ʩk&LqbKbw76t#KijBbClQN;Aon#?-1vc uYk*GYeL#)e>nV/ك4$sa/NE{V}h8CZ0GAB7kOkM5vռIܻ`>zsn.y˥#K%Xͯ&iTdΣz[0I:ۦm9oL!br-(Vxlnz#3'Zo)R3{6i*KWFKGW^HyJvxfPi ߄>XgL o]OZ#q@,:%aݏ늤u Uと%g)uIv?)ꦒrsJSÒhɮU@y\~9bDu1]LÖlE_$E@g٩,Q6½:$ү;i,mqu ;dD+XQl\m1eEgYM6=mά}3K>3yNfNBR9<3c9]2a&1+e:]c:dc:8ggXWRN3K/bw`ŖEd'bH XG},`h (`]=s04SW#ջ!==ˀ-q0an +E9]Ha%qejֳ2@j` I7DOtu6+ P!im %ӐoZSfVtmg59_i#ca2(䯬61 +4㲬g.@N Ai'8G;QR.7vZCmaә; E1x7LiDۉ˦Չ嘭Ojlolsd6oeFXM#^B cf[\)]ӞʜvE2AΊ5EMmA|CS|{=pG Q-ͩuI#AhL L XG:5"u0*:?-=p)NXW:~*gXNcopu%/9"/9B8眃DXNPE|@iͫs~tvW2qn #,utFvuJO ~wĺ`8#;0ݝ;w]g3+"ӑ=?[E +t>}T.ݖXurRl`@?#`*i.]yHs p_$[Bd7:? 불1j&-L%py2\EGٞi4-jY\RKR+ْH1JZ˖ߕ6#t2jt;(ר+IG' xekg6%C "Q썝O6kt3 Ev;+|dLS+m٢:w3$7-* l˝Uٲ_V$y-.Z=oXM, 6t&A#aNJSSJ#Q7b*3#cLNjZ4tp!P$::v]\ +V du8Y8T:`]uO"ֽ;@vK:`O 'h_(Gݬ'thc:!d::+*֑찁y>#;x"01qD=Js%e{=fu m=QŬcsˆ`YʆrwJvjwpچuh wO +V(eYJ1d:: HX/?Lw޽ :X@#Au"~zRw p%!Ӂk)ٕXJ%stĺ?@+4K}-/8leNw>%esQ:Kt3UUċL1K4tucD5xRkp6&,%*i%%vWMڿRߥ3>]Y=>wq% lGJOl3n`9vU\^`rI'ѷاfz}n9]]K5;+LSfƌZ%\e6&ָn,9wd:8itrD t49؛edL0cjP蠰4Fv*M#;:,+-N.;hQϬF: 6v\t20#uLG#/w$;:228Iݔd&>]^^z1YuAs#!Q >XjtgrAp|4::||A_[4L]Iv%yQ4C,[dCu!%1(eˉ-Wܫ1ex<)QN+BA|7:Ų8ԮZ!Vcᾚ.Cӕ-FT9sM6Мb?a? D#}8-Y-}HmX[@^d^9d,ť쇔vss:<_uv3Uo9]˿8(loH9+F`YVGpeU˅[>oKSX8Iua'SDdIߋ2)1B'8t*ʼnQK#V'ܑHvr$;źA+ ,P h.ÝnuItud:%2ݽ{ݥJ@sXj t>\@GICxV(m$l!l-Jc$2q$Ce:pn)%8ML/?,@._JSpcd"EU|S3Ӗ,%5EiPXgF+Nu +thJkvOBh7y=Y ++up(W%~cqidyN$O#H_4xj[Ih/[sRck'تlHْ{Ptw w:亇6\p^u[>LƜ&pKtehn\zVNQWRAX84 P8 jQ^J<+\w0 +wI2|ou_NbXLF=cI@u +0RHv@ELS "Tcbc8ܰ Xw9ɰN.#x$Ed:p^uG+3ae:.f;2Ls|ƺ1Б2<ԓy tEpAjzd\Xķ*#R)oň%L)/Q&1mh32eꨭ{~C] +۱*Pm[0ZƁkzFq˄ekܝƃf]Wh=x{ZXf8nv)f˷뷘4Խ ra=ל_㏦9/9lxi1~>M᚝:v(4o-EwhX7Şn$;j79 +tpq5̜^u㽌z( ł!2$F v8R ň(J{G4}g0:3}N}긒))ӕ?4[LWG͔ҵ͂`khw[CG̀p]GXqs2OiE%; ЃLgX΀tzO=xA:X^hu 7*֑숺t%[qu϶ +a8N8,KULNiJK=E6ĮT^r+Htpc:ťQTFX@s8<@ym}a-Inl>/zZRot+a2᧭1JӌO:wiC-:a :o1 ENqN9;2Z]56Y]9oGpIZTMFh6:n'ۈLNaM[&(tt #ٕho~euHyCv GISӣZb9ΰ@je:b] n:!,}}"0XCODu +s;@b2]R2] +@vtXXW(W@G#}(*{_T(`)_S_L)AȆu ;AYb]B\$JsX?uLJsxL3bշ[qrWbÒZ#͙NDuķy֑*2N֘TIp^c*Cc2+Mk֞FsZ덪xao!$%ML< [[S4A.c;=^yFxks)MpTŠœMoϡYGA%Rt +\F9(JþyFU,{M`#4[AR6B'3j"X>߉u"֍ȎW'Z8j=˴BbɮD/Rͱ.Eckh^x ;:b"b:;6/ANsj*qbL{w:UTV + N+~?*yEɮbhPgwu>|UuuPGg_#ASqV-=k잊#rt:щut\6XBXZt\<4DžM lN߉^2XDbYzdT #Qk~f$N6# M=ImγFfl&jj!h:4Оh/:jMG㨁/cQX:"F>S2B,+xb@|)/ۼs⡱Heqq\Ӗ{M|G|WNIO9Ssn Q/d633m+.V&F%-Fֺ*l thW TT^:x>:PΪ`quTuruq;%9u0uJv#kN͹a]WXG_"TdGH(tXdWȮP.ɎpW4wuuXW i&)!*}}|2~1|IJO)١]kb0]*eb!ֿn źdG-mLm|N-q:::7]B1-bPbxE*o^7'b/w㻹r(mQgGJoظLQwdcE=!z ppt `]Q SyUQdG*+SC pX3+xO>=)Ց~J߇@GߘNE?U=aURJDJ +T3kɎ ۰N#ّtag+}/VC:0E(4ǰ.sB7MLloם LZFRBsկt; "5.W--jmt: +F\.ڭ':Փ"N=*qΗ5>mYt&vAU5Kck-gepCGV*i瓚t6a)>>s~tl)4`+yqd,ݛӰ1uɲK#Y265]vQnh`%bKha<-CZڠuZsYt%Vv(eG$͵'C|S=М21^zgR=< 4WĺκU]u$ϺR0I: cr4gG܊?+)?b.׋XՎ]|= Bc` 7&7[T2] * pb]+e:a]GԦ6 ^DFvyz+riQDVa0ڞuZPFN]:MA;5yP{u>|WO=yz01NmlTb ^MG֡u=^NB7X01ۭe|3=sqֵid.t2X6NݶH52됐q$YV#fi<tY%YpIvDc֡XON;'-M.r/iZtd33iZߥdg7^t֨EQle~>]Gct\͖/0G1oV]gV??yaEѡ nBΙ-=wrj,}Ml2׀.qKp~1݃̈́Юaզ,\jS&Lq#]Ç@ע9< e.6Ze7+^{򝉕5ez"jt,с@j~ٵ pGhFPdGXגB2z+NdGCkNA ;/ė*6,R,qH # ʷQ#}w+hJS:3^HhtSiġbTCa +"ӽLWXdʏrQuTM̘X-MFqmGXFGZ@;Lhp47:DM/dgLW#SC0"; +AƂ.ig zW}XW|%=iE/50O DyE"MJLx0OB'>vE9bK~q.k# mNoEa+vV|Ж!FN;Nb.֯`j!WVG@#?y|e7e@>od??"}r:*[źf8R#C)t+ź9ol#FLXGc:ºB eź$;Ab2~t{p|џBuO) ֩i:uu`8u(ؒ@;q4MN :޲>`=b݄K&6OO)!|a%4M8۩Θq 4Փ##]9.FiGO3gضV0[n8ڨs@M'};,1k=O?,կߕ|5ţs"nC})n(ۃGwcť--JwZ"a mjФu*69쓲[j貝&L@ +vWҺ:^2TǒԳ@ qiX(ɖ2u*]2]9g̠;:zoUwupLP#ӡ|H!P:#;:-dXW@r_7tFvUQ_b&jXu49a:nngXת:D+1bEKvbbpkɎ1)` :Ip- NnU~A%#X7Oa:]2.еҌOF3H s0ae&3TkW>kp,G@PtNj&3i#GFH8w݄ڡչ,-o=8;y+esx}hz+l=cGH{d>B3{juDPFPKvGgXgQgA!tp7:M;Ю٤ZVXjE69ӱ%G̡ͧh\fuKͣ 6IOxyV/PH9`?,[3^w6{ ͯ$GL;P:a4 +G08>}ߢu&oŇ㻓JupJ>-rp(*]A3SOtTu> +wu & +LߑǺW~J Ȫ(r{Av+/|0~b~47~ítHrĺ UiXWp=P*mɎdWp.Z1]Ea0#$qbrr1] tڪyr.YRF+QMm&ƔiԁZF%4qLU /iO3wi'/(uW8=t9rgu\O]՜|Gfw47TsA7zz|0ҪTdMO.joH|ƴ4˜nhmnz1SqkᎉULU!@4/EjHpkw +tR+/J|.iǩӃCJFTUBFsZ:]zc!9'))磮XL{!)ف_ J* ))l+0PNE 0]UuIv*_[b@X,\߉wzOT?a:A~w)9T.ag~ۓ􀌀'Lj{QilFvuD98$5λ_Lijmaw,/`9";}lDTˤ-)i"6q̓@_& =[ozt>N$r:3{qiVzZD3rm&>6䃳m?pvR˗mp&-l=h`S=F^O>xJB PmQ6Wju#;A[bl]v-z*}s4`.ZHs; Хu4/Z;{]8Wh) +epI'rǿۥ d(?Z No϶"6;Vpg#d敄6ړR_Ӂ&ke:t`JEEa]Lb]7Ҝb+7:*-=Jh֕ʭ}ʬ*f2!N9_[yMmXGdpMtJvpWauú Ű* P":ݛuJvuB*tJv +... 0%ź0NXJik]Ug4ǿXǽՆUI]+َ5S#XV\XXldlBCD,5j*UhOSc110VSQuMWi26γ6ʑJR }(ڒwۘjJLL wėoFĿ@JAjB DTM>Gy;svI:/z^ϙIWz9-FS9,^gPoZ&oYmA&' }.Xv˔/!7|7#])M$0t-b 93rckKuZep/;襶%J|h-֩d7_bec q9x< u7IdTVs2]bݗ2;~&n&veQin\A.dTQaPNuJvd:b])+ݽ{4ǀXW(dCpka]@i B.ODn2r=º)(1%*Dķt#Rɘ4W(%Y 2)ibjXܛ(ٛXT𝈧\um%KeJv<Z4K%Y`zڻHpXnDN:l(e~#fh7L2Z25f7H}fyޠ2[9M=ܬFIgHxwd4d;s0AvGݹKGelAQbb\Ii٘q&{YİitVFF#iF4ձC҇g:bq (3ZueԭSg&P~LWGP5d:(U@XcUbcSDǛpLS3S}C JEs8B+%QҝU'wWWW7qzuVet>:@V#Q2:~zJN.dL+%/ !&gI+=L %)Fe`#Mtxuߞ6<.QZ.#T"-R25b]vZ=J#ّm*; ]m"1TD<2ź"]Vq?7a]}_pĆuOEu::D9:6sq:E9?֕4LgpgБ[p&Euh@^͙yi|֕dgpKL:8"d w Y'$Y\oLnDssVj&o 'iAS,W1<ߨ/txOɴ,6I:zjDI-Y)b6BDcc&[2OukMyťź; &5Y3PI0 %E)|RwTGMd=XWJ3X֒N.nuqJv#)JU':\ wt:zYnq-Z>Ki h{I^t, ڻؘ {_Btwv5)>Sҧ3t';/'8S&9D`K.:vx:ؔFleLgu1q}h\I]\g|VF˘15YȜLklo-YAF+Bj%*%HУ ~ę!RAtRSvy:ؿ֕'XggdMpIvtNiLWֽ%;  @lTHbB!A$Lw}::ݻ@s?)^{I1&UP=)hA~ +q\b]퍧jRÆldG4F˘#P۱Hsu^4)W5BFE@uuݘ̿ Y hMww$j)kZxo`EYѰD7t@[v2NifƸDkcI]tsM\Є٢Zw3#ѭ§pnW942"I0hɘ[Ю/ulKlu#?EyIObnTĽC˨Qg=lը*e3kX-d:jģ\Kv ĺ~Js4*4:+c:ߏEKn/!s6Xd߫68FeIv4K xh b݄)`:t:Dx*]aݽ{HvWYedgXw-`]G#QX?݄e)ߒ2~V#H72v`Z잉IsDZ"9MN~4(SSWy0,fZf`:Չo#]FsVg9CFG&V7T^EI%pKm{(h'}Rx /i;aس1ͶWS{&y[sduzJ9~뫵frvdJ% M/ׯ_s!S=w,Fpgi"hu{qd}Yc*\ggOGX&1OoI2? V$iYԲeFն"?}ۉ&4G-MشH-ĺ} +` 򔦑@7º$;` )֩hԟlX]=Ɏߤ|QX+AI&sT&QRT>X**Xdw (Ll(w1tQX (-P>D2iҏ/ہT`:[Gtp#_cut{~d-!h@h +iC9 4|W AP1R:XwLJZpd5S岶tZ|ǝ +hs I'cfFEǡ!?]=c=^68}ȝ j`3_-T\otXň(;v2''vpZG2Ԉ,Б99Ğ탴Gw}j:l\VW/t2kM6"%2Cmrز=lVg}V +hJ\:a]Nɼ⛺=uIë1KM'sJupY#OKS'4/۫Q9ҤZOH@҈$E [4b:`:2 Q}өe:=h::IvxLGSc0aa|WALdςV ({aր̸=:F~-0GPLoLV9e$;դ.H"Gl<ʤf:0|zX7rhѣ{>%`q;g4PG.ٱ]QѩMKG.vwd]RmPʸds2FQ6e>WqG1 TYuMo,骦| n٩GR3b()ٕX@!NNj+[%;a5i_{+)=")DJ9_u"С +,"4|tbO"]eX*ցFXOG^R#fQ؊XWkOgUAAaE+qizPS3k΀NQ|2 u+,|+RxD*/ +5ntrqz2"jtxưΐVZɰNHZQyjڔ n8]`Q'jLNluc]ԡKtm[n2SGYl־h4fu̬Q~.qTA' 'S҂Qk:60C;a#m.:]|-ۯt{Ʒ~NzE ^ IUxaM栗9ȮD9%Yrԩ9XW[3b ]+:xhu0v4^4R#jNr>,Gw\ ,Fyuw#ܴIg+&9`crZqݲzy:c~3ѩCI̱&E#2ZeFF%c>+) *ߍD|)5M,kMh;uVc!QΤZd(/w[ͱeX!PPӉAtW qRuV#JD9N @@uhɑ'w\+g{_מlAs8h*' OqF:FWE+2Zf.$/<2]A' VU3%jcuJ&\VMoi,[XvG޲n :Z ;J bEFs,$@uJv/EDuú[|ՈpKd(dWLw@LGSk]:bxK5߆?UOC#0S2N7au tù_/ÒnusG"wvD 058Z qJR9KO9ouX 4#oGN-o Y\VVq+kiήTj۲A/+婷d/Fu&V-68*0% ΪI~3$5-wt+`E~kbUa;mxr=oOhZv7#Y$9w1$i+jc2՗j،Ɍ%A3ediȰ +Hnt:۴^ٜOi HsYO>ފWpܗB\wd:hE:]L[3)*ٵX7!;*xoT^pn2]U)A?&UXH+HipF4:˟㨂^oYdM!-b ((₠=GoiJ5U{f?D]SσXg*QIvu`:`ݏʑ$֑ `i1EX LGXTKmLWZ|:bnt"I] p|7a:_yȀ.Qn՟ݰ9d MRy4)1_EzLqImZO +ĈUcV5 Z5t nfV7N/7k(oF g4 AdvŲa Uڰv qwv4MΑFSUlG3Z6fuU6uva yv4,]{XVeқ[^ `\C#~1x%LwvvXQthut%`ؓX@4d"dZ#~bXGNCn˿-R&?6Uږ쐿m;XgɄB!5UquP&D<qH8e i؃uJp,IS-֡Ŵ=@%@+>gh`jNy$f{tt,=RtYZ5xY3U7h4mhTWUxzr #ةb_f?O% juN;,Nig0UW.ͷ*͵b/{qdܟW^v{;nL :m&;*s VSXYvK];XUE{NLg|GcCm L#` `" d2ots명uD`Xfu?=!WZFsps"ICKC d(&UQJ>ZDS}Xvu/2TbȮD)֩Udց +ĺE|}ĵJ ;.Z-t@uB9~͖l?|a8NI۴_ O@LZ2In8ߊ@shFTu%QQz2&Y6f|1L::(,JsrJjY,d?/#2Q50jSvCч!ٰumfuM=7K pC3S72 kvjdDG̖~uts|F>Jovn*ﮓvgTvj.}k}sޱ=9XO ǽj_,`E&4Sn]iw1dLGYQ3i1 NN#;p543kwTgnZDnt1C3Z!D!ۄ%;rh랭u ;cW3+(pdmH\+/ziXwvvEu`~Ȱ;wtW+tULWQUʥÒju-)$͑Ԯ`tؽر<4\8ZtX#s'@$D;+ e4ÝXGk5:&[ q-&X~Z*K 0Yn֒L{TV1^k!noN`$঩`M^(E752fV17rk68?4ifZD=6-w{_:@G '[k8qB E;HwOG3`1} ]mqWv{KrئC_;A_*7aGc'&\lsDN7XgQVh?)/йRiWc?)Av: +=~Vb!+N;iLm/EvKSY߄`>֕hqiz a3aC^dL|"Z#e: :h@\SA1aõ&dALSFX$LWZ:e|Glٍu$'C6akٞ$107#1~I?z/DaKvd:&úd:XFb+:&O8˴D9=(7b|a.RՖ0w:+hjM@G"3ܦh1L26{| ȓ)sAy.W74f7J 0-eZYi.5gGfuMfv洇'VSEg97?&Ԏ-vCMwBuo7 ѯ y_$IsuBҵzT +:SkЄtZv('뱠+ʑ?)MGQ@dwMNX3$ǕGS5[r-b-?Մh%UQaX#Y4ut7Gju +w:aG):%;bQEĺNWa5t +&uƯi[U c: +["8骵Okעo"oeI|RHA{PDMt)PbjK1+)1hN!d eO CQꬱҙA&A!,=S;NYy:1s_ДVF$BHI+HGȅ$5;]u>Nd.Ek\[$5au7w`;e?]mϲBmZCE^8ں! 2[?|M{*)Gdu.kC:TSv@D9-Q|'2ϓ_kGq!׊dFҋͪѭhu.фÖ')U?ZQQD!P +,XmbhXT늭@v9ź> )oG+iEH3S9~2b[|VjlbζQNɮmt2ߎ?nuc"6tcp]5a*́NFLGcPL3^3)CrV=57˫2ZnPub0GEuFR:m߿bݻGU|=e:`w :HvXʀNsϡd qb~}lnFXWt)}%jźlLpǟLǀ:(kIIscmn4ģ6rИ-=<()3-٩TmCh9&eTq%X |.SC<`IgxkM/^;# '( `[dbɼ8$"$6NiKU={a>zzg鮧$VΟ|M@&1jD@N"獵+::{(q߹6lJ2EY벊NZʙ֊v2Gc?~HpSij#V!=0z֫ȰïעK3+ߥ-]`)i2aAſt k],.ΰg:kZ8F=1 ۢ:ʀTb]B +卵9wbՓ@sTa'pgXWz$݋'!(qFuJDu=Xy_2Z)]DaϦe:: k4a)qtLGvnXս$%U‚*P,:Xt(Fmqi{B;"))i#8;1]݃uf$Y'ѥZR{24ºiә1K;t62;EԂ)?C"%4fl2ǺRMV; F3'=z5 +'ڣǾpvfKlFNbڛ,[ag؞eRۢF[2 ::LP&9mb-]q#K.=#hEwri},$ĽmbɎaVd^0+H+}^dxR2:b]@)[')%֑n޼Eu/.8 4W]\\XDPPO +? Q{'ϝ0}Rd}t:|t +wuAJse)уِ^4ud#Quʌ<-}/-1NΰH.nt#q=XWp `DA @v`:-֕FXgLwyy uEsױ@C;'t$ eZ1AE9UuBǏ}"T٢>Mg1auw!P!Ά|H YdLgY$rn2b): )eK~gfWiD?iڸy!:>/ICYë*|(ǡ(/2kdjN|`,衞*L6.qkm}Y9Isv?5NdKI+ў͛X;E=Y9ҚUźNh-Ψ᛬@v>yKv4e=] *NX!;XXƪZă*EУKkέLWV(w$ + ٩`M:LGSGCuFvtuJvu +t2KȐߞDD"ʙ^=ɰz_Z{i2uڵkYD3@sJv8b݄ԛ"D925Zu9GհźjLXl2soakŗk!iXrLpZH|kRS-Y2'(Y^2(;&'vwZR[[ʳBP+hfE/I +C`+`auCN=UWst +h?gf4+ӟYs:to E8ELj@b0Z0 h06ylVso=S!+M;ogUQ+zTo#e#0X9=I6MRu.54gCҜ 4s.;hQJvISZ9DqNIvJsY3utc+'ak))%!0zc"(&dS{y1]͛d$;%XI9n<'[Uĺ-a]^)߭p:2 +LWa]_Ї'G"|d:|Ϗu2H΁[RiEZ LС8D}Ӻgpdg4wٍ.nu#&@>RI6MM{Q2ӳU[3"cl7Ox-;*LDJzZŚ,n%٩MK'V§|p&,ztu:DZ} \x +J-ٜ\!E7mva[I2UE+V:`e&)ӡ=!-,cVK5rwmml÷c(tu<{PiLPnuv-i!6iXwGZIc:^p<3srUuTOd|G{GX7~$ X2wtu: kU?7 X"{\/pu%St'ߍo@T@sͱNNɎ4_2t(aWE9t0-T"_EIx-Tm-ah2] 4mQQp3x-e+i>,O]D3g+gGeܮIh׶vnu#G{d'l}?a-0N80^CSükGq6W)IqZα '":!oX'X7':04g3yևqŁ68 +n*v +*iKb^ ,- ĵހ4!Y(7rg^,%i/")!#^Sutͦ2cdvӓ@s:TCl|XZ$;|b]AA\qQN2º$_Hvd:hu~Vb]\uqu(w {MdX dM)U4@dXGkN#$D`Ds:ƊuiưN.E9PCjgL28oE,IsZ'|4/_tH8kloXl8X#G:[g&$1- s(m05stIg{d~0iP1m{86i G] >^T4Հ;yki7"8Hv*XgdInz%D ~ܽI׺0#Е*`Lĺ +J$;2jN!>6:|8GXO$89[:&^-Ucv̓FQ$bȢb$&.. I`!hL[/}soUϋvuSսC*X fL79dȒx63/.]bz+d:JрPJJ-KjY31Vˢouی}љr;e]".R<i||UfMԦq;+ˑ@I)شFx>e#؍fOқ*+ 1{t},O[oOYRo LiԧhC/,N(gTiantQXz5, ndEz]AGYR] tjna]wDJy!2ZJtCJsօGE&Vm틣xʆuhcgSS{1(ܔN9%c ](c&Xw}} n"ŭAsT<6BiuFv +t8c谄ut?Kօz@dDzPX. W]8Y:6zdWb]q9^{LgXG +ceT wV-p/KYLc%Omr\A Nab f{p`NOw|۝^oUP|lPNG/n#.,N㿓h8Lv +w4{.zdLǮ2 j??w;RE+X2XۦLv))Pd.%;źDd:`1O.ݓUoDw>i1V1Ɔ&c:QXw%aJ<;lpH37oU"|w<֑ r ̬W574XM&k\G(SFSc+=T(JXl?3 VFl|p@׻TWϹ$ßMMΩ,CO{{Y>ԣLMbDu.c]?~lXG“# +\h0@gdTAXntb 4GP d:l>@9:w܉c a/cSE(y#i.e-SƑ#SzCSzXREӸ2-{4t:SdǠsDffxvl'`',,xE*t򢷘5ʕwQ[v+kd^tSGwwgDEUL,y̬74DN/َDžT"s6@3B|c-2СlX/6"a[>+chzV[R j +aDuuu!2NR[G=j"Ad::]K0] O_XY2bXWGq>kz^ieM4}gLw +tŊu2]# do"<ä4ul2bReL̜ELV\PJr*OY++Mb۷B|4Xǵ:lf95muff0h,O2.kV(hŔQ-K<)Y0<"@?ّϰ #;XB$ݥXG㫣WÄ$ܑt:XY:`4G7"N#Qj3֡.] wt)֑u;` `(:]~轣樌uWWWu$Ӆx1 4GcC օr;:˦bmES:M,ĺhsC`lLb7oJS#E &I 6F9i8.ipNXGpC@G_#C9X -Jvouf:e1=8 q"lSjW3iY%-b]X׳9/3^wAZaZgizS~{=Va^@guww˄1g:6>3;]ێa;~ӹ״lw)k:5?a[H.dFEGfr`pW,Z;Xe*)#Y:ZLv<=C\Vb$!gY36p>0BpDrW:=aȮMsY: "L)h͂ 1w;)әo?)ɏVtĺjLXGd@7G:y`Eّf2{.J'e:qJ5Lec[#օqu._hFv%wv.cI~$ kǖX"1uOjp3ҕk 0Ӝ[C岐ov,ՀhiUʢ `%Y-·~- =P3ʣڊwSjN k6ܿpo<1|z*:7 LVƅyӵ4,qVSؙf؏jp4,3eZzS9۔=Mt...Jx;l߀h&ڰsB&6ݵN=F&;=[nuܧo[#pp M- P@#\hۭ-3ӄ#*Ρ\2xqΫ:LkZV8E*ۃ2@)NݣP6c_^ʟ18Dm/Pݤ3-88tX!R:ZE~+&d.MYE4n`]<QZlU b7#thL3+)bɎ1N[Sf Xgd|>֗71<3dGSģNwR{'Ё 8|źwDth5wDud rb@Jdg@ B/vw2 Aώ^+3Ɏ+LGab l3AJsBҕui}Q7iXgdW:3)1.2]W܏Ǟ53+\';萬C^WOb'u(GtuR8M-7"YHZf*t1Nfoae85L1󜴚: k;ou/қmШ)@< {G19.A} 2|v۟Sxb뛶'w}g_}dEc;ooᖹxe o88>z۷܎O QST+BZo g%23SYˇ K'(ӱ.2AŊOW9э]{)2 +~ɘ]>Dcf΍bO hi X@XGwJZ:v:3)SI'E)aQћ[dwA$%0~:DQfgg3ӵdw(K{$c*x{R2)GC˯\'E9')5샱Lgg=@v!m2!Gp.S^>d9bf~BJ@8Jت֗eŪd˒⛎4_.쉳QTmP֫:|N66 >3xJ)Ќ")pFM<̬a̲k=/WfQ+ggus⤯S S)i(;mlM4O"kqq!A:y1mTZY`0_Vh̟oo6<ë:3/~e[;t}?yzzƧm8nCۥ/o~c/gGxp۫}O, u`}Z{s^CD l1]Xh2¤cXp*`FgCjYې3!)ǩt\pHéLvu +wpj3)yF:R5`nx=x"օ&ѓGkXtu k(ֽ)j`p') t˓R{"`ncN-ڌu$azXvE?D'M%;| 2ӑ'oϰ.=_?"adLg@Cݼtu%"z2]f0d"YVd$I3v!%Y@Y0+2ǡS +\XX8Nr뻎dCf=z wE[B7C&L-L3]Ua v7LMEZȡi2{<)Ρf3ekS+씾`ĈAA5i_hgQMbXO{T=GUSL\WjkԽ8VlO~3k7v|wd[Z6n]rafje*nﶎoR 3wn՞pڭ%WgQuWl cŊG!\r-blY3^) zfiyU:%tVh}$B1]:;5jkdּbl0*^ad; +wApôë+ +w 0a.t!әMт좭aj߾}{EuJvh4uύtEĺ"t\Xs:],}"hN jLW9c%;\tYLǍ}Nʶ6Q`:d1)ϘN㢘!,S&H֓c靝3ar1'fAQV*jb_JvZ4n5YsE7Z+oʨ4M-"ݠZJC?zH:OP=g>V-5<6XC7#e- [6ؿːZeoJ71[[әhm2c G8}dkDf{C;w?tst{OL/QSScvnoZ~㞀-Ըg~K=o<2߸iӶ4uYNSf<8sKq5[TJZcĘFTc]uj]25c,amfufS3!_TCTaeѣ>?s`Kr9ܑ`GI 2?ˏWhf $ذ@bE6,2Qx!  <%aO8 6lA8OC0cD̖L:߽G۷~'1wʺMLvj]!"ƺ@o(⭱.Lm8:c.L[ee̲%c!YMRv8SɟPsgۘ"EcxC}N]heɬ5u*8:džN '~dg3X ȔV7-u.͂h:NE\$ztndk=Rm.qת?Z[^Ep`bEo\A J+qDu _1=;N +Zl-6f\`Ԋ]9bߨ=i#u_n/H" LAMTSdS]C컶JUGݓ^}>Ɣ[^_w;[Zo>lǚ[8v@.`ؘnnNg{<+߹va6۳WLQiXc NpܕnR-nuʋX{* \TEtE]4^oP.rBz 4#R6u:$4wa3!;c]3Euq:X@9FYX"uߑOp|Wq[ cÞ"rq:Lg !^Ro|:}u6:D,H9653h.j:LXɖW}{;Ŗ-Slr낛o:f +:eĮSJBRSX IjْRT2j{ +σk'ö\œv[ɶ46 +Nq$3Doөm5_Ƿ=_rǿgZ^kL7|A{-+ + {WgyM<_|Ц]qۘuzNќu 8K˅<,^X3ct-!ɕ=.V-(gX0Zru=,2iuZQv6CYݕX-X-⠜:N+glhɍBe*v>ۨUȇ!O;E-s ;%T#h:zXk XwIY'OXËU;Y +.5Xw0VM?4|N:ޙq/1]Do~[:.?2d:hNY1֙rutu3Pv'-iuBάSn:3.RN>\ecC9=Um,'0&(Nj_4U*%W/FbacёZDӀÊ`o[W>x3'3 b#١[َ[b☩N0J¡H ;lS|]F1)>8xNQͳph'޺'_/_Vv eӭkVЭ52边wwSt981ZjcSqn+N-XbѬ-\(ɺ۳jg1=Uˆuʺ\mR Tk[PN}Mͱ+\ZA{ pӡ<~IϪ<V,tQ\ͪ>@HT3z( d]l,9.ɬ#ȺmȺ0ԫAb !/<lB֡A1M:$N+ÕלaL7yoƺIqo6/&;0]]~L_\ex:;Hm8bؿRtNLx~&dq;4b-`Qin +ed·\[mmN \*0 ^.cjUMFVz#Zgؾ]YBѲ,v>[gT$}YcՑVlr3$yX~kco_gv+~-S|iLܽ{fOؖ 2hvknjx<>ܱ?$Lvt5ͪtcM0n[4,~m G^4lgڴY G-uto5ƺt9]l䢙q:]k=brVQ#>ʬC#ӊ+ʎuVJ:ahh"늲cA7z%%MZ4֢.7.X+d+.VCvڰzqu*NK( =U ;_vǚu"tM;t萲 wEE8|u4~~~ډn94L}.A}Nr(OYev8.C73je>1 5YG̦Ǚ3N g]ߥpy]\f:sga2dkOz3/h3Y{X$Sۓ+V,\-K_ڃp?淎 ?䏊,!6,ˎ +  @-M*'6L6.miTE Jyqm<9ܙ3P5EX JP WnvsUL=YG+wWH^H}6^^X87|XdA:nh?>#/GۈԑڣO3G^Oх@raG[Rnznbc:o]:;ߺ@|:񗌾C9$h)pcgUpܺXjd6zW˂!Q|r,TrgR9ǡUlu F4贰$jT,\FVȖKTZt(YãWفuh( +:; D +ǀ3cc 3dg#Tv+++OK(;%i X8֝huvK+tdL;$ʎB<8 ["nN94_&A9c6:g?6JuHWʱ'0S`Y.5Nn&DAeǠ ,;/踰j.4Vv- XdZ,6=8;P:0Z8!f# !B &ZafigqkRpQƲ C*=zRwow艷e;{F-!mpכoI}c^Iyg_O;'u:EN:KN .Lv x,G<-nV0Tl,jX 4KMX[O1ڀo*;ΤPq16YiQRyur#`:BBM:l +R:m 0NuY-YG)i֭IY,7q3d6uYe4(y>\?݅U%{ [.518>0>cX[ܕ״q57*nl.foOt7{ynLi_ۊ +-It޹JA/@mN +RӥSiUÞÖ.iui=(AY(MY-AdwYcCtC8ʎS\@vkkk0Bxg%) KMHH':YWmʺ%n Y?~ÅׯW,-j:nZv\1OscէL!~MOY{˴~3~O?AGQvݓuJNtlStNvnĬx3:ı3ry>N/nk=SZv\rߴGd .()U#"mn]ܕXஎԏ[!ݴR__][Mm>#vL>:ss '.u +Ŕ˩5uo ߵ6X7k'型. \Y#@!B 4PJ'Nk--6 Qӡc|kMPLja]]J90 +Zֺ`E бrf!ڙn_Cm/vsAr (_2^i(;D'Cm( ŝi nMd֝ LJ[Zs̵&8֡@gK79l+.7oؙ.e\ d]!uz5,u@nIi8сo".L\2`)݈zd}TWCSaEGJs H+WK(ЋѪ"p^ ]ETLXMavR%Lҿϑ~[,xsO@E>΍3ǿ4ЀBly}њnudgȱ/{uf]_褧= ]l /]\?M$k1|u\@I9.:lU  +-6Xh;NB(N)rNY@e'РP4eJa.݀uĝN5N:񐝲  h1q@֯3Xg)6$ҋm P X[m(SRّuut%Y^tvu]j:: HU@Ygh+Mt#qՐkTXst3M g?E\)#MWB:'|Nu!]>tn9,9u0]=uQy*/Ƿh: rnҾG?qS99ʕiQzEz"7&0ʍi+aJ,rujc >E*GKo%sw#?~vG*S>wNO/OuCM丠9gǦ9`ljxG7l + 8ݺh'_΢eB7P%H}yMW؎X?W]+clq֭ډ +5Vw._ݠrs%NY|bqg*-PpdFYrMu껑s:s.[k01 j",F! 6u϶y Lwm =M9[DӕXJek7xS]hgLJ'XDdWIuQvUܑu4ws(=p:9=jړN;ӎEGvZڎ!I+tR ȗTR*"B@Wz{W}7fggwdLW KYqfjBЩvKNbn+aΜUXdG8L*|戻5ƭ\I.EK.,"5!dk ~878s™dK. `VYea0-ӻJϪrDT\+~}Z/S{?%Q[eǵrf.cK~o氵vts]ּm^K[t-]wuh|Lx3*;%,*3rU@S]v>"IndΞoI Dzx*~{nGnd)x?d2+ojޒpW-t͎mj8~n6b75sNkk7ff +Fk57ۛjmKVo0.9i֍穆\8H9ml1N]ڲ\v%rqIdWhPArNs10(AQGNkEQF:C9} N!!V-,뒠,($@<zzzf:L1mSucb3mڴ(GAsYם#p?u]:5[%Y?ǷH ;g:e?cm{HY:}Щ>8|zz:vvcgϏMM\r)~ZӉZ1:fVrI&³P9n,8Rs7:mUܝW_}"WXljɺ:xts}FzyAGSˋ/^ڎ^c5qV19tJ9.+ɵcNP$εh=l(ߊ9x(؃ÆW4d]:]2ZgQࡡXduHwU5X֒uFݫÞurX`[jkׂ܊Ow;`P$;eUB%q;Ku*;S:td,:6:m7tKuk֬i:';e]D>찄uqSYMAv|}!34u=ulq2 4(J9N +:;:k\͞䄯E#eQu N8=:\uwt#OUiue4)hd`BW-o#2M8٫ק/O^xȥSN ;7zμ stmoyز{{=K{Ԛ{]];k#+w 3Ns4Xqs!ǻp8q|Bm]u@ԆWDsw]rGt:s64&ao{jN)gS}En.#*%i+I%;kjO%k%dQ>)1=34:=[RT=Gzw}b!nҕsF?:9}|o_U;_.[nxu?|fOgqWz{5lw?مlc۾[wD+dϯ ?˦ul+w,Ygq{w4c NLL&&M^p8`+U ˹&hL vwZx_q/k]4:sp;s,k^С.j^;?o/Z~?vfcHiY~=8nmCmAdzN)bMe+򸉶&4Nt:iNۙfN;Ab[1/|DA1:B|!c@y_޳Xw}wgp9^Y{}Tc`wqΪ<4uxsn͠nA#`w96anwnQv㜋":Ȏ' ud8+¸0YTQ;&()ӁutdӁuSÄ4G::ȎYg:[ܿbbWAS2N3Y'e'#5+"tׂ/9 MϗdBpS{/>]F::);*\Ha z(# fB!4g1븀s1wNM.>Bs=v1~ռ2UAsCEzroeԙ<۽lQX{ASA`dB2>8ٔZ[%Gvvwws.=_u,;M箭]?XVݾl%//GʲFi؈#\(Ff|-Y9Qz^V[__^9oo5杍 yێsWswvO=SmRRyHK\c}eͤ_۰˦+''&ț>XZ¢tt1l\qEцU_ۼй-_oj8bGӼM?Z^A܂ti.}&^o_ -Ӭa(署»!ڪua +N9c;ݛ;XyͰQ 6*ݗCsrQ%:n#LYq'Uif keu +ɾqGaa¦CϝSϻꃵ5YT(cDU6ݲCՕNE̺PvrJf$0Ӆ=lrcazMu}zr[::4'<2"bGGuoj)Ǭ4[v= z=9ZкjNxzw8Rp#Kuq$:#%”DɎvWew-HT+ܡG~Q;7UdǾcJ4P$x:a?RI +PRvМ  ²$o.YG]ޏdX0uq)+Y:3G4M'Y'A_KFt|4u:ݏĝh%2'fdYebWȹ:Z;H%,j਍7 [m}1HR*Z˕gz9Q@cU6C6nIż] 8 ͱ8Byy67xQs[ׁhS]'mm"j}]PY-3g#/nĈ75.Yb]$&`MhF/6|o--{\[/?rɲƖmZ;{:|D&&ao5HRmL{l7O:w/?ɗ&E7q5Nx(:ؘZ_>`[cku晪-^=ӛz0s Hsb ).-{ֿQ +*(SX'v3X''Szai;L?4QE:::t,";bݘb :NVs?vuu07 +:| X'A/y39zuLONqˈ8ZqԐN'HBqD5\r%Pz\~Un@K%ZdͺuoyJ\QC3dì3Godh(l{s76<_uMݯ~X髭w\) Vީ7Hv}ĕfzqXʴ#,nx-@\^iF^4#/b.&H^7W|x_: R/7N۹DK Jt\ȸDǥ?Xn>lK8uc[:+y0(^7 '%eopϘG([G:110-0*:z,1U!t\{ֹ#ՆMDv"s=feyVyB!hU@/AY'%;8s]VB٩ :N =I9e:EUW fߩ3Vc͡`l`u,;ya|h:"(ALt0Gn !>Aꂐj;>:H]a@t8dLtÜFɿ8Sdᛉ\7ͱ(aNMq9(XuF6w6bN1urgaX5}"\u)Wf3'd/pʋǖddx35gMEʳHqT#\&1+w܊p<+c|T?1HsҭꓭmΎzkMwR=rҊIscq5wd=Oy1=́uq(˵H@%<,x ֜'gO@ܒ,އ[wK7:}ś7{o1l6z}RLJ1@:㾌@q_nz9 6}Juv!>4v5I +hI6p0 B^#F$j")B 䭿g9h]{ϞȜsZ<1K&ⳓT,t<1=1Όi8>kS~-|x31i'gNL>TvLʎ:un!XgnE1E/cvtz{Oq!r.$XsO;_L$U疮L[%f^u,8ON#Lޢx DʓRsuRp<:ytRvPTrB.}֩IRK?B4CɲC +1Gu1٨:peNi:.j~-;ƅdȗ0:@7MXsud%&B3Rì]'eך XGa] (ǦKu]`X;v.]:S9|u0гqNJ4]9u&ÈdϬQn؊m: [)rfglaSö,SOs0M%eLqK}=8qA+s7[:zrё Wٲ{Qb{O7WE6V?؟0 _l`ӲM^'a Iߖe$|1®qj!; dE2UtoKÏǥQovpsSyKBڲ=N)+SpC Mr,3,`0FU>CRU_NG0 fJM9KԷ\t<堼>N^2Q5-E>)bOR/eRSu2S:!ui{fQ{Ǻ"YفulRجyξks썏; +Ͻ[VlPIԶT'ܖМGKAgso٦K;Opԗ cbW1pme81qK [ݪgW;ktaZ^Ix.YjY.ʒC+ -1b}fĮ+Ǟ[%Ǝ[rOGspc Ì:lIy<p<ŀģKȨ*ųtRNN.M)qoW#47dM=:YRI FHMu88(deQXpdPbpIIΈHpbQHّNزSc!u_r2gaQ)ϓuOIw]LG~<:N>N`?uRsT#a ]hu9Ei.-7kHRjL@lryոFcC`&rm~úwt5u<$Blf<,Zkc|9fla+6#s|7>x1{613:>ӫCmE/)kZkU ܲ7k. -ͺW}Ӧ('Yrep3~o gn-(~J՚3Ug~-v4WweA;P+Yfe񟎜ϦlS3FnJ|~2u+i->8 +RMUŸ'IY3Z5@K +4| ɺ%M֩qģU,D8_ɲ -\q\۬8(a:TwSC<1_OQ]gʲ@2mf:OIIg_6""&/tU,o[}IDm@ƪE|# RQ +*?gs]~̝sϞu`r^)bDzLlqr4XLdp9d LGv$d'Y~0)9Ym"tuJvg:\%+'K); +s47=0tN٠!`Ta9qDzÉdSN*t|N#{&Q#f]As"ή,vIR=_\la}\DUXTi*JvU,l+iI) fod2.3%7:Ʒ;O~j_lM2֟ZyeuM8bhJx?ێ\X~bIWޮ9l~H6Fy+x]N34 +J4'X_mG/^f?!'VdsjfypvӔSxY5oO#w +N]{缄:mJVPD0eԭWc.fWy d - 'Y'=ݡٔY'}Gm$XǠY-4^[_q>m 68܇pΚcU6Z9gX`JHّ$LXs,q+>!}*†I!_;;;%MGs[MI~ h~0\fS%;qfu; @v9Y)up5uRv6ہINא}䉓u7 1]d#Mp:%;8Sdo:^);M :T.T1T4]>+fsYͱ.ƷmpڃV'_5r5go9=/-^GK3m!|quifta)d.8},еib89Wd9Όobԓ]2ᮉWZU*[5:WGs \w̓|7wY-n,^dV5Heh--7tj<ft4+(X}{ڞNMNۂ^Z }PEX7Mfڢr3wR1$0XOn@9:peQE!g+u(t5RNiNUX:z" \a:DNv)Y'{&OlZGj)p# +}%bw`GWCv]GN-=(}>]Y1hrZDNNʅ&8t`_g(tجKYft&,Mu !tᬃ윦s6?9SY'q:]P_q~ ; ъm: +'u<\MN#"A:碳w6zt:YjU!,uΎ–\Ŧؓ[wGn3}%R17:qdZaysw-a'/fF8Z̀ZYjQ)A71}8#8iqz$]Wƚ=5[7>أ tUѓz)z<At\a &VRZZ*MִyeHPǣ/.L&eum4Jk[iШFi. +Мﵸodb$ۢ-޽'`M6I*e4;d[m:{u0=<9`µ}<5:[\jS"㯪4kŞ$CBV64Gn.8j9L7-ͭT(TpQTȘ.Z?mq[r s:0WsfVC '/TXܬ@eF$#y ?ST?(.`'Z6ڙ懤izK'iR]o\VC6+cPr + *rSqE@&Kss}}sX/;g<ݳ ,|&HRyy=Yv{,hTSjذw[9$8jӴ;w `q'j>,:n5->B0uXAqYEJoG㸋Dv8N#\U Ӿl: +JAg;H3DJ+ Flx`MϨ9]}}=h. ]MM`:u$;ĝ`:\ gcxPvRαsew/e]by)u?VC`~"d̺۪:N¯p3drs053txwqKYg:ZエK {s . 9&)'x k{E;jɬ#Qa׹p'OpKt'M>ٹs7rk!!KWbm@|A9 G7N2𽝥vW|VC/sݹ7k/lM*mI)?hʶ5~aWUcS*ZJc 6q;#dw3N~Vǽ>X:zHs9.}8X̓ɡ`98C&pfH lB­V~~Q21 9C?43י:VLg3Swj96q7ͺs9,@ eAgǺe"cEifڙ\IgZ&}ge: ^ڰNZq.iN`ffr: ':*ɬ#ɲq"5w92Lg%밨fQN]d3V#ֵCY' :XNl::`ѣ@'G`2uXpaO$S/rFp\y&3)ȾS7fhOHXǷkoۃNPtQ6#.;:[0YJE|cC+8$@d +zT_y.ԣ=w2j/H_\"%÷aR^A̶ޖB=F2b2-Q;{uDߚd+Z|aSrimNv>U|`sp{ś˷]wĵ቞ɾ;NNgF OoOmNvOtM*6)(7d;{|{KYJq-zR+|]I<^8_Mކu 544WhL'NpE0Rv4 5GA֑QjA/pMGAL'&3YdwȀ0L!| 5!(5E6MG;qD 13uzJKKA$;t:N: +JrJɸONfGQ9E ;_(Av9Yyڂ o3=dE:m0NQjNt((gn}ǝWӜ:Am5q0YF }a3'w\Aʔ"Wb!ͥP$ C.jNk/Xg  +M.\u]wϽuEglOU^ovov胙33 F;dȊAOdOy' ݽ:[gY YD 'OoNLWvn4ӿ& 9ʼ u +Yc -ۘ>̝殇J)5'ӧ:]M:hr*G :gp_v]r5ߙNԜh7*u +}P菤9:xr6mź%(<|f C)V  > -);bt4!M%1UpPDaq׌8Ag:t~32PvqV'ad֑֡ zw94)UBN!١u(;X$8NԅG0FߌPYWVVߧE::zCo,;س4?!@t$;uQYwS!~4:wu2lh:Sn2</pól;'n|=VK}zP_]]7&a =|'&Gc25tt0-axMz>l$<>qq e˿,tiFBY Mf4tpvncĘe(]m=՝+U:GǦ>û#s Hy8@Qn艂b?qnipna<8 3^=ؽ5ç}[:hUrʤxL%`6;ȷhd],ꬋ~S? 38K^"0۹Gz|uv,=svshj .J[9AL&(fLg9pgDٝ.o?n|6Qn*TVćRД;B[7؄=e-!`v-,_zf;Ϝ8F3w{ίfá{ݛM?O rΝeq-|2/ o5qY7cq`ldDSPK jbWvzLzY1Q^uZs.R6?2ϨKӼ=tIm$K/0F5%~}8qw*uwQpeֵ8htD 47nW<0)e +YgLtB9/Fi"?;J(;`XuoW_b惧qkt=|?8@0sߤ%$:d-;=[ܹ~ήK?vdӖfQKjkB5UU8*;P@No|^?8dzG ~H];|.Ltϟ?ײKVk/])Kb~c*-t r-╙^mL$zL|tGsc]"n%`]-IIǻ{ԙeRp=#v+.b2.eo/[5Wowu.ټu$}tk k"b=35q: Qe/q}i!)(h+T'K<鬓xY[sQtm@mx:r40d1dudiu@4[EӉۮY#Q; 6nhd.Q(;D˺}*.:1M.'SqAY +Yg4gd;Yͅ0u׷=Y%({>ztx`A9P]"EFRMV1g\wz@aF\RшsfY=2I,d-{1Cc%}g3/o;ACHw'_c닖]q:LºQC^t@t&#I9foNnǎ)EZv[lVQvU ;NNNNQR:4\|/o԰ :137۹0^Ёr|[k#4̣q!܊]cQic0]iCQ,X¦e +WRG~qnjOW:zDfLp0#cC)s'?}u xw?~XZnVuaV0 Oi}GC!ϟHJs^%+[_4g*Oi|n`xޣo>~> (7#\6q2-;2[0/L$LQg]>͏u@̻FtɬL]Zݽ =]0n=suJYmBqq-32d'*b^bh9!Ljiֱ@-XniNEVFVJI.̨33#8֬6TuЪ31tZtIC4J@Ey?tgČ>ss^giK+,*5K/7XoNܙ]~|iK*f#wm`h)o[cC̮ٜQG室B:'S7cbើGOwnZU^;y_MYy+wko^|ƱJX5HOVpHAy v{ۺ'gyrΆhN .Jvܳqf${zf nkֽ:|ǩU7]$3&9AO+NYjۍs*o6{*s)]}/oäyEp$qؚ4ϰ.Yc7r6V]lirւqgSnB:ǥ\xxU(l֩AvpU#\E-uN١:scS.8TUrɥ]"wE^u\ Kپnr]ɄvfLcj@PNAӡn@sl:;[. dg#Y&5_BXWmN"`!UUULº~Xvfljt,;|!cQK~w7vS'"l:6!e"6J5pǩ]i:x<'VcTiNNز=A!W^xds](^d^y׹|on27?Z{o~SWBaV7 ̳y<]ȫR?>9wǶe&+;pڽmt<}K$ZN :aw&3FNd:2VǚC.._ww :.悌}͖}zwusJgEX, LKWmbF3v^7#A~4/et$pZhtIzd+MmAEuԂh,S,?F=y/xd"x,̏|4FG>/g/>('Ztܤ殝wNIwzRZ.C^5 '^ѾVOd'J-;rAW2@<q}RqT}Xg9A吳vRK]\uSCDT&gNN:;utԑ#HAv7+f"B9 +òJt!c1=f +ALk.:UI9A>Yw +̺~W@_4wNqp3Я +n94NQVpy3뜏O4d:;;\v(KxKz tI|[mXRptyS-\VaZi i75|K-}z۩7Z|ʴ+.'l+:eՠT8s)K:tm%WxЋK-n=y #O\"нUN枾ʩZ (FWVԸR%tW}UU?]ҭ_p)on}>Q9[蒬+@1]).=[ .+i]%%&ȷ@9M3 ?+NOmVRmc:)@3fʥG=z;vC:gyʛ|Ocw;?\=!qXg-ߺLsM9qsJX'}G+Q8]6,4.P>YA+5vw!ŀ:Y]UcpO 9+UraRv+= :* iRgZR4d +c'PQ2 g]_i e?,ۡ bg8&u5~t0bAjD"ӑ> ֱN}֦Qn\ cՋȟ}h?_n2 9;'` ٚc)ͅwt ;efI9:$gNtēښF$t*5BްSv[^Ȝs|sFMACt(OzNh]8?Um|*245<3b~yLKo/v|Xp +~|TSQKIeC/|uduA/22ƻ xp;TeqOu+*|ᆖOK֎!YBLucT_^ŏwt2_ba;ps߹{NrGl'XF#>6a7'uo[scs, 1E<FG8o$ ӕ$GEfY. B6tqE]?3T-Y +u:*m9MG$Xu)0mI4!1t`b2:)I!O X75Mu'D:Nn\Q˔_~:q~Ínyp;QGc:;ci˚no' ;hNF>VuQvO :㎧5{S|]ϟQ1VR'g9KS'pto`V[v!fr!4R y2xhXOcSN-:bkܗ%Sv(WG ^/tꩋ+}͙'nyᬋǒvN,]3.͗gZS]Ws4GoGU_0\VhMREr4&?m}a#?)N8u?Z8wG*8GtzLT_5yc 6rц+:ݜzơa ɯ18WI5|ހ|92{sWO]ـ?# {vMv׭Jmjkkݭڊ +"+$fWQ*OKP|?*]AA"/7=gpS]Sgzz.=ZrAH;.Nk.?n˷Ρ:6{ +bRo$갓GjsJma\*Gurܑxg6vpqwkIo1}|yo1+cYĬKge~ݽ)7aYtӺ lwS _hܬu380bG&gn߸c3#nN:4` F^#r|8!>Xm +au*X'L%;biL}øt&Hv&(HswVQBJ .3A&:ЄzBFrȺ84 XWgu555J2&#zOaetut"t%N` +t&0MQ{Fs A +|O `h).t 2/֑(7ZKEH<\EX;q#1ݼX{|Bs䝴 +^,G#KbGJOu~i}H94xI/R|`9:B]bC{ Re.TMNtw~)2Vg3Y?z8^~sƳf.R)Ԕ+)UI~] wi N}[2J$38-Q6%)L--Oy~{S:H tG[tbWG[7_Spf{'_>vqIF|Y=ݷbVao~;)4\q_IjԊ;:P, `[$qǙ'mxAUM}fbw(Ewsq;(m+:w@Y}n)VTbU·u\v әɮSX0NA8ABv:NhȺh2MwF;dݡCd]UUPMOk5`ʎLG?0Ɏ@'XG+n֙S_@ЙYg[.FSh:z×|ǣPdꄹXӬ vM݄5 -|g|@GE':ZY}j{1mOX-@ <>וXjB\I|"CiiKm!]^α/NWݸWDBL)3Q3J7c|D‰zz~NOoC%qt!J>ʮ;})2 +4ɬ6](LL)-Zwޖ ?p3ǚ?9׍{g޶zU{5_7" f- ruAYnC$Q 䝎uI)l(ו^|Mi麥m^WђY}*dfukf*okͬlUǪY'9xz[}Cm.=uRm@"x+wĮIȯ0<i}6ߠhG"~P:GS[m Vy7SjSNp5sa=;H aMo]r(gvL0>.vv, hǧ +ANO@Ec:b +ɫ6,؃ T{膩9u$;HXGe젨㆕u:Gӡ _n\t#qٵEgɮ;0u݈uH9;0\&LYG{Qvs~Kn@5'XwMu:pܰM:i],30ma:/t#_7뛈㸃S·ux/8su"GK: \$ n<':LܣKr|~f E#;:dAQ2_ёoo<.@íoHp#O޻civoКxt +k!0]6ݯ Oi)A^j>|xgϝ|!%-*Z"8sLϧ[ķبǰ{n>x}]]\jI恶GOO3#$>zjv:l)?jױGla~#g|2wZysfxٍ>˩{/XS@9|$v\a5zwREp &K +| &%Ʋm\SXԔ^~Qsb Y"Vn[Qxa (8+HZ߰=H<ҙ Aa'MlvxgM,Rq LtTNя=T/QMrZa`5!x+I3 +]/ f!ޑu^kr:<%aD#;P9uBvu(;:9=AGd'LѢL lʎ*;:OyN3}SM GsZuCȎv|#utJ5G9z20^2dADX8D?a]lu*eMgkaY&ti&Şkʎiڅ koInxm_(I֕fsXɆ=+1e וE&_R%3+)<"aeŝE1!Ɓ> DGa>՛;n=Y'ZJ-ԭ4??j/dL|j;z[++փnMy(+<(r~Ӭsɳ].*.PmnrO~?Uuq.1NL'$cgdcf4l +hє,\,z1BLDu#^z}=x6ʹ9{=w?}7T\J IT8Rs^t\)`bO/!슟mz'g_y=Yv GzGn~{οʂvE׊ܨ6 ۚB7tŁNIƮ+ v +7gf9?|#sξ \};|NG,n::Y'47^epsϮYG|'9WgN9C9=z +8:dBuD|"YhҰOBy(:IܥZP"%`1sfN\NtرdG#QY,YG*u`CCqt06!́TU>7Cׂ#`BY U7?:qG jK,p ++5vp. +AxS?tvK_XYqgi7 _?rrXiǥW~2EW,^xĉ67R)GUަwM{k>/"n(-P[ҟ!;8?1Q.SmỲgW-jG~`|tͥ;.lz9&m[؝;=Wf9/(dzvf*e~q~ZX5gG}Ȱa{V,߲7a9UO1:F1|;˷ +?:;|+x psGb DQε81w=#8ě[n?ήoswno?|el'Ssp֧f^o!ou`ͪjGV2 h+@y խ}WحuD8?z}y%=oFWawunY`(D.#YMlt#A9*.<9Pф5E^z\KhhC]DE4-tvCQ;;5GYǏpax=:Qtؚ,NN + y_N_ gXCÄ@!qA8"0uGTSBvĺV`AG;:(MɎCӣfΙ4i' (͐,Yd4F5:dL. ږ3tb]x.K qjG_fCtbF9Ĩ9g!KwBpT7s5ݴy~q-ݿmx}c!tvf= +x#ꄬ݆%UoCȩyސ#I]уѮ„Μݧ'lzYYŃ-g.:rIv~Σ="G?zOj=ʽ `]LgV&^qgnYxa+r/~" mNNҬrOZ :ŷtAtҜi՜κwet)%.][ <ؓZ֦,iRQy䛶WG߸?nr0F5X-٘$_4R2x{+>IX#~u~Yyq^K)=*FN̫H|Z͟T -6S+}\Ja %o1@:Gp@i.?S| &;[w;)+};0:17M~ţnE'/݇/U1M[ʍdX%w>M`^Qٜw$~YWk2ʬTtzImӁ3 ;*Nj[ ![Yupg5]ThnY(rD$'#Du4L tcf瘎 _*/Yϱū :nyD{ +:^-wo.%%l*U+M\VcT%]PeŖͪc_//hc8hK#ͽZ-Df7=RO[%WnN[[G/D>jEn]]LRRs\F_v-K޳"%wEZԼ.K ".(@R6=&qf\.˭{IS64әjba:-.*u|^|m]I9M|PF:4; *?R t0L&;L 5l|Q'YAh5f j6]*hb]>4:f:Ȃa4a\uC!XYGZciAI- +*ܰ$.ԹfZg]hN~&d!q37HpkpuT4Qqb]wdqCS)Y'==Yk|# 謲c }~<{ଈb7m54' ўV4Sii:s=Ք:.cݧX1841U ?cIgAM.^l }^(MP f$(-R&*_gg٘PLk`k6CAp9?a5ݜtOÙz0wBF3Ww^qeCƧ{/$?`m)w`tuqiEtqiiꛘsҥ/|>ߎ]^e d -6:,PaŅof9úekv~kwu?_qG⋍2UIi',Ⱥ>snvVoxFٛn9E;P|NbRS[NuMvKp\:b[i볜O{S%TҔpn&:iv'Y:d`}k0ҿ|zնv^};?y16E0! Uv'v喲`:8aGٕ!uIƪeuΖX|VSҕo˭S<ȱ[2!ZJQ00Αz ( f]짹l+YWpzGҺ֎/Ƨ”3V+~1ʟo>wuoW:PF[4sOܒ\HkY:Wyف הB.߲at!Yƒoi3ӼbTq8G.(8K '!oriV4mADT[h/5'Yet4i״2ܮ00 XOFq>ק}'(:xuKb|գhTX8n]$2ޭuo9h@ܢop^K< a0]zٛYdf~rk02PsxlwCI_d@å—|=xvOuߜ[ёsS7o;l޷4 c %HdQd/DNWx(z{bf +TK^twC{gk~+Uo4D\x{ʼ| N.05DWʳГ"X':9 8L_{?ɭ]_qt{띞S0?37hvvnK.\4ոc~wӝ^x@v\̖`Ey myBnԗ6ky9!qNs: AC8F/)3>}Tb>Žu\v|k:>酭Є9gԸ9mbF\;) +g?$Q.pH:h:k%ۺpǗ쩉IZO'gT|b+e`/X'{~Uעo}oxT7tXqӰs"/^/deao/r$a]l}ߋ}\|K+?Ȯ~+&eAi(7Գi,T)G#g.ǾdԜ܂P4xt5LS _I{ +A`@`޹J7B2Q;_K6U$}q5ELs&o <ٓ畔Cy$D?j.^*Xܿ~ɺ?t?z:1_W<׍Y`:她WfW]W,,eݎ+E;Ajcf]=vf nv,.d,e]eb䳥2IsqU(qxI1x|Ur\5}1 *T`j^P[aVPbZndiNgwX1bI:::cˎc,As:RջqpqA.[Bq:<+mn:w<2Nv:;h duxX'e>Z&ig;' ;2;Qڬo+CpH "n:f4ܘ;9t8Du;:zSXu|f7g!:$9|>p)p3FӭDqaqe)xy\;Z j<>I9)(*~i[ F)/I C0ZzΪ\hi8Y|>?z*ŵiA9yyZ. nkYkB/xV{ƢPbڢե7_pN{]_uCK<-ǥ&&F4<'&yr*:qRjw@hHDﴁ?cg+ȜMG綛qNIdkϊ!8tp(7 qR* ϩ~[atnuX[Vܲi٥8/'C%d:Mb /asÚ=-o~._8M |vD&k4埛x4R0mis& w6=TX'ǙuK8rӸ\nR\xѦZUSd"a=nOZN} &h`p:9AP˨ r&mhCZAJvG')AGAiN6d+Mgˮ#/H١ź"炠wrJܝLbB +hrXsX=+ NўXGsu T!뎈0Z:`XwD]OSvܙ 8jJsn*tȥ A94Buu3h@p~Vq"Xw+2ta ':%; +|kNOD+HlOS+\Ո=!U˙X1r睽_XRKp#e(4WZsM;{ƃ:fZMu)9r jt7_XH~%KP.L Ϙ^@$|Y gablA Fse"3sݸ)=}fvA/,37Nm1]zNҗVzpP|y<ոGi`l\}8d3}QSQQjX[,( Frr+h8p3m%%^cm׺{[.']`к!V&x*.穰dBkО><go)TP֭snirZӺK*|v}cu6ǞtxmలHaDPr͊\Ԫ*V(cF=)~@mwa8[̴;tJNSMGuwܼ1lpܤ 3qV.'YqN{̿֝2MGАaqX1p 8,;N :Q4555H}cQٝu$NɎ +]cA騖:\|#)t&(pP.ؠ6w]̎ |ڠY92k +;YǦʤ-z ]z@ǏTLd E$Tk:D8^+ťμ?*5\\nSekNy0,Q:n'F]^SL9Ge,7V&5^7[/~dk:["hB.ApW6si]m׮}y]cpn ֕r6]zn/WPwbDg>\WXIq4z9^.eʛN 3wNpMi]wn63h(W}7E0)1SbB 9wJ##u|LLarɎ  a޿`CCˌMiF[i E.쬓ol4rNnؼ/Ya˙a~y(6֠0<l1ԡ\Vx 4Gx}TS+ZFs1Rεl򜝃2:u6C/] F w =:4֓"%먶M-(ժME\M7l1868a;/"~u,;*NZ"9c"u7[! c%u,;A٬C$(9 l:BblցNѿ BScǩt(p-0|qu@wLǑ7WAn$4Ǭj֜ Τo:q>="B/F|f\8Y's~V:^,h/W:ꃳW7i:bY~I4CMgfU6xkk2]EQU 3 L_etKf樖g1Ϛ lWOߦWf$WÍ]([%G_T: k_Ʃ +#0fRv:N;V;tigN'Bf^x kIEZ1)jW|+3=ν,陝v{~:X>PV`@[K6n=voAkZ&i>Z};МXbIIc]r˳2GegI ͹".NJJrʗ߶gA91rYE&gJ(N׈u)utgV;x-x !dGfMBEP(8P7 A q:1'Йe'.T͊5'LtX#LYegΔ7d)@Ёᲃ\"q:!XwC,Aĺ' 4] \ t+LaUs<=7$_ d`8,QvC6Y'qu?f^jE'uh9[3M j-#|Y.Z,)ojBNYwopxɞ.Z ۖ\X)ܦVīsWG[vQ+6QubfaV,uD伜Vn1<6_[YY.%E4ҸWWߪUk$xUuo%uSO%\X{wo>ܓ]I "5r} adw'ӖuzVX_G%/rհA%D(V5 [pV䢊VXBBp6utt7\!h.h7ΧfqqNV@ +k*nH=uk`H +~aJ~~1:o?z EbLBˍ?yI2 ۤ4ɖ[F l d·ɺ,tq9tYo>Y+(_/qI>+bN(-ݼfr`(ۍF=1>KԔ !_8ܬtf VBN!ByBvT`=}GA#Td=uD?ٰ ;Q!<u:"uX͚UUjكuXL}i:& +d`ɺT*%dͺV0]!;;p޽{tux~X'p㸃8mFq^xd1nej1r|^fib"4GfD6YYw33{z M9";bM\:ނAA3J6qϕd !?84:I粿5fyhnnj.!mÂN-Ӧcz9H(Sۜ3sYM3Ȕ:'~X}Pp Uv"GO !4#Q#;ʑrTꎗPCd;BMVq]qn:::7ٙ& Hs"8!X'Lewƴr%8c# deu{pYGW:pr`7;ƒuYCNñJOfhq4ht"!VgƋep^ ߄h㇃aJ9o6[Yn7g.a"IQjǞ(7S>`ہrp5W9tHaf]=4fվn/~sopBHcq=RqLM؁orb<EIE9j%.ôT +-~^NoO5r{_K!&|.k[0?V_ޱ{Dg{P:W΋xG}8:13_-I +\4cBvJ_E{•pU` V-v<-%XկQ~d׷Fap?#S3Oy4z?tqPDxP{ naƥ)kqĐqFƧ:lvۘVinuZQr҉Ҭ7 /E7ug=m OSNh'=h%!gg YGI6@ wClPu;x‰g7kZ*H^1RTr(ċ)rXIus`h@cwQy/UJ[^;8HpŀVQ U8?R `_bwA`ޫl[iOJxڻL5ƔT:V[ ~>5Jb{W[>o3죦`^U EJ컂nvVt +q[BQu9.;歩Ύo38X-A z<qNvvzYWk>&}|x_uYU=?7 +7BېRR5TT" +mEIKR( j0!1vHB mA;@ 6/kK=3ޙBF;wfgvfg=9lĺlp.}™s7ኚk'ɮh9[]ʮ}:YŎ=\v _[S3Z\bMkε!&7:Ӎ +;\icLOQcuzW܌H@LGй\ N8ގ8벎#cg ::N:9/f|g4#>+wwsbra]*Ǝq)c<)ٵ/M'^ٷPoЍHЕk7gc.MPv> ThhʆˎMdXUy[b5p6?jE ~mݞ޾8hӬK``]qs˺L/:<:-8ΰSN0s hVu[uZ. T;tZvfs8&0nSyuW +cjŘNe|!Ψt]2 0Y'`Nΰ}>PY'Cy7?ȺNN3#$҈cAWuAG:vwLPu8%Wvfxi$#gช`஬zGEuKrB˪Z}s\24ulPL[]nlU4\疐`ҳS)5Wf/^]{ym{h"_-K5Oo}5iV)ܣwwV:srekWPdeZƶeorƒp)]/y/ɹޝ'X|z/zQ_Jt߇b/xf}>2t|qjݾx;_&u`u( W5[zyw{Gj| EsjHhVWm^`/p)|bǺYҕx7MıtD1Ê 4d.H?|*.C9coWUX"3a81dk:ZvYǠwMh#@v^֑Ҁ;\}0ttZO]뺺󚎲{+k:NˎӬE8t4 ;3uw$#Pv&Gh=N#dBBðNʏwYDZ:Nƴvh71b֔ӈK`qA +.9r\I 7NknS;?3Y{9\Gn+i]dTp]݇Oyuj*'xĹ% +KqS6=qy޽7 &K+ (8.jw62}Zgnᬪz *]y$6&wK- 44#jTy.?77??o;/;|cKhp. ҿj6kooW|_}?X$`V1uVR)Vn}!Z B06ۺχ|Ĭ"%gw!1L +t+;(Ԅf}'났Q4-; %Ҳ:4;Y'3iܑuĝD.Mֽq;bqc:itS*#[3C:f#FLʗ}9Ps#3bX?'/6wЬc &7U8a:;"FmLA㼞7ic6yq"0m*OV4y싧^/[ +Љ.7Mx[u\ȔNXuH7 \\ꖐxʪZմTw\zKq|\/0x૟ԽQ,~)߰OΙ25rsUoXJ=gҰu$͵Y{/'7)*#e[;h,n,}!h.XtrjR퇺z{>ͩ8ytZgZ>C13=5sݓMEݞGֽL.YW46 Ж٤J(],+N\auþ=]:<2 )3 Ll4tBo68TZ|^ RDNKMS]8k4|3n1Щѧwܑud7t(Lwc]T: +'#ڨ*3CM˜:]Btg';:YGJ蜈$c +DܽEˮ=-;: ^'wU[(l{Mzd׏#*bu^ٙ(+P.m*TPCS"D*BI +4Ą +ߦ&M@x(PPӵyMpwg|w5<=j:Svx =n[L'qN +:Հ:9xAu؋9g:xrsex39'ޡ/^yUafsj.2̦N?5^kQ5+E]ɏd"+T %K1\/~-=[RBKgl}ƺS;{)RMtٱS>]hmk_Ǎ(qܻL;v~[M_8pބq[{s .֟dna]_\vAc~͑c__ptbZZ1W丁6k)oѤˤ9Rrc_}#LX/s7c1u֙Ü :AVTPE,3PcH͙22:2k*pF%pu&uu( فuܖC۲pEYKnr$'uRvmF3YǛu: ŔBQuwu,;ub@ǦtuR|/HI5{u2Mg[c5]t:^u*~@9l29-"(1PLʎ_:E<^U{ N/@vnhTAä\XmVɱ?R%X5['wSøG>!#{Rd0avW(F'*N.6G@Kύ-tRλ+_/~/_ 8Y3HAGu~YDb攖yrr9%9DTdщizROOtw+oa슱湍m.O=݃os@Y.(Y(U7<_M>1UΩP-w-Pr;!wqFk9oɈ;.9δ;q1]8cr*윞U2wqX2UT%I` ~:VE=s SSv8ߕQs&g:{ϴu4m-8p6Mo4ū_P|}KܴכkVm*Q݉]?v}Q⯞(|PɣA X ;tX85SNה̮fyU$ ŸJIɊm3^Pp:Ln^xr'cfL92+9\ ZYǡ"7U ֡R”SSm7LQe:Q.b l: +sJDN.Eֱw~ʍunՋjkka:\Ph鬬%u`)aFnxeq׋|54's?9xkАc;KuN1Â:9`J9ɎʓM9dq{Dhs)q[$aLٓ֓:2:V|ʋj]U:Fe"G;Һʧ go L?E@?(CyMU;fsQ`--ޭ +g8 .{ג 5Y\58B5J;UU"Rn?[]޴04]qf3d:;곆嶺 +oGrt]yȎ%%.FƾEĒg'g\wS-Bw9(ngќVS;y +^x̬sOeO_G51aތ N].jN,/sUϔ(qE/$c}vڴ^{|am#wSӑᮁ}Czewak 3428<626A@5P>%n|tS%ӰVAhQ;ĻQ=3=YLRg`&k&H1܀8"Yz\| A'"~( :$J +Q%+W"IdҚ +\,;^T +Lǂ?њce*^$Xv8uKkhh^7u [Lwźsn:Ȋu );u7TF=H,8F;Q<|Xo7Iu;JvtМt :+T0qc&Ro1J֙#5/Gx)Lߙ39Hbzҏ\U%ٕǙ-Pvk[ |726!gv5+i @Tcs,,R"5]}/\rǾӇiT?/Z ^?Vgvρj4I4MSc,.k+4Z!-\VKHYQ Eq/ +&}g3>~g,>Ly;̼]wt 5еTsU#g>f`22[[jt*/Zz|ov5W^5n0sZ~_:6ع'&X1)p:@waLs䩒In=ME4fMW+Fu?,UP7 +t9a(V9VN]$)qoTi y#$p ➂z>4;%bs\QKN!NE4I+:By4 -D +LC{N}&&[wx !~Mt vJ JL,=-Iҷu_ށ;5ڮ~;PnʕZ+f'p{7K-隦4Ha˖4'Kl=}Uඍ]~7S<^j>1Ĩ +yMeH^5ouƧf£S.jw7z*]Vez0ذ^-inWEJ\XxB2GfpcbI'D:tRMdh&Gv1;SuOX8ĺL8z>|c5@iN+ ,AZ4CFCSrԦؕe>njgPDT${" Wwn=tr[k\{h`|<>vػIpb^IRZ:, Y#u[) +w%llû[kiq+ĺ,('fݿ\>4O;?,Xy +5R+)&ueB\xEL7Zrw۶+J1YOakb::mT;5!QBchuDN;am،XwGCOFXGKOkA{qu&u +w!++!@px^urJvXg-ڕ LXLE΀k0T! "֑֥2#٥.ړa;2MbͰ:}XbNLg u ؑ4g"DFA9 8 QSX:V](QSsdǘm]%΢mF ":]n+;ӕ:t b]9a9m}嶾䐶o<| }}O + 1MfCб%tDِ+RqkyF.ѳya]7?W'&q߃gdiI .Rkvӷtͮ^wV\e6~x^ip@[/TC9p{腶hJZZJm byߙgsyߵ֞SL֬ٳgz Xdna[Khtvt?p/?7>]!nlDeق&rRnC=V̝?꧅3+PDwUJ]x8 n/x<~oo~6O0G%"9ƍXn{='IIΐ^BəSšS)..lee$U)t-"+/re-#Y]1pċSٹXGMQuhG!eAv֡\Dv]i) Qk@pZ;|Ⱥu:9ֽ&Q9buXtfΙC XBʎc`:NeΞ&J:'NN#wֽ\G!.,X.Qwo49.#밅to3ӢpgwtI֡9ֱO +0x$$Tvh@pP^DN5#Y s#rc5喅; hDu[tIU:r݅wo> &, kdg'?p"V,^9cZi#(6%9n@LjʍN?Oc +_:b.+/u㟃u*ߍwkv~z*]KexZjU+(/4ol{{~ic"]q, kJ_3cucم&WoO>ŷN\~]A[zYrW]a]C%7czZtq/D .{a[NkV8\Ţ+ΐcKFe[&l鮹1kmdۯ?B}{{TJ Z 1|:ӇSƺ +qSvlzvQL7a Sǧff}OtYWW嫱g;(FAǓ_~ > +e>$lze)#rK^k_WɜrkzuZ uuZ8YϪFQw9i6t:4ζc=83M.Ւv]M-Nb53Z]F΂C[?.]c1|% ;hv(, lˬ;x ); s!똽u:*;ŝId`Gawj:j]CEYy:Jde3ݿM4v%Ag <}xOYΆ) +s؈KNq8tIn=ߎ}krl}Xcq醹zk]o|*ՠ>n^}K[2϶{63٢y38];. 6S+diT.,T ,[<rQVƫ^å=wvv^No6MLfw:>:[~UNAK5v=./~eo*ml^3c%,t5u3ƺUm]#}t+Zs?-^A +ݿe w#$#\R=[54X87LZydݪ cCmcw=y/\~V8aә۠/.s Utr_=3cyї\#uyE;k|ˑ:';awssCGNNM,|Xs+g˷.b;Zfp'$ac%V=5&JM4XibeMiX+F'kiWl[u"(;C#:`AYjȱcǢ:4rz}=gU]a/"_Ngڎi/z+%DL; $Hm+VRCNCŊV +| Xb$y_Үsy߀̙=k=?Gv#JNLg]X 3"Lq`:܎Rt&{ bDʡāq;j%:w9to07AG+avK-OϑunGz9%|h+H,W15iNW:zb* )Q 8%qt7&IxL.F.wD9>vb7d(GupaOpbfAɁӆn]Uַ8{?8qgyܵXjwIp7LZz|K&%pQ0 +qt;YAX[lNW5Zks[;xO]/n56. ;c{ZPg՟JݚVfby/rǞ/hKAp6X=gur܊ݸ[W׎7 N\_M?R3ϒ5N*vg՟~}#:t,--uݔ[䤯|6GnXܪ_[HrX-bU\Pu൤XqIs\MVdEҬ1::'X:tIhu:+::_ V0ugu$;˹Љ 銭ـFx)tAppWʱ)ܽDd0C.u$;@G#93)CECXpg.bEC;55Z`)A{J"(t$;:uw[J֡Vuoz'/Luuo'+eqIbrZ&E܋d)Bi5٩#!u:ź(_UD+.Z\РT\;,aIsؙ  +߬?Mn+j'K g}GOiұSEt Gv(ɣqZ.I|ƨ) /,nJڣg>#Ol{`,nm1Z>%yu獕:]g2^ܿ/:EZ_p)iO$WNVR]]S+))9cC91`]Ru{#%!Q\RLw]5Xx.h]zW>:}டo*PoĀX781 ~ؽ3:7ı$iv%A\Rn#z RStGt~% +x%seZޥsO}skF J|͑]z#'?qILrCp+j5[]2emoZqj?u2mADZYQU+"I"ήνWMӛ)L6;a].W$.U.f;L?`FNg::kKv.:i|GI`P!ZAL1[m&٩ѓw8U3OoA 1)%.bKu3<@dg2vmKtI#)A: +tud:`Ya qd:wLbn(Cv2XGsXun{A_` |&֑F겊2Uc]>a:%:;S5b(d7"^ĺYdL P[ ;;LcmcC>Ri+(3w:KR^W 9ngѡ3)l^uIK:ĺW4-٩RFpc]ӽ_*XX|/XL#9aI;X@dy$sNXRM"2bXg(3Z+2sp:: WI4VJdzKu9 +sò:(lP[~D N9WCxP٥4t: \VúrHZ`'N[VGvZnXwЧoc 5 & i8s-4`=]O!-&=FWTE1uVgZD ;߸OܱDe~/<55C,O_;wm10\fG'@<}偭f{eѝ3טw5QnɩO>V@p1p +)ew=Gйh6EWl5,[x_-(,x>u֭I%p :5L~~9-3[iM2 ӹ*+E§MGt*29ʷB戁";:`8o)/t$9@=#-ߒWΖXGX 3dX3) +Lgc:k#Бubgՠ$ցntuXG\"tĺtNXD[~u &/ #OYK#;e:S&jI >bMiR{")ͩ O$a::u92"RD3Yp4 )YdXB$ YtJsuu: w$;W\AAUiXPfӓ% N}C qkgRjz,Ɋ8)&.\JjtJUigt}s#?xhZ߂e;Cfo7y='<zڅac-cWr#E;ӑFM{,0/-n`g<:ނ 7zؘ?bXHB|KzNwXt¬YqOI{e<.74n>b}fS|C669Lv]r? +hL_\mVPSQ1%x Y]ӵB:; LN^) %);Y^FpWW3Fh!cttJvp" eaX$8E9Ĵp'֙Q!W +thUEWLS|:Z [pGe.bc#u ;KWXgz%:UY͛7UE3LtKu9tFp`:YZ{ bN^NLG4dgXG÷Nd:,V@KݑRn8%D8:qnjb338LNuHVv 7u$;wSs;k:rՇHMūEu|vopjyCꁮ14oheAs=ԓ/;snJJ(;Ls=I"jNI݀c.pZ Uvę;$t㽃֎6 nhM?ѿEo.pи]cA}ĺ᙮<@vKlyv܍|i궷=}Fa}ҮGA7zG?;eIp&i܀fdBL{~[p~=Ku/=,:FkO]N_7jCBfXqJsV`X.YUYCѣys,ۆ7 V@%eM8vtzWztBr%92>_ 1tݱ랐y"}[w"ۥrcݽ8͒i4V)5 +}|ZXו]xr2fcwZ.tq쇔0LMTUD<<eȎ1{"uu: YjuJv䰎ypb9N;|V].}/D=V)Ra2 ̙!4MjZը_~0;\ A{Iը5u`n `GX@K[*tR`0Cjs3^kuδ:k}.{Swdӡ-c4VD2ّ3$Ҳ]ǺYǎ@FhmtֻuutdNSt)n1N}kߦSmH5SۊLm+涾 tm+ٴ_m~G܊ۨP7rCCŇDPE9/^-+wV6Ѯc_7ܻ]Cw5{ڿox['8lQo/|aMSkw%ZtFv6ƪ溚9͌o9Ҝ;X׳khXuiͺf052:o{[`tVڬX[)taK{C҆g_pewza9_l~QvOӧWf߮C dh»5]p]Գ*zs7] ChҶk~+7<9Λ6]4=h>#2I-nM#o{7[n]{mKdWZɟz_ZWmL뱎1jng:-DA1;4Uim;L-`u6g]5ږ%TepzK#'\ *;:hSZ3$>?Yձ/4F+C:}IÙzJ8c1ݙuFtX9m2ԃˈuՠxH_ wS*d.!맟~/L.ܧγBrR^ԫ떯ֲjc-7f6#:o?w4էyU }.g-#2W֦s޾ s[)grɼ8Td." w}tz_2Iitu zp97.8xf N+O;8uR)B[:=ueBru zKhP:)jit2f3#9ء9ٳ4\Qv4Yd:Qa :1cY'ÞCaw +m:4ى= +ng;E4YG1׉(atuhĝ#Vjt}/ +IRXuuV㚎e :o5tC0x) )7B֙;U"Z :NzFOT^PԌ0AS4(ݙ9{蘎+Դt5`khtvt8;5} ,Z' wǥ^6DoHS$OM?#FnN8Pتum/T4I.i[rX!V 4טbeòuc]^_ ,V +rg]\mkkxuLgPJ7O*p_ڽ5I|F/&NyꑤoBSWDAFSx +O!3bR#f*3#!]&==uIqejCyKr{'4!߰zb\dE٬j.! Ay0 'G\!;"j.#Љ&9I7EtLjٱϔ#h:Eweod +j4OŴF(Kr9<+`[bkfZ{S3G.s̝ə7&&?6'beK1ݶFt~-rX-Y|5*rWmCSG 48VݾOD_(+,tsɾP^+X vu[:t=h!ytwe̙Ǭ&Fr >C9iy6̹9Xi֙ -;x+`-'m@pVOR[IӦDCX=%<ʇ(BFh,LG tqtd¶lcՐxv4<>-u)ѝ(ucКJN3CN@9 :ub4(.8A3M'M>Yd:I_G9 X'k4X'Pzub$I4vӽFd'{:ΘoGOAsx( .u/IӠ[n7*IvBӑu(:-:NgA%#d&%5MY6fD S4eGu]yW Pl<\l嚝?X-R{P129 +buiن1nUU \ʹjKL Μvaω𨼔<[<7^>^;|n{U?'p7E{C̟בf9M3 w~/tŞJQWǷ~__RVgVlX\W.?PR߭m +P"k}!'Қt_pOT7@Z.R)nV׆E.'+oydo[n\jK:}ZpE˼Kg|~55ܗ,daW Zgz3sZRwT'tn̲b YPmtΡxbybѲpOM\=xjxkƶ?6}۟}gOꅎyA;y-~:^H.3d7!8u~+\7sAul~ue]}9u(X=U%'_vz2=K,57Xx,0^ɘ%)Ny5c^2ݬd~Kv!( (%xgxS~yu֎M|%.\of&S9Tv"+Uf%S3 ͚Wghͪ{6ށkCÂx\ix̚C=*iaQE1ƬI3:x;d0#C.zҔd,M:Y֢bDz,!h3ܑ#Г,4qU +XǨ! +:B3̺}AvD9:n +9=LǬZHiu)7Yܩ&:-)'YG?:+OT\(gU\c܅N?H_I-\v2:۫gnxn +=VESZ1Qg@jzuhkǩ7W$%u>JsIv<8p]`XL+ LW/t懩M[;NȌRN-$*Q޿w6+ұoa:UsK,X#-X_A?lc2߃ט׻q]L-KngMBm#59/YY6fhY/b ˘.-ABfB'p Ne/tW9f."T|'e;t/(e9 YNnR +7:,wz(I,VᬶޚsXvK񡜗 mI/_[6(quSYeπ˸睝kMpk!aV)kN=;8J&jqOg> ksx +ԯ=5S-QVK+^_rq}uD]7pmv{1qiժcEtXd]L8Nktj ~~UrcZ/=V8 yvA\DhjCJm3E'/+vsq3.7ZM@GnQbr/.IYqddFGϭ/68*;"'?T*1am΄鲨ϧ\%kNe%˳/$˳ײ RMm]teU +ˎkxIC%&,t~pq: :.;u3#M|u*MIٝVԇs<1i: +#Ņ; Nࣱ|"$;rX߁r{4QO۽{k#Mͱo5'MAeC1]65 ::y+[n p45'CKFh2tPbP'gOi` G#qz쬬vc[H$0{fZz^ZܔXԐ֔Gp[Ԁ8n +t^O5%fncAM뙋j-յw)ܕ.4WUx%g/ i=m7M T$475όX?Z,$<ռ|ہSi+㫛k><sE9#-8o&9nGBOsJ| +[z/:y>dn*65_=2+5fZVV9^KV(W.{ciz@e¾CswHәciEC.&re +X`4̻:Sv:s=SNnDќXf0ёu{s=5-kG#5FhW=JsCgN\ֲBZܛ(l= n<3スZas +κH{ fj.tXuGo{#U{>VtxѺxQb:qb:{WqaunQ͕}#I8y *`|)Ċ;Mj!cżIl VBl|<%gg%hԔ7;wf*b_>zKr +*d :hhd'LO<O~_[TPMddEc7w GRsM33ǂИ]8Mvl:CVq n$CXvÿ};tVIa\sEeblt:myh 偉85#F$L݀5+> !z+vut^+kFjQ5OmIxSU?G!p|h:6MgN:ɴtAAbm#L'iMxjdPk$*Z *(w=k :3k֬>9{L7idɺGd4rRiLj:0scC##7l+o~uŧ +kbUUI.Yͭӗw.=uʌTgS>*|&wo.\ymG?y\2k}.zGlCj1ųOB4/ifxa3w^류8v#pƐ/ Tf'?^ =Fʑuh!n7ɭ,5*K.Iv.%9w 0],d868pOj TBar'H2 Q5am:-;;<>:]75*0 M:t99Yӝ">E+u&렘A:`%NNd d c9N` ۃru # ڭT:wM?@gPNX~bϪM;80XGFXhXWb[h:o<td1deJ-bWѓtc9%0ff;^blcgIp>/Z/7t5q1]aS~{O#vN&"ξfBBJ_H9?ܽ7|mG~3<<|MtɳnQUʺUL7\ϖ}C}'Q4W :r%kyүL4!r|~ˡ{#Aǟ'l)>bX-'\%1`ƃo.˯J6=Cn9@ ٯq+VYJNiJNIJNqj%nR9t)Y.<5*V{S!v >?6TG(p5h:Yq4 BVԕdg )f:T2Iֵ[1Xi:Rw(uk{TZaFG댈餇q9g~ ~dd +L!d@YّuМ #٪"?CwU1:| .|u& Qv`IM]nP +@fMNpۦOօOPx`5;YǕA/uf:^!8#p~PpdzC`#tl ׾Y+C4絺 [W7c\V9sebsTt +qsvlHxQb?f흛ɯ|+5Ӕ㫒a:Cv3S[|wo~3\#nn51qYP"Ds&L qGi>ΪysLT3g8b<+F/z6hӔ[xd}@솱a4=3z[yؒd`3ӜeWfÁ6M-";[y͹5 FxQ2?>|W5CG~Mtm.ZD߱D=c*`)'@S.td]'8[EEEq5 +XgPfV۠6ݽ "CNʮzc~ +ymq>XR_RҺ-;nhzNؔ1ޗccvlDE6<]?wKK +bsyk>2Sվ˦E9tf{z=+4 +?gJ1#ۻ^U1Om\n5]ny^ÿ6du% t@-lL闇Im,23%8tYo|+Zu68:y>`n|?U"ճ[Y7twMtsEesܬ) DpBbOy9%)rƭ)QNHlXBT6IZsj`44Ɗ` uiM'AAYt,;SANѬ쎪/605GAFZvhٵ@v08N4Gɡ8?*rH͡߹s'YT:w{chcѦ#N86 gX7_%;KסrDزӏ4GON )FoSΈ\+t"cW',bDDdMMB:Rc} +L0CcY'3XZߜQ..N'|E0]mtk~PTG /_ۜsC4XgsV'q; /uke{}ykݽG ʅ(TNwoc& ϷEnjKrICמu?\Zs+eo.[[X(2naye4_7tiUy՟;?8L;U8g\fD ߡ/1 dZ[٫ٯ;#6R״?mY2ɜHkD케ŵ/@EeXLU2: r39o>="Y;|y@9|?PЅZD} +:M"o{}Ѻ)S6+SάLf|tf aI0jâS2<Bօ6>yNf_e, +}|V:p}&9;F9G/࡬k 2ڃ+CHi܅PdԉF\ pӚH\,4]wE7ܙ +|{ݾY+*fMHQ.jqWYsl+Z]tGm;n`5'Rvtmj{-~)ʥe{#t0F9xK[X$K@98}ɖ U[;zƵS_l}#n 5?ޜş-J]X4-+֪m=q~\D&CEPOΑ}~(;6k 7) 7} +1Y[m}O?(23#aGk.?(rc<'SPZc'hxছG*\aNLS76rQ=$uRSK:Z-.@e:t~':P]Vѝ.C\54C!XuL @'(.NA]g"#Ds:JvQ~ݞ={,֡IeWѸ;퇦C4BeMYѲ/QY* #wxHE%٧B7+7O,Lza̅=rjdD]ќ7&[2o?h/ioXGH#ε^TǹCaua[x?,|#uMv"/AGIc" c'aۺG4 (~ΩhzGFu dG!eGʝPC1f X'1(;f]UU:C:eDE: :DVJ0q.#+NE E#WM#t:^ V9ּ5]7=NN.x=#bdCMNSe~Hġ]zX[ыIvt8b9FvۢMW>=WXWn!^?:xqwF:֎,+=_|ugf8]93]ztaZ9ei>妛4zp_J/'- [+wfWԎJ^r# jάEkUuS{ȇoܖ%.+1RM,FiYb [^uh?CG :Kpk,ɦ +qZyQX2P^;o95f̂8;M:AW[wu?# zanwBܱrMe%;PM Dtl9Ӡ&:Kn:4LwIEGՇ#q1:}RQRTTUjC fTƶ(m^ +4Ť` bp ,y7ywgg^ +_Fgf˲u>P>n (Y͑u=&QYb:;; Ou.'o_FsYǟZ +}8xQǔ AvB'|Ke@jҬ;A'p-#b%/q1dGY&t^':9$XGt,!$,\ykˁ5LU/ @Wj,?Hݻ;k($c X'{11waK~Vb~92o14_":p f΅^s?|\ CY8ˀSlf;pmVôa-3 +|n5 +tjԖTě# 57:pZ;bI)u؀IE9kArt,>SEӸCg˙+F}sAt:t.,!XBv:xY'њsY'w>RP8NpGAs,r:dk:>2Y"$$ȗi"ߜA~ t/,١<Gǝg:4NCN9: ju(Ysq5NpoKyFZD*Lw"JvD̲D75L} q7|U}s^$BF/ݖ d|us(ٍ=^ݓ91xa͎\4gz-1唧,5k9 t3cnǦC_w[dETәb]Usn˽1NbY'dX߾vPTK9ٴ/^_eh$Q 5:F=f,lo}+>z8et:ͺAb{s5gX GߑJWM䝢6ٹ A MNu +hUN'l6鱁9K7L9xqG9iyc?cS W}WK%rXh-Wk<մawjiĥZS31 7Hč҂4t/hzm͎&3ÕtoܪYizhj.trre]mv*DG!Wrg'h~ܻU8-!o%8𾁏$, ќ<:Y|OoN5-_]>D| %;ufPj%fEEf$|Y2kQPrufF.n̘VfvaQbgXL/ٶ㹬cvmZK/;鼬CCΙc^ +TdAǐuЊ2C1"]! :0u[n鶆麻ɺ._xM,AvY;d(?;Yst(ЂrvwZCv;`qǶemWv.;iɺCNt`wtQ)uZvA-Ӭd[u2k1Ì:-0Bic}sNf :-?#,rh:M,Xt|0CqM'K}ޞ +Cwf\pk,jXEui:7"ܬX{w]#e :ԷCiVpvWg~+qDd:S_{όd3yb#8.ݖZem-m[yYw_7NU\g\pEM&m:ΤΤiN3iGQk+`K設QS(Xʈ~Q/J@@O.`{.Kv㙳]{v:G fLr,djLanM}keT5gkwlƽ]JzQMR^b+o+=Za0h-mcc3ͳRmlIv܄ǿ 3;|s74ɏ̗ {YKin˳Z::߬ +Y X?w_Q{'b͂8C[SIf.-$;K{62dW\Dm-&…i:hE U$1@1r*('YU.p!M=W׎?K @3eפ"ǚi#N<)YDd%Av9]t&jTXv&Ѩɺ*d'6`Gyt&t8. +z\svI+{_z;ύu;yIIIQp?k7<"e G#^kHObzƽN9uxa QpgcIʱhuăLi3㬋7T7dnr]G9 Y~}YޠhjA֙\)9f]kx V:'u +T΍w?ͬ-ywf[邯R첊;&5566OO|N7<M#Fd96&ir 6cFbMtt49j>"h|_W^HeyXL[:=ܒ4 3RW[~CUG#Z[#b3^FMg:Tn]]^`xmIkuGй'uBw&Mx=NE&N*Dt\R:;Ndwmmm>YGKIֱ3iQ|lY'eqcc4) @z:QYGĸɎY'eU0먯ÿPN_zYBhN N#*a]/f:lr`I9u"MMgy3hi`YՄ𚢅֥¬Mvi:^XÁ'xD:`:qft$uh4)8X_?tT tO`:uYV?/k;n`S/Rڼ`5`D17m{Oh: IgV0϶T})7 i|sƝ/MhpJF%խ݃أ|V$|{<bqF+H͍w7-hn"5svi/h /"fNb GGn5`r<訏}q7=4҂$%80^z3fSǛ/6_}7}w'>##U mQSǝ5p/ɷ渑 +{uǨ%d:*Pki(q:FƲ,*Q\RRPv&+״pcTԳq%2zDdl@4B!Q`LqNڑ8W頹v4¬CM'YGF8UUU`Nt9UYXpCvЦl:fvKH9n6hW +-МRvxYaW(X%Xs21֙NʎA9jQvSy0EЍ[~0=rܜ471ҞYs3#i}7o;vCS+GG7Ts{{nnVOG*,R3Ӆ65.K m[M(3\L!o5tab ^r5>2:*:3&%,NVca\t^򦽧/wKQCϘG>"Y838z55+f8&?ठQΑuqgGh[.4[@&.<~F_CwiX3҈xM9>$|ΦWQر4@L .:GiăP"jw\|ʊT]|'G5v%EG:DHLa ew:1(Rs4 40dF$(0p֎f:ʡ08Ud~2 v>LL6{VN"Мpo&A:ouY'a q A mB+EͦČ8Y';xX @L'eGc&;zf hvC  g/mؗbݓQΩށq٬5I/֋Z=/~R9LgiO4-5 K͚y.{Kß,Xsj@ئt9tV#Od_<{OwkRlͥڤAڂ7+=ڤ>ǧu+RLIl2Lfdf=Msssߚrr7x^+ul4M# ъÍIKs,ZFS4&9rg/%xȕΞpdvZn@y-`a-cK4܀_il({ڹ%u$k6YѡL'e' Et]NLcuOcҨL:(t:@ѤšDj[3 GF;p nbʑ::Sv555Q6M>X'y"czr4d_MyۑwnKvҖV皈i: m]bcuhkT/Haݠ{Xs΃u<G)'}a:9#ev2gunk<9n_U>7bіAf::sI!V +ͭWm#')d%;EkLϷo_"+ eW-ET35Wʳkn*A ?nVGPU?>2UҟmZVMd' -e%>H0pw4IgNL3L~IR&֜FQA +ҩʡ Hkh@ OQ4S!Z ~À@}nٽȴٽnoyAM$/}Q-z1<!ocF,Ϻ bRŧ8|/&;$tq/M'Sv:mz+r&&1]޶k8bݬ{o{G[J^!&7= xz0Jw9KIQaϾg htqAH%zX_ LGf'ڑ#ђMG=X c:ZUXb]Esٱ;tֵ%>cvQ-i|2E:0aU?ӺDy^sr(?%tF)ēS~шn:CsqmM'5\໔ƃrޑp74x!ɼ}_q{n 7łͳlQ;&D9tnj ͯ eUAZ|K NӄhӺOD1o 55C|oOiUv/ Ω Z}(@tk4"->zI?գh^3,^CIF,//11G$ʾORN;#eԙ)Mnŏ(ΗKʖq\x(Wm ;;.CtݑS]oTl!Nfӹ.gRQ2qgpxF'b<85%}HLnt@O :^n:kCøtIvL LG LQX:t"jQXN5a#@!jN4vwlF;FQ;]dH}n +}> :uXo +F}:Ā@s,;>tUL'Y=ztqAvCiuآ t Scdg玓 4ǠC??nb u!rBXM }w-v|r[{ufqeuvWVl>+U~錬Wڬ 8RV^̺|zo&,z.GFźS9/llvzs0:L7{5>[PEн?(,_ v` +{$q>3L\ +9L)Ι\l-?E?]ezNg6iKsbB +pY(%72RN!C<`Ϝ MhxvU&Xu<cXʎëg[1^F'@K;XMrRv`4k bI"{hIgdqtk!1RMDj.%`pwN6^9+:EpP%"O "Ú|rYD: M\Chsct| dGK60'^nS5W&Pͯ Y}pcGqTn:h]>0K]uZuI[![vԆ7|rL76~岿YL.;;eʺ`8¬Agx'1"rwDo{gS#$p[#5pUnM>@t c76UeI;Q˺RۇL޾?ynI^E4|r9A9r/TgZ}]2Vקgxw+D{bV>ޤSQi金RnU4w[:ii?fWfУsmh=RSL\uSM)q&in <9wup8rEimtq +Wnų;(ZyYS`tqQΐYrIDYva\ͬcM@FwIYǑY'MLXsP/`(8t]N7]cccuiQVjN }\FЁu0XGKP[d ;>[:O9uRvKіE.%CϠ ?4:ctӹPࢁ ǭ :^oUf7::0;^! uMXPG#-ՌtE.{dsms;8䈉 `jc DY^ +ί +WmY=f׮G:Uxfц j4uYPޜVz>~֯?\g,"tV9M׼\5Mt>őg1nT#ށf|5RDoB)Qr<L7ZЏ?g2$kUUaNrU&굲 R) b +Ve?eZY37?e;N_oW]keIjKs7 +wj>/V6|ηfܵ=88}7ʞz\KvE4ǠK8 +Iv*߻yVJ1Xs;9tYG".;hN"U%;|wl:jpH)҂Ӓ NSZr['9b:鎓P߻DoeM'uhx7lkUZ9jp׼XU'шJ9mA FgTIjIxȚ^dC\VPF[N)UcjSu[ E.a"ޘuɘN"pll|1Xw#4ܰyrr.MAJ *OA97 `23Nh3ADu4G@w"qaaH۟:߃t0HsD ԑ@s<ۦø#ю XG#4G >As|FNG:Nzt4:q5y^d:yy/0aq7u%XDz:bP$$YgNNn&Ֆw0ĝ<#wrw~TahwzQs\nӡ~8yattQROl֍ߺ{P.6HpIv^m:4 :@Ik.鲢j/kNMW-?N9n:9^˛t56ؼ潇?鳩}pdkk03>װ(N|97!"b.쏽(;V}x/hךKtPnA6\@g.Vɺ@b](UIt4Ω&&R[s*4ಜȔK/ź5-|ro|C簡kKߝu\ef3mvUbv+ol0XssOsM'm'()&Xv>ܝAlDÄ_Jq:ne@s44~AǦCGu@M*RvdǺ ;9;ֱu[Eilֱ(1p<˃ģfM>|Cv!`—9by0Nw>ܐtUD72Œrt'?X$xYG/dhΎ;.l1,EsvrVQKga`: "薹AgomcaaX7C+^Xkںn講h(Ktee-M;]=L R{ne?MNH)9|k|aK'TF-{߇oX`t~3I˅N=DrXx^۬grM^߾?'^Z6]inuނ3TY2V{dNU'jХLkU(RKʦJjtU2: ̩Q)ԣTqZX=H[.Z]o0`A`/P0pJYG0Z2LZX7Vwؾ7wNㆍ:utKt:Ld;Aʠf֚5'cL9nɇ4`ӱ7xI0j9:AX'MGcIq:KgGz$Nv:m: +kyp8u26fNu5֑5t򚗎;B#A4qǑkY7(r݊2M+x4ed qgh.::; ~7b/VXC.&2)X1md7 G1+lӗ7.T@p­PW6Yxp ++, +Ojƺ|ueu Z.2]痶쿠[⩂($zGt0C\ttw_X9Dj'>ItHYG\upIbt:v+ϸ9nXi:M'?ȡpkn   ֝ttîV|0SQcr#r2~K =zdա7vMG[^Ҟyy\ԅ^.o^EdPɪ- +yer-rD995Wܒ. ݎ;vƝJaq~kfFk:p:}·PW^՜ojBӝ%Xȑ4s'}ufn&(7iǥ*w~Ռ+g8q&0Y|&8I8Mpq&TFg"NW.kyl+^\UnQ5Mf̩zyyc_Q8NY'}gSfpzغVpToO_]g2ʎn +s`M #Yy=AyIݩ$-]L}2&v#Fj8L'}G)4Lt9-ژzh+|7G&N:v^k:?(dވvWߩmuQ.u5a2]r>yخx X0vQG_] ”sߊl Q[Q8~tAsUx 49霽%:Ru=^ - :e887Lmڙt5"XSJi&APRmF"&kDDQ Bڳy$y{|K)فrcjѮs~BYəAA +t #()- +w`:?"L=~2 ݶ`8XatDl"Ni.&e:4"acO@UFB&5dᎽ no%8NJd |Ʃ +/X^Vlؕ"9icօ~+772|7/|o[n###8;/ĺZ]r4%iVfZ<=ziU']Q(4ʾcj>ܣr:sg3os؜fn^dԚWVͳ{je՚Ρ;¾y0亱͖]2zǹPm< ד ]xe~_~>MwmŒ?OP4ME1ݒ)A\VˑoZs<iJsF $wӕd99ji~~撷aߕk@d]4Y'.ؙ +7F1ՖERc 5tJvLN~^Q!N-tv#*wYw4`7gEf߱PS͡GKdhba?f @ QEXƔd.W lX);Mt8Nʎ(G~9`~&"/#_U\mZCGE$$8?:e: +{UɎY'I9hj،zu9RN.'e~i`|+u!.unB1LgXJJ`ֲ?zd.K95.g.խߚ|ǕLe֕NYUvHLGqԜ:l$(2Dd  cC}/`Cd>~d?OM> +. >H.Pq9 LGBaPȰhl֡&}n8YG2Qn +d٬#I!5g&;8sDWɎD6OPt +w +tT㖦 +)PO]);`򳉕8| A/@Qvxw~ 8pɺ,q'Y'wXjrܚqLu4j,F'북ۏQn71?T] tMnl*H<{8CEPz'8yqJC[o&ft0ݲ:Fv|sLQr3]ihA h#mu!Ov;%.\hǎ@獚oLyhrT$Yz0xٸ>V-"Pp,~cz]X'e>ft\SM9Ԯ;x:c.5(ut4~Q}(p'DtR#avnd'YQaLU~lٲYD13$0!9('8&uJvl:);N"o6:e:uqWۏzv ;N~q*Wzi@m<+ӅEN`:MduwͬՖ 8yJڮD57Ăqf$z`dypn '';*izjIT>7uEuTsq"6כ+Z;> W}M')Tz:mJ[aQ.&7ң)F:;2\ҥ>lΚCͿ~&/˿dn [vMtȹ`pɎ}ʣx(0cG>bY'}w8xdH$ujQlӑX7z N)/#Ӝ`$_pLt͠X1x&)Ǹ{䇶V}G}[xMgޟ887 Gi'mӎMDĚ@=5 +T5ڦ6BF&hDxMhP5\e^입y={׳4zjvk{hm/Hvj#jHT9|dea,Ya[gæMq#-{7%bJA%ܲ2+ZuZyRHԍ< +<zJ4gΈ8.MwöE~ل^)F¥#ÃCo76@GsY갚cpdcǷL4֭ȺȥhnW t+°]zd41n=n6օ]d+ek6^Չ遁~/N:Xwֶ×u%wRsb,+3m *nL!|Imu2pR[l_H%8h wWXG?sFM9tviurDl:]SX'eǠ;pXG#(g4eXG>`$8lrqiOr*1ExM%Ísu1[oNu\r]?ͲQdt鬓Qp'AGs;N?[O{>mmٚu .i&f,^b憖 wq:4GALxzN[GO;MmqXnSbqLBJqnUYjlQ.IVm~JGȐ9?5PNmãiheuXʽ///V4Аqݖ(S'W ,Tv,㘀֓4:COGCXeMVLv,joWgːFKZn(Wfqʱ2MVʂjg5]f"89SY\]hyªw.p~M h9}+6$RNV&9%iųYtyZmOY'ý wjh:#8^.Z6@n +ⴄ{rwl:#t4 azH 9E,#YȎLфtòSXwì#MGQNp81Rv8 + :q78EtҎ{!tYS.5GnuМ2nQL\}˷t,;hŽSǬSd_IvXr;1n%§Yu|脟6WWh:6%7 +8y7c:%6ٵ"5'YG|=m_gǂ%?aV<) faY'F)ʻ1b6 :H͢cvʭnR(\=bDAD1gNm-'Fk*8ٌ+XMo4WSAAUeܚ.kimO~뜱Ey&+|8\nYrQ.^%ٕXT6)'aْa7%> KR̤Ga$-^-캳jۇ9ˈ(9,9咃.~c)+Dž⛨1-w+5%hK`ݤL]5||FQח_>/FUF9_ЉJUeo7  ::%,;Lqr +nr L''ۄ(l:]vૉhBhwn:);^2ws2$w`ˎUBcn:f|I8b4 c֑HsF7t9 +I@,G,¬cr\'A οn:\&am.;tI 4'YQYg"dL&.n{?1C'B93*qFӁu2FܾWWbrAg\ I~kџݺ|ct/ͭ `:Mv5gc]MpոR7kM9nVm{.ygfvfFY(,L^}hSmQ `dH +Y/>|C;@[ii28|27^l|'P\].<_?*S  ">Fi{`hǡ3?+WpC4 %.ccKMsA4\.3et5ȪxK%oQM+kv?md]s bP!oN7IOs():9/WXօ׃Yv3*uC&;4u :D4b~Uv6uFW qL걹8UO}t]"0t0C8`:Cv'E$#w`@n%)tOL>֝БYG!;|-l:uYK`DN:߱<=Ʀo/ܰ渠ۛe|uo7H?C<+M?m:#YLj-(xcy)5l`:`ú`S.mе83bVT=}70x#0~L/_;YN=a%\s[Ss@sj)?0ߛ" ۧ z˶ +Ji·xjq ^D<'u;$=-@"򄤧%laW}:MAWpxtgR`>ȶ^6 8qKIss46քF8<Rem47Ag(:N \w_|tаҜ!;qFEUpCoqϖo$-{9՜Mm f"r :tqo=jܭ6=y()DzCaSzN:ً~Xw"_t,;O!u;C/]`kd7dER +Cs4iYG!w:ͺÇupsR:;;lInNY1XaCٲ``嚈q_8?QM70ni׈ G!e'C:;_z``]nMIegN +i:ޓ=Yz޾ꯝd 0?МEt-zʾâmϯnۼԵwYp4Cj\"YOR``xO_C+Z9qǺpysI.\FY7E[>Ps㦋јڶU~80WbJS~=?ΟV4^k*,[;s=}/mlIæ{NfIoeigh;vɖϬNBlYd]ͭ#9%5`]HkܑԘZ.uA]֥7Ψ.tyC]=kîGF5\Ay֡gNdW 58+]uHs;**k9Y3`:gzBQzKt܋H9l{#YǸM'YG0SםrC,``0:$FltI7ŬPAcفudǬ_]#uuP\/o-(p#I١m:N3(gN~Mӑ?"3~&[Q^dh)tV`9rkEn5Hj+rGfs+W_(p#fqPq7(~fCg_W4H\sxqsۚGrKEh:pQP XD7:}6S<66$ÓJAvtr}ϭ9iQ#"XźQM ȃ yh2≠-q2cV 9qa t +h 1 R[q9`:=1ǂ IʹElb:3US䍯#4'}(4{eȥSzS P^sVynfrg`\b0"WH-wf IjNA,q)s9 +}(V"߁Ko++5tzxNwZ|kS# 9p `:",^ꙷag~ps罞3]iF/XN!Ky88i{:6 ;:w]DAǭ&hAњ +w:[vl鸦sɯQ7@ǬCqٍ +ba:.uq|FGΰXFL#aPq#Yran8`]{{d b}4WfYMǬ@ץKA'sYDNo#`ý0WnFnrW!eۡ?^ñ[e&[~$A7!N z]LmG\V#]b.GyE! ЩQ.#=Qӥ,.Rq(#օuAs{0XN~.!z}DJ*.9ada#wk-zS~/3 ̀|yt߀Oiflq խWֆ+nĺ] 9[WW"6m=uӳhSG3Yo'гhRF*>铛p8_͕άju 54Ј6QA-`Љ#{=DsvNXYu۷_s>itzΘdw'I?1&qrV-npeI鞴BuŒԬ@dW0FvoVmr}tS)Y!7mi:GsWN]2cAɬ⊏Ys~G=*O:R>qR]4btVw-w8pon ۏ78;q\/zF5D`;i3o?vRSccU~yg1FqXơwRUչu׷٭Y[8ʧ-V[ ʑҔԖa:5G~K$N$hkJhj.N!8P,{g`gG;d/VkG2VܠٷUCS'MX{?nE! فut5[Y[7:1CoCm9h ıH!AH] +[hEf:;QN:U+"YpsLY'eWUU2fɺ}::{;Fs",\oLm]1X:uutYGBȎ젺a١ 3&81:6=#`lGѝbj_qKِLgm֡떬vfYv_ 6hf˅tX:PO]]dȗu_E"ɺqo !GD|qw#YgN~i::%oQ ֱ.ycbinn6ʒut["XaQ!N~h 2/tD3 :|UWsM¯qd«Xdɷ:t,;;CsŲokt4;.3fki5z}guƆtD#B| +ͅ|}!,)#ӅFӍoc.hι6wCȥ;ʴE`]iH.kޯ[p8(}6ihdB{-gm@zh^۵?UݽFAKRdrSW˕;3d, )e(˦9[9qaeֲO2<<, +)NF:r \&y %gd"yf۰o^4t!֡SO>NwS6k }uȓ'O@C^D|2P=+9K[)/-Xsiٮ㼦_ӂm]z]M4'G6..33dLl݄49iYEyVnnu9>tH +cIܱPo)An-ѠR8I"h}eK̚C|Jɹ?GΠYgU ֑,a'w\j@i:4$U XEDwD9A;c;æ#aF Q=3A3L}-1 I]uc?#<ܴNRNx2[E|M'Ꮟpu6Ԭ=RRӑ@ƾHıeop_w,\4tSab*&o:uKZn+O댊c/V'?:PΫjxh6?t /Q֙sFXn}&+~?urh#cγjt;v4S#g]8t$0~ͭOsRh #_m.,c%Dz]G:[;͟[u[k\Oɢ{g0 1 +tiYߛm5b:wQlL5V$;Eʲ5:;5AM 6qK6!;`B +:R pH1|MwFdЉGuuAѶtt:iOqS@SDL!REo X3BUDFM0( +U""B{EL'9sg/}ڪNQhC$07twlHɚsƺ*g"źF٩Gy/E +\|p`#̠M9.zU|XO8tL b?[ !6 4cͰ>Ms4&) f ٮoSsqFT沼vhV ~0([5"* U&@fj: ʼ@P#:m aLLͥ{Z/p9 %sEv(]Ѿ&[FH, XA\b:QnK ckRFIZynOndfo;aM/bBk}?ܛ8Ai.1ؙ&\s< +X[3wFHM M +}k˔x|gt2|f7.Xv\[&&iͪ3%ѫǵqxi\+(v dM!u8GvsS ]9@@"߭ڶhMkW8iŖjĥ;p㗸tqjq7ח^KΈkh@'}No@e}die@g:FUܭbe@f/\v#M'{hxxS3Ds 1G XCLG4]d!::cӝRLd^/1hftp'c֡+:_~tY^1^#ì3w"z02򁠙HXv\Lʈn$` +ЍT뉎oڕ eWS1_d +#5W#s +r:֎GL9 +Lݿjǡ %9stֹźB2밙n[ZT _֕2Û?Y]n;hcOmq'<8PF֜7r FVZIR믯i>KoL}јX>}^`:R?ؓeE%./N Qs3U,u?[;ãZeznvR%e΃o1 .f%\~aL#8cП8+e['45^{Z_MJs!Ej2K~qZ2;2;a]{EyiӊӥmN:|WHVW7}Hʐ_nVSpGv8%;kxa̛\ =+ߴuoHݠ9G!}':F7_doR\wAg䉑'Wu\<9sUC߯7h.ȶj: +tY)zu^C6(lu>Kj>ёr!Uuw^p%"eG:ԜuRvt "c(ul`:ȴu93kY:)&Fh d񷒲(`?#:yеpq<>M<$ +1Yq!5'Y'L\4bWt8; ;`;ɺ[Cw= 洇VЃMg}(g +~MH}GXӬ7 ӨAk7;`5U3+`]2U)oslf|b7MJsI*gºLc9^bg]@Xyo M_mLXIv%4G?1)ZWپopC۫k6't>u2llSS.Z6%okm.74/96D"nS[4Adi|35gK`t~¹K6:4#[F0tt4.ufUc8{#_v2YǸC'; P:RjcNM/wղaM}bk;|uRtԊ"ClNʮՍd17,;f7GDu0(`XWWWɲCAG5Q:<ݸu&(| wװ4—=4Ǭ QpN6q{֤#c\ NN=0xar@”Zb=pp@|5)Y3u3\tj^=ǖ]W{b;ȖUacfnYB tB#f֕*:K^YZ9>mIf}uxt7rv$eDP.9+"F?ʮ%N(}(ٳCٴ 4hPV\9qy +d|)GVUy}Cs3sm7_߇_u P73Fau:F?m]jz¸=>{8i +hhu^F\9s\ͩ"HsoٟuxQ6l&X04}j8GL'#;[Aj+#RviS8D5]GGF  aUwecCALc֡hii1M'qwPdZYYM6:8c`BGC:Upq/GFcE?_r!Luڟ::T@$R%б%\.UZB∄íЀbF ~_9';ᄏ{NgA#mQpuwAs +լr찺5 :>I:<^\ᑅLēyWs21:;R/.rLǁڦCU-m͹f*hQveU ~^vzؼQ"pta.\sYWbM6jn(Z65vWI$;p$ߕYʡ +N Wm?Yr߹dgM=dTMBe`TM`NΚdMs9_(mjzA]o.񼨄{Ǻq30SES Gc4$?Sx +l&05 `7=6]Kn~b`軰Elr۠M X7IXʙ7] +eO t ou]Ah%(QQ10,}; +yK*( P'^hԇfh5tB-;P"01h(DѦӲ`mdqBΰ YGiʀWs5Y畝^@k:Zvwh!^=ɻܽӲc:;:@&:M98cO57.86|^C9*i\ӑuG`-0mQ +[Xʡ\&ȹⲲ痼r|ScR6y_^]1ӧLb6P Θ_Vܖz1ݰy[~:*deߑOlHUԦFCsE.=ZL7'5zvi(77r?~?CJB&]C3'/۰u;: Bjs$ǽOqFOIg\h8sYt?SSk*0C?Nr칩K\~)%.hOK_ <דn9ySj. +ewr,\ֱ^=N :]dPjI cmQPiFY'cz0N4 ::@ ;WѬӲ{OӲkjj2a:m:sSm:W\ P$uoֹӔӦk a{Y=QvqKːÀ3䣀13OϨX'yE(;4`:һpsΌ}//-UzA/qun }ˆNh|ckkw8޽7h:Dުb2P.=a~zB|8"5w nf瀮HḂXGe>bw7OMdc2ʵ:.56tv^eώ  r?Ewgfl!hZfJ.WslrV+2u}ܷ_ Rkl$2i\qd8s7Ciq<vS+;8!HiyY֜]O4}|%#^*rr.lg)YVh?F;Pej-:QXw*7 à#J4L9 :ַ$AG͡XrSK7uuDsZv(ĝ 鷄qYG։6iAEΰNt9-;fWvb::(uWsLekL +W+;1\ia̛ ǻ˺(cWs.Fi:˓situ)-Ų.t@#X Wo~ojv]^>Ԍt}62]:[k8X77)W|RU]&GϜyYЊtܴtnܥÙa랭}D|y_}RŹ5kRN՜Kgs'4gfнtZ|B6hpűzzZv}Ĺb@@tŰ.ta<:L +eW_8RhDZauu_AMY"Mmk:;*dGiiqܮiMurj5?9NCC p ;k:DN!bNH>{Ϳo~]ܸf__fH9Ga0$Vs+-5jof-]F:v8D76{uFj 1_t3)e [@>P/cXy:/>ݚ<ƺ~MAmruZp|Z04?ԯڸ#(o.yL\:):TeT3śWvzD1Ԝu!þH͜ ;;j}2t4 8+7urClUe3kiiњ0`:RerJΰNBA(zuqsMc_\ֵٯ"7"lȍ0h 15gn(ɦCd@9,( h::3>F>:ģOyh⹲KXLJ1&鰋|#(M0[[۟J9.tasW4Ӓ'3 S-6',(?/mھ-,cyoٱͥQsP &mգer[L+qwr9KUe=1ή}ܙbwڝe ;?J̒,vF.ğ2{Lgץm{lbV:rji^o% Z Mmo~r#_xz^O zowEh݅L 8zOqզhSUF^8鴙iiҦ!3E"0V&B%j[iIcW6m0:R1FhbXg}^0v:~gg:s Ĉ[ =njLu29st:LYUUBs**r+gWغ̘C,D=8nL'\B5ZS:æ.Mg\t֝3:Y #y`ӱV$w!rD?Vu쬬C:%`:f]GGjdk E!Yio_uU>rBz$ppC=kZ-4Cv; +(/WlEd?)?Y;Ǐ #$5<֜uEY/HG}8E֬xcc~Zv]&٭h +L7.u 3 bfn_M|{ +ތ:gO^ӳ0LߑF)@zbc#6Mg!Kn-W4dh5 SPG9+![|#.tΈgPQ7w'3IrLs\q析r/Ʉ^CLg=Vv='\ֿ{A'Wt&m'sL)'A B2Hi'P7.8hN78U$8Gs2;pڿd-9[.S._ns?-WxMP;!φA6i&)κ@3Og ǧ1k!K8Cg/֥y|KsAWWg[F2tr+Is̫MK'ݸ'5ӡbI?]p7rRipmi:PNN5EBXم +:׈:OE4AsT>Rv;t[Lqo>uT$v/u] .ɲ eǸ3ej;3/`ьBr XZbaiI!rY+\>VU%:3,kWq\[YBNu(loFtfL1BɚYw7k|Md8ɮmV&eH[&%yL+rJ[i֖GN>/Tu.mk3O;֦`M֤pi%ӈ5!hG[1BP%RQI ]{Y9瞋igΞ: g~qK6;|Kw]\ʍIs랜悚R\ZVޭ;!FanqeǕu88\0 ; ڠe'}:hut\|1w0k0D;ysgߤDc^s璮v]?x4y&HcdW4V1]R]Yd9K|xx>rڏ[8X$9:wqn͋xWb*'q:@:ז3Qs84ޮ紊074lP?ŒoWm^nAã;$=q>Ɔ}g.x-)'C.j)8:q.17tGM?K+Ԓf8[f*1iP na ڙ^0yz(Zb^,eL!p}Xg?/AvXJyE΋u:>t\lt h 1wp  X6463t>:pIʎB;àzLhNr\Щw"qG:;" 2~%X#L5kN NjNy+ :645å4mt$8θVum~>O^BpU#L>|X@ln ٸC>q%5l::O%:s<.5yU/-r{Xonp{(8Z$әT*Ԉc))feƜinuCǭN]>t_gEj'_єJBW#Z+Bz>tcޠ j!֩oV׶bގ3vzNNY.a]da7OֽY?284]>SA_G~u5brlRNtrDByv7}}VƼ׷scQ +syyq{>fyGΨmaY^0 } ;/f-g}i^y7kɊ`丅0f.$%)qcB8.0iza2]qP#ifq׋^-\Qᳶ} Am ֡}Q\֡b]?};h&NX@sluX~8\MfLi:.Xs:"u 3XG$LǬk@Vmٳgvpʺ:V? +:||G>Nt|qHN΋u|Kq}VD^K:KV I͹qSd侮AgVw(M3 AgY}(n+ q}O?jNP 6AmuF|E9{ Zo ܕŭzRv+XU@ҬS^\]$cNr\*4"yUuG.7Xpl%:W>C"@_B;j_*%蒣X#3܀;8( 즇݌*Մgzx'/}G݋dl|L C/'eǦY'1о~f5XǑC]lل0dG> 3pIII$G,;i:f"AǬ산P@s$>a_Sfyt`f/:ARv86p :6ĕu+/c(Sǖ-A|[-F nHya!(gΟudsug5wȚY'-X9@7aL˰AWX@g9.rfogoxp F2[R3䲕!8Eb#mwC\_9Ӗm`9ˏh)eytţ f]H/~8Eqqkqj4cSNLLMӉ8QhU&*`7S)(;(6 &A+ +}bh">óqLwv}onow&3j v9Q=,&یM<~;gi.V]1{&dW5ܙY@FA/E|o`myR"VbVXs^S 4 ̒1"H=SK[r ݒ{ fdx-@,mҍ?4XE祿r 죊־!TzȨtH9(Y'OSGa%Nz2*uUDX!PR+gL*Tu#0-Rݔr%ӑ d:0HLYWc'VBc^vrUN[)c u`y8 Xs^ςWE:.;\jd%ͨs4að;p'O8N7$',ԧY !{GNClE`dq|6cA+<`}!Νhtxss=S9jQ K>8R%GFq]'^L~r-"L}bq9wit|=&?ٹ%ۋr55m)XMk30]DUt*A*PaZZ*׶mzX;rMҴcۋ_ 樾ӧ .om54t@2/:,fL]1黊+>h+aR.N{Di:,Hq#d8tY;$9a|ހBݍļo%{&/Z=|tcդܛ\˶.Z7.yp'/T7xOU +=h5?AjN:N`i ˀCHvXR +@ 2ᦓY'.At:Buʮ B\CauYw ghgȬ #qqӡOu(Y:n:As"Nd:Uxzˠ<$a/%?Z/]Ŵ4gR.M:~]ǎol= t&LflƧ?TYvy/1ɧRXu{}W7.8͇'@gr,26#!n6 Ms5Yk2N}dU7,Nj7͵:N6 vS΁s{x +_.5r`Y<{͇]N5dg .8fZP[25hEאqL$S }p&͔G^:~"&Ɏsl6CQew'sqȗ6uݼ+><}oՆ i&~1 W޸xckk7wT9`{(9p* x td:%(JQMeG^f^'adY" +x 뚬Ȧ#ɬ>=Qj#ʌl:%eY9㬃?͜fН2sҊuUk sH9ӎS~mw[OwQnQd,dGw8O>w`gJ2u|˦>tpq}㠣wN}GU +(AGg]UC/}.pl;1 4Jx tr]~swz'܍MLt>8r?L2e.mjm. 3Vw ~Q/m1Ygt"rAns1M.6;\݃Q"muP(c_U\ʆpCg{`n,x3)7źtX2Wy}B8t_v*!4yw%@Ґ׷O3£ օ"K5Nr#Ԛ Ӷw%*o092`\yiǯv^-D6>ߘ;nrSΒu7%%4IHp#)0°w37Xkm}^sGwk֮?8yp(ptJAiDuQCɸoE);t ;(q)4A'kQ TrA5˫\*zaaʎ}.;^sa_ϺzRu>QXDRҥKU,s:Y2+\v%%%dj:~٭ QLG}õKCC$4#m9tD9):1wYYhp  5Nùa?1hI%M QNXXG}S+o=b9;2 wu|wBf:ttZ:jr x}Sey8.c57;OTzh,m|Xts $2$^D hج7>孑GR,x+g&3ڞ=}*|+J|:wZ1Jz nPY~j/dg>W)7sѢ3YR._@C8]ޠN?Ⱥ`"@BlW(Q76Viᠻ6Ɯuhlcu7Ԕ%d^Wgc |glQv:0:329NgʎNaQ-:Qv;%6M#HvduC6Y_NAaMG?+7,:cc\HK/HX__ɠtC){;T6th@Rs#᪨[/:2.|IWw»z]%\YVBduYN`:Y@m[@Nskp-9Cxg>A_]灊wc k"Al@[i:AsrW.TYɏ}:ЕUőˏ0 OۇX]mtt 0]I㯛xY'wҺ@{&.=IOJc#Ȏ=:P W()̅u< +߸j~ZҸ$ zu+;pʫ"\zv +9vKc:OtT80]:l޳ϗ[ hһޓ(*ԟE?pmӐpe*W "An:]:Ws)gkẎO ۆ%)z6pH\:q}|"d7;nmA@5P͢ +XMj "-Ub38KOV[Bۢeņ +ct³Ȓ 7|%\5LWToU<G>g9N?PUiEgMQ_-qQ3{-$ĺG 8?БorK0?\MNi?'`}K)S:X+Og(::9y#ެViq˒uh: {{wgYN`)h~4N.!qqaHv{dp۶?)A1td>#wܒA-t.(S.]h:5~ ktr~kCYYK6-_h\Y/޲YovV};N.{3X57ߠˁr*Ok VC!!u\~x@MaMޥЩR|hl9#OV6^g\Ź鮅u5@Wj%qKx8mNFewP8+|ͯTq͋ﯹ}Tt VsWȷZ>Eu$[(^nC".d]Ǹ'7XWzl'ٰӰ!QEYdžGt!XtNS:tz t!w/ *j#^4vu"ںuQ)֩h:Q֡>B#wX\tX)q?L֩[s=\wxڿCVt[RꂮmY倸х+3ichߊl|7+ж 5wd0I‡tFh/C/p_G|[m2m#0֝8/&&]?9Sߧ33w=lﲍ}ˆˆV@\JcƦ2s7u.ruoiԕ]늧cNPn!-'{Cf^Y5`tq-;ŝέ:.[MMaSⅬ-YWg<љ4i[5:cĂU}?F.nnu2 f3zK-FFVa|Y +WiSe'>L&99ܡ~חhu# u&٘k eÍᯯNEoL-z6$Y]h(@'#ކ+ 15P^+e˚kɷgFu"2:| 4W68n7% n鐝.L׳dM~≭Ay.->ul}I;]LtY72*󥱎KtԂt8՜A,1^|eJ9tˮE)IAnsQͅEg`BбKtc6َ)u3 [b% +:4(,YPD;cE+B)t9xqch&zTXg3ӡ` wt;tc Δ03A@#dʅStSu $dL"V6S9ᶴ"%;.PNW[AZEX•K&ΐuI%H9n\%9Ǻwu@k=\pma|Iաh>"|qcAn|KQDZ]O=?͟{; +Π6-L8ykWoXj[`[n3eF˹͇R÷{3W;:W.|x5)wN^m|süNvGhA`xǷFv\'hr%UH8`  .0ݼqVXhmκ5QD@OxwnX5ؒ]_\֭2d]Mqcη;_#\b lWã]6'ja5VJOClo)QBDZ5Y3nWNMwOE(tVMw"`O;w:g:te]t4 +٩:jK4q[]C V.(*jl쬹}5vu]2]{ƊH&W3z99mFf||3|:i&\YOmj$L9c3W֭{l4V~[=3=NFVݥ|>9ugOƍwM]jo&1P@OƬ5c82}׷q}v>tkWsG͂usRkz2]]EG\=onu^x7ߺ*&p.ה>X7#ċw:.Pe1U^;[ĝ}jiS[΅]{c+ˎ'caAa [M &A9*)XF/YDŽc[R';eq#u*;(qP,'*AR_?VWaDmiZ6&M~h?g($jbksaE-JF⍋* B*€/ak;{sTx]{3.oppB(@Y>fy9:IZ|QZv[ɦƑ@clG`alΚȉ|b{mu.W麰Dsz;q7RssomxǕ7evonϬ/Q$"kVKLW\M9Zxa&[8eڂ_yڬ.ʰE[ >s%ֵoo d~ɄCXT2뱱s2CcH4L0Cٕd)9y C4f`:=BY/.=yb:+,;ht +R t I:M*O?MI 6I4:84WƷAܙo<;w3 Wv[ IU:)qRu.:.:K4| ;Xtf]38-;ķk^OteYWtәUV#M9c4^0dxW=xV/Wko]_u:z2f}GF])u_ n{tZe:FXWt3 KSnJ3]k&g] +tt@~4k6?KDr={sp wʎ5_O{֥5)>8ǣ؀O}ǃN_41]Bv%9x47)"-]oAЙS atMVaճΘ\{/1At=Ҧ}uCٖG YYr < As YqFN4dY4g@l̓ߏvd41cxX |f iZ@+AiA;AUS[ݭASئXű5&/T9H sjs~q_ *ƋӃCF3!KG}+uuʁurnCWifqeuwfRd]#RZͳy-צuLW_b%w'\`&-% +}襦?W2 ^iięWa7@ EPyUY'X?(8z֙PvJ 3dГ k?e Z`$ OF>cCaCafQi6:9cN3s5Y'37d"&[qB\3Sڜ }nߕ7xc1ݸAwܸәZ)kbВGo٫6)Zg꫻mzD\=k7||Gϝ(1G؜^}{sCszU\sʦZ\|k˗OhX'k_}gzcW_Xk2e ^4:!][Gs{s%f⑗Sjtaݲ.eceguë 6])ŷ}## CJbu->L5C.='8/>^lqupcOq,; \v3*>@lZ X`@3g`J.8;Jf0%iya;B!d)<(3sֽW1]uY'a[.t`bX׋+:fݦbwu ͺ y'tk׮MgdtDDߡJ|:Ym:)< >ruHt`xnhš3;bd7\ 5]oF ;N"oX -b-ڷŒV\ֵtNMמ쾟W8u O փ3?؎y[o:{t겫eKM._@;M=Ol9.5U|IgQ綷pgktteAӅ׌NSnQ +5u^8uyUCEΫm4fxI󭵯XKn=7:}Ѩ QX'bȺ/Rs1i֡CߕNAm2gc1Ȏ FkN`NWGY0 1jb&RZ\X01Z–uEjh) I%ueHr+@q""%^ʥ23w>s.e囓gwfΜs[úPu.X愈NfNAU!Ud֠;ށ漬CYt(:GTȺ(;ʁuTt[u&CB\ɷC+_l"|6u.d5jyep/ +P=x%k򍦣ADZgt!4wU:K5pFLYǓ\' y)W4ʆ(Wq\:Rǵd@c`g_ύ7Ц35 +>o$T4 \GW~e':Oi/V@WA\ +}B凭˻7gXR-b{\\;|[o24Q~Dh;ZwM7:Cf.úA粮\r~%C^+f,n9wѿ\ݬq?קּAs:wt,>y5'r}GeZs ''YNh.;69`tp?J !Yc>xaa]u4(3C +r, M/04YǼ4!MΰN(gL'ّd{ٜ;VGg݉$|#ĝߚuY zasb :-;,u2;V2=]II5_iʼng|/v w;֯Mv5trM +9ΰ.y8dk^VmxôV鹗啷T*ݺ3c?4mBEvE8z!+?|K7s&\3 h4W.bf65r縚5a]LsyMwft^w>DpduEBzSȈy:+fN?$n+nr-rl3 Ӭ#H&^sx"'?xFo,-غ|eb=)]:81 +Ou [1z tȺnAUMHAy5Ƀ;:-t_LtӬ fLgQ :}g|EqM>v"nR-BЫMĩGqx +x'6o!:@&ůӂӬw; +Ԧk96EdNÀ '9!:m::tBM9=2t:MNjl}uHuNQt}ͱ0ܐ9n:HІ҉5ݾl`:qf:N$М$dmIȺ-itt:::2!б%24qGaEauC޸a:#;NN +WsќDp5N}&d:;7dN<!X F9;~L*j]n@ŒPnqX"QyW}iq])ƚZ| z˴\K[?|\oy)υ=-{YetOMu0A\RS5|s 9,TiyG5eW9ni>])薆YBu%d\r,B ˷]1:;N6:;~SoTut/^L#5YGa uX(N':t؞zjtuxa"g|ca15NxKm՟ͺZA]ìٵ|'q>@xz1?ҕuʦ++(W}d]2zf lzm8}~2R7'l?}8}GG_`xN1}n_k{eMi=BI8kz{;z[ۗMks0/+;ZCcvB#8󉅫78d8= ̅hgޞ*0;eg'ԶC;Ӌvz^ԋU!@tlLI C@*V"$Q +U9$r(DRd=ywXY;v|5^,֛_lawfݬ@/9ٿvAˀ/;t/Xq8ӗ|:'ڊUs1e˷w~cmɚt MVDp;r㫘tv\g;{qa/re\Cag7m6k۽7'b]Uit8e;>B(v~Ȗ]oTjd@WUa]xm⾱:}5;jWXXiOZ-0[|qCg4 /лAK6pjcK=9]Lvٚ:NqE ]~QpdP.8Yq$Q ^2X` a&RΑ݉4C^0cOsOwucu2Sbp̘9/3)֭.-`߿3|:8g[v~0ݴq|-,p[ǁY3rSg,* >>Мv*=9Sf&CsIzQiߞFeN~z]zAM:^ qpAN P.8#b,X@gėvw$NMXqXSKKq$󒤣<ݮ4A|֙(;zb +-:t5*되tv o\NC!C!>Pq +e=w| uv̖ $Ag% ޅ4]w'cAWW7s`T诛S.h:eG(;DGs:l`wa/q]"u|l̖9>N7@ +;I2pwYR:m`X~ǃmk. +k.]S\v6|gyC'STdNtGmKX[WUR[澻# N':{ZkՅE W5ߵfǁ= VNjJGT4}O_dQϗ$>>.\oq[ηތ)B)b8Xc0*tr95G9cOx1)0}P`<)NG e:]֝H8Cs4Xgü:aj:.뀚Qw84gO+u9$Iv #Ⳏqd_A6&;Ը; |w >jnP2T}ˍsr<1wxPI!AC!;%z4:+AƎGeR1ifnx _}pKTZQm.nkuVh˯_:p_WoDvbv7*ҜϬF՟ wܝ+߶ttwեc w Fb~]ƿ&_uMe]nP5;?7" ‡9LsNFoX7oi;鴘vIYvIu0]~cXpYĥSa0;_֩8bh<$ m~Mð9.KceN)!|Iȃa> LgҐupt%e<ai]Q4 +~7%ԽIw}{]t데{;:l3`ftwbXúa:n )'K5hjGs|x}ӡ:c:Ne`eDh +Y؟8o;~(dsf_M⸲55m_QƊ閮/6ih{sN:oɰSY1;|p哭]JpbZ .]-q=ҙsos?kWrG=oZ%Zu\y{\W=/]o/Ⱥ|݌i.]z1P@7PkVXЯXןYͺ5|]uuyF.e7/Y--lj면FvFN[ [;<‘~?\-9_Vь +o AqCCbGAmw"tww큙Y|ȺeYg1i9- 7"\A>R:;6] 낭5[xtdݻq:z!:m:a]^O (; LCQsȦMt:*S:İN[DӁuLe8ΜBsfl9}?"ι̊=o|1x>NGV@eAYgdBz4)P6IX9QN35W|>̺E10놢1uӣ= i[zyu+W13+flvJr\֡Zţ7/]AW8?f45#{byӉ׊U}x.rf"#'oYSkq]iHp6>tWݺg?\J;NT*cig&nE^j+`(8A63 N*::N8N7\#M^)e5\Zt`hȎ^Ь#.01IY'ٙΎ$MdAM722%vf8AmT! ;; qt֭ۖĀ#$f([%:w_entc?hwt^vU<::yrX'):RN P+`m XSYASB^gm:;F[a?& :˺SȺZMoůS.h֙8KV^ u¬3=SkϤM76~1oԍ\e"F*mJkgkL@'{W;zJ}dpKiԬh:N˒py`/ab4gX8w;'~6 Zv@p'YHeEʝar8k*Y4CnC̺an^ʛ.آ|+g滇ihD?ئoWA7PmV퉍;,.\_m4dT9m]լaǁ) /,{;INL+V^wl:_ged=qFsX"P}UYҍ7\ Zgc }Wu͞u9 {tutFv^yl;th<0+}8;N&ιt79UXzM:c8wǒd7{ 밂>: 9Ӳ#rXfDC8"Oz:Y'-q:邬𒶩qMJGn@YG 3@y f37xeGN?}`ΙPcNHૠOh9Y jK_Vu/Y,3.Yټxe2AWFsiM#\sbZq9d,3FRQdp{~>\5b]n^ĺȺ&f/[v5ǵM!r3-OϻF3]o͵u_YI'O8Mm.]7 ?ׅ›N<%Kc*-YAX2]AeY/uj젹IWu=ѭi6d])֙.XȎ&hmD73tCİX:YCЄt9dttTNN:$uwtwo$Ѡn:lIe9@ XMQvu/OfJ}{bV:}n4J :|єƝ-IdljޜzrKHa~dE'Ⱥ*<81aPgSy$yeՕ5V&ۄÜe5WHknX7j p'{Om>v\So&v\q!3̺Nٿu (-shhMG^yW֗úZu?}կ횾xy7+Ė>땘r\ĺJKg컮JKw%B_,msio-um-1մTִl3YGs?72ՍanM7Jr=eɩ;/XjB-_-Hs!ܢ*CvUG31BY +,|77m.>[i:ڔn49]ʺ43ǁDe:t)qGLΐt'NF3$JCy*H +Wt9°0k-;cx/;vN! <ҫB! 񑖝!hӑu(::D(wANIѬjs/Ak0TޔD ᝥUFTΩPs\NXr\$\\rf܊uL!O:t9 LgO4A/ qu{e%a]YtNօۆp_ۑjۗmzf3|'oOʺs״&'O\tޥʆ@s~eJ?'vYgoM4?pOSFӳOLhh5绪@mYM'D~ %NݐB*#V ٝW$Kr\۶K4Aaw@nCٲӠc_b"PXru?l<&Ϳu\^p Gj;_O53,*Zvm:΅~uwu(4$МߊӲ;OQv캣ȕX:ʮ? 5ɗ){|=> s&MahߑueYr{9s><,t](}G[?L" 醃 +}L4ӵP-Ktu+_r.+uukۗv,ɮML1k+u# z6Xgs A.B zύKm][}uӲ Mޜ\PYzVl XTo:nVWՋ䮁ٻwX+GC6WSS}L7p}^.[si niX_ެ'?C("II9//h:{Yٌá֜Lzz+utu6 aíf t:0蹝S+<)A u":$YǀKd"ӠcҳNf!^(Kզ3EK@v=oY{;˻ϽurZJ\u\zb%Iq}h?#|Pce?h8)Ѳӏ*(YLk6*8 +4Di͡ЦC 9ΐݣse]0]nuff ֕q~ٹƞr\#drzi_ڲ259E;rYMZP-9S$./[O?NeLU=qhu}jŷUuPmmZw]8~-)%\ϾGֱ*)S>QsFm#΀tpRҰk3Xlj%eҰΎfMǙ '=.u8'k:l⑝:0GzL(ˆ>\b<4(dqwuyeu݁xhn:NO1poc m:?mED#'N|(D^{eoC4e炸Ӛ\1XG.u4 : =#;ԺnT7CFG_XWҙ`ے٠K7u=;53M!up +]9Nnsg?gxM+kUwa-;7n̓%T'w-t2-/*a._/oȁ"=r KVL]m]Oo-gKs$>n)YW4teبt{l.bg|3mII4+:0 tdm:88uzReYo+7uX9SVMǙVcQ򲎲sNoƵh:TO!CQ> #AP$*.ٹXghD:a;E(B9`hNNL%ʞO!EB@saD^ۄۇZ n.}gf(zq׭:,o.xѠ yLȺD6z6MCs8߽ ~סe5,Z]rqՅgLU]_[^9CѕgHē杺W$ WGE?G]j+ 4lUf=y?1^vZ^ىmiӬsC?1N :8s%ʸ;6 qNٯ*:NHBӾoBgaԎ$P; ui!*i V(QB,C҆P%r+R\g%'7wvv}!ݳGL=LN@kcj4^8euМuxYGi}Jnw4^Qv6XgdfkNN AZ C^N QvY# NʗrL]f;xAe;ʰNCV@qìMdF:sMI::8w+*ƕ֫<ՆuX99g橹.+Je5˺G%VSok싲N,ps'a1\Z]j#:?rM3銠׀u9a_ !;68Apwtɲkd'ͧUXd Zvs ;N3#:h:ZınJ4ui%nK:搃a xլ:McegYv< DtwQv Du1]\79c:+!]yMGiAvFysWoFu+&\ɼS\oY?:o=ub:]-&3Þrݞ[8\)Xzⳬ]'mݪܰ3q(h dLIeKR.OȩɽM3Ψ, V02:X9[23?c"Ν 0l +YVsX{'^f\ʹs)g)w @swͥˆ[H$qC Xǰuw  +;E :NNZ('Y΋;^uHt~c~Y!t:䀀ΕݿQ໶ha\5/| #2DAEnku7o4I&|H9:On<4-}$@Px\ֹ@5gXq?]Brg&,'niчCӗL'&N:M3S&59ͺ8١ʢӲ 鼬P¥SvhIDp";iyCraݮ0!蘝aa\!B9ahNN.+p: rk(Å5If|+oa; I \,7q#Ce><{M' QszhQyuk֜jiaI)gVMejn4R.2-[;ynWvuM~D1ݠjq+֊g/+]S4g 7^q}we dn5Wl~M!r_>ǘ oѓu+&VN*^m>}/Db֪x[*d 7=|K0Qex'dӥbM?V#]L:(u6c::8]VNTB4nuYgza]Pōyo?1]HDN #k9;}$Vڣ0tqӸsM6ͺ [htȦM 눻}Axv40ൢd S*ɬrr o!(OcȻL/I"Ezy0ËCk1 + :칼$΅F;UTiue5,\Y7Ka++m[ɼi5v}Fq}' ͤ{plOxUo8އ}>l @nevsAWXVU8*`*>}`0G( .i޾3X.=2sO-V$\(g8sAguz]uX|ӾFGvyu^k 9 AgdUsx)gXR4} ;z'@j鰑tNXٟ;9Qȉ;Sڥtq# E $mhdC9f +Yh577N)mG ;0]c8فuq$P!vDCitH6hN AdOQ_OVU٠R+eRei'd0˜E%,ʘ C- K4%] 3pw2~o{7.YLCQ#낦? . Lq~:M<$:8gA3ӉhΘz(tu<)ןdMeb;_}jaVLZi.]J'[cy/4o_}8Nq' 7es-}vt0m`㳲@zwK7^=ȑW޽ߙa`-݄!n|[]sYsuɸ~|;3<䥶Ӆ4BG^=ԥ8./YAYhPΘSy|aoi4ǏtM:Yj.:#;4Yw%"iqy v2n\ =X4𬋛F:FٞfdlٲYEN36[a/3@vt^vP*4uu;ӘkLG1tu{N09gujj:˛ݰ}O[쥗\r^\}ҝۿz{ę5X!5/; wmɌm?={f=z 2'5? _Rtye ++8*K\s8^Ӹ"q^sub6]G^COxt_TN䁎Z;9]fuy#"; 4}NX^vyݵne\rݮkI4!+<$e4p0& ;nlȺ$o%ѬC 肬Ct˖-#9X;Rutur3ycq oGԲMKai4@?ز7K@^H9o:UyZkVŎA,蠀xyrrtfF*ЙyfBvRmݼd -WsŷX}91}) <w#ӤtTM>9fˍdo)K!efCr#?߶}݇Inx{txqICbw1ΰNaMZw8:(b\uYN33cK,A\uhh!G{ϞO6u8Բ2< ;crh1AI$!6mDБu·4uݚukUd#"d,[bf +zxyfE :DX!tȮl٫gC'e6cI"LRW"&MYqN|(}IL.Y(V׈t%Uхtd u@BDpj=dݡu#l7L:[vE"3ŻS_%8KtX]iAe`9O.XvÑG+KdWߌmzkw3m2{W^Mfi)%43jt=10T]:_ՃZ u?xtdw\EXı9&\$o=Pv2Cveu:v"(: ;sϺd [!HΦNW =O?vNN؅䂎3gty3$GrMg|E}'1fz-]rMZMe'#MN2b:ΛN6:-YfB{l҇[no/;〲#(2{⎬ۡuMYMimHVN('4֤qYI։^Irjmspzhq 7]u6$|V$I| :YtY4r68aH4hӓL +Y?z!uHnnp;mm{f'}qgz0C3"Nد+3{Zikj/I1oMӦeVlmB"PcEŔEP(" +"^ +K|3g9{aoLywsya] 蟚O޿i_:*Okt^CG{ =[vUszV5Y)^W.'w7-T4b]q)hqQPpžӢ +렶?)7> AGwiBv/gXk(W76a @x +X; yqSqZ.`/&QNl6MLC1 : A &o +:+6'y\BtuYLg[#, +oOY'Co:|{kbQt:z۩uLw0CΎf7 ;n(:*Q= 5Ύ0]:ݕ}V91 +"N}S!^s4堋ݫ%/0u|#M @CFz[PDe;vlTspj;å?3u3[Yᤶ<]SbQ%k?_[M6]?q2dw娳♳@g=ݕP?\_{*]}ʺ⊱nҿ>{jx ^~qU{K,3:?އ?YޞDsY]+늘V +VuЍ/\Wh{jtt}?ĥE]?cfO<ˎpS15Wuv ZqGǩ+_f Nk?pġ(c:L\dMeJ<᢬좬ŽG%4t:hC5(`:˿!|֙  XgS:s1*jU~ȇHIq , 8H%1&1f )C1cn9>s;s>z5:32WUUXG M:ȎMX(MG@Ǭ²sHDΉ|ptVv+Nd:6Nޱڞu\`Gn,ɛYGqb["ƂSޫ ++;f麥9ZDzAr˨xkҪxyHd]0hڽQɛ癎V2Ӭ)^{,E"RX, W6X6~T+x=o.Qdz~};r"j .,j:fLK?RvW7Xǧp'e{Ng&eǔSijFj.(GQ03G$)6xruv!%qeW(yw]#$fy͂Y̷"XaV6nXW{u|;o;vsT &|z?}aE}=|Тa_)SayM7CeS^9u^',\hG_khB@^\"ƏE>b`$e4'Y<=wN".摦9\4([֩O.)1$$dΘț6uJvέ#w6q>S%(x|ɺhɮEE~[ LMPΊOv`e:tY<ٍHm! 4ѿ-<-w}|8b]~SsI9N._~:+oSm^H!IuO툛.כZtnCK[5;y/e7O2NBފ_<|Ϋ~ĹMm&dKxΖ.:h%֥Jt/Yǧ¦`E5 3Xduvʎ'F\$L'YZgT5ϱ8Y&;yg͡Vs{4t0RX'&; +h}d^?@2ܴ3im&[E,(8eЭBCBb]ee%=]~ؤ,;zu8ҫ ?'!۫8Yw:D'MT;9v o+88q8a]NRAǂgYQvD(pʼn8;ѷL'Pu짬+ѓ_1&;-8^K ޟԚfQ+Ns;~\M ekKFqNܛ,b~etn3#gfov +Q{sg/`WŠ> w9opjk@V%+:N +EŦk.mTs-%ZT-솘Qwucu\~ת5{S゜6L?]}e(U& Ⱥ1MGٱ?ʆ{C!?XκaS AⳎM1heut;7XCt`[+IC?,/+Yla:19;b\:8u h @9XӬ( Njwk!twYVŧ N +~32iܽŰN_\FKz kQvA3ŎF!W 傦t3ǗќaD,>4肔3c :0%f]Qst8nLqVvkqUWf:;(\2cW(BiKt/Xg0-_Zۿ!#_}}nqH]GGs|[.Znpw=MpӬdtg#0x?m>/q +k\rXAyt12W_k>"njKj<͹yKR\HOdž + yRaĺB)+~.urӗ3E3.ON%mKq/nj|gzE:3ЦBs,KC19U: 4º`ϟ:ȎYhtuA!Ӿֻ "[v-XBXBЉ0kt)]Asx(Y;~R [lSy|邬 NȎYt1oJ*/Y-w WyK@GC2N]4 qGYc\ :OrͺcC4%6]muǓujLX]3{JqWtc ?w~>%++M3_rBy+{kR.l|cE=:_H{:=Ҳ/߼0h̘t2rEatzXYa/z*;I7_N?wo7ixFnZ[i4 F:XJHX\P܊S_ɝ=Ϗc!㚗;s^1#*3+/#45]JΔF;-AvٱM{F|Tt:?%ޑ8AY{NEٔfZd͡C6]t +^saaLgX$;#vY Q#!H9M!c:fʳ.Y#t`:Y':DjyۤJӁrcN@ΰ:Megú" }4xԍ4afLٳR`wux#PPssLR0q\.t^/tA";Y8i2ʎ)/ieSȬe7& Η`IѰ{;9ul_ŽCcIb*F:w\@108`Ɲ aޢME .::e.08NΰNwmӧmkX/cX'Mu<RMG&O F>>$|%^NNGRImoXn#qf'Ǚ3чLuZvPc7\EԜu#6CVLM-O[:h/G5(5]wʨq ։jfGvo_3r)3|%Ɏ Ng:01Ah:~A!֭[/6YMAGIgh:a[] x5:ߪ :4 +:תYLJnќ(R:~yklRl=G8ΰn054Цc;cZtd>uNi?<9t2{pGw5ae>߲ +5]hΙnIuSpDv>7FΞKҜ3 +: :"֙E}g᜸nK.:_sP,}8q(5G~?Uu]qgB.W`:L!ʹәNyt  +mmmSKIhgMZ( j|$UL9/뮽@~gϞ}qϽg>5<"EaM\*H2SVU;Q-?{}]5Z2UE1|&:5-ZUK.Wwz\ڦ"硹{ALY3BqP5<<~;3QqO]B\8dAv" +tWALqzSV)#dKvuP@@8i:f:~%N?JvGYفut`dQ|tb4be/Z[[N~ٟ LG b90L+t`q&ӷtHٙ-"Rs6d42\[Uּi!5gʎqgeC4j4.}.Y}jY[i:hk/!?׳pݖ&*'%ĩ1LeJ0wMXc@3MwuXs{cl図?Lǚ:>/q|tu󃇊VtV,pSs&4d֐65dgeG)G:W:N VaUrgP-@뾁ڦ/^ò 7K:t%p)G֘2bkbљlOv+CE-nw-m(lEKg:3?{OgitnV7Ku~XIsê7ND*(y}? ދt_oqP}nv9uOWkoTFbK +]Fue(''sK3仼ڵOWbƢZ)g? Yǔб`7>#A' pQLӡ@'`N΄7!]x#MGXgNΪ9n䬲C(E=Ar_3Yw:!3;ȠL')I%,®aq ;:g)"0u :YǾSk5Ȗ 0]kk+ ~t.)!lq_UUW{ +3vC-iH BDfҎy6tBiA:JD*U hBH:{bݵ9Ξ3{nrg>tuJvG/:ǒ#o>LSvQ;c'XdxPsY;^!{p̈́ X'O~6hTQ[ܺmөqwyw~vSO9Ȑoi.Xpɣ9[z.n)(6u5ʥl 4>sjp/CZ<-85btsSߌӫ`1r 渜\ [l3[L{-%Z y;?# vK(\qMNQuμjH+AXQuz9h kL\nGs;/ HGFMEƔ53tt";BX?Tyglv%P4`7'dwǠSm!f#MΓ{Qh~+^UY6Ҷ(:џ '^?N֑0BX!@su6uMG$Xv;|d_]yߏddHQv%GNNENCԏ:9t:;|zuc]4鬃qr!0λB+d $0pB[ Eon[D:M);;KQ6׆w9U 旿TX&u`]m8`H g]?_tQAѧolVھ=9+֩yztXgA1lw%iI~]_o-vs$ʱ 2+Ys9X]y$S.VTed1g'mh![sw,1nDe؇YJJ:q:8L dGÑefcOWD_NNs)?)M'YVPdu~-;^)uXJrYqujbOy$RnDl ɄWC#Yٸ@;\~n㛄rf\\Y3]t<`ǗoęѱX'iO圈ǚj/eXc ~J<#LWjRikl/_&}t뾻j7K|͑"X@Y+!y'^XuNBly―zf/kb51X]tweW#/P!^ф5'ҺFӪ5Ĺ{el:YD2?)4XR.u\Έ+-ȞA6Ixj즸tN.$F{K:Y)q"SVaVbL$w! D fa)(qJLl6YǦGM`:h +Ҝ]I79 ?4NÇܩEʎ@Ǧc> i:y+GDݴ|?}.5a%D6ԜZl7;% ;:to:)tXm:9:ԐspGkv~-4F/_3 dnbG[?j@]wHXjw,utv<҈NzvhǪ9Xsl `3+}5@crI?_|{Jn{6jyyg[_-6rj.RKȎ1X_㹏0X ̝ͭ[1y?[٧ɝum1nYQCe: +6u +T,cօ OQ dXY7(:M VucqqZSM)Q|J뎛زCLd-;Ha]NqMgS#t: 2]gg'4'Y-Wuxu{Damgύ?F?C"MBL'cY'~g6fQPKaN,%;fGNN aQ1:m͹ *元qrD'F\(7=&D93yϱ(BXw/(OCe6TcfmwueQMg$2^޳l?W^\]x1MIMwwɆYϼkcUz1j9\`i͉aJح҇oT(º4f?T kĀAc"źfU.iA<d:\fCuxDiN؈'Y'5z:5:ddCw19)Y9Ys(8v/rڏu0jeoMt:Rʎ#XNJMǠ+Nn QYGEu]]](7eG먐kCkkkScq-Yt4]Sb4!Ne'Yrr'):myßIw]cNo)m/8ĝ|}̉8]6t#J|/wΞ3lAZv-Hy!wMU붮=P⃝:MVCREڪ/#PxU +M4L&X + @0ou4]?6~spvfz$쵽3{>[F^L>2ϯ 敆C7]r\$rpns+׽R~϶7mϗ]j>PG ʉuAuI:c#Ù 9E?^P~_mNxfddT!KdAah'}'2ϲ,dd:4*).g?&Pk ciZS+Yg:zr :+.ȎY'qGt*uXYe:u2`!a5!ܑ|uwl:+uɺnNiai?_Kv2:*8 :i:ğuܥ^{oEnl%t urojӬ'5Ǹci:xnOv $뼂\G;.}rGc2nYͦ:7plj{Gf:\֒ujyіZVԢ3*7iݦF?k;Dbxzd:Avi{3-w7HaXg._SzE"s_}~?PGڮ{|⼥GsŁ<岜@4PNs+k __߻}wwvֱWꏴc bfb]0hǟ9ʢެtPn"ۍwRƝɺ7txbsc@5B RWf:o(ҥ ϔP/MlSVu\s: +;/$";iY#$9ЊT P@4Qh@ǸXv^C1YG*l:WGS{Vֱ4ֱθc1PXYj:.Rӂ; aHQ['wf::Xvqcݤ`Rs8'ti:ܙX5|kG0S4ے6i:t<45ӭB\X%֩Ͼ̷9[2ꩳ'l4:Q v}l-%m,{Gm[Tynú*:g<_ѱ4;~bELWԨ$XpW/XHEZER6r :7d)g:NSވrX!#> ;<]W$ou[3MN3eG-?dYӁu7fqQ':/%:$M9:1hHCaUvt`Њ:Mv˂5dwH"\|uМd4"5:H^wNNoft:wY`:*䶂XgSrcÌ5D2ʤCX=ќ a:xJ~ ˷xjntМƺS9@u:k7oi*e)OIg>1fTG=x81WʍU[22ڨvԶj*92̲n< jĿ쪺9`ha_YGg.í?׼h @gelrp#xvK\O|L + ++hvpۉd{t|LǬ܋uL &z0C9/5`EcVtGT&e*&q,;f:c͡hPZ;QxNG@9>4Ǎ{p'o$:qgwt歎@ +Xap#YgYIYӭ§x9.Ӊ44!|xzC[:yvwߖ=-k5e#{S 2隥Hl#頃blxh?~mUf,L:\C]z!3{Q-ww;{{\=߶8i.HQTf:NQv{3 bz~eD_[rs1X5X({o4k7h\N;8s+3h&EB1E9jFVQ8.td܅p\FNar*+GNhO8ϋuccc((1rKZp0YgIuhúݰL֙ģ[A q&03nGwVֵPә#;:5Q?.II!f$ N#4EY㚛:VӱG3MGL(GEW~ M:MO3o3p7ʻԔnl+^BYg @G‡uMNj]iQ²3AgNL9"5q#83,v8M;L;N;4 DĤ5&NDф8Qۘ$ (ț@{_{ιwwԱ9sw/˾s0}bjnt!3袰ä,rL2bdwv1|}s%b],)ͤ,ͻ~wm4ppo3edep&:ç=xn0ilioL^t4'QĠ0)zs8n5}볖8~e QL7"B9{pGϐ;ӿPy]v?;:c]G1dYx]CvTHӡfatD:X]s(M 篌]^ ySΈ8tF*i݀,\IӖ2xJ,2T}ס_d/cw1.^}cSʒtHXWź``!tqɨkj.6 _ҵᵡ@jAbX/l3q2,ٰP^>2w/:b[myx~K/r=\M}C'.^vA[_s%!ڍe٬ˋr#9%r&l5Gc~돻XBO" 7xφt:(ǑCVG@ىu(qF͛t"M"3C8щl5uMQW/QFKq;N.3NMtT@?BcY΋uH0$ABW"t*QpY1N1)oGN-rM,;M#;/r#t9+\uG1/I.U,dW Q +!owrKvYgT]][z/]oї~뽈̈ԜQvOtnֹViG:>SNETtߪ +oyKs^{d6yR:cɇ[;gܖQVyσGꐤ}ɖ=#dXnެė e0KB1+`a|K"IaF9aTpg%)s}O8ק?B\,ё]71/2o^}o{e+%roLGOwqd厝n8[PNT\C:3buf@idG6C6OP{N]ku3(7EeNJ=$ZJM.yuzK1a :xYٝtv8.: +yyAvu4{ۯeGY׎d)O "FAv Y\~#ALQ@ Av9.>#bd'5G64s;ԼXhY,4uu,5M6"5l2Q7%x7R#P:qiIݱ毴i:.%7heMB٩s9N#^Hq6G3f.vG[WOG(]ǰ -ɦ?*4n$GeӅ6wy%efTm:qऻ|WrIJ¾dGnr=%>{oUaClAbZQ ^Y JA+ +L, 3ٕ=s:ں:q+tzg4hnljt.U)F'9?1ŚNúƓ t)$IkhcZFeuMo6W|'ͼ.ud_љhFkZ Fp +:5=683g+-..y h 5b~?_u!h(e/Es% :A#0SNaC֟;|Zޭ݃NCvC/E<\oJ>ZI}C=xtqɎ0z3uqpP6:*&R/MKvܟ]玝qN')w;A/0¦P倻謣(Hֱq555;ܑ׉,qo +tU>?tg'gEtQ;M1X'q70DuAI]v 5֣] l,m^A HE5XdGdT);-Q#5w +~kzWΙlWtUFeUz7O *BRs8͕GF5'O[B <ӣ46.NyhdaWԢ?K^PRQ,]^_ C:{̩6:kF]r5Se~+I9+Hz&-e]t<h{~?GUqgfV;u:錝vC۱UH!S:%$@4""EZ[Ţck%5Z /@ +b "y )%=oswBt̝sdw9\-LUVYLbWt:]ZkjJ@'wSgzɳG  }vseͨ* +$.3zSX̅|d]z^ղ+u3ʥsB/(Pv~Ϡ }]^}زNn]؛Uckΰ}i/Mn5: `$*u<՚@pm:_ i.8 mn'̔c;۹+W sKɺW~:;{gwֵ\Ҭݝ\:qDi+(miQeĠ'9p#|κr~^5<etNyڳr1bRm2XE`:Sm%*oU -_jĴ.K\qUQ ӹqMm l{} YLﴬ-*bvK`&USy[ة3#,aoSx\є͑i4g^"#ӮOyAYO}qv]{^m`.|ٱc'`ֱcd3iL_vMg|e^(YGb*teJhQvd<E8SDvhhE@@a4/;⮻w(YǏ7D { ;r7%sƘNO :rJ Y' +"500`ڀ +f^&tD6r)ɺ"3K:_JoEo/ /Z٫@[fp'ě^sRK_%L Nv3rQwh%)kߊG|NM_d\qpy _G!_\9-)][~ײ /˗3g)Gܿ/Ns9݃*t;VⲮR.rRrLWa.rYQNur[4t8biΏkTLik#;>~뽅WV<xWOڰrJsf V3P&3y51'NAgxg.<=jLXȊ(Ɛuxoa-~C7!hNҳQI% 7;EpZv4gn7Zy}/NMcH\.ѝ8Yj15bdg~b9=3:uGL>orB\GFv0);_htFv1mJє33>9a6X-JNctgLcLg`@3P|Љ}R(ȺB (;\t:\d1{sYym:_AYoӑG(|֙@sm:t9c:>:FV uX +4p Do&2:9"7C?z qW.:lp7;?_k˾ڮ?8I8{9nJW7κZ˥˟ut;l$ޕ3/%za㧶Y1݌efek\_8w!7=lt \erڏW?K?.+'*7ZB0_cЕ֒˄Mg* Z2qU0=PE_fv>4ݓ["|% `~M_v~r53PH_@-=Cn%t&$^IǙ{g Agg; +64'> 6d7tv;3h))GQZJ&M8՚C"W}a]!jX :,ٳg&}gLl߾=:n۶m[U6M ֽ2? vCQᗃ*o^dgXw0!d/;N<9b*bNqzb2t'֎:;Jد(3 YGTUʇ"Z&`6Hikn@$k51%$:<~3e3sw5Gt1+hɬ7at5YU2mk%wW;a4'/]]S3I(7ei_IFvNj|+|df}ӞEJؼ Ğ}NȾP>!\Uth~y]k~${:[]ra+ҕ U->iڪ.]L{O[ ➅Rckӑ.mn(JHSsJf+t2]ɘlou^n=XDžEkλݺuͽ, FMJ(HǥF񥚒Q3K+jП,P3Esk =L#'㸉Yw 4 Ѭeɉ]rI8;h,ܱ5eCXc ;ݣZqeGߡbfu:4Z"]=6:ӬC&T MgᅦxA11LMNnvX eݖ0d7L2tq$LaΈ::3Oui߁ua(Cֵ;ѠN/2uĝu~D=!;Ongl^ΏŧM%̒֜w4Y\X[Ϣpcsϋul2O5v4W|[\$He(Wأ,W4%?Y·0ͬ=C'/E_vC>ưmm=uLBeweklu(iY: PeE(yAc:4 @m@)^_,IД/塳v:!6!(ֹc.5Yw hi1qAtX#>Le^ͺTqbќ :̚uRl3Ѧ{+?:hnK(iqZvP-~:Ȏ;'EN%53~TWLY}c:N.f^7c)gN +ܘy[ +{:,#0:KsuR% `t4td^uM>+Mv q(=|5FpLom'mn%؀UD'>'6~x)% `~pI 3#z9!Wg6WgX'/-әY,U-OAM,_qm}z*"@WYNW1ъa]q2F+_om(jpvt՛w~w!AbYg@7&ew =~ǡYObSN3-{cihM]kˎ :VcV!tA%:ҠA.HIXDd6ݼ1u{\yqבm*Aګ9:"NHQ,AsdjA@/;bƝ +G5e MۄC(;nN6-I\I,։PNe:;uGYU,فurȅ5qM_~25f΍ApX= +κOr٭{_V.6Ðu墢_:%fqz /ܝzK9; N ȐOxwfLW.M1c5w :0k4uqOZÉaӟ6%d}Z-ғ<iWUbz/XqW/tm]ݿrzc7i2]/LWj藒*݋[v}9]~OΓNh>a]AnVi5CFgG{q'h~XFO!Iv]` XW2rFɨ?VE,$8뽚u.4:FAᥜ1|Re|k,ֱ?aN;hСQvPKѠa+;m:NgDNvJ3-KNsADNc +Nr E@F!뤰Xq':WvhN(#Xgw.(Qv NN YZ< -TzYx-kJ İN :;7E'9uCIStt^g:ҜuQqnq:tsN{qk|ȮsLg9}[2grs%ϼً AD[unKs/yбw^՛DL\yU[򷓃ʺ7oy{/ t,y(n|k=6_\'uo|%T1]*rDkoΌh.$;mlnL6mhs\Żk9+WX +|73\9{fVlXKE =&\й;i:,,M9>&k +.tyӄk'qh h:4id[8Y3N*ZvQtj~Fq]qc5RSU%4R0Zcc EB4EI +8 ؼb Mh³<ãGa1=3̹wƳ뵐B:;^evrC)/tYG9z5Kӱ@i:V);Xp@<& DCUF̺;wuD9z 1r`]-"H=*I3L?b7¬Sdkv\-ŽפVz 7ep@s\{-HvVQL^~8ui?{~<:wX޹q ;5x.Ӭ[aAW;wW;g?otɁ!hydeIcrtڵ`J-QXm7]&̍>Vw#$^xfֲ]95;=c+&TcPo}6%9d1]ʬ +Y7xyiYp Dexe]`·y~b6}GԘu^QnX9E(nXuʵǦ!;)8zw)4('u⛪.I9T`PSS3Y|Qs2`]aXUW߽y MeWJ9ok.q}|+O_h?;w[ڸ5n5Q.ӥq0Qi8. X7]#ouIL{[ov![,l 1Jf}pvگLfuqɷMgNJOUP.=3op/);?YÈMAhr͟^0,GT$ɺFd]s"l%x b0v6/lfwNSKu{tu|r)ENN.WvHLǬ +dǗ2G^q⺥/iNEN]CwIDާC:"v츶G qսu\H_g%:h wW꬛Ĭnq{F* IgwSm1uNG-oZEJMg[tY%:gwXWF'ܴ(V|j?ddqQXVɺTe'\zCRyl:@Pjo&Ua 369QFRsVa:[tR׊u&|iY ՊuXvɺpI֑o.eǚCuRv7yS uV1`[u~p:i:%;`!#9W@LǾSW4$@:6p5[Rjdut:.d=z*pp l:4UijZ-dgGm? 6)yEY 9q~ǩqAW炎꺼_|}۾ό2`_N/[xwh5gwV_[@j.pyČ%/u)|ܲrΊSsb\&fFv)5fd`e]J^ʺبfr/q]0mX==`z5+;>t|(PS'zIY,YQv +u第Jc%YJ&|jMgad( a~TB\;wl=uZgr9$S +$4oSuuxb0A U/r0.E.9/I`yi[N@s*'v ֜ "0&5ca$pnYǦcmwò#mYفuLdU:'|8 :N ;YY:bXdǷ#ՍCy[OQN#AU[0Ú"Aeab⎏+4[:ըI9PE=AN^Ƽbb֜]iEt\ +5%j'-^!Rv8/wAcI)әXW11/06XǵZ5YܼA;(6߆ۍXאNS.{$sW-|*jrz!tĨi8wھmM^ԸſON#% +YpkxĪrxa/-k3O[f|fͻ9'{װJ8EdVN9):'l|Ӳc IXp=&|@z|C0;[:0LqǦXqv5 2bfL7il6[vmt*X #YG١b 64Gwu2R:f(anZY;Y't;ͺv?9;N(Me[vYqrngj$~ߊa:} :GUlbj$5C\VsºTwi.]2'넄SXQ1tp'3qGiفuB9T:wh!ŢLg%`^NG +8<);N{|˅|)7oM734dKb0l]wFNb}^ŧ]W_zmم5Qe]AMwx|9Y7`֓G'f5 + 1h}G~n13@YZhK4@gP5Jn:s37#褶As +:(Qvf'$r<#` ǐthrqGL!:! +|Glgf1Cua::;jhkii%Ԝ64ep;;> +50b@q[vRdt4 i٬K#E(P;Yg :m_ n nn¦ƱatYlwdԴ"7t6nrhD.?ӕ#{8ˎIͩM?O+xþL|cgK~jV!ˮ+#QC^M{CHpWRUyE^g?¬vu[$,-LbatOvA]7ǭ;J&+~lȮ ns- +8 tXt^Viw\YMa9o3ؚMݾ荛2Ye8YI9ePs{9qr㚷>ַ۳"(cf +Xj8rX!!gP$' 1' M=|]8;Z8!lᜲuԑvd]N~5uRI(;vli:PuA9Y'n@f{DbX ѦCmI Ia]? 1LY򱟄ܜجht2ǘNrYǫLGJ}Qs>%[e+NwNqB!Ҹ =5n=VX iu""_]ѶCϾ"JOYGUtLǑ(54kMJ&5x׏~F7DkɂfZ6s7w Ӏ[ubƴO9YqE]݈>'>/ }yByo<>{Ӧ?>.t3 +PUȃu(S##^mATMzڷ8}Ȯ7Íۈ.gˎn=kYc3J{#dV:}ؘgyx-;2r3XgN5]6`qzQ obsOsg7Agaa/JsF{0Q45@Fh|t@ NiIV/Wbݑ uwu,4 +uB uZsn+ (u0HA1윬-AO AȺsN;IG ;tPpv!0tN`eKC`SEkmS(_OQW.DSt6i~i4ӀeAh!6MZё*o%$hQ ((HT{8{\.,&Ι;>.bFvƃPl}.Gsdn:;:rˮiBTer9U]$AO\lF3'ºfV@?7Uj}eNWU2b"$J0Yup' j2n?eKvFĭz}0YsGZ/>@3iR/`=G?;2~g3x~QTcN7X^ }Sf͍1Lә +\4p +}h:sR[~(gV.nlnj9z]z{{oܹv?W?9̼٫,۰;75m]V{fbBn:ͺ^ɄuU|gzrx*z^ +ie +q4:qpᔣt4ts##t*Xu?S1ʼ5Fg;tp@jX A4FN0 : +)㲫waݻQv:Ν;E +jr̎ncCUκvGY?PiXC類 ]=GUk_RPsgXpGm)Gqt zBh\39h9Us2-ɺ4O֜(YZ-n":>%:r拕r>`2? +XqǕrʉZ}ߣGɃp4\k`4??Z zT<s,en{NJȷ*qwฌkik(رGSaVjeZo7iŎ>-޺Z]ȅo RZi|SM)~"wɤ˞/b/"gfٚnUU9mqmmvLN*!;G~`EYG28§/8QˎLqdk*4"}'X0q6XG8$s`Sp(\st*\vUaӤAShA5440jˎ:;"@`}\v;ʮMd::qїΣ k,pᅆW~ +:$ܡn$i۬r>!t.Û6xf slJsU3F]@Ar8wUNKo$gfubb*=7j4Z4WLoOtuFV\_أ$bJs#d70Z WnMNK__9|_>ygwGNW:x 8sC +Gy*\OhVZ8M'϶wݚvh2ݔFIօDhUd(m26E>@BypX>6zx#XҜ`> ӨuL7qjPmOXGqg7݈cua/F5qubɐH, qBn::%ЉMeG*κ*\d:d5&qّ}uHh:#Lpܽ!فwZ:0ݎ;Л:>P%CA#|vؓ'A'L ~yYG7]T_˱:FzjUlцm%I{N<{8L9rBnրźLs`Qn LWǟֵ7qYcC u'ͭ ,)֕ +tc|3E6mJDwUJQpR醫+=WAg6Wj# B;_amŚN .MB(-{ar\*4 +b١4` t S`ꡔMºEa'ǚ#N)"ې!ڍLGWb'L'X]v8;x98:2mOt:(G>XiS̟W;L4< ,0؟MGC١5H !!OH+$c,tt7Pq#5MWAUYS /Wxh[G tpjbExY9 *BsXb~HjS~)+ .:4p%xrp4iN]Zel:\('@GtqN{hX+]e:VfZW͙A͚Y+*2fUlj<ׯf{jMȿ*\˃BP+ +pV?JgU)Wonju{{-ߔƗV,[VgC~cǒ&ˣ+;δsNLlМd +%[!\H),йK׵E8G2)ubJk} ^.\:iuK<:+g^iI2Wx֎uhv=??0+ZiеնA7 e57YsrC=dyCyY8[Lee%Y5f%inQˎSׯ~o4{s2qY3¦tќa]|p抗/_rco>3eofOK9M6ay,q6t.G}<8ZlۖAE9]Ys]yMNJEtxA7hkצy /at7T8MYRv^ :9/4䂾\ͅt;74j53Xu:SRwPv BNMy}*w!튳Sc2/`:D܀u2 @du-4-uMIȗ/#d=0=&gw\ӅXe'3(PN/RNx'a-FX`q󮄌*I㻄X{AqAq7|OMfY76:tӕ}k)-1jyۆ/?Vw=/G>Dp)ŪGuK{,YKVop]RÏk7[lz֌ 3Yd"&1]޷g/]7?O=<>Ӱvms=3 + M zޖܜ7ዃ7$j%՚BPppYW鸔鵎+;u7᝞vzAi OQB{c- %?o(6˔h4.EW}ܯ +Ϊ6Lf3/>ט΀nZu uΌz9x΄uߝٴaס`J^W8j.u1}8WitZsr>uPDZkQvn:x4*dqISΪ}cm @n %l/u(;$Mk:b+ӾGe5GӁu];Hމ!8hb.$;h.%ষUv@9-Nm:";tb=]GGB9e]{{:k&qGБuɦ+uwuy@i!%NЅXg@s}*r _;k`\Y5.t8N\To\9[;7Bms}՘n)A7ʦi99S뺎̆/xOVZ3h$Ykg:uf{םߎP#=x Jӣ|G^ڼw;'G곎Hz-.<2>rgL.b]HvͅinK?nu23W;?h:/R-tWs!i u^%bׁ8^YqL7Ӱc{H~LҬC3FeWv.ܦQKj3)GxMgNw9nٽKox :`mc5X'se Xftu9݆̔8 kkk2AM; n84%; Nf÷|<|lBe^%NN:+) Nw?8flLzօ7qy}GyeYgܵY3zOZ[N4|,Y >0MBYAbf<DZp'3مX9%`:-;;m:WvGUxJBӲg +Levm*[nXl6Ltl4X' ^5g#E^ٹK:8Có N@'Xk: ^ + _7^]RB$C_ne'\ZlZsVJa-֊>\ƭ=qS셙O5`G=zǘ:$jRTUBO ?`P"c a6IC")€ Uyl2P(B1 `).1Mwsٝ9s>FFtӥ$;Fg.]9{SWeP: +b}7'XS< <;]Mtvue]TUR{NxvD]E"+l+L۫E߼(~`b^ |ϲH!q`?1RZ`IntoicTLú|Y8ki]r*7)e:Q9/Ɉ `MOw*Ӆ4dup#$g^X(/&YeHQ눙H-۔'6e:?)ӡ% 6XG<|Q;uDxdu,;r:Ɲu鑬aII֑w9ɺfureỴ:4>:|[XYgʎ)a!(,Ǭ ]u7#o@= kY'g}ddE^ (tXxnrSWe;Qu˧@#[>u-6RЍ*QcLkӱ뎉nwdLX'MG L:9X'MsN|C_A~5up$du[tQÿD.j:S3M@佣dǷM1MqXs6ڴj.@v?[ܡ^SxB\Q5+<}Sp: .5]0`Y=p+}&:"¯Fω|eDN^iYg5X]+cq0bʎnC+p;[w9( a@gB(Yt&$LߩB6&taX(rzxӅlkh/5敭;cyaR.<#{`oKp۰T ;p';?OO]$. QcP`w"5rDKw9r ]w (q斶_eQ.4Wȵ]"+荓Kk7i7v"uf.‡Մ]+ߑ7kYd"'IHkgW;˱zK +n)EUl9ӝ9i鏗cm_&#Z6$kC Rj6QzܒdݝHj8(ܵ*)ǩ(ǩpS !;ou0XG3KATz.rBYG NʎB#:YYwLGCoʎL4u9XNdwVoA_NYǿ;SvL)ٙc:L]F;qu$Lߩ +pOL9VSJ#u 5PAH3C+et+fCG֎SmpW3X7GSoYiaXg73ܕz큓$p1d R;:WJ.2.x*{U*Қ]|ciζhq]k4D0RÈTNY_ύse:?:PurG~lݤs:pUn/IJg~x5HwL\䮝ӽ=WJWT}𗎋W>ARSk$SSKOmQc#aqX0hS>L.L'tX'SM?֩p/IJ3:,Ѐe:^t td;L1jU@s2VㄑB"ch4嘗C9i:ȑ#$8Rvd:tttuhiiQ% I`IAsuw49eL"a.< u|Zz20t~=>pPS*6u,;PpY9eEeم WoYw!MGp=˷}y:-ξc3M`.>@WOVNKlGg=pwʭ{'ϫΩsLW?<Ň9;GU&nVg.]>;?7+JJ*쪼 +tQwC(|;Yuz٣g_YEtEМ\XP"l[#4{zuo +kIIķA nl\|Ś"`s-1Iu4M9d, +a4UYWRs :1|LXs #vD$h px:t`i:fn ttRv0v'o뚛1$H +wKN~sA? +pB5MOΊFD::w-N줬LQh4KvŎ#WH`jdqKTg7C扚Ҝ +$e]-*ZUkUd|MUJu&⬣mJ2n-ot-X9)[ow ϫɲLgɎtǘXlY$\&[Rֹ/usù[Rۉ }DQ|Ԭ=\r~q7a],s=MeƯ.=VvG+p +g9ΤmYLX˖,KsS'唿= (VCwL⥔MpŠt&ADž;ܑe!e]1KtBn.)\'WF#IAǃ&Xw!1rєfT:3`c:f]s6M֡]t,o1t :rH$8HI(t\sLǬ3emKvFw0]V'Om|l:%$/Ad'q')pe$O-.Xs|*EIu;15+N]u0x:OT!M'vCB7vgF(OOz5dt4&;zjӾӟ^æsa:wu.b]x^CoܾM5r79"iC#'4lde,kQq>=rxk Vu2hX[bOWd'O; =>u㩺:{[MgamMɺ䔣yyR5!HzZ~ }!{M=ko/jȢ*wI)N_&֜r*h.]?V_(zczuwk4Ϊx;/y oixmYBv2,ĕMopsy+7.ش魖wx*ŕi.ZQZ,"}+3q!y暎SA[M㩚ΕuRvjtaʹ L]:M 5\J O&ϙ\ N;lX 4HN?P,C s mXkX'MǬ#IّXv{#Yǁ:;>k=#sIQLqJө0Gąi:U3egj>xLcIte̗c'hVyͺN:NN66 U#~;{GvQ%QCG:܀ڎw}ن좺BuE +"`UVIB_ +Uih.e_޸}uf#֒= |rqׁ.rk3Cj{D KfVhWHڶgFͷOsghxݛ{Z@dnm%$M\_,- .QXyA9?omT-R?T%)-%Y1)@)%j+ol +yvΜ{gvnA՝ٝ=F+UwУ'N}k6-7:qɸhO_5^~gEu-oXbWm{WB}6]l:q\Qasy1K<:8n@mɸ΋;7qtę\ٱg[.9tu]Qֹ;eMI'hœew$aht^Qis"DˎaԬ tHqӑule'se> d'ǓAoN./\2ih阃V\) -L>yWf՜fL4ɦC`:\Бu&`]rA`UM9IW*1,w^ʙ j)'(EAgXgbFtʒ>yr@js +d։o,9R9}R繋.pIN^>wG?*LJvw}XXGq=u^%'tCL":M`曻6 unefVqbR=*rꚮ$>0Qd[Rs./1qAgN;uwǃhqy tu&CgqgX=a)mU!m:NFú*֭X&)!4TeWƥEQ_Aڝ?qgYK\ *'TMʹ_Lw> aJ2ճ8tGc J ˑ:5 eh.AyJ}Ƙu^!wDrNmHL^"︺9p;:?o M3]s:j. t/qa;dI:w-|lS֥[Q;3ȉjsa}g#rofjrr".\GW'} =ɣ9jU1W>6%2e]ӎ-oEtp# 0zvqv,l)Y4+thW̄]tŹf&LG1.DcdV6u1A/I'~9'Lh:iMqBH`avxYGӑKYGӁuAgX.Y'3[F>$>cmqqDN_d-;I 卖Q#cX +IG8wZv:auFv&Fv,)fšjN)+]>8VEVQj2b%2!%c:w]o:)YWxso]sY-\vrK5C rQӦmm?z.qʺB`ݺсcӗ;$!۬nM8!GY'b^3~,_پنbQQ^%F("s`qL]wJٿH 8#*$R=ѯƔAS.*:%j6Yzw^lt^!l ҘTiʹѦC®Q=NUЛO+:v}E4NR<͙0_$ư135Yǖ[&'7ék:ΘNNq Mg@YǴE[%ud ^ֵLFnSnC:dmn +CIvűw!uwZv0 !i4 a!קвӿ!u]QAvwp'n92 N;M1d$Lu-ZYMײ\NϹ}hzGF׵ί4?]]JMuLpn:4U?7{[v~Y73yYg/.sK'fU?]˺L*ż418"kFdWx;wxrH +GM=#GM}@BO&xbR[k]vL{$oBVq/U !LVܫpKKv^Ża)煞1֜ݍ+; u? +^2 GM9wrY5ǖr4 A(G40WLLskX~ :Et'UrKؐ/lf@ʢ #Wvt XGtt2֭W!\Ӧ3TM:\\1zzRvvM=, eg4Gй;<~5dGCu$|LJed}g +(׭B͙pр(B͡T%7Nsz:;ᘰq??=_*X'k 5hfᲮ\tgg'+ZzndQNS@myem4)u9 t3#GBjXg%춣OO[Ř>Ni~L]mmgɣm+#x9UOW2Deq/n(sMNS΀z4b( ]ɸi߹4܆Mw4\2(;;-t:7Zv m47֬ӸDZR: +8xAưN5xYDT6˺lS0.:L4$%nu1^ɩr= 9Nˎ8ӑu8G 0T[>ƐwgT3'ɬ# +@СPr]C$!R8q(\ ^҈#R%دz ~{ʼѓyw®8ā.oj.{"7 4͆ºd} b#ĺ!u^%5RnpcgLyAciX1\ӝ%%tYP#z{M9ε44 8hyYh + ;Nde>֭ BgQmU Y'6d::}J} 8hgcC'sf~'O6c>㓟~hMw?!n b "F1ZfYWqWF_OypkG.]tEv[}s!Ɉ}Bz +dXXշզgtVI<Φகt@\h.-aAfdu>x'2 +}|+[huiatG"Fo̊֜a P$$hDّAvwf:jӚcMIM1Yg 4nll!։zVl_'zyzUz +n]uOwtL-ҵeֲu>ja2!2#Ќ>qV摝yV|!= e΀N/NwJγ1A1W1ͧN);N.u.Мf@cuYZWUt(# Nf~hgN$FGGu2VٕۑİnМ7h:Xyjwt9YRY4* n!c:7$AǘY斳cq2=tMۂ%6AܱܐCr۬lI9_dlz7#DoV +OG^|?o[_MWgnkѐf])ס7p߽ >$oǒl?:R^yڶ#2G AgG ('E9XrۚM]T?Tԭ^61[_W5חŷdt۫8}6_Mdͳ n8~O zkM'_-1J,$51Oy4_:^sL 63hq6Ru҉쉗:ԧCӱLN94hbMs4bzwU9:FZsEg_DݘJu:/yú !u{u8;Y7g{8d@uN_)?OkIfeǷT'h:}H E:}+ցr~Uv$iu;U:Gp`<nn9AYg/{1g4w=`] 7~$=g6ܟ^viq껺9wxߙ_6 & +:xyk١fћWAGa呝,8Mm]"uͪqn1]mεB\[>{VO;6EPqnn[>GʅLG̀+CT'? B_a +=* G)Foix(u'F_o~c1L;0i \s:]p1u%?2eT9qnuY>aaͣ<9iN/JwVuʼn9`݉$RgΰδtlwulXǞY.?<::8A!AӁuHtMGWel}4 *]6-f|wX| ?|hA fCqϐ~9yjӥ.t ?X: :#;M]4Cp~kmhG>#4҄䠻rҞWһ)ĺuMn]LNN@Wa{QѝOov'w#N)+F@QY6]Ⱥ޿wߖ~݉o7SX[XU豚Ha]aY̥Jo!QJ-+;:WtL6(~_6v3RKwϔrt֥E%+i:}nՎY,^M'}-.!PqtutL{wtMgXked 6i󿒘Ӧ#I:ug-;Mo:%c:>$Ye'cvga&y*xuuԜ62DNN.?'CvM'fq!c ME'S464κ|7%oY^vz3r Nx8car>Xѧ>GβO=畯r=RY*Q+[),h.Y\s=\5cN2tR""d)1V9r-AWҎQ/G7\|uo}2 +¦Kg]J\T^9<.7i_(2`ŎZKLgX_mUҞmus1\(vаOyЙ#ǴA?q;4͡= @"uxMγg#S. geǝgf]0 Nh.CvUޓxZvƂAqhtf4YegX'`%/;h.[vu8]vy ;ͺI `:npp% Z?::$kufuY +"o9pe.uqu9YQu9)Ωd^v}&;N#?9rЍ?lu5\FWs7 wrR6h9)'cm 4@Qy<_?RUgef16Ɣ_k׶+,քewYvoMlk*VijY!"Z;EpVDA)[w~sν3;;!f99عs9ϧq͵t0fʷ#M%&KNy6t1l[dr|yqw7uvx7J9}2ZxeɄHm2Ý^Ew3 %3ywtD\5p6 wLܾOǕN +.YW$;R'L;4W!>%4b%;%4]T)лn,>+w,{Ҽ.qSξP:~`>$|hPsN cQrCiűͨ+Y:j1qcQ鑎묬5k:8 +r:7aWa pQ4ݧ8̎>VIͭ)HӲSɨ.懲-=DYh^vOn{L5WM4g7npmnEÂ7fdA47 SŁdtKɵž}g]he]/>;7Ϥ뛆rɤdgG]N/\摽>TsiWd"ފD7\eڙo˚]YN=4dҏ/p;c\*(3NS9qSٱjhGcqm|wͲeK}.>|Ш3h :`d+bw;:8B:ʮu۷o#Nm Xe˖PvEt8t:/Կ|[wg;Nq?V#o@W Yᙱ#Y碬ÄcۺCi:;,eݱ,c~ʺwT TWOX|0qS)\1uVKĝآ>GyN4e:{v ]~jxjo2Rӭ*`rד86`{ΖCۏ1sK3]*8.ڔq J:"\)B zʕ)=C?~xH?f<7?8&XZ^]hd&pWF_ttԈw뽏ٿ__Ykb63gTJx}ITdoHTaZ!\^ dΝ;;St4BiB֍٘FMu#L"F}WЕ|Y?>9 ,6ȨpjJXwmoVYN+K}JB9բ+_ʺ YNqk"8ot2̹mOmꖻ:{פ#]Mv-g]dg\׷]{]4_ v}u5 :+M .tt0]s&c`^ wkvq/o/﴿ao5U FuXhWٸmݓ-h.E&u;m«1|hӓLLoQN}nnΉ;tCq]G YנB)>^CƏh<U:ƺ_tuvct:sk]NӡV@ +C(8S:hQQv#`:GC]t8tL]Av臥좬ۓ7u]TvMSօeOΙNY'9'S:RNq4GiࢲhQqݎbAkwZ<+]:w5]z`2=鞥V{_zU՞nw΀o15nDstp۷? /7鯖jÕ7:{VVn\ijDyC5-n h&M-3~hbZ,e3;NuȳyOgnQ-$:@g#7ß|6|@sB.t1麫ZEu\J.uLdWĺLۭF&pqXL)g&lNd {tiC#檹;{Z9|0Qم]7q<);:6d!Ύ嬳 @QuQed![%gKC߁uNv`CLvf:ݮ4!,QƆwv7:~Mi)h#H9jTv q.uY7dOY +X8QR05ѺR戇zUH̨brMa +>|XGfA撉lj^".]2i@;tqһZ L)ٮ{=Õ+SS)Z)MlZ̓iEM7PyG'܍=wag<"? cZ<ϺtQew}kWmGCͥ•vf":^bXTڐr:QuEd +ҴS9Lttӹ ڙNY+hu0c]#Sӡ*Y ,eq;=jt:'C( WֱE|eeЩ:Yc` +`a0 YbQȺQ֙JXgSmٲEAlXqFcݟ$44:C~ؗ>81{7R:BmC1p'3]twLCu@\wY P%uZ:X^u? *d9kM=W'̂BZuEaIg%ǜ M&vI}ǝtJxb{wu{} ִDsWl'2vi9rU7;As\fd:<0]6RL+ w+ sKߛd>9y5Uә* wؤ+g%׵eW~-sL3tf\j|qR^Bge8f!U]p{u[3]4g)g&lBf:@h̉X>Y>q :-H05dǸnٚje@4䖨:Nw›u*;JYH"֙}vٙ`:ۚVBqBmڴIY7FAtE۝ƙm!lýM\ t.dž>K sO#x•xNvtuM!Ԝ*OdYǂc> Xb¥딤i +˩R.Z:N'tcQz#V6p>?Ol{;L*Ϻ6p{݅Cβk~>WU]agܛL_f:vƑN?8i; & mbKk IX˴TNb ț"oBPS%$ us:k}%7]wjњaEC0"E!"a<{Z[s侱d:Ж7ܠK)TC3(ܺbi%>F(/!3:8Xo8 ֡m X5I,ebF CN7& ѦӬ;$uѓK!]zc:ʎ ?e'5eG)Pvd5`Bٽh>t^5$:ټy3L'5lCIzzzn;I ;/s 4ǿuGw4?\a;tdYg@YNI?wyԬë)O:z :#;l8z DeR/5'+:j:Ec=~)ryxx89g>-_]4QΌH^q-s~7 Yό4Q]&<+MW[ܼ#uKsNDz[%h)_b|qSgRDt%Z/Nq͖c.#;zf]#D֔~t:1B NBH[tT5gr)tjxY݅SeBC:-;Uu $l˩9:ʎ 4sut9Y7qM! ӦsYt2ѬӠG)^:Wvhwqskr* +}!rt0g4Gyv sMlB A Rp1ؔ+NJa:Re֜n\6$\ыFj#p1<9E93x?v;+`]i9$>f]]u:]םi?Lf[ix9Eēk(WeNXl\ZF[Mc$himlrӲz+~9Mo}+MW3+DhܥM>wd0~k3hLSeyVVھW2'ef` +95\܍E#@(m_#c\ɪ "ݒmQR4뾥(][:X@cAk:ֲsY>Pvفrwb:9:#;\_ IzhiyYfm::tf5(;ItǬek:}yeu:eqe7}`8&A;8nP̕p֧kί֕5\Mm$I4d`c]t{/oMBp\ j kw?y/-\RGs8/29M8+:f3nniuD?|C>zkc]/oct%Ep+$v+a]hXRhX򽶕v32ǫfRK|}te<-;w+U=6Op1X"?n_v,'ޘ/F|7ur6hKP[9ݥQэ {t "^gÊ^7CMt$MT:^yq:2K7nLWu$#NYtDu`^ٝ$:Yz:%Ѳ͡؜˺$udݺ$fޑd_:x!LOtuGzty^NaM߇eMtFvx"% :-lӁu|G޻!h1٬e'Fk%jǙtB.mvlKO.ouΜ X֮]M7EɊa+;G0/|83;5='FnS*3oc^.3sVú *uzC:oքMֻ}O\h ]v t:%\ ڰk֯;bLqykt(L.< + \%r\2JOdxttU#յ %EkXR3[|ZSބYW~٢E[/o8aj>I5rS}^[{4ʴl 2U:m7HֹOlUwtr~{*x Y LoV aeqPN&ueAGֱfk~[W1:OB!T*`Ν;߈cX'ü-V5]_ú^uZv٣{٫bXgLgdw0fdG1ϔ: 嗝':sKpЬ%:oʜut(BJk_n7 q&ްw(r +=2'jXy+]ɢWVuWC7?7 Fv["+/Bd겮nMW>ŬjZǞ?G?vvWFh h#tw h ζ5ZJy*H_mik_Jevg|Ϲw&pfg|?t&ZTjv<ֳK nIĵ]05*] mЖJ,ɝlGkH`"K nJmɆ5nMu]EqgaLgA9w$, ‚!@.*EuY%j3N:CwNYw,QI1X+BAvhLʮ.`e@Ms3t#Ŭ8ӽ3a,ֆې%OvdSY:s\¯,:55;vTsv7փo#Ee4P.Xb<\XY్\wS)YmAdLt Y]=A glQq+pұ.rxU#']SeόіYƻvz;h8rD6РjZ)5Jc&Vt=ۯrMrVc$/L̳Z#D%_P,t@69KzxWo:q>oX/fR[i2ٹ1/gkkm!+o悓+dϝtz&AY >zćSX +$u:cS:cNYb)9 ;(rڱu!tu@QvuٖF)3Ȅ윌 XG=『c61ʑu,$0eyA;8x{E+RMtSjv:5vϚ'E ⧸\F?ٌVi tikquX׈!]z 9&;xofŃ;:Rm{~p/tFJw*_Rt}ZW_Rߜ *]w~^YR3)N:XE'[Zԗf^qM̈́WEY5cPLJ9=:2?sy="@$4V;x4!PEe:dGaldBEYW`-HJSuNv1FBB_nkt!@u*t6~!͒{Ne1 XLuCCCʺ'%M9aXNay]X6:*jQ!(;.<.9.N,Q I0OE5/(w2;wc9%Ru;nYj=]ݝÜZtyw8qD;ur.˶/-՘ֹpa`gʛZo{;A!^n/_{kr6kPsYkؿٟΔ__~Ԣ%^1c]5XjLwYo#.;4vO[^LùNgVL+`᫳\&b*&kuS!4ȁOʎs`B <ٍHQi5q:vSY0c`1PC2*q<. 9uxYoca@ P Ù=IBQv:3⮀uh:MX!NqgS=% YvZpAdX= m.Ovz׬ ,}$r0 z学 8=Sgp ١Tv@<Ps܅¼٭<(늕nn綟;bH{BօZO3m}/l_=Vq:;SNڲʼjǂM?a1.%GX<ċ_\Л1EX J=m68Ujۥ׮XzgA!݂m]o^ t}s{r}z֋޴hlOe?L3Q 7]n濞r?Eu֨\w1'&Lpp + DaWw*;%^Pt8vsC@vtZ[]az0,Hc Bֱ&nDA +wP54Kc((y66X7 YgYSө작<-ΙqU,tdtu})XGqr癎X>/9r#8@ܓ'ZK;n0n)N氃ZNXtWC╉jRaW|DsZ(Ƴs6敃1uN9nEڒqY1ɮ W<^[~XPkd-迯j M4]Sjfutl߾7 =w5W[RIAWIpg[2kqښ0]*fJBŗ߰?m8Q[US@hwυ u~u{Zj+&;n^F_nQ5ʺ0:A&d7VG<՜^[3@’3S֡L:V_[x(1CRNFjs2ce]wVZ%L܅sCKB֍'OvMGY8 bBԼqut`uJ6ِ1@~4BYԿ6:0_2*Y:[qclٰY`AFeG9)@@9y"w}ޝ븍ӵ.ĝ +Qdt 9օ.ܮy^AgY7+`8>y>>e~%[h[^rrc Vy+޴mD˶}efUs ߖ6o˧+W,w=?y{tl͋[;6]"23]ºJ&Ygmrۖkݸg_cA_ެB==zPRn ͭ !(c\ڟw6D;i: yQqsӌ̈́[-8q:WPE9+f{di#Xs;.(;oL.bE^ItGt@Dt*;h=B!Q5KqLqʺM6 aիtLӟ?~%h4: ooH۪`Hfeޭ1.\\c)`q3_YH(8`H9A7̇#Q} )`dK.om,wxR5MgܸuvBqigK蜟Μչھڡq\>ʘ.\:0| w?8SPGona^03mJhJ 5f1AjPR߸ЄDQҊ/v-MBlq( i6^ݾ3wevv6Tٳgwuh}Qr9Xze%u:BQvSdM8e}0:"TN_ +a\cQ4p?Ca5@G94q?`qJw}w}Ő]_Rj.#iqw9uxx8Oq2pSr~8l6ewΓxp?˜:CvƣdNϣ!;JT#e}u8}"8:dӒ/:eH}û(NXgfәUC֝᭻i^_hU"nUtեmr4FN`DkCk!ݍٰ3 F2/J]@˪\/Yl]GdX#7Uy%@/=蚢!ͅ @.ڙ?y / \"3S}??n'R[m4N}پXpWTsئcYwjN'rXє+ufZ!WYǾ.u.tQv ;*ِ +v].Av0M'뢬;$1X'QYF; +pY#>!T*auvvuufr1m:u: :3pw2mNcN߄';b'U+ #_U1z l!rȦ6t/[.RQh.3U\DZV +CHXךߒW]v^f& +ѿt?Ӧe9!ؼR5(9M +̼`'T囟y񵟯CχG7}Mfʸq|+?렳RM)d^J竞)eKs2F1L ;Nk6*eN Ah%3(݀ +A4SA˪dt;MewƊ6(clI>ӑu:tupD(u[1XuhiGfǺHLӡiim4705Gi$ࣤ)g3d7YIxЧ:9a 5.w7s:wX܍bk~}nucK7lW,j~!\VU5 : U>U7g/{b,<7/-plE:_^-B-q#V/ͺi-Ge+ƺ*/*͵ʮUp˼䩆~s؃yߧz6fd7Yqe Ֆ11^dMpߙ W=~'֛LX3vnS)eY&,Ju:c̓e'H8E3}Ҏ3Xڭ>A3Hst,:a}͛6U+V@J)  e'}/`tF晦|4:*Fϟ`:;EJ!TXIf`a:ܧavǣY'vY0:NoǎuB9CN`\ͺîhww2ϗu9Fn3 1tr۬xo!8YI~Z>"twܔHy:qǚ,p%0Mɇpx۬v0=D8k7oo٦߅(k rڃ97\|Y'㹖=VDz7W>Z=:Ss%.uQgsdcu9ٺ`3֙|Kڕ8ﰧ7r˳/w.)BE֓јOdrmz|rwG{GHs bMO8N7eb1<2z_:t.w\xZРg)#O#c,:ʮt h4tqg5gǾn$; +0^8A4]y.Kh!tk:;h o!l֡_}uYѲttҮKE#xte^:8+5W^NL;i;c$ APM&Z䭀 Z(Fcf6*T+> 6+/A!w{={=$6)t5nhàu,n4},¬c٭Bt0AǬ欬C×gF`:f9i:k9/tX!,Z/l4`%eognJrxg3 l2.d5owΌu9yXSüN4I1"(ͭPy!`*10R8,yH^s YSQsރk5Asۃwʫ|Xln|㯯rzt /\75K +tAwYԂٮF9Ѳj091燯.Z+흏*D%@mC+l4| 91#/.?Uݚ)ZnKڲ ~7JfR% +_)Y_~K=eO_q.Uq3#yyi NFIX[i:eI +Yc-Yx[T}w֒.0UVҬt:Y:J1(GM1YJ?8:-(魦XGuƍSnXvtcUGeJ9T#I:D9);2.*l:ube@xxXvU=˧=~& :d`LG tްdaz6u0zq9j/5dgn`:9 Y;欲K:G:i:9uhOj6N *;yDj3Ӗ[~B;"]⛷F:ՂMM-~>t==Ҩ>S:q:<478:ѧܤi.ڳynq[y5=*{Lj^u\uw?Y:t`9QtI@KM >3*}Ԥܙk6xޱ?IX%mFH+IGcϵ;0nhi9sKRTҢ/NJY q߈M{*6]x)cjM͝QE+Z e;rݦ;\$2e'yAIό +mWq15Bt^CIƠ+(Lq(R֙$ K1XsZu,c*:tRvTS#1LG!1v!;9XNc9i?gݜs3T"UC(%G鰀YsZ$}H{$zRv2>x9kBZ4р!Nc䌼ChGRڼM:ygɸ매.r#5jb,`ݎCZZs5"S[I%R. tܢ L QmH8"i0s+8h~~7>d|VP.*!k"º6(Ǐd䥼=_w~{g'{ю93.[9c^: +m MԽ_^zڬ.٥T럏.=0A@ fϠ>;ZF:œs~Y"'YLJ#G:CHȣOŝQ#:~tfdV᧷r -ZH_NÝ\^[##M'A'謬cIy`==Gvf;(RvxVߙ@cy4V|'ZąB+yjn$#.ː+g2WmԊRD%nYo5gPλ Ksqjht~-$%8KV˦[ĜPRʭn7cKߛCڊR0 F9xt˙83*Srg~:23cI%擣ɴDn:˟{^eSYFxb`: 4!t!"^ 6mO_{ҵu5adƾqv#|Ɏ@nа(T^ƇuVzLʒlPQگNtМetTjXNħZ*Qls]k:v#gd' Mǁ;NG +¦XWMhØY'eGcuul: +'YGeD/* :MvM֝2B9:0ʺ"Va\q#}'W.]qXޚ(jo$Xsw^pFێj:ΠL'YfPicI!tF9key`$.'@T|nWGWJ6OJ- + tKDﴠjC0]ӂjTL84d ojʍe[~%0TH@S4MmItˏVͦol|ShΛuv (E_/Q]u<7  :vPiGeyA AR[֑J-cʣU(UiA +(R!{{9޽~̙=ݻdWj(oKۯ>_ ]m] !!F9N5bQ8)xc٢g6>q޾OP2 f]ԗu(Ym2MNü^}N*(;"0@;.[oqTN/IwL!Մ p뷜tdwOyqyw´); 8Yk<yȍ8ф:jWp(M'qu]#Z> JӱLZ3kC,bb.ɺ*&Њ#ܘCN3ɎA_V4Ȏ]cqaHsnuiYǸ#t($붨h&mRXTT3:Ȏ”ρvVOoeNd_uϵz^/싶h7w4Q{o@Ss&p/k809Y_O%V`ʡ'$çncc6>]7n5iiӺeEraM_h#jiQabFFAeuK::5չ}عg;n$XI6:jI9٥Hi] !%Iq hBCjuWAT +t 뒙tnJΩ'}jٮÞs7Z'Of: PIdO .|f7[Z;€)_۰viv7:)ҐYTI4,fMɺt'."Jv™fԯXK ;#37;8x_65' N8&AN|Xe:s^!tP  ºˉ&肰 hN'C-mъK֡iu7MgYA8:nbhC4tdnt۶mXՈdLǬ`O6wt\t|nu8]@v|8c.EC/w;o.y~d_]pi㇉ : :$edǑi7yhnUwm|d:-s? ['V>4ˉ] ͥ (7͒pz'=g9.jN= ta)i:n:?KS\9.;L jWs:Qh}BY0߲JBakMɺbx4ssõY[wܾ{olc<|7P gEBgf/[YThtV)4ujKi\Gġn}6)er7Că#N⎟{^cGpH(;D EÝEiI)GۨgO>^i7f79:SqL!!y!oZ=ˏ5aUʟ~+3ǥFs5,`]n>@meM:祰[K9'\7nʼڕ-ώj߯unucmoV2D#dԸ#UgB4yzT?mޤE3>{O9'yfgiĵb%M*H&ŷhf̌`: /֥:_#4źgidǻʹܧ6A(5:ܝe4IֱPX[ :f\ciUv7N +ن ";/YMǍaz.XEu;i:%:+ ;2ˎA3IDʎ}d]*VӁu{09{=1ĺLǑ6eo:;y%YQw4͝ReǾcIQ}#^CmjNCy>b:مV$뒦Qr#Gq~~aއ,,"UdE3 +w3ӝ"UEËui5G t4jW;:'mKV(?&x*;IA9%Qd_/;b1}ge'L$ ULf:iF8iwufutuR9n@6); qOYt`:ɺ]*ĺ;vh#YYE4YYDz#dR%PӬN;d~+?.΋uC%4Q*Eabbp Pټ}q'egeߨ+ +~.D QRTJJ`C +T vBLD[TU)DQզE-±) Z BqI26{̜ϝw|wFsg{wz ;. tyM'742 waW{"mȼHI= + LeCJhus'[sF4ɀdRS0yno[\6Ts:4/XCKm\tMc5:%##ĥꑑ9F]Tӥ:1X1u̺D./%?Lf{o<|Klnm24E5#+P(Gʫ$)eZʢ56mw>vTߤ4SWmmMdM0h$l}sksg6*rhxQsE4.rXQPkiZv9_[Xo~i#NgHN?>[g8":xL7XD: nBQ ĝ^d:thXQltE E:qeY. tQXq`:nݩ~TAv2>lIֱ c!u{awT`::a={0X[Gn: +/??|Xvh;ɾYNFʌf:s2L#g{Y:.a|x߱3qv$l9d=i:QbuƖ>,pH%fPSwx--ߩV޾X'Dh1p(-hyzI֜t/6-5D\4M*ũ4WTWT'XdG#VLu +'+Ew +7\0>#3]F:WP˲+ԚfzVuqw>}r[>[xe8tnsMUl[Ot/ͯQ|Q5W#;useS. 5{iYPiʞ*ڲsooo?M8pxYg:p|3j٨P?gIuFš y w6pTtXs(8h} do_aq>Bxe1L:Orup:B.u0XGM~f:iv :c>#b3:u·Y')gNRiDm]¿v.b"Nju|KሇqD$d wh]d:yhuy1teQX'Ag.utv8tXaQ`+AN8 +.YA7Ν9voVuRv`cXGa|A`egšYf:>/{:φZ[[::.$]:[v|qX7H|cqA߾/~9<۲=;E+c~Uc/`D\,u좰;ck? e`J>l/(<:G ̿ntol?oxGJs f 6Zi.\Xlv.aҴFK#R#*⩑Z1i. XFquXQm넖s :v`N B宛wv}MO̫%|)U|WuugFoTQgPRe/||?CCɑ9&<ήLa$܆-+ㆸdҜ*^wRv(3AצqtG;oj7qw +_hZЫ4:U[33_ +JgpE8 Y`wQ:Ҥ:ӘL1/G{} UP+sϳ9eLsse{y>C3u$a)GrU M::#nn|Y,ى|-kz:Z +ɗP 0—_a|I;؏.8e)7d *TN~mwjgU)d,iB\϶9y +N]vMy5WZ8y .5"t3l֑u}Ulغ{e哔ެ\qkݥ/ZlqlЁ:nFT4[> Gtms7GN WFF2Y7!kW1]dK;8氎'#=ƿ +ͯ/K :㜖=RÖ,/Vם.F{%o]XМqk ^~)Ih! ĉX`]Fth:dq .`L%t6NE;YYdH:sd0$dӲd +:MNˇPv`:}r*[h~]AWZo\L7QЍf]qu<zo6eRߣ.L/A;QuV&zv qF]Xuw7LtxM'X0ל밺MgdgX8\s'T:]vGX#aX}{{{u{U|XGB#ٽ;UxFq~@^tЧFu~ெɂuYwѝ~9|q;/8GtQRN)'&8:]v<t:rlF)_?ut8EL_'-_>BvW܁IAs +8|rQFeq\s4"B ";\Bó|YLG#2Uǥ >y"K9΁nߝx7[>qcmʶ3+tA6e9&κ^K8A9&)7aЩY/N^ +tB]\.742::'/62篾q>ZpY8w ;T,T;цm:l15whܧOu:?3C_G:#՘b-<5eز㉊b]]Ar_VgLYqX7&WV4mܩo^η 28%p'}aw>7ePCĨ9( Ӛ*L@}t`Jٴ1hQiod,\vw'T  :u;92AuD!bnCqףãQv: +gݶm8G.:=!vB#Н?D4 R?1Y㻳N|X}MkK,uw4/t104)XәBpuah MkpkI>-:\YG8ht-I߰DhbPﲈ`ظ{XnܹKl*Zlʁ"vke|kur:tg.t8:Ⱥ,A :W@|T9&,E)Y֢xQUKͺ?8uFolYӺւ3af][ K;c}nqA[%6t==O=w୻p_73$O{ocs\Xr/^>0ͺyjC㎓KZNsYArb:ҜԷqe`]wF껭Qv^#FO{0U891w8tQ!E`^D0NnŇuzX]帒Ƹ<7 3 6>2-v)sGcuw距V RpjiyT>UKWg^7lJ-\*SFc}bU^S0H^6N׋S?&$Ngڙ1Lg LFDR_:U&8j@hĤ# +*j5@콿ʂ|wd{G;!@צik/.l"2tr: +w(d1ŽqƝ [;vF} d@]X5pOkI;d4Dxyp] qeV05 XZj( ӱbn{!;*<&G{{eЁ:4'Z:U|1aѺ13J_Q26`:m1Չ|[ls1YbLgК+ri.zEϺBg8uxF|Z n8pǽOuA *vtU?(ՠ|rwzj蜂Nj?U<.{鄼Uo+ڴc'_vHL3]'(&g,wHC%qrYk5?(;^lү5)kl߾$k[vo4<]w7[cjtt1zĪLȈ {)gEnCf +ijeInlٹhW²eǬ;n ӹ58< :٣Rj4hwh27hCΐ{CCc9f@Gdu390)XW r;fȑ#d::Vزf݁pW.?[~a܁u$8Ȏ +]9'88puajڬ3XGwK|_b]cp6{Mcf?;sǏ'].w:ؚ k:;riY^IءBmC2a E;xi.T⫺klLq5?iٕx­drQk0]TtϮ E9tAthh٩[pwϣCMxskټs'NOP(EuS +VЅ1`]:=|~_e/M.ۜ/{s n~>EIQ ΠsHwO϶G3YgN$_.)+6I.\ԉn~yagÖw[.\m:Q[TƏ_. eq~Y\tif]&ލI>֛\:oEڠ]egCbzFv&ޠ3X]S`-t\ԉq&63?lqa:uԎNhS} uo8~c օ2:hwXz' :t[!@(;"('u>YDu0;:w8٧#YwJK_as¦cIIqӅ QAYǠűA䒕"v2n6)F+|--A5O +?5L) E9uwxG˂P&Nge](I1北l:!cٻ=ޕ:r$/}X.ʰPؾPx{힪~2{nfhx4 tِ4j:1?KcMx;A !]|eGZ=Gn}u7vym3y]?-O.c*QsA@ +Η?57P;sfrgHYRZe%ٶlk>{\ùˍu=x+e| O;NэԜ1?ҩm:uњxPqͺE9 ɊĨ)9dʏ>\y^ޣGg'Lɉ)Q#eĪda8% M%ewUl[.rIƶ.YG |ih-d!'ew[uvdPNvVunXyd/p+({BoQiNcq\м:I{:l:r +('xi:f;:WQc}P %Gt555:':JȧddOYG-;R5:u;u8N#jΕuc٠Komc=.iɘw-"Iq3u$`ѰMDz5GN絫38C-\J]{(Q.c}$w7q| XmE=Z{1dP1ZI8ֹn8('48k ³n5@GSSuZ?6ý 7޼utU^y+~;{ixNnĮ-7}o;:B$CS$CKqfk n<(gˎv +4TrxڛVd3̹5:monDq`$wa:u#A;:g:̺JWtt;'uRv{جcIiStIm:u.u"|\qj:uT\ubiltTK<q 2?}כe| Dž7ZC\ +OY!楪s,sMv;?u9t@|Rr7;t.+Ǹs|4qs/bb[]nq].ZLvsXÍ\sZ\C~hb]鼰.VZ|gnلܸꥦus^U޻qׁ}ntutD<ɺn``ֱTfw|"M':]ߦr7:ďuwwduX{wn`i7;.m7VәkG% aHaYë\{Vx#S^{t;k>98$lM •/79Tw*bu4]ʺ`K.Y7b=VߜF)KD˜F +͛"8~n8 w3M'od 묾Ӗ t&x) \0$4h3n q{}DS1IǙ $$F :Svx>sz:`շ_x OU7@j1(_qo$7KKv.o<q-|YT[RcֶCCAz<ѵbˮx "[}nd3IqNjSԜ約6CUqUuə[z٨٪zE5۩2UUn +QUY*U3S8[KVE8:?wɮ#|:yݡ AԱ]d;4TxtTŢ5i3氱r83rJ8T9 +W0nqMhuM!rc)a$ƴ|^}g: Rv.gӁut1MhcAFi:f~un +MNnɺ1qG5'eʲ]ޔ|G!LgtfLIɟHэ撑"|gq;Q6@ge_um c@i)Q[V߬;uoh|95zk2pYNoH[?cJsibeNO#pMkt-Tk :ʤ2G9oɺXY"Zx'흷fdHFN]J18);n$Xv#ʡrhXs̺}nHБXɎ(sNn!#x|D`O>v:k[NNNh4~[WwNv>͞u th{M7rK;Tbu}0z./@Z7yO|f9j:-e\嬻?_  +5_^ѺS6=OkL:E\z4o(\#曧FBLi.S$;͚m{Г=3rg`4mQX_Va]rQDKpt5IDžZnpK]YrimD+ +ЗuَfhE3s-PvC;`bƬHZMW81 -ORNLg^n`T\H-uX'OozII O_DH18(ǿ>[xU:?uF.cXY `)oLw~S|A#Ёru0a!7aiCU4I1(eGǝnaQZ[[h8`+M9z(zޟ8)M"8/Vpql` P4xxyKvotDA'gN + ;NFᭈmv(trT|(ǯ3d"C_suX:e:Ljwۂ{s +4E9{t +zNn 7n]Dxw?bCEer#YUOs)LJs}h^ʺ/ML9沣 e#*F6qۇ:% +mW:?5ߘ$WȺ,J ׃%Is!{JRN Qs.(̺Lsu_p/b|I:zYWT9 ׷"dPꉬ<8?CsuRsxr¼ H)Nje:yE}gLY".uli裵SrNΪ9i:úFNԣjql;ӰNz{::Dig6||MGcֱ}reLGk%bdg{7i:Is0a^/B-'A'eWD> +tf05yN X3A1e'5Ǧw٥9L֡kY[5s +d7fvVmcVd8F.󲮩w:eY.3Z/LGtDCyx'-JJo՛Nrŵ[{c6w# V/V_.Jr2]t.ӥb]{A~49,;%.E__sr_6:o-\^,jmˎgkKGAk|5nܺm5:u\uX5_G4h3@b\XM'ME}T;6+.qK4Ǧ+QXvhb=v0Zb Ntu4dcܙpfHYY!2(;°XvۢZɉui²C:NRGzzx:)X_4B0?BS0hf=w5XYW $5Ә:bȪ¡~I֙- ̤2\s:.%L⩃Ih]jΟŇL77>4eۃq*d].ĝɺ5gc]uil#۬d"Ni.ܽ4gY8cO ]iuSrSO//m-}n'gzog|{‚F6$ZVy!J]_ =0$ +7n׮z ۼf @H'Ϫ[CnLm8zY󗪧^۫oLgiW8u^p^W5t-N]WØ3]$\Y'ܑ::tKuc5uuYYG8 XGaHQeXRLAv4Km A+$LG3@(mܸYn::);c* Cf68uf'=p< @YNNmactϴ1Kq:xXG1GhQv(e:Y7x-MǕ't :{)q2UWiruv,𡐇\ +|Q+Pv׼x%m}uu]۾)V[<`܊sC d.o>Yzj n ]mI|!@G̲ꆲj]W7gvt>hy&57{tUɯ4alu!tzSsPXP)츔K`]?.Oͥf]ԜnAAojDau\DNm', pW3QFwjk-r:K:>{lC\)Yw3uqFk"9,$SnTfpf:KM=:a0tMu"t2tELIֹL(|F̡"MdNYG3nK:f87dBkMOSᧄ' YqyXǸN[aӁuf;)XG%Rw$QvȷV;SupNUDәCeYYEZ8\D{Xsj39(;ustwfo-qPsa]۝|4W>v1USJs%8OLKy[W^bj`e3w#qHt\G1FA?Ȃ/nb8n\GJNZڳ/"J1*ˏrV \L\|G޵tß#k @iٕu+M:{ėr1%}ԙ]{t>޳\+Jm5+S:VTa\sF Xv%0UYmvMdX-+q@ESnJsl5zG&,m/-qhdpwvP͡]4ƠʥFN5Gt5o |WPx9:Kk-n([u:CIiNc)S9pM粎Ӆ1zRBtd.Dv4M$Qh:iݼ Yg#h:F===ϪlYMqtY'Etu]\C\=^hБu4p= ++krF,N ,`,i:u?lb=MGqYquȰ vk컓*ͬM..3 +͹Bỏq y :Kjqo?,ցlZj- Ň=YvqܳG8qpOzrl_0 Z~jP5|+o)BʤkV,Qb3|1r-#֚Pv]rmgg?;E,m&'#tf$oغ;7muk[jEva?|[agߒ|Yf!R[6*A$űl+uМb]S3Eg%n)uR9ylu4c/6Du]yeg ::U+0$RݼsGt\IqRgOR@WGEUqPk1~tMO:jeX8u;!h:5XLj麻'c +c0Zsz?%49^=D.֍hqqߵN(;%rZyM&r}_k]\tԜ6eg=q ãXytyevǙ:3ih&o]ƣ@2E:ph<F,nq^Xy|w"ESg>۷pg5'*(-j\kG U:ڊ\c+u)73^5k׿'}n +~[_83116G#o6wѫ= 9hs9\ 8 nVYcbq+tUVŀ.J2tú.uY^z!T#+;= }=6Ѯu.fU~Fy5N- M uP$|i.uad:5*:Vwd wQ';q2`LyYA^%N8iفrZvHupGGɬCiit=a:tq{ڤ t0pyie|dO4^h!}: :XGY͒5Eq2:De](;8cw s}g. 4Mwv'fn<pL ^w\8=OyQӶP.qtI`Q.^sy)ݷpH}{/6]xW͢U@vܪl0=Jd]G4]J\LKMW榚88cOen5% 7~ox%YVj&M<όuH{7ucCO4㜕xUVXg( X׌A՜[d`ű5uZZ)-+tɬ+tM\cIYu7 wp,OOӇsE3L+uf.~V]C#h!ԎKw΋%j^Z0Oi,` +KYs&NT`: \Y!\Qv`RphI>k*u;v th:;̳a,ӑu\^ɯue'!Z);̐u}&rՓK++̫+{';:NF.47eAbY ]f^"4U:yy̗d њdw4%;$gb/[i絞w{kџ*m:0:Gm,UwY?\ƪ.9KrxӾ[n|좎KS@[5|k/t)XtyZ9Ӆah%;?hӪ~5v>ΌV^U.w>|n޲yjKV_e +h`:ٴtvKe:l%jN6]1K<A[]i߼xmWnk=_x5&a3p[jZ[3n\S^%=:zFdq\6hi١&)utdd'^YK],ܱL:H+@dwRB[sl/P{YxM3XtҿBI(; m]N:QvyYӣYGmFˮKX'?L.\Uθ{Tp xS@<&8:ӷL::++ |7,TWyzmK\h>qQ?4LGa3  -/Ijq#~uzvw:) B/Zv^g::|Xj&'5Zw3:6G^ܳmpGvaeX.XW餵`dБu>ձo:ú3TqOȟ͌c:NItQPT"!" +?mԨdi8I10Fwtb_ =w}}~ggg>d{O]2 +G*//tx5f|VLQL=κkbBGr(Ǒ~@aK:tܡqJ{>#tr0:կAGKuTi#Mx1/;5+\'ewnurԦE86(,p^a,JW :_;.8rY}6fVq\R|s8΃"QuGZi4a79"" }RvboNCNuv{;Ww_rld-\7Ewk1公}),s</֦q8*Gb{|+FLm0k7uӯ~C^5G#Q >߯ NgrzKP[xezG>.ubaoncR^.]ZqkOoŲs. S7Tv*^@fQctA: +;.z ޳aGxI5}&Z _vw|{f;N_Ttvm=2k7+%`M-OP.,MKGIMEi5~@gd]n57:{2h:9BBs`-g>,EAvAh +f.\W-'[OD;~ʁ}Û,Β5Zk&[>Ë + [(B@O"VM98yT9bpS(7OSN6٧u1DZu4^X>R䐾9.tEraZ{JGCSq'փCPXkۭ@t։xxG_@BvCPb9 +뒠a{x&0SQE';l:6Uj_/9YtudjeAGÜqFg7W:QXYwELG1)GkR__b :!g\Yw{-'9 >>$0SMGOHv߱\Bw3)CE7:Wݴ58g-gLK(;:%%}w +ۡcsaG%>U~ +or(S.MoqoIvtؙu~6{^X7nѯԥJ͉9͂^ .,\By\K:OKb#tQ{'9Pꙙ 8gXUv?6}yk7 =xV~Gzw\zf޾je'VzKͮ}.ٜh`ViL.Jֈ- .9Mgsw 6l;΅uwɌ̒M'dR5id>M2Ҁejcͣ&2ӜcL|727}5\$= +\Axii^Ϯ!yd:\suD9Yv9PJEt@L+;BMଃEn:b#GY2g_pQu9ww:>544I\YG_,8M3qM:Mttd<'`:| qpwYv4;= +q)QN-.;uCM.;Z{14GqN)gTp)C%a;N1HGtvН{7w_W sRK#Ղ@Rr'<"?<..ƺd5Ga/"Un:Pvtt^|o;un?<5OF' {Fk-m[vƪ [giRus*Ӧ!ւ64͕Ɔf~d7 L)c˲W͹;·)8Qd.097Q #$hw67x0Ұ\yZu%M^,MT8J4u@7j✔_OUgP9Lbɴ?$LfR9j/iLh2ժ1jI8Qc$1#hT ^x( x =9\l:~睝gss8'5Ekn|PxuL9e&dadwwÉMPp3&;4:*$Y:];`ltUX^C8QOuRvN +p9.I(( :N +:cUVVBst:ʜ :twc28Rv:t8raB&wY-u|ꬣc8ӟNut +븐$(Ԝy-M,8b_;蔶]vr7Iul:M$:ɺ; ^sN뻏I\>ޱة=wV͢(dYJHHsx57K-(.%b{ e!2sئ *7dS򟝳5oWWk8}R޻0>崯o/w^?~Թ-YÎvV{;^^yʒ S>Ny.irr:>=y텁4'@DY+tn:w~d]Oa_]6*miNtr^Y68lawʀ3eZ:~eԜh:z.џXˮS u,(3Ƹ$QR, N4Af)pa8OzEf kk Nݐ . mסkݓn{֒? a[s)8FuaqC:yt1c^8#olvӳD hi`3o zjznw׍s g/i8Ss@;UJ*jMʱmǨԆ;1*[i첏xYǧap$먐wT覣ٳMǬcٱܡ/%;:w`1UBvpu2kЁrjy' æMcq7(#C:~O|xNYx.]vF*WT0Mǝ8qjA]c{ѤzRaw +ua:Sjc 'Cg-oUmcKo*^_\$p4?]@ֳElٲ( e*"t ;XYȋ/ tmY̥==YKEŋ6nػ@S-Wwܺ{o (ӑ2#b7{`U7n}f D %rfX +KFXR|."ad]mmκvt(;9; +ScG7dGZDu0{2 ; +U:3eGQX54#qN@{ki6nųvtI<>l:wAXw՝weA +t(Zdkb1߱t!hl+3 aö+NF$2L;1c{qz%wԞ>ӓ+?)T>_Y̋˿7eB׈J9u4fh;ky,V7. +ƽاB(,zqnLnɮɮ?SDA /E$4$ )D W5 ++D":"@ELro}aqrǩ:S=8?W*>ȼ4)܋~y?.K-"uWŻ˪Ԟknku.<B1gEWv\Nu]q߁tԁp4J]:Av: +gQXW{pW!N5!Cᝅy-t߅GzLXGOl::sQd|wq]ɾÈuZ䉈N`Γr2h]stXMFcqD6‡zG'9]Ӎ/6bPL.MR/,#Ϗ7N6dO̽7g!󭘴ז$q =! qqPbYU1M_ym9e[ޭ"TĽa`w7d,ܔ*=[Ay~ɲo[گ <|ȸh4xg: #V 6?n4]L4xÕKu3Ep/ p[Wv +AsMNO 9Q~jwwo}kg/U7?/MN t)[Y4ŃKTӹT*.3].)˘R+cNnPv03gדּ4'dM'Du#ֵi㲻2&뚵pЙN`iX5Ƅu5Zt!UUUxi9bFfa-|à銋u_t@A~m1zo+:puY XCЈu|; |GqAɬ3.>)9jC\sCj8밯K9a;yBg Cq:]6q֍wǾ3ݤjTҸ\Ow;{z\<~>2iWsKNpY+S_[Mun|i5@>_*uj#j@ϋ&֍M~;{1,fƢ%Uw#7%$.QƜ٥JjZ{wxي2燨o-o4O>4_~7 78-it0Us.eYnMHڔ]Qp)H/8AvAxʎّގ +8Xy5C9554GYt1II`b:Qbu|wj&a#q]RC#`9eGÚܜuTϛ]@av#uu`sAJ: +NfɎ@WYYwFJ:М:t'?V uଃK }WFuНBě#q Ç!8t|A1!&CћB X't~"dhFwLmK g:\LG9k38p]tt݀_xԋS%? z/jSS<QwVZ^+mV[60.QNR r)< -;fbc:zGTP^x2+֥Ex d]onb:jYw|dLImfywbiNؽ'EwA:aBC !;1A;"VA5\閑#(~jD Jι34wo]ioպmGjE}问]'g6{Xy+itvnbakWwS6cQL#?:'&kyZwf?7ߞzڥ}G<%cy#?XzXg4> &6O5tu`ЦOU.~ (ve~k:.[Sr΍N-a|e>%$ +|u&adtt>Qt3RXuİT:4eg:] `]ӵij2/ȉu8 ~:RᮁeWh:btRjTWWeº +5ZtY@s%%% v=,_C8t+O[s֙NȓY'5 --&'\4.MМ.̏+;x&3D0dAO.Lnաϼ{o;^]Kɦ㧛ϫ8౴#_L$1h¸k2س*=?과so]Qyس6so + +ç6,9W~ĩkϵji;qʅ:{c^~뺪0)bR$fHqR(8ڊ1뀨3x#iiPM(!! IQq< a|9Yk}tuι7}>k߃Cz?؍|o?:m~dYÄt_}o=CղY7hb\ܼcɆO>+۟XlOZNXW: ?5jv+ECs˕]z܎_csu7 c;a%rdG!IuN[ֹ!ͷdSqhc3]u:cΏÿIvHÒ$*;hs9dw +@X*uYCT!UQ9/_!utx`xW8БuP9aU}%> +EY|$5A쒭+X:[NGF4ud]AW۰1zqIe˥,.&089{wCQ?݇{Nkw}{7?qgfݫSWn޹tɩ_yꍿ]~W&?vµo]eF65=y37g=g}[ri|:3 }lN^XpKK neHķPu:mphemKa˯Sܹ4bٹ-xuzqYK:Nܴ]rQs(8@ؼ7n2L5NMau>l̺KU +Gh6Yyu:Ճxt ʃ"; BӞuNAg1EQvVu:1.̺G?Dd@G7+Nv:';8:9t8Js#rIN>'(:;k;}W:?wCصȺ-:"N숻\vm>c5 +;r|3V:z+z1#JZ5NYsne}8<X~E+5jlumjݞm^GLlźNt갮gLv=c֦[Xֵ7n|sӴg]Nv,LnډssSEpyNI9t9A9E);̱9!4a:giNuYGq:u 5[:ŝyG3 LwUwGttcU:u q8"u}sFt:us QБu)QvV+t%*:/\rCert(tSY5Le(?ߓSʳFDžz7jf`Oǖ;?ӟ{$,ʐ󗯾'K-;7o3[ܶMÔ`}/|?>{ݭ㺚;Ttu7g]}Xrsg?"͇<%lrMdwGbb3Ysuw9 +@chD),pqwXfHtv钬,VCEMTqq%utd9ǺSUu}˅t%tX0J9X]dj::r\cܣ1mXoqmXCɱN}^klƞ̖~? +pʲݶEi|[Dvwu.@o8k0Fd?_~~6<헴~Ij{Y\/-4e^ikѬSl` 2]uKoU g6o>kMN[vjn +XKELRvw"wzɱP9))uu%/ >'o8S +5I(+"/݄ ;X Gcݑftccct5Qɮ=VqQ֍7Ctv;d s85ٷW:[B\Qqǁu[ݪ+]{YdNXaʦbqI֡Pͱ&{\YE<ݹ4Bӹb3HZ9FJ/&ĵz9Υ<.kt}3ѱ]y5fܣG{ƿ+=|ӁMioٹ]GYXUs,ܮه#fXSʊYqÕpp :^btKĻ3b9?@Y%'v5,pF1ƇB@?qCqJuYYtuoU9 eg#,9Qvu^eoe13Gޟ$pcySUKqk*\a+V(,$.0@ bHd(g G: M˙>e1]MXG)X] CȎ]TXEĝn +&4%ǽ†E^k)D'T[upuO~xj3[:ndɶ儼~)U\񡈧m />7%[=g]/^C-_Ã??_~a涖\x]][\it8IN/-eAGq `5`:.:58sjGLl4`9:MXDܩ`:$: \C7S YGС>X%:LgG*:p+pj?cIt,8AvIYs%Jb#:+ܺbvrU|SǕA +XGӱӆuh\@{vqc=džgMq;8t黫4$bd],kz%9%G6P28~~`:w~RzV3޻~ +ec";5XGBE=%hp pmtlnYٹ/NQs>mϙ~;?bu1",ω\pUt AbAg.".:R.k:Ɩ36\zj:Rt{[ǝ,wTntdɆm_MCAM|CPs:=QoWnʲs ]%nA [ e[e cey]Lۡ;/ns6"6˅3+.v۞`&p-HKeL^cNXcMvZ{ysGU';:-TyzjuvE ; \Ei/mcf3j\8PYUdXlPNk6u鸺=sM`e5eRd:.ΙNe&OPnB9j")ݖnvv:n_JddMsCï]lp +qvEq.Üʺ?4q`eeѕ,ֲ">9:Nq7t*;lbDбSeM\K-r;qܩ㌃%S"S %鸶(qdmO\cnBϸĞvQn,jb/s~T_޻_S^GnЬgݞz$u/ry(zԍ:TONc'#&.(6psmԜظmd~Ùux6HL  vtYYjsR끬s,BMαj;e]Vsui:cL>"L1YA=}e3E)4&1ә3)r*;΢u7upg:MH +&ө:SYGͱ洇:,NqNƅE7 4>[-ѱc<:ݽSwppxu尢ݲ˚H=s+[frMxZxtxZӶs^o$]7zo&f:«PL/v5Mu=}o9+X逻ni;=:)޶g[#C?+ea_w?t.uA +Nǁ΢LgWmԝpݾYVtA Ygɲ#hNMٔ,Xu:P.LIYJ9Ǻ=!:YAsqt`]J_sSEeu*;LWSW'sXXXG!ĵeGe5Wg{ kR.wcQ'?tβ. H8FXGsssр;~~9 %l oz;(wt»>ʾ]#1]^|w;rg57#jM̴2]r)VMel;O?9r,$w~`0˺,\S8ΎuJ9 dG.;yxE;,8.N˅S͵gUºMڳ{!Exv(GAUM'(tdc9NM<n$@g׹&Qv۶m趤lt#X~Ä鬰'k@gh1Iu6Uv!;+:(/눸;\ۛ]HV12sÖ{1wt<sgʕjQ(б.{{ +4E_{)4j74ZXCv_lR$vzQndgn[Ud7Tz޼)Ջލ_λ>n÷k`е5ήӫVX+?G6z_{kzLӓtiF8񭇻m(5[(#Ph Ԟut (C"貲1:GmNH9',L!6guNvx:#NqgJ:5צRN ^musbrApϩmQ"FJ)6pݾ QB\]kxPv(;J:};/SaG/-t$CU/nEI^iE2V҈-J?-T͍mM=˯|-k;ٸhӻΤ-i.z[ջN&M[{6?MSWңmtJlu+tBxpd;:]uGaMelDq7c['ת͇uCld`ӻ(W%eXzqcCw ˱z_so}nbzm*nu=ujlmwox⦅g9qK'S8VYǏJxg9Tӥ?w^ +ᐦ#U-Ɏ5$V&Rӱ1nabnZصG)R!D@:AULW:oB'X!FQs}4n$OK 7UKnzBgE%}2Ӈ?}5m~!֨&kox}G{͆-ĝtpߓ7jܱќnݦUkoZ]뷬ן}}k7SZjRбEXs\tq㠧C(;+d:\ɇЋ3Rwu81Mgu\tbMwȸ +N6:CkIڹ6mvٱj=` [ qS9hTt~Dy*xi֭ ㌳~كOEfa{}c8צGɭ}sn=6Лhqwqԃk6|#-w}'?|z\?k\w{Y쏮QUX爇ٵi\MYk]*J 4ш!8A.5XG96,wuJupus: +.ÈUSgi c%4uρ"lO!dYlܱNց.XwB/V:sVӟٹ+'KO;d7o 6t.x.. +VT8R:۸VB=ϪS:VgdSUʾ8Tyiޕ(%[oڝB9 9:\:ZICÓlѨ7l3mzT6?ɏܬD [.^>Mz_|ay>'[?[~ࡵ~/ؼُ:xī1aMcCNYdqܣ-8F/-qʋSǹ*1FYq"\XWjS 4Cӑx+Lv2ԁ$5eqz 및Y&DAvȩ6NC€uX:C~S>|4ĺMo߄u{ۀrSMVQv mt*;;dg:%aMb4p?v\]+t ģp@F' +^Xsl5j?c:7vx[T&ۅlg |Gn]JLrrE_rq^N{ Aq=b`4:mﺰUZWX8TX+cXGiN):ΟpQ^jR{:.e|`:@ܕLGPv\de1XGӑuP=GCuj:&mRAv`dg@g+Mnwh:D5q᷄oDt!;:vY=C9i.'5 (;MUUBuxoDӡ :-A:1u*:ȷJ"Ricw%68k5ev5ߎs]^ ++Md()fz)N87э(@Tde8ݝyYU}3i;e]4woZQ +E6]= rcA̺|7 @ٽٲu@Yɦp{e|t1_ő$.rkN^: xq%4:^.] Nq W8f]a{[גuw, xZmw,\;+n̸$-1F:l3b_Q>5LpJ9s%z[~zCv Ng+w̙6~mAW@mnsЂ%bN:ϯ=Ƭf] \`g$j;^zI-ʺS.ƳF)N,+f>2m]nt٭]4?h]ak4f]֜QSܭe)ǁ6;Af:O:v1@A{_n`۷oSs:rxxl5̉TsLi:CƬ-Kymʔ̺˗3g+ʎrtJ;ϡÏI;W36|&8E5yZ>)hZ[uFޙGYG``1(}ʔX": [c7~f:hhWQk/Mw//RБu$\u/Z3_Mzk؃q]\N:*V֜(A*R._kYitFpfG+ +bӳC;wHSxO.8q}]p+hKI[M/RGwhO~em+eeGu"d\WhVKm;=#{G^qzJ34G.eM /4t0ʮJ١Ҡƌ@Ag3`vF9^ U.n9e=)wΓMuBqgR% ݖ"uׯ_'`:X22%X74%TDY7@ w@??~𻗦" +:}Z%l%Õ[#_%ԜA\12| )R,;7:(1j,}⸥Dk<ca3Ch'- rYæ։ Yכ8֗Zkh]^]mmCn国WR.TF鴌{r鑤c<Ҟ4g+wΣ?w J dum0^ȺSw;3lXMyz#be WZE\N'历޳2렃:NA!0K\INY):PNeAh{}JÝu-c!]/$X5U;84֙0oړ]KL`Ŋ+X[.q9c`\Y N͔)U;]u;hXcT$U(w{9LO-[e+vOv qyYyz&oTv`-y:p֫FlD͘<4zH&|$eiwD׶Nx_vrrdgj+jJw*-4­n lt hW`B-iJ:Ý5`ڕ.de3'ynYgk;!?eW~ 5m`A:c +w-:)j:.{m.@3A7ZY0Ȭ7@Asd]LGAs:5eGq:᪦뇔Xeg:7q-bح(kLuc qV!+J䛂*ZbBeQuq:K_[t}WBN,88r/7ےL뱮G< +==R6c+Js(g]~{|yaz>wȻ\:Mx{)6 KA\^Yk:c]d fֳy=TvPq%zYe6&i^贬d֩8Fwcf56iCزS8fJzc˭C:e4 N=bebps`Sٽ=5]u&Y'QݐhSa1[Xu;3zX-AQXKѣGXkylSs1Pw&;<o%E5R(QEXi=:IeӪ"ģt2(Sa$l{((mLd!ļ@H|D")<:[۳;·VuOlWyX'aNX1hN#L;;)t`]Nb݇;tB91$KL'(ӡDv8ZrSI1]t/ +@N(kz5"}ȳ@r@e +#.UNjib7+Uz͢\M +"Ӵ\Wj׽&up̯:Up{ej_r#UgwkOZ_~?rk'm)7*/~UUb!+WAz^r[U%3DISn7pcvw%I:"&_DpIN2{2~R;|#j2xTtq_}Y@'`p7u}=W@Ar{XEL~EAv,JX'ttNvtCwΛ?"b&>]::1r6bQĉЁuEvuwcO"bLLWk1$1Uj`=SVq*>Պ5Nl+4A Je{L1Q.9.~q/|[ku3uWx=|P㺭u=?n=UMrt5+C*)z7NEY$ә"Թhyp0c n)9Av +bEu 9+a>]`ݷ;Ub̕Mëu$tcٹt$" Ihx_:Q.݃4NJ@ +`uE'x0KL'stc]uH%օu:H3$ I: $RƓ(eVºy@X)yQT1%h@v*k*\8 .MU*5A o:/ Eg#=K6&zjgM^KwكwHMߧi݅8?tiZUo.aɜ1]dKsc=7ҿ);M~q zM_TŦorfv멙P33#;Ai16ŵ-3] m)az}*օQ::9ʹ`:X4ut?t1ieUд"pc,-,;]΁N&.B5X,z.h{(a{/ݻw/aݻ&N۷t(P.}99:UxEOL`ӎG>3U±}ArKQ8/!9)}z)F\@w$1 +dQ*RmPi%U;(gDy8<y.Фu]iǩWPi]D#K|#`.a#륱[oM2tl?/_(t`yxN:GIw=SOX&LXWoqsSSb*LWź15. 7㻃LTքdq8&}ta11&CpA@I.Lp+ DvcL7uoN zX'sC:EsOL>5%5i4u1zoìC##}[ܑR/g=Ǖ^(^=TU<Av@i:jݠBR$pZO5 ttv +IL})PUǬLkNp#ZuW/;X-I^C_dp`Z]on;1򜫬*tn=gT6xGukizzpVv(U:8ǷޤpG}ۙ:]˴oSkZv?8ؽ$U%sX'hd< TЄ;YKd' +ŢcLt uݳENv9(?o~m҉%ì@Ŋ~NW%kfE)scJR{⧚Tyx^y}Tٚ(G$zfe^[|FG9:cw(BClbޚ֯ zܓVFf<ܹj~jƿ7oy|7V3qݶz[] z ^{dx'HKk] +kK*M{Re_x"֩n"ף9G9s\L%3@i2]:(ܔ. +6 I=SWS,GLuu_:;: zdɾ*I::AcuÝDv9ӭ:ݻAso=sn޼֢uNv~`b\xo`E,LǿgS8Ttt`]SqIIH>eY)S:Uz.jh8jFIQ񼮪4Cy^i;/kFݜWM>4ia/eNZL+4zL7{MKv%53 *oU<l='m~W1;ӓ|tϺ_Usx)u7sAvtqV:Wkk+ p cgLGa'T>&ŌҗNu8I# !XaM˅L!Nf-lg%Uc+t]Q-% Cpv{" +՟d+i > f}#+37S?c=oW^ F楙]ǽyؼuNN63K=o#Tnզ4ON57,K9,}X7b=<-UZtZsYMR4⣏:;LWb]t#뱎dR`Au%ցBDD95Iyuuu@aLLud:B\:]bi&;e:Lw tdWbǫ@u:#E:t#w"|__02랬z/,?@,r 3VOS)vR2ֽXY1pX8IN;MeTJ<\& w~WW&NW ,4%53LOʫaP.#vG+blhņqFRƠgm dEUϝ7χ7oi^e4O9N3Ayyr#4_'yqM=wLW)jPл" +qVؒu4֍Yc;mPnpTBCuq;Xtu|Ua wʙaaXG2gSS@9!ѢLv#b+܅RC.4wg.ΘGX@GHLu"Ѕ 2C]uJv +|E•4ǵ XLGq#(=X8JqĆ][-uHC̃|e7&41bfN BEeh(A(:V)kif73:Jsf9z{;ҘhK0fns;c~-~[;t-^#*?ezG|;浔ΏsУ73lf;vN^oQϝ8zn߹dgXGSGwGu8*)h/kRJ 76 n異7_,".| rr 9m\ǔ0`qD}%bc-##Pnud4&k$YSc-9nVaԆux-_ @o7`MSc-k2CKsa :¦8#4}FrܣV(ʄG77]Dy9OɿB6iހ.w]Sʇ߰*47CvB%Fr򴨁BXuX: q%5dQit4W%mb|LvMR8u첡Xi*Znɮ:Zw`\= ѯWX7";Cу}b mvAY VpUu +ttPueS w o}.—OW.Av +tidH@UѨLdLcyc:6vnFE OMш1N<-HxZʜ`Ashl 5(/T.iZ ݜ{m4jP9ཻy5bѠ%&F"B ˜V@+UOcTܱ|G#+;k7PGSX r6懎tGT#$h X/23X}(hlb]tFL`.c]E`Et<+}(9b]ު9(w]:X(E/o.c݃}BLtb8W?)E%GXTO=(cb.uZW")Q:4"dc;iΰnHeq#Uie˚$;9* #thiT%ġ&*n%1kqB:(ۇ2C3+-wF^ى0/-3c֍^4]ufRogT;8zCwi _мc:o^sۖ_>cH7s=yW.d6މ,g9U2F^:u/Z͊*˱b<w8U+r()QP6:Xg +e8Pe{xl_`:j0]uWKSN1İN:TKM;]D#B:rEu ;0]:L'2̒(V=H΄v_8S:UB4h+04ZD9W>8N76 Lyqw܌ܘ/VNgB`@&46R[rHsl@*ɰnw-ǩ=-hV(-vq +q{<=b4^jfC ߶mrfѷmUӭfmVBk(dߛ +>7rC.ݡLg|ǢXU*JX.B t#֍h.B::("uw?%LgdWMJODf˕ ƙ&UJ1]u!!2UTQt.p;^OG 'U+.tFv+ߊYuU䷕t߉Ήu u5d4G>%aX9?h>iIIT:7;CtdLs#ɀ.b=Hvx#/[p2c:=-98IMNN-ȖdL+ٍ-A߼';6ΰtz;\${;0n3wkysnyޛo|+ιx{Rٹjrn8ϳ_y|]姶ff57orމ41Ɣ4}h*PVu +1+ڵ`&)ӕ@7u4ntJvG +CEkWw:vߋB8#;S8όu Id:%;8o2J;pXwHNNN:[Xwzz.ܹSbE?YL tΊuSx<\HS|˵璢 #3^pD!(ꄋ$F&9Yk_ΙAևꮽ[8}kS;|߈XGdXi:hId=bɎ2mX_LD9JQ.SCR; էĺ7I@m8kwCW#904٨/q贛Ƈ>Lde{v9a$78XvT 6Yɽ50/g>t[nZ;͏>|[w9OlmuۭtRޛh\a܈x}>%(ZJ+n:h<+Qi.D  y::8JS[H4uLÇ^ XLG:aݳtԋgpb]t$xe:2K+LˋtLv8-!R`~Dݯkp96wud:E<*\2E@eNO-ͩ2]n9:;Z)X/W6(tq +z+,%ig@FOuў9'`;Ky~:󚶘7ZGO~5unR Ӟ_pٖ6ϰ|pi[iv K/NۤF9b*l~_Ӝ,^tWĢPVAZ=ЛNeXrq Lב]:!9ú0W8€uXaN#f> `q@G}( +@9'ʩ(%;cu b at =zpSu<gg`MqFvwΚZuǘ.X+o߂_ʰpǏNßذ1/")G1.o%8SDۤ$;tPnd,r;@9]tls|1V +CeԆE4t}("^g@SS+Bb=ͨXtѡn `JfϼzZ^Zvk~JO&ba[UMYuÜW>~G}t7Tܮ1<|nZu;jՆe6쥲}]~;núRZ85x ^v7mp>={/2.~)KLe339Z{r*$}ed`VtgSʑ +4|wEme`rAhX]JX3G.Kfn,P'-4X:dg9te^eɗYu3˻:Py3!{Ǖs ϫgyjp|\ . e;xmhWwdʺDz,"} z,gZrwh)Qu:'_&)ߩR#.:U2Ө>S:*EXg놀uJv+X1)\@)M(ّAt@vG`:b]uB/E{n0]^<ĺ[f: ]%b]m,t:8Bw%Bĺw!q,8bu#pL8Gݶ- xG\tf:*'g&d9M+K+]%VO3-*Nj T(4[4r9:k1eY$vsSlѳѲ'CKy9|8]89A:#;f+:@9C=ź0u@wDS(eכ^sXLL s.baݣuw<0,QwBXR`?? ."^!@thʘ ;tĺ>鎰S2'{eT/w1G 1@pH,mmܖS*'<й쐧wxW-'m>M:Afu˗cv{5f˩"r:7mSi\Nt֡Ktt:ijBpiP־ ט-)͙\Jug)T.qun,JKR y`u3 # 2ӽi@vuX_%==#Q+"`]0K"0#Qu//7u!ú76)배@pNzg~D+r: A?4c%q&X(ضr\t8T()Ɏ*\L8$Ɏ"@s:!uiQPR:iT^& :mP@eQV*ں:<_qͦg:(N*1ydfzDӥ=g5?^P;,N+֍S>%0nڮp{"y1y)SE^,7Gs,8]هWV.pU,@(^%iQBpd6;tJs7tpf4g@g_2SHcz6;X;݀u +wWuh}R@M _:+aݛH%%ց߈zmRYݻwXw,eXM/XG+..XW\htu +w2G7"hNeX71busopI8I N5'(vEHsHhw&ͥ%)!ɡ68' 8!H8Qx $ ؒ-֖T[3;\9svgAuK+",1cpTf2`ʒ:(,PiVyI;/wjQG4p]Lu0},gR$>.:1ua˲䑇{r:t$_N70[9.kV'wB~lW{reX^jY6)O3nLyҜH{N ,%i&)ӡk;8 +2<ߑNϬN-.zFvD9%!0oc:-.u9:]iŠ?h2Rc@c]L`:Cj"͡D{Cd(hn@v= a4Ou%مu|Q)_Uyh3))QPb#q_E`HX^Τ' b+IObQc㏘|m.5SWV3Ζc#0kbg'[dVD媇Z*80[ZLgUp %e[r,q=%CBL/1iyfA@Ό3H'&AOyw|Y.fx~hwyKpwQKL$#b,Qw˃iϖOҩ<_4U[69X1ĕLw9{PX2Yźcdg(X|6~].֩٥9T +wcD9El"A k.u$;eMcS Ұdf-a[nz X]_ECKらu_oś!! TӗKΰϪL#a{`P9d:`]>}dS+g'8:&Uz׫"= gdL6f<:dcqsҠdGצy򧗹ک 0|sbݡaz{CXȸԑ-߳Y<[6d1Jdav>=N.i+47`|lIyUv<'B9[>'L:aˊD=q%0֚^հDC`Q(͔trX&FӘ&dT:_EK aoѳE"]`7Pĥ$1~VVhtp%܁ +&szu:huJvttI.Zp2a*X(cd(dG#)ӅWtq +w:XJ3thmu!‹y~`]|,Jv>bݟ'9w} !RO%iywzqY"cJab]@vTuLveK]xљ5$L~J'$88p貛NA$iv3Zfyd4sR:3#]J΢F?I*N+;aݘJu4KS~_}q=7h1;a;wNP.z2=L2[XG2}nuѾߤTJ yWp.h.;wDmu&Iĺ:Fv`:XGӝ=As/X/MFvxEs VcKwJsV![.Q t8L4fuAGg(@:06CvRS,Ir(֕@R."VY.u~2(K*j;P{2\}cz~(罹|"G +l]#dSmcI0/[NI-3$\Nόoyyj[+>T\Y맒oqdRi3ӕYr~ u4آW?t.bhn( PCY:#`u%|hM3ܡ.X0iN4=vo:uu?^5`:bmpad:;ܪ:M2{Vu׮]#ڿEXX1hm*A4 ;ln ݀2)as*qGg 쀐>!R>z mBl Mw x [*nҺvs w^jKe:R!|~9ʍȮ"h'3% 1SrjjuqՁTsEVJLXW6^JsifQ0M@XUfyՏ!<@CNĀhB ;6qd4dX'JuQºMGGG n- +/rC;nu.]wtu";1]w;U#|X%D@kP[s;=]ۊՒ7EߚйDvmǩԤH*MQ<٢l:O{1o+ڄO99*kEWFCϻQ)YO N8_f=Sh~4izzծ9pme;Q?yUml + TOu-)@4#C#~q+m8 ba݄dQp6b& vX:τ?1a<'^_d2έE2b:XW47b:y~a=S %H X IXjcn.a +>0XtWzoElAsu%^c^FɫX'NsZrNsÇ}itB<$KX@KɡX#&Xʱy*E:Pαbe1G9hkHr%+b9MiytnK8NZQ}ĥ +U#S왦p_ۯuC; +t)/2[ ik}хy\x7]%7ܥm6W |ZE9Y +o*tTOqj>]3_'ºyM.AX3]rlvws6(l^+b"tdpʎJ~Ip=Ndpօ!.Pw :aΡ,1B4;Lb@$9tE:hα.h9][L.P%;v8e_>1uU"ʼnLY[ =8%';c"\Zqsޙ3]Kvڹb: +̔ꆦIqTZu UKJF$ɤCFzyhFSHsn-zQ-9坢}g`7er7|MZyRLB2c&诽y:ߧFNWƓ/kg4:|[H|fjKuowU#kVdnxߡ7E:Zź-R-&K3]RXd}Q caZX@/puXM<'AźqWscǟˮ˫]( 9Ӂ!`]`3tj>,JXw֭n +`&1٢+Ńu`b:^JvV9׈@|/>h"tZ*6}H1X /V#c:Iܱ.b6׋|UdwwE&XGrjdD|X8omoN'-uS͛]J)sr{mќ+&cՄg&LsSMsVlcTnG֥yZ?3ԓUմ;hv-[}HXڇ-ꆩxPows:rFyFEޣՠ jߎu-Љ*%"PeX| 7c5ƹ)7arUv&;X,"OZ4itL]qFv N4{ 8|H|^u9NеXL.1.T.t@t`]": XJXo"WtE複{}icA\ ;)_o1][ti/O]e:UW$ajQNqTEr ֑USͧG0z|iv#;)9=ky_^Ij9FqRK2<SGU4;R=st7e0ؓMO8O.h|_2=0i8Ӂu=^KLqZO:4VNb}-chuPO*y]U-FDjT|yu5#RᝢbdǨC@#ݖKvK(GWl +UR#nldzukFVuM Oz۳P*SBo~3v*;yrT-kQ(*2~Ҏ@IGS:;n(#V%Hq7w!^Čyh.9r&Y9ͥUJv>}g|aÝTXU$+xlrǖ'^NvL9DGЇca]Lc$邕 _%cz(a͛7bVWxe/;a)Kd?w@ubtIl禊u}%9!V/oՅ/̻T|L56Q^źwϱI#ԉԿ<0]E +ttj#t.g7bA{oIft&p'W&\܈Z3]:hN¯$q\$Q ݜcC Ar“O}R쌘.hNX4 *xma@G&aݵk`{uu<|b:lSbr>]ź.L@XW{2CZj_O:.tl %syퟰNGFUȱd t +(zRI:HUUn^ޡE)PDRӡ%m<iq|j'=z;͵ - .BB>MhV]}O#79ף@\5~?T&gNz#[m~AKs*֩"h.%GS%[m9/u-3";G'pL]ա/aG9oӵo: +:d`$ TA7%#ނud GL"޷*ىrIb:W/)#avL l$vH% lj8(Yy);]ޛ^Â|hUݙy]u5h +i.\0;Os W<:d:] Cs$;x]hv#)NrСuxcÅ89]:&`!.:.rBW7%wQ9?no'kA};ε.j6muܹutu[cx7Lл^st%ŀi*ҩ;]w0eк'wc14 +-Z&;I ɗ Z%x#7Svkۢlt/ +2֍ߣ7^/x74iu~}(.RgEn;emu]+pPoއӹ֥IǼc|6J\W\p7NI! nnRav(yG2Z"'rj].t,:h]h@fuȝ" +>ry!_Dxtk8ք54n:~w]7-uqq.uK.%F*LJ:6\Nt.i:f +Z'pr.tkǞ\xzikkm.NZkcڝ6uCxONl0{g\:Eֻ3Snj{%nr Gt+V˳ +A0ioIѺ^m5+^oޢ8;rčΖ .9HVz{|˘<~î;ߐmvKkG IfG!ېp(DR!fG NB抗`Һ,PꑵjfSrVtZG8ZJr: wqp{.# $>H(:av:w:.TNG:SB疪G}X٤u{S%KNb}&iHbSi}EfbL5p:Ifڟ8MF}FNu'Zu:r^NrqCߒu[w,Luo%KS-Nc0.]-֗{T#GR31!O,uP4ycWtku{'ϙ1D-ݮTl*X+[]Zٸ>_ͮJ_IRѸ$tiT!˺Nݑ .̃7tNx%^H6<Sj"JyR"⥕wy]ʁ)(>ktΉ\ATǠ]tI񘨬B,:TN/S)HpQH=$#艄 *Й $BمI::asr ܭjօ(u{rdJY|V7NSZWK28+;Ӯ}7yy:u7H7-sZᚴX^3w~xvN{-ecѺcqqS OjޮS'vK3N8j FkK\:^445]|RkNdvA1ypKbG+ +N$(X$1?Z_#"U{TTD ܑZɴw\Z=nQЁu8k9n"ܹ7udv:%M^(n6n,dvBtD^KBgQNfWaG 8]Ѻ?uxlLMQK5ZI*Cµ:F\*疇֩ՈZZ'^vj OQtluu`XV|.289nHӿkrG78:!d(";ZhaH,D!sMMGuHh!Wp:o406rwu}J# ݥCSC7җ/'~!sp:5;~A'N?}liӂ6^sRu =,zT@zTNϲ*٥G|MNZfǺ%:9b:\> kvu~)M"\cddP~=h +p<*4uR 07$ZQJU-@NǺ"z +}(;'ݿw^0>ڍg{gU_BzcL8i#sKb*sG i̩wIFf棻^騥u1:ɚn&KʱExZN)%*:QbjQpu$6秮uh (~!wZ:?6dvwЇ;~ ,Id5rw ] W +nݺcܭFrs{Q0 +y\rPZ߀!$th]FZN?fau2;ֱ?٫9w:m{_ +j8…NG~yyإrz:5 9:: Fʍ@p7UsSglnbv4rq9υK*41ABzp$tg8%TRcIϮo.A5I_U_U qЎy9 +S7>7ù[׶ u*/zwפr~Έ2챣8'D$1""dSVObЪ7ooI+!Y}7ϨFU VwgpX>%FuXX"%BayE[LWU[4W[ד +?\'u+Ty\Xd9!Jqo,djΙ/ESAQϛL'{v@W AsNvu_^=<ēqsՓ'\"nHv9fKg%btC[p[suF\`ɮo\>iXF`7Q^%:<r:XGYb7AP^H EVĺ-ss"931/Qx+p +2'^$1"Gnb]ݜ}'r֙£7^ںְt6zbpOR6=:QnBv?܉hqެ5uF@L'7t`]dZqp͆pS_jtHC&P(h.nBvOMApX'X8v`F,3 +D H4A[`Ǻ8Ǻҍ78"a5cݑILX'srJaݕE`ÝcK=attxy:tΙWޡ: n KٴOL:ͧ5qu .>yU0F X'v)psH* Nd՘!)P@xdh8ͱ\Lib7j:v.;/wmw Xgc௓m(OJ{ۉ>|xۮO& P z5'Ӟl8ץ(\9.nѨt %DbdJ@hJܤ^Փњcځvn +0htnWp2w8.h.nKDs_> 1bbmw8^d3֕'XFw:>|'+ +:F"N|' +j8D,{:9r+wt;UpeCuМNXdױU"*g:OxHv Nom [M5$;C}bbkۇ>k,ʿ>@_:4:@qUUTmry CR:1GrxӁrNvtGқL.qLp2UFEF'vW;/iZ`+6g Iv[zhwohHܸۺד/?xVzG=]IU|z&jd[ݧrqIkt  Ny55Ȩ ֆ|qC UuAyc`[;FX'ۣoAvak%FѭcǺ;M0[SǺ:֡:b\U8s:ZzFʉ ELE"P @:Avȁ^^tmՋMNsy$LWV9w_ULWcq˗1uO=c@XW/eBvtulM:ߴX矆;8H4u Avްbx5 K3]ɏT5Hzt +u;j;}tTp3lnGZdXlZJ귺[LC|,9Y~G +y?h]㦝{?[k\p_OqE>rdԂDYSE +:9nIC @~h[^t=b=ڥwhM{w87 n!~01 L|'z{M8:!S9Fbd`UPc] 'uT:{ol9^=fOX'/(:nCt on.rU8`|'^YJ5]~ƣ#ஂ=o@E5]zQLW@]^ձ;DskMz <7Un79[+ *Xbu;m6=L݄DsmDs$uB9<>!TDt8uTټUPQ;y^UI1wģ#~4Ek~42!opvs u72t;=I0k,!Nkb/i Iynܨ?!U\:l֚m||_o;c[*#ÌSJr$j>;qxm%>nBLP}GXӫUwyI?e5㡜켹9 )[" t }M2_`AsnL&Up0N:N޻5bq2] +3[&G1pFى E][⪣UAvwt\XweճJXW +X;ICue;9We]ut";m?b|(mf:nt˿;}w5,As +N jNT=p T=Tq%1-  D|tO#qړ`ZXKj;itޝ|-v5"z +XclR0Z]ayin{ w~rhρ6ߍ['Ɲ;<ӽu94s/?=i/=)gߜ)O%у2;D>U#L΂2sfݽ\))ƱIhw-~ڻF7j#k^n~/bh3)(]-0I)aǐc]tzvd] +@GdP>h@<`y]*U(+8bLㅿŹ,iKWGoWM>OQx@j[dKw]GlUPd,.[49V|`mHbi/egup%CwāXf%pa%eL9*TjuV&@.B-i|Dv؛DsޕAbZK~̙8d !;EǺ?w + U:مu㈑ܲpא3 Ӯ8 A_4" $:1c]s ( ȱ.8gu?]%Z {e+.ݛnl_)Z>ҷO/*DsUtwV%kN{)aݽU*i_vy6ȃU~R7,'n:ᙤ&a]E5;)k)9=2BJuXu=>J7G܁rq7U +N8/Oka:fUm5[ktӪ%ģCtxHM]n*z}9w_ZQek}"iMKvJG:U7S@6iKڄY`R;mRRJS )Lzdz^a: +sw4& #DPIX }J147!;YЪOТ*=\yr,E2Hxp`:C +w}8։GD+`A:xɮb][9t +u8וE K$a]t 8g9b1YAHbuNvnDsuS\b:@C%aLV2(W9b=g:(b?w1Ώ'7`:6c7<(DÝSޗ&@ϱN9P<)Ky5)鐊T (%*FNy&ec QSmM1]%~~ 5x9a$9dNZrb"ZC)>cBjd@ɂ)̟:M;zɭ>SL)o(%IK<7[؋h]VKצ ө>R44UU' %@6o+=6p zt5 }@7fq0.ݧ&FdGL݇&:';1]\:G9yyf[CwwwL 頹z E|U8С7ӽnt +*։""\@U ;E?2Ub7M`b.>VIY.uX!}X-&t.ML%{`yQ@@4GuźC%;򉧗W%##w <<㥔n"{_E`Dl95T@FZ0r9Z93|pu5VԖYZ|,ˡRҚv$'Ov|UFj|rɬ^Ha'͟9%!k)G$+9ImyHt0 М/=/^-T(UdխSrd7..$2*ɷ0(cVdd:ӹt#pKX(Nv$u.5NU-ֽ(y.̿ߚ頹 !V`.P(ZAPĢ9RڪwAsD+S ]YLXwɔ'.\ s;wh[.Nvo Ynw; $.c]ӆA1B+9I>Iwr1u*܉ڄu)#b]JtC> 9Ȯ\뚁'c8.WPPSTt^[j9:_rY(fSo|dRjB*%s|.٧dڠʵ/Y}:)Sl^' Ws$;_y&dGL۟>Է$̓[<t3S41bOyOJ^OU/Uö uڿWUc $d6ZC_adi0?Np}0uU dd>ܪ2NO\U`+։$~U(VUºPKpE# DsIol$s{mUºh+].t?^X@wn)Df:[&dV:[:)]ºI?%ASV]I>)r3@'ORAbQp̓SH+XGh+O +Zic:j +cSb#/K6ʥbMF!N9UX7'9!J|ɥ0nH%Cǘ|:ß I{9^{7@SP.LW?*[ã)8:!4f:&=}_;Ӂu-L(yKy+EzҜrl4Rփ k*7">Űs\T/tuh8*_47rbNC|b:3caFv8Mu, 6Z?) {]C$bhw9 }Ζ+k=A~ٻ}uօ"zOOR͡TAQQU˼^l/UnOx`e^ʼnO:0G 0;.c~,akN@39k Ӯ/|~iZ^y4(ª3% 'E_p E|NleFjRH:(Uu숫+x:ZSΝpbhH>9օ#N7Nuhfƞ}q?5o]T0d:As(YE Q΁ss:';:#E"&]`p'X's$wtu3қG$$Nd'99ݸqC|gSLWZ`:/M-:*__d翍PɎLBofXWGN{ı#-\dO%Xy s)sSkbM=G9.JI0/L7h + u3S*2rs`֢wg@Pvh  + ݤ]WЎ̝ꬱspŌb'3?xp1wOo/kH8jFa:_'Hgu=IUYZ"I1\_k':AjC Y^ь4Q,.',G!y9.NMaqtHn'RᩮuNv*v/DX*xw(C Љh.cΙ΁Nw[GUp(N@י8\0]`ݍNPT\6:4:}"4:@ǏQ?LW6:v^!6H5,ۧ6(OX' c{*` wcWdC\:'; mxGoڅZP_ ytBĿp`Sb&ӁuGڤ+ .)'ug󌲐tNv.78GT4zn3[S`wΐQ+ pa#93g nvF:n`LjikYzQy .Gd☝ZS_rvL.}毎#SGv-NŜ/^/ru^",=K(kxƋ XbdL3,{X)WҜMpDzC)Vӱ. +3Bx! ГWQX'Tʱ);'͘9ԱLw%t`;v$~ǺD`]!XC! wu!$}*1&ݝS}(..t +uݣ 7S +sfXW*pCgαcpDsdѱΙNXgL'&ivct$ExX`]5a!u#tS SR. 6M> R}/ʇTHӘ^"'mwu:w I6# AX70rw3sxoNgq`F4{3ȳ |y +w@o^p4a_ٙT<"@~j7Jat6 ֆ&QޣLPS]Tc +4%^УCsќ^@NNmR`:ŝXMx =XWG&:.$Je}X'/ uۉu#__߱:, CN%{9'76usc5x-tu%L'u2u[!֕0kC~qUAr'vlH Mb B$IYsԥ.T{g p}hݾ}y? A +#֩t9ȟu .ݿݻ%:u$`ݛK9k:F9L:Yw&6P)xY ;XQqs7]%j>VPto"<9& w +: +M&u'P#Zq7%8õ /am:k8q.[W1Y׶.ҰM:(3S9U< i gG_ŖUL{iyȖ/A kYA;=G'קvf6ɣ߿-<[,5< +ehEm:-ni9.\9PYW4# Z6?hw +liɶGGiMdTFN:4~5k!8ʺ?ͧ%Mdž6Y3}@Wt -P.(#5(SQ<ŦukS"$Qr~p2YPQߓoyF'ﺫ=ykye38NV-#;)PZxE4NڷkЅY肘ւ3vNJ~Qΰh .EN;M]#Lm:0CAs0lr0݈uQѸK_4]˺|?'#F.Ⱥ_Hg]ޗu5j;K:YS[Tv7Ks+e7a]mR GkT]; pWzM:Nwō7E&Tv5' 4AtcT +$trČX-e.mk^¡Za!%,wmkWC]pBvƾ;gy@sҶ4JyP; s26Ý5{zu|4]M~ɚwYww YW~mla: :lKpƺBɈu#:~O]EM#jt8j/@g7YW7a|ӛD w|9}4_wEyGO+Y1EmwX:"|gm-VuH:]^[.Y[G8NZc4$v)m uءM44ON;̃3a(g^CFkY~O!FuXw:ʮ4gNYW[%ʺK +to,1U]@ ;>0VMcu.q-Avz{#^d nrp3aLvf:ǟkMGiPuZP&l7M}VZMwG;(\k08%/C `a]X1播kwy pgF ȔۭJ-ـqϽui@(Zl!硼_5o6~Ĺ(LRm|{Œ["2Zt;5'ҡmKmu}?vkQ4X1);[j @ܳhQX GQ5>Z tMa(Av_&5݈uHk:UbC穠'v:F썬S=^R ?->R(h(9edMW!w;K0(Qv5k~4隓%:XW3UZA]? ؚdGܕ?t:+p{qgF1@yu,u(t~Aen +q3(_i*;=-}[֥8o5ɖ v11gULBpc@^.9ӮD;"`6ki:fLѶol鷱|W1A]zh nlbɷU_{IbOwNև] +_zHB:;TMsƺ'Ѯxºjٞ,BٍXW^0 XgGF{SXg'QUOrؾ\֒j:Lwƍbu Lw5LA˺Y]\X^mN њutuxwrjt*;ÓR|pݻNzVFt,Y6yErݲ,7Bj:xWC#ցr\:!ƺf`Qp[KΚo#D鸋Amў%0Ӳd"eڢՎ]]nĺ/$[L7g*Ă5:# Mut͇Yޚ;Kn/iYWS1KތXʮLWLvBӭ./^ɺE(;lt5c:p7;m=:Ru5GOgO%_M+;[]:l%[QrztY۷Lg QWqˮ..Ӻp8~cl'F#,4B֍c&<5%MֱDϩ[kMbźMӡiGS!$Zө- CTF +:{5bCu%b5͛7d]dǯ/pUM0i:cd5~tdvϴp阸ݫ/^9" +b'v@ 0`7%2@nBiSݽsU]3;]u?N'HWyNӧgS\q TD%hN|y<8zB<ʵWx/'i7&+)IuIGug>AoC[\Vv5#5g]|~5Lu-'YlU{]|bӍ7^|WU^[}u48.x,Pxr=9w4ZQz#^vu"uLaxCdTu,hNLvV9Ɇ9˒ɶ><FJ:+@7:r >] M r`z +^}i mXwƍ|_5.:nzcګV7DŪW[W#2W\1~#j|jLtr~uѻEpJxW$(e5kXGRM$ :)9 ѱ>4uGuhڃuМ|;XrM4DvOM{ADv`]ə91:t +`Nv0ÇoT@AwO69Avº^.Ȏ.:ٝd:T`]ɷdͩ +ֱV)8| 8H'3N + Apwk+y&ʚ[*toNW1UZIUx~&& H c`7yrsN.Xx["a{Op=7!W7[^Ǯ ƥ̸79S{ QM ɬ X;Rh>Mqз!ʝGv&ȍji·tZyֻu%8Mq u¢ȍTrqH$K5}v,w\cd>1a, 񠹗LW| ~,G9:n)Xc١oY'MC+q#\J3{ ; +?~ \7Lub:F3c?1^h$ ;uNsC)wT >DϏ%ip>Q%+Ӊc8 4GG*9 *X'|GZ2|mLN=W;c}FWZ# +bA__lja<'Xdk^78_p^+:/*UEkj>{KLAK5ۊ4z[LEt.)Ak*w5 +<ܿu*d5-o))+SJ^KLWfy,4cͰ*XW)XWgX +gfX!M`݌u"$:Ȯ18{A5!.-_*$ރތ3]Wzۼv{!t:H~lX@יchutu~ʀ;N T(Qӓ|7lt:A\G:,s|7cTS5QzSəSX?zNpY|tgwaEdxz>+V.հy.~uluKwCo·̖P&+{^\>4`-O51VR!.Jٝ* +lWd72Z^$Ir7LVF}\힤La'| #"CnXdf˽M7놂p5b2|BvI.c;:=D 됸ƁɮPH|LX'BLu=8hu l9 +JO7q> $aȮ3]m<3+u#ʡt{Ȏ%{٤S),{ݧ! dܱ&&/^iDvΰ"cT':ǽvǓ1wpŵ~Hv=&\9҂ھ:&A/S \ϺyrC{\t g'N7EhF@,HrJOUWF5Vӳ.<j tWkVwyf:A't.B+!o.o͚lz$xv S +b +onr+5 39\ +9{Z迮]wO1<@?\~ϬcZ,VFPQڃr*8J]QϵBG;*N]3?p=Ia3xȨtWN&P#![5 p''[(&]љαNp4.css郃u 99!|~Fс`G Ǻ!ٕ . $Ȯ.X' Dv$ +tL3fnxIt:A'4d:cj[>?Vm`3]q3ss+q* 9D5t=X7ߗRtLh=ʸw;(ęNX'pFkw!)pU{=ޭے kt0|Nowp<bZq9eq JrO; *^tto>sqU1.*^uugX{rL}$HR7Ӽ9.NX' 5]nfZM")SD,$C*b]X5X8|'aX'Yzij:c!aQdNX'[`݂X\(ZX|"h.&::CSǺ b{՗l&~`3jmW a]5As:6:ٽ,1[H]`'ktNvu8";[e8||g\pXdedu]Ϝ:/tpst뱓]yojJ<IwU9}y.E_ZOz+:ݢYhfC(_^1ꛂ#w//I?~;NЃU:tl'tMNvNs\u q:\ҙ ?Y4 9ܩU 4'U +X_Һc`x#5^&a]xI~L/swnf]j?M@ܚGp4'sGwb䁤e:a]M]@6_}Ȍ5ɝ(A_u;-2٥[AUKpAEHU9mIh'߭XOr#3IG5N"qis\}I[5s'lv5icIE{y!Jy-KGH Ψ3+ hMr@|UNm`E?qOpք撡S{u +!J)bDv nL(>)CW:pw눎4B adI]E_Ncg;eZd2*` +';D&XpAvМp)$ LX˭x7V9 t`];' +wu98vL_9hN#p?c]º{E/݃:PZu2{c{n?u>㦣'%:=t+.TsCc19i}TLRM|GsVf| +P.$ %+a \ Г1qVl ek#s=q灝.mEI=u0Ϳ׫5)^]5zd=_qo)=;5y`Ʈ<מ5' l|>;:FvQ[L}|҈ޢ+&O5Zad=Ƀʽݰq0FٽF̽\%;r^d峁K jn*)H@)񛭔*"bpW)ρZ@.Fa]t-}HQu0cNba~ +օw `:XE@ +Ļn:[L'Ctº u|uΪJvG`]e#aG9%L:g:|WOҡc}kJLGnK3ޠm%; EM#USM Aϩqw(n8G%(/uI@ot;Nk})'ě"2[#M1?<&%W[@ٵ>5zDX;jQ9:I|'y󦽕vў=IkUB|R[֨4oD{4z{i cF΂[4W)ǭւ爗8N3 ZޤiuHA +BJJ +N)PU|q 1>V]ǫ`:ǺD +wϫ;PNLGM`jQ:`]b:j.D"TT;u׋Zu(8U:B]]LWNId7a:.F.X'nw핣8)_B@Q A `)HR"mG޹{s>kzfgg3ĺo:uCuCI\0c]h=TC#8α G;* &\U@dhHvW7T'x`n/9Nrj9tfDhfVU~È׿^p\}}^u;n6HS3inwŜ/9: isf]iا !͘`oC95zNsC̀fd@L98Q|"@9@yy?P74#`;7t{9A9!cS^9X`:e r:.nu]Ǻu]0~ə.M?5u+ $=1`:c9It>8Ug:Ȯ/!}l X5t:މU&mIќ씁w^=mxERE Sޙ.ϫ̀;Ma/Ě짼H;2l c&8kgg'[w$aKlPNgtÅ w OzLd߳hĮO^ߖPz1ƞzmcyb^"fփaYԖaF˻.|c]y9G<|:(?YX pn9KrAvCEXWxIXX'*^v`:\I/rxaM9 B:-οȽjbi xXa:η6G9p'S Cp3NOK령tLRu46QةAvXp}Eˣhu'0] t:ukC⒵󁒆kx[;9_b݈1>ٰg~lLw6 ]ɱǿc{iB:[ǓMU%*JӺKzu:Y=PiO Y[ ě:<*Smp8Ns w08q!,v;urh:w:l222 +F>8V:M밾ut:yi-ʖw/CsCu̩c]SNd^T@W|' }v\t/hNK/xl/w[{zӽujـu"`wK(X)pCNs;m= gⴵ}ܹ;AQ:2T9MQT0c]qdssW +;Sf҃hRtLv4 ]xxjAsC o~@Z0]L Au㴰dKrSLvW麪wu3ܳi^X6NJM(AaQ4.!^gg5a68}DC}Թ"m"Iڱ:U.r*As:vpי59 7I!AvX>@ ,+(GXӅ=.\rԂ;Ǻ!Ɋ9w * +tbOXtuXu-c] ̓~yP`tt";9ۦ*c҃uo7z x҆L7:}R +dwx w>;UL:P\l:% (ʱO!8b7muT^44 $8Ɏ&>a`S;uNvq*ߚ?$>khI\6Ͱs繄n`zh>ivz=n"<5k=}.7àrYk᫇N{!̞~uu~f&7ӧO{z{>jq}N:Z.ʵ.T",}na~As +.apӛ,pGr q<)HncՄ 9nr{6:,ױNܤXd |9֑ +ӂt,w;CB0]IuruJw wtAvX+ӯ7)# LX7$7As.o +ŵ$>@籘-Ρ?o쀸;tڰb:!a{\XRyx@X *Gl%+:Q{1 +k'EXcIE/ |S&.0mHmYc>I7C0';Jg=?Nڭ0>9.=>hh~vh~'nDq+=^[}z#j}M \P֭pCߛz^=w!:NYt@ )ݳ`] [`JxnB7ܓ !α.8Ù c2fX547ox9: c]a89"PNXWZ؄́uw4Љt~`] ru]`:c]iuwRӛw`(GPzmhNGXw֭[gcL't5 ! g:⏚<\Zvbl`:hNz4: +>PTFD%Ȁx*\1i;󾻩[{rӧgGDc哉:}z`:Zޝ #_@<6#^:o {ÃT._b%+2;Qn(hNC5%sn3QO"Ka]Gai. ;{npG: 0K q93Yi4 +'(WMWw=Jj,'kqlji>;W\0+G ݢEՍ QEmּGӃzQG|Sp Lv]:N{b$)օ;|wPRWu +ʪ=4qֹ9y~uu೉o*w`9).Kq":'nu";q +X'ӁuL:ݽ{wHs +ܹ9߽j...:PO :TU :wjtcɉX' +lG]뮫R9o8FrpY{Yav'n5M,toqc]syek1>,~N#R֌ܵbN߱ADt%UF-/)#24WR'_=]C:X#GAu?irs}~kS-+Iop鳃q/M>us_K9J ӯ-sCTJL+4דAmzyGjj 3hOn=(Z +ٍU4 vSG#HwD5rq"ܑdG]hnB>%Lx%y972Zglt-.K˾'c*suuuy۾܁.OaP}w8`QYRLǮ:BA|8:ʨ c]g:[j_8u^t7p.f>df]:\nQ \zNp5N(u7ٹ]L&'-[r2hFv:6kS0P/8>qu!:g:uhtºLױ&~f=6u?59cʡ˜aݐ;~ (G??tu%tD84 +CΤ]^VFtSK8η^hR1| E0bׁ.24Nv}7u%WY ]&ۃ݁4m@hg73$CON]SwnI y? ͎it[G[xxYk+G^wYpDz[4?õk'gq>Zkw7߳CI8U«L6Aa]۬h0UF:y7RLmĺrn1{nBN5 U[ ]ma9:"Bvbe=L;X,\t:3q牅rvCS3'{ mc]Ã:99}pJtx}cu>:~c8חŋ3:uNvfd'It{>*}lNv_F8g9:utt";GBR!:֩q ڨH^T5)ʠ\pUTND2. +*s\(hn w:Ӆ9u fG+ CwG;o_1f-ݩ0/}v#sy qa#KC9a=Ɗ),;;4[Ƀ 3\>oxVŜ}R0~Oe?c=)JSwR5 &F W= ;Apcjl^'ɕN]т"{GJ_&N<jenPHkWڨQEpOpd3r|%iH:b(FR]uyq+&dxF\/XX5mI'NsuڊpR0ׁ.N[';I.ڱNZA`hN[q?G,@̫&' ߾ \C7 LWg{9u~ +wAs0G{'XLW$cq*~Y@WSo3m7XձLd;9?c۞:@%ՖYqU}")V@KQ)+9e?^:()wktϛ7csLv?úp p}#ޝC2nvǬDލb 3zy -(>+#P$b"" b=]S>ۘ@2/}6M]bdH hd/w~>5v^(AwDy."Iy}|8E* OFDotq!֩zWcda`:0LLׁ:̕,NFN97vzN::y0H׍|{U.7o!tºR̰Np'ss$2]X^~{oLB!֕:i[('HC+=uTӄ|';N|XL'lbfL@{Ї4:AL:8o*&=!8t8Q@}DfNl}pi]7ub:N0$;:';$Av?"ȮǺ_IpP s{3]>+Lqu`ױ/#^+eN`Sg:T"pKނu7)PǺ + +AQ(T+*3"#d]e|073 8L: ZhF;]d֢]F']`I!z}dBtԽ_n5ǻ0sLj5C3F׿>:'^Ssh8!nIQbqRC'W_CmǬL|.2]?>.b%7j GHQLG9͑Q~DCdW[MÆMaO)FJ hKV + +_)"Gy49a>k{3O[1GLbvjeGvur4$<4vFd7:]0&uk5X|L"|c2-i69[4K+N":e:X>ݪe:ú3E ;Ɉ*źj)A:e:E9Ν;z}hXW9Ԭ0q> -a:]ve:uCg N t<| Pݿ:}ہ-b~AS1n:KtrH̊E-2:$1Ɏ^)%; 40RdGvc=w[5d*EGB\/om̫uhOEoRrf'<_P{v#<vNƴ+wV<%S6y}Mv/ܳq01#8LL?o&w^c5Xb!Sjð(s3zEjH`'4Q]b@p7:Z85uOE t`:jSYVm`?`},?7lZ@ʼnrth?X4zo 2]97H3C|gB90W":ΰZLoђZ,au:XoOkڇN /dYb[ONoojw +.6Z-=$E9r8TjjGzBs4z+ + Y[ :/˓0yz:pHl8t_I-ߝogKjcx6noUzdI/6+|%=n#R;own9--4ɚIprV Xh}Y#ġP]M:%4S1!:vXrq:C9!ae&Fh>iAKKZq~|2<3}rbl6N*c + R-)P#<3] t*:Rt%zsJ:ȘNk...u% SU8U\AE#bε+()ӕnWź_W)ߨXS.2źt`+"!=ViNZw=lWDA< )YVI&I1w#R,V=$iUr-Ug]NM*V|zxWS-B-z!z^K'`oBO,tFN,cڽ}OMQ|lL|6˾FsB0y9p-xBmF?ؕd, :SI򏝽)rg{{G_"0V([ R;h'kd]S{KP}?:w ~e:Z;s}-6QU49^`8;)HvujAvtXaG[=XDNalXWC~JXL@WA]t ;:ݯW ź׷"]"tA+} +U\j?Ye>%㇫#)]K*=Y-L@ȽIS[2@ꬔ6؃ijld!ZT3ڢ3SFpZ;Xa="ib[Tb!:RVsx^lNf?̫wjߔJY5IX:縕\=gcv i<_"%2So*ú/a]1Ut#j_4EYbc,6-)Mc!FGyHkjbqYoy-;xtykB̺RN)jwyIk>.wWubmGmm0`Dj砘dVi=:\>DcL=uZMjSʫwIS?}O>IX,gwUOM O5ݲԦ2puJpȊQ5fz?R X' Bi"h=묇XwX ò~3{(b9($SKsf랊waq;:ˎ!qFUIv*ei5Iy$;-úd:b]bLaLC'1Ldb[[X"2΢[)ߊuR_ +LGKÊU%߁JA-gF(7uG%'We9qQ܉: nNLG(XCCDDc̖u٣6K8TSKkkPIhFvZb?]+~w cv0$ 'ҩ'TkL_r3GN\=Fd5r$a||wj©>SֳywΓϑv#+o߷Av6g+.0ڶm_9üjDV5J<%`\byXs,CDN* [TY%9ӵ(ZZ Fy+?>\ t7L-\@5uJ~WuD<:4uƴ%hú+~$A'XL0OV},h+P 9%DCQHs2Aaݽ{tʑJtԈ`]hښd@wСu@G#U_@adx(m ŸŢ/E8ցL_omhU.oN r [!nSb&C͊I1"jU!g2WC*iQJ2*QaDVϖvo8QWR"x:uov]9vK.輅8~vvbSv{g'v:mMrriF&khzSPι%ݛ|},>n/|U;C=,Pwr،7dmu;k&a& +d79̩0O[#1ia]SBTmNvVYY-0 + ]#ܕϩngL %֕scGg|Gģ`a*!U v#)ʩt<-K+U?8] tO;hǺ/8e:.UV:dW@w3_U% Ɉd("QA2 Ή`qz]u{C>4^{놄u"'`Ϗ7 cEv`}q3uC:|(Jo&-0҄r/.z)9]eu";cMO )c"gX`]`N$[< +ETL7ݢDU|X > +iKv7Vp*0<=af`fmgV_Zڭ5ϳ;u>8s;Czc;T;̈Zz1#LWGssdFZMoVKfshǽ[< }VȱNsGO y(L\*:/jd}(ǔr/G!Ep;ZSD X(Lpa<*=bmݣʑV*L'?&Y-hI:9^]p'g:`kNdb4N$N@}xѣ*9I-ֽwnAX4Ƨp 9֍7{2]huckLLIޱr?\CEs~ʎF`Ԧ8dGΙ#O_ݐxb/ *)VNS+E&_i+KZFt +hqp ]X25FN9uL73HeW[ҩ SG:I_C|ߍכ!οk:itc,NkLXrӫzA9 ®Av +| [:I0$L.ER`:O+UGnu<'Z +t[,33*#% +y1c:(oqt9ԺƷ;a]=JyuU0nՍxF3nzPj}Ol-ZOsv~KvؘZѧ>N5uqك4^| ^bpiQzbtv좦8ՒIE;-lmz@\)E +-a3Qiٹjinu<r1RLbǹ}]?٦`:i1F"qk}bLX'^NvuNb:)qLbX'GNXiJ̙pƛw#8ЁxtwPnt k.Nc)΀.mXG0$S|H^4ӚH#ӡѲƺ[:N_:R.pW ?w S1eK-^ݼ,zcQgY*E[3q@p/u:ڭN'קaq0bpW8m3dG6Oo79@YjIޓ0XGzjquuV^jz)o8O#օFw,ޓJ݇s7[G vϙ[ǻoއyaA-nu'UUyK^G}ii|Ut3s^=7&H)\ 22yNV A amAs2Jg,Jl[u(笇0-2'Y]%;y* +KƩ~O^67_rC28b6Uxaw!:\FQzt8pϟ={c0u#X'L&A@_(݀uƱ:]u?2:磋4[92Wrd/}!/[{vьu&%RhϋX dmvؤ0hqS-`:I:-ƑhQTv/OºHiD ⵙd i}DQȼ9y ^XmiOokYO>`N^tĽux}ՙjx;L!f{YG:xD*<Dtf}. n1ubyfeM#=c%wb'vw>3ɤM\gK/=ٳ\Q,Ҵ +wQZQ⼽%8kjb#{ux~QLng!G9tg^n8:,_A84Zn2VU>@jè;օu ;!IucXsLuw6-noLXE`4=59 mgXUI!g&-M^\ UKW|pENNG:8v#izmcE" @rѿ6)PK]=ϥNyx؊? j\uBSN.jc%:64,*.i|G@5-ddswJUsNsMƧ6ot3JFm7^mKB@gE+8-?[[6Q;x ڷwQ)T >rZ[]%E;7POė[_B|H+s '#c!"awHimiKV̎?˸.F3zNe°NQ.FQv3SZ8wtLܚbB0w `Jզ&i.`t% э+!'X"HRmuD c:`ݽCo:Td7:]b]XgL7:&P1[phu#ܩ(]uЧ"֑&L V,kubt}#LNNnt?]_19EL{E۩Ƹ6%o4qjH^#[Gs))Mަ:~_ejb +7;E=.:Z.Ӽ`@ԣN-4ic\gk}tJrܨ,b +Y%mK-3dKhthB(9T< 4~"RSۣ=4XE'fdfXgb]EQ?M/.h-vgdXGNSCpu t`:4Ǡet{!\qZʀQ ;\uFvu:bnujx  )֑Td:nu\Jv J\~u: +z`y+Qe(v6f&ʩ[Z4Y6adr){-ijBvWvYIPjRޯ"6fyVgY-4#KӔ fݺ9UvSJe2D*/qdrtht [4ie-d"#X&{FĔ~/;n| 6 Û1Zڏck +*0|uh篱c<=]l/ufE69Ns],*dr;N$s6)Y,|,# $ബOFcKܣP3XZ395.HJȕ> +%4~'J MMwJÜ DSat8nLH3DP1u?‹b];tb]`:%d:`]2]Ν;:]u8@WrӾX)oӑoѵHv +wtJwJspVJHsԂa2wnW !ޏך0IN"QOՄi$ʵLGCg&YEigV@&V"P&nZY5k4N!-hu֟=^t~I=y)^σit^d4]fWfO8-++I3Û`@@| xp ,ؾr- n8K.6<6&C~f[9#`/\w`_o8fzg'"#])Q_ /ʒ&6eQ`Q~FXgzBP5bBo;O'|- +z uh]`upHۣ|úꤵ3(QcEt|,[:#; +Q`j[{OSZ bHIĺ;Bu+Joݽ{WPLGSS{Ck@d'Lp!d:CжLG֡` c*?eףGq[ +_Q|p@F 2BJ켲[RMA鞞s1\E_nlD%wD>Qc'1:bdl#}CPc״;_W]O|]^TO/l͞<}ut1R@sg]4Mhru`/Km"kgEֵd%(/*/+2fd7t w/W?."`Pfw)֑֩Jd:GH\1Z`|rɰnⷉutԓ>YXh+]ES;uV@W*B +ЁZ#)ӡ%]+`]paTdW44 +ߍdGkeX*k=` *KN"dXG GİNc%ӑ4X:d9(ONOs쐢)=.iǚ*SePP ֈr +k`upFd@N +vX1#)!*D׌2vHQ⎮sZi׮t|OU͵t&}=ÇyxJ#D3yA3wkirɽ-]v58Ne>iGVx1#pkg&(odPOL<ÑƏ$s̩+:+[q-j5QJ?@uFsFvt)X & ʰNLbp8C 39Յ`_Iyr4d:Zeu#x_R3cLXG{?2TY::Pj@s߯z,dGĺU-^D1_`u>tFv&4ºP|zLb]2.fqCLd\X.B(!d0KתIbrq̓x:&^tIv']u󭾠Z!dKY}$>ܲdNJdVM5Xt>J=:iIQΜvo/]hOl' /boyh 7ؠriQ L9&/ew_m&aɣ-Fw6e^;&L ty#;qfK,dI/sNՖV ?9Aϲ]-1MxYjqcul5=!.ܪF`-ХP+ sBogBsTOA9Z/Ca !Q]9:,+ - 3 \ٰdg]VȎLWC7:ju$;2D@CR9Ӂؖuhu +tuE|ZJ,&~=Is%խV)dduK듁dst14&=6wsȲS +iNn * qt/EwD6*+)lЪ N+ޑ +ghHhE?[a NGOJM\@0ƴ1j] q9(3cjRJ#|ZEK]ʰyh:}uf  vAqF9 [擵;?y/ǯĻpͿcuMۍ|etvNiN&fT;EeiGkbaXWE*둲2rGp\V[+-*GS3WQS3S VFa&:Ut)čhLGa@dx⮁r ;:: +Gc+@sFv`j^thI:jED$`dXG+U`::荭u + +XL(([%%=\5:#ͩt%)螮bLͱNtsc:)8u:@yWqmuJLB3c`21&Q8:V˄LCWQntU#r\+YsRh wIsV4XUYmP+xy5'C{֞Yvo 3w'.]M]db9s~>[ޮ(_FMo^zšzim9_>i2?/ˏsZ\Ydޮ E&d9e= ryTGBR3?vH+GVc.k+r8aVXe5ۥ9X-g ֑~XX솮b͏$;uShG7Z-D2Jint:V K\2bjHcbǫhџZcLgR3Hy2ut*j[(w=:w":> ĺzUGᮾa~(OZj4*Va'OE\ Bd:uG }%"1YF3S/S#}#bXlXJK~+$LMt̥Lh~kLo@ .+NMc BQp;z,v,V=tZ] ʏFs],H\m_koOJ=fNN^@}l'e''lE4=},}|kN>LnkYjo'Yc5d%hVڬ>&eDe7*ϐ>AGl?)ѽT@VZv9( +6͛yt}d:8C =nZVE az6Cg!pZr8tAp8 d(@VʰκLS*u+Ql3T6ڡ@/!èqܤߘ^KG8LJe";~ z#TH8b2]@ZmnSp ǡGFrhŰΈfGd?W>-vzjyټ5Nig.Bztks5әڳ(CL}B-LQ ڣ,:d!ٸ6=JJ8X(XW]'hKĂV0-v 8CHsuҒ}UJD@)ʵXV5֗dc0 +@s0POV'o 8zr%dP SQb݈ +֕tEs\4;gXْ?mUXG#ցm+%= DtGX|e{Vاd: Hy 4GH2!e:e.tmڢ~JRUQEȌaPhQ0LN/>tapS{?(nNURլ}qwpBZ@?wƼTLca]Ñ)gz cth\pH eWb1_ok?̀ɕJ|_/ӿ~A^5|C?ǯ08qǭ}Vs yWE%\JnNz!j/xCN 9\vtQ)kAw {_# G8wX|ךmSPbbЊhlw7OM[:::]g[:Y=4]i{vd= q(VУP:%;XB.#N 0E NumƍbdW!;'de:\2]ϫoo}vp_S,Ȏ+-NEK;b(:5nLp]}ndwt^*gq5> udd89uF<55fSMkpAסͮκ# y7׎gz8ś  s8twq7xQ%A 5GCpͨr]9כٟ nx2`gū/x38\!Z/Av 4sB~xuTr GTg-;rtmeH}ϊuҔg+>4#Sǣ-AKȮ}\s3ց阁1e749˺7-BA=Js"1XtzPi~т +t:iNcDewg Y}7].]$n:֕Su:g47{o48XGؤ8"!8fOWQ Cv*:ì(ڨ/s9Cy԰aĻ$U/ng_W<'~q ]s8f@!zℾݾ?3?_*^GutÇ^Kjg~9<:$u_x 9,˔^ |5ʰ;&f_-u NᰳNqi&oL2 Yǧ:ӡF> +u!f#ut 9ΚAs9 ^ȫam' G$(ߕnn)ܽ@Wu8|'={ +)h?7XSXzw~m~GomtE tp}s%yQnN7GXݪu=>pZ! MsŚESxZW%ԡJ%ՒC/(GVU&^ uypEbU ς>o.~ͳ>ߥruGc4?ᤷ#1w_Qnx].hw7ZYF Ax*w6} +֔~&\@ְn;o:XG +^{m -T埣8wL&g u4FyϲY8ޝ 똷)5צs72dLW-CvRp։QUz|L\F:=rt:d笓;4W.:r>M7wn{t:[!HȮW;[ݻwZĽsٱFv;u:ES>#˺(D^:\vu(Վ% :Y-d7SYb:oXǎM3Of;7t  e~7N+>tXXj81 μ"<10oÇW=B3 _Cٻinn4C<EQf)5{qEߩ- ENݐt5h}' X'i-;k=&EP7]cbx;:fbF!Bv ەuUᇲd ydW a$l⬓"lG:tʋ[r!ĺOwlyꯇ*:p.X:S{ M:\úrr\\rknKa-=7Z݉;@ǡ;e؂(J^¨cAMfUZ|fM}uٹor~>ZOzΨ3˴cߙ1c8\tk +397#Y8w >C21>S(Ig3}s}ɡBߌ.Ȏq%e/ ]gZNr&ER'\unP^hXglG'[ Z !Ft}M,wuF;";|7d}N; Iv!.j=$FΖ +;WNqX禫×:9),?|˳gYs'g)CץQwqk9H!&IhN;CӭA笫d>-d:g]ݼ.;=+L*ܚu, 7 wlQ gPϚn#bxNgݯNuҍκntE9tZ Y +!A?)jn[u~r申!_߽Yw鬓p;"n7]NVEvR5ݰ意G7ϐruZ: 텚h:ھ3- &_\&z_-ս[յk=b6!էvfv;ºKe&ų}󹋉!)&kNF>Ɣ}G!U~.{ ]7uEbx,KTXoXePs2WhZwڧ1Y\u!G;0l]xё?wjPj q1 >!\tnuwE9-4mjYiPfc  a]EsIvZ~ +@:-XWuG գSnZ`fݳ-uZOOq{W,Bou:4W?w>~չtrqºn:]usͯ5笫qjG[CXfSŰY * +,;^0 +G1HM-n_=vG?p&KBM`^Hd%β˗h{]P0陹w<Ӡ@w=d7̓"QsV>M;Sܪ-\b7!Ĕ;gZpI}PgA530{rC՜`ZFe5m(?Uf6y-POD5@Xhk:u~1%d`:χnt%w͡y + օU+[ +tnKc]g: +MsJoUh#Jq&W7 :N(Gp{3]A\`:֕7;ٽq(-~qt'b7ͰNE8.w2g;i+)TejN Mgt t}w ;REYjŽ;y?GyjC=L7Dh:]|=Pٹ)U'(^$ +fX'}m + rsFvnP?7wewut*։JuCCgG`YlzsЁQ +]wv|(aK +^< nJhXWIto_Kwxt@ + wЇ& +>X۱2 <:g&w6&|WG6/rb5AB«ʂ=5UsT-KRr+J5Uf E I~w1TAs\4|o}zno ^ww9T8n0c. „>gqY٪܏} fraP)HZC}Shu_ץAjëPѫD(^%tvXT=F6JZgHr-}GCG:y_M |@R| (Xt\ݜtH]r%aܿ9ٹ #XI|:v99:7Lμc+. +L l<1c&&NǎuAvxtERvAs:PNnݺca]nܸqoS tbwՋ]0X`Lo*2XWA0#S,?1Ǧ~:ă2VDZ|cji~ tܚX|cWH0G Is\æpxq[k*p^mt(VpCV>ۃЭDv%ɉ\5d:lC;ߍ'FY-@A8k~Ϯz0ϻ.L#|&>@sXE`& +WQe xQ'`y A4:Fԭ԰<\ţXhknxW0BAsܥhz9 U!i&l#4uuò3Ä˥{@%sC5|)Cw!UM:q,zdWcdW&6 +84v(~UI6x9AvdP|5]OQÑ +<` k 6!·(QT.J^R +a]/no +Sҙ.kE4d=yzxkkӜj= y(܁o <-xUV~Hp֑T ~a=: 7&p;7dlhd:pf21NWzu ){Ao,WO\2~OJәs:Q(n^"-zQNX;uʜN EGd!Ýr)r,l̰.,rpnfXK|Ԅtv#NvHvǻL']G:Ep?;;+ +8pWA"!։:ќcD  MtPu*ӱhݻ/ +ҡ^ULWM7uocuԛrsobQUȱo]_6]kR*%U֕biS1d6dٱ;9Q"( + S.`&PBkVE Svp%xWRR;·C^g/3{+$LEV䨇 R 5up_~g_>?}pA| ȸ$ҰC{~f{ q>a}ό*%0MQw^;<.WwGא:́la>5g9N:9ݠ68hΧ4[cfv"gMC|4;$Wrl\b!ֽw(@dp.4c:'!ӡ".hDsb ;tgc7u+nAv=\ݍM"::!1فNC9%/g +[E"}rpW*'>ktukAU6rg9Nrk)KulHstT^c2+cWu5?h.ZÚx?nhfz:}<@, |;Bas:QwC)h9FƜ`G_Sxo'9y͈)Xl8փb7U@Ya9n^Ȑӝ˼Tgz)>ә&¢1ZU9qivm'b]47:< X)o?a<\V:ܚ3#tc|$)y +]?46NswjhN2]+1X'Q(wvvVqu ]uN(o59>鏻:+r+ݾ}[ǒ8ӅnnzV/_L' :̀.$: TDp2:sZX]3Uֱ؃3SF eBIY "Q0HRB)^7݋?Hp1#;9(։/=;yr}[uyqjp7d7 +>sArro.3pLfW)/oIKpn/ >ܟ_Iyx0aֿG\\r7~o?{"_6\0S5d]R0F ֮Fj=9iJz2]q${K}N4GRFqMa!p.0$xuq攧cɀq0U]9?b;6O:̭N88NC3X']޻c]MlN8PcCX]S`]IRR_m: s˻ +t"7ݺu˱hƍzz';iu +tNx`p 'T!iIJѺP=?1i;I/d/e׫7OC(M$.(d>VP"PhosE-Th =Lw= +tҜ˭O^`u_x:JdyUm98r%xTҌ +߰J5эf2nQ$8EJoGoxbt[t%|OhrFLzG-6v۱GX8f@wYcY,ǩaV[ŭ̴#Cloo-]'i\*[ Vqr, M u--ӡ # %ġcRSDT,Zhhh۔ТXGhqj#a9JvuᓕnE =;ht%]Y-فGpJS!!2"Au$֕u9Y:N,9ºRV>߮zN#gX#~+}:ҷ'g""K睈u8mN'X)Ȯb~`n9tLJ t3ҜiEer6Sv;LRbdY4n¥СZySq-#3K#V-Fk-N[C7=C𢼑nОUa5jeA} {X5s؁l۫meOw/I&?BjKȐ8lLZ;B{Ź1u/tbWN Tm4C SxI VUu֬d=+|rqFyZ"۩V+bo!bNOwfJi b52rd:!zE +pWG`&.-t]i.Rؘ>º"e::b.htĺ:>7AJLYjdw֭B:@vuxaOx bgUu%b:!aiΖ%V쿷^SbY(Ժ͡Q6QwHD-UcL:";MrMοo^(8%+Eĺ,C 쒖09\jar\D-8Ꟶ~T@-iLڪ:7v^'FizOb Rm;vll v+sG:ۀGG^mcG/KL>vsj;6M@ȔNn}U2LM=ڝ2er,7찛 r6N8-NNKk"*bZm2G;t0s)%1Vc\Y0l;G;u:ed7ǺoEujԓhxuԗu;e +& N)4}>j>\bHv[g4'aUOV8| LN>_Sq_`:XZ0; [)/NOj28Bv;]u ]Ag~٩[iSf][4&a$)YIR37Vaźx&7bI7@+>ZdQG 旲l^K !dvT:UZOsέUSu0K ]61"藳ԶOn&4GFhci1O&a/d~Y7 +W9s"s]aN7f{!)ki&v- +ϵv)JbDQuZpE-)-nUvɮ,a,6#d~ >bbet/E)ͩLSFdLW>.WQΰNqʰ4XdXx]#)Y nA'!6KK#UbGbT4+ñΪz.՘1:;2]v 1A~(C't ,:J@GCb+:Ɖu=Xq(бSe9.! HvFsyGu}XԖX47R["ըXPfU~uKw=x-jZc٧a]ӌ`콭%&y7eDG>0Es?N8ͳ=pwl7:6Nf*H6o66-9mijwj䲷'נѮNĞ:jK[2qfm )+{pf= n(M\=:8kRd:K +tZuktLҏ4 scLaDQ.b7ez:1x@stwpzR.ٵ@G @gLGo@&dGXG##*^@(ST@ 1(6yJ"v w]+@vĺb{;]uJv7oց 0N[7953%]ŏD0u;LgXWRa#qYr&֩tt*:ƺ'd*TB8,g"ǽ4Vjh`aDv,Fx4ZƫZ [#xUXM-F66jL2ohQ3kQxOH_dPzZ:U{Z{󱻚CђNӄPu&|zu@;ɣ OZr~FwPyב_ +w)-O]bK_9Qt'gi$ع;m1ӞG堕kS;ZgƖ|Gcҟ[@^ŘU]Эu\teV(fhǑhqIs 잉蟓u;sZ !AjPh͑)nEDu(`u:*Nݐ7n+t-c9 ;91OLXX@9'[q2̅WہA%R]+E9eu/W)i!1VU \pJ$vZSS HsZڪ::LwmvZJٍ/DW4u_WcjFx&s >t4y5y4ƭOև3:D-B_'j}2o/MR l.,N[=_\d1lghM}u!WnI2I,t +, .0Zy-ZZгBsxQۊ}8269*(<&Qi$Ԅ(ͱ·<(jx4fi)wU;Mlt:F]9]t:a4cݽU&R9݇gݽ{wud:%۷o...ju'OٵLPH(Xc]% J,:ƵXg|WRSa!n;C<@6~N8d fK(&$laLS|`pGCu@PUs˫(Rz:By"'viJ 9]3Q1m\tGh[Se3KQDSWA "FQ$ʞ̓g|tWO6oaCn61o_wʜG||U7 o};?#֯HՄWp$[]ڏf.xǀ'?`>";'Dd3*=~z8A)w}ĥ*·/z^GUVq/Wyhh ^RSTEHۧ/, nuNsF[޾?Ǻ0P&_9j).WdjeECwB +:Avh3>܉uwuF ۧA_ջpy>r;|G-S RȩFpB骊 tۈrG ;{;DO#ZY&ڻ [dKrF9joӖwUW\qPV+x6 yYfeG[j,XvodoNV#Ƨg@ɪ7vLe%tG[aQtgQFr_T,2ҵ-~?Bխ((GÚǎupeOv"Ҭϛ(w|N#Nd0D)ʓגwXLM+nNvx;Xp9I;֕&vSX*^fVXW\ @xCIA*u"nd: (AXº_L*wWu.t*Z:{]><߿cnĺn)ֆ3],'VGҺ*-iֶ36qCl4߀ڧ݈uqCJ2p^E8IoEs)w=A< Q"ʜ +_qQ^W >|gQ&a`c4-hSgÃu6|6RX/K!h6(/f3y2^p_oswA՗/:#Q17>t[ջz\;T})fPO_+d;hϺ#ō@ŋN9uh6^|sX7( +Q֢lc..٩Emu +>IruI(d%b !1 qSx]:\q`N;:{ ʟ˥+GǺ JD+%G"t +~r+M;LWz9T(pL'9&"U/+p*7TGF]^}g҇&G +B66˭bJ$(α]o#֍G@R s.@O^Xxw]hjUҏzUs^w:q0"]8I@tx3+ C C||'F[.';^yg\U'Zƒ;SƉ:\}61  +CAT 윎-/mX wkz ϊFt$syFs"5>Jgh:rZ9Q⨧TC/^ud+K6HӜ\DdH8IqAvb?TL:tAvr}RCy:^>ca:[ߎuumsIXWfK}rFlAhƼzK +G'>ޙՊӧgy֓[#Ճo7.=5v Y /mh#ω,&2RčX:nu^(K곪GkHs# כ۾=Tcd犵eS˩b.X{ +:%9i.pXץ],ͮ>G/?-ߜv.R"):ºFuvJE r)pVvɫQ6rۃE q upe;}la$iwy[Fk;2ۨ)D*} 4@>TmIUEDP[ȣٽ7:^zyZüޮ_6Z|\4sh06`QU2Z(hcKv(h+ "/'/Yzzw7^3L^e +mWaL͟Imp@3ЛqSQ#쨰:Sx,#0:u% t##CC#Qb_}Lvpߌ&5u1Z">4:05#:؍XG/ +@\tЂc铓 +F J"8U C#ЍNdR+~R+CpsPLw1dPDCL`&f XS^IsdDt=  @&IsXXEs(7S.7םdbX#sW/ͳcYNFWSt@}Ƅ;myTKa[p:ể@;/%70ǒƫZxN ?+eA{u9xd%sf/ͪ+Wܶ5匵]# [}d~ -}#MY(dh:LuU>3MASOweC9x5⥙Ű.k\,L;+[VFV6#)ֱerzfI:#Qi\o7N8mSթY>CjFLg.Zmz*L3lXGSMnXGSЃP@G) tu`:.R~wo7LIuu|wB_^:OjA9ƘL1a?%;*xL{"3ӣ.]ĺ +la:;;tH +&|CAba:jB63|SBckZLF4 +:{[F68_VgTyml;Mdِ z!Qt`|j1fN>p(+P#qhN#.yź )НźRb 4wo_Zcu +taݣMJ4[bv1΀ZT)&bӽ Pt-rٟ%;c:lC1'XגSD tu  Y;Sb=؍NH?cVKJC6)Xt zkD?*icB\[p)+you94j`̺,%і$8djbFޖ=J]6[bl_43Bkm=b-ޥ}h|px 3/2:&=zͧԺ:.ٽɀzu!/FncN$nI(%Q>Vs#2g ֵ9Y=y|ctZV0eʪ7;-mE&ٵ5 ))ʁdGKC)eXLgXg:Hv%Lrs#Q#`KhÁu w4t@D5 JԱXG(Hv @su ;úB9%/ORnj.L:Lݧ!>#;:JPS{,zrR-̾ؤd o‚.`"q涅t wdasLLM%&1Kk +wFv:C/M://="z#wh}d_?#fejA9.3cF4>&pLJhO܎Wh-W XX`:%;<n%"O=NFi❀u0Z#XF:E +.QM#ruxԋX笧d:΀o{S?mJ|.w$;tdWztHsud=xǒa]L&b]`_l"ջje:#;:Еj?a[K+dgLj!!~zR+0]nR^"oG +˽F@M}΍OS1@Mq<ԇnt9ӵpgNТuAvh0J-Yi3p{-2ӜLx5ztsmP0~jB#.E 4rYoKk@NK޸n頦|&!/KO3>zOrr2ONec䒏ʙY2YN+V]]O<㒭 9ՉLKwkr3ӫla=]n +n#4XW99Aϰ*3ٌ㲲izh*Q:Nsh@- QF|m'ZLfqtf &2IsOR+{\-i*~r2Z(ӕ_Bm"U`4w{QXM`2PRC +~/:uqzӻ{Hv1ݽ{jxIv"Fj&pVkcGtFv[Is`Hs8r]}!&M=5[[#:ú8kj9XWL$;$HASMY`,eLmWSU;v⒕htuyL3LLkk;gDd(3= oaY"^'iJ 5ik=k}jHƐ(qtȰ#4/n-R{f{վ=1=GEC:zY /\ľlla::}ֶk"#1jX=3/dXGUusct $&'Nr*Zs%?u +'RrBs*kX'^~X8م͖ǖƁ մGI\Z\@wNs8Av:΁AX[9%{uU`]ZXw}.XJ#i +tBiIǑopQ1(W.~GB<<3ğ.xI>/QP%^܋2~tVM?:V6=ѣd2q4b~.<{~3*"#0X91Hu閺Y_I3QU=IL7L{%>M(̙p8oQ岹: + S}J\CZkN~.u h kQnGs]x9euUnW tŹx#Dv0`s=;|g:a t|w;_$ f!W$ƩL!g:adDŽuVU4' )n]v | Ӂuέs#E5lNުMvIC`])x\LcF{}pע\:1stV)S pҜc]dŧ9НEv]MѣT`^2(kTZF)Ӑ^%9|G,v@9"s_u&2!>92%3V=^rnݛ ޕz`Dpèx +=FI9MF^W;5zuZXeLNv4KW\4؊ˠ9'{k7z|k9Z֖vGRJ~<柚si֢cƔEIt)VKG pFsXSM$yKpwEќNU[\:!,DM.!U'Ep}8@y?|c9y NLwd)'Ƹ  -w Сtmt*PbuW @I7:H4G L;oAvJL'11dp9օ:';k.ºtRK@'Dvݻ wt#p4Uwr<XNʱΕ.!vvv&s hTty@!LT廧E57(iJW;FeL=UΜ~jRrIUUUOKrzɭxv]ܺd窛J7^%(dq۫T䞉L{KՅ=lYi]v~2W;4hE4*{'˔nsy`.H;3]Ff#%ROUuKY@tG) o8R ȫNk NHvs,B-\ 9Ds +|?7:adŝʬb\ʆt0(b$ -‡ˁ+p͉Ds~ 98ٵXWN$T tdAv&0a&Uº7orTƢ 1:P4tgdqXWفuNv|Mb:}Ds~* G9ק>$Sba~r8іəϝفul|4{IY)(ۄ7 ɐ$9QM+Z{k^v-s]Z_OAY?1i2:DC/I OoE[:nqǜNyѨ˙ySf8XPፎx.W,K9)S +%>ƔGLU&^*I`ݏ[M*#wSe `d!i$K.c39gMvU2]_zRX')s( ntl/MnnL' xt:y%;NnX A" RD1L;0u +[[tUu\/V]7u#{ssNSfn;5?u FXWBɪtuqºp#HA8QF:I w唂'@T&yLV[*Se`HJm!P#'X̫X8R:yQHyNB\}ˍ ޥd'6,Vw=i-!9rdyG#hPxi'K?D?nu)5|o|Ǩ]A$ta%>Z=e1͚=3/(jD[>ĩ t?Q$Ǻﶒ%}&XLKR:Q9ɀ%sUKX'aC-Dž Sx]7 Ds +뎣cG[ 适XwtUouH-Ӊ`:t:}moVbJd7Ǻ ӁuV#XOV8a](âG[g8}hu"& ŏ %C]nu +ؤ0][d<J+wPr# *a2tJϱ.һ+y@Yźܗc[RT͑mBvSwgh1mt4ۥۤ3-r+ߩ#N7^]K{Iևw>aNm4=3n" [Ϝ~2tɮMG0zՍq[e90HW)x>n +±=FNhLoH"=a0؉tau8o܉uxoVrnτojSֹiT<ºLWA`.dWuwɟg1]:qGCs玎AC::I-م`ۋnͽjrS +qㆀźt79iR-,b%Es:j[Iu|b8&s?';Ndؤ_TaºỄu)8c\;w.4"-DP.J2:MYR8:.1&܍49N:r~'w";/=*Xw?}MqɱyOFSWٳg'Wl>qFgiJmƀ଺#Շ覆J\R:MyoBv;e^9/v?濌Z$%# ӵ.EWtXFpLb]]ữV9ܹ:ȝ&L'[-Kq:J2w>I\21$A{w:)ɹ nz}P`:|^Y"XwcAk"z{/kOqƗ8 C rbQP%cE%> :-VYˋAJ}XflAX%.=XCP RW,4Noun+ź:e:;W!-X !0ϴMS69 bt'1p~r3Ѩm^.tuYQmdRF $ԇl]k]&XgU[V0H8k{\evdG{߯/|55_n&2⋓/ѩ|gIL;yQϏ4>{:kSsYl0VM.S2ss&O (Lf|g(gﴸ%]Y "kb=XG3=P7ӱp(ЍhόĥT4&b9e"֕&)} +Ιv/7^r1]ݭ Fp@qSa$DC@=c:*Qd:HXG)ֽ/z/Xӕj:;>?5d:#jZUMa]I"d8NɎpg4gLj9NHw"úFv *FHsQ{Մ*`C'h@7<#KXg={JyYÚ§Mi ":Y.(ܡ_$0|;kFa"o~;5KsEM[J[p7ۭ^%f1ϞT=_`HKkW+k'4Z1lzwXVTiS/jIhBrFLcmt-٩23ģJ iSR?XWyQ:%.h@Sc󾈎V|W^|&< rw$֑, +ZS*ҜФXGaGZc@wú +FuoG2 1!!i\*ϛ@GLG} +1I\'/V)! RԵ +ՒVò&l6L=uoVUYR 1MPH|012CVReN;Q&XENbĂ@7M:М--5åihF5)X7Eˤc`fj#'sdSibÑC%)@N-$XQ7wIju4.q9t*ߖ&j,gS r:MM&uda^b'X)Yפm$Sy֡VK- .Jbݨb 1ݜn&6=5K}׈ΌYDb]L+)gdG}c,/m@c@9WOӠD3#>)!%RHO8$bQb]DV2v|VW2+Սxke:<^bȎ4hTG>t%B;짳G2]qxU-:*ЁhBs>.SC#wqt+Nc`JQOHf07ʫմ͝(gJ椹8i!͖HswtYqDTgt&ieǰdǝPOLGi9.u` R/T$*͘ڿ9q _>v>2V}9̽k/ڞdFXK8;mFo&`o;=um+ŀTums#6lvy>$hC͓6~qh|Bpg:enr a @D[UeyzV'dXWg(0&p7*4f +ߔ)F6N*)!ץ+%ܕӦ!'%#{.Ng8%ź}鮯`G"2b#zotߎo}SKÑFX7[jUaB2Ciު\X8֪& b[3j+V#oM#!Չ1 .N.I9nuJs:g;B:KC=aO[i5F9xd*^UhE%5s)#&nwhpߴ[-֥T9X]H4Ko=.rw5!%h`p>e=T/^WbNɋ'3.P_Wo7 lڑm u37%;8iᘲ42yj.MMNq@ +4dIjsrɲkp[<iΰ\Sb(߉̃X7a:$;54;`W+͕[6Cal:UDKʁH"bNiEG>AdXvUbXw5%_Hv`:%[)LO# +jDvwDC ,C,Ϗ(*߷jr1b|Qm.)첯;t~G@G)U`nXW"򘦈u, d:MfGWKӲ*#9;JZ$h=(PqKpqOC@)ory3^)Nzʪ5圇ѵEf9 V %ʱֵh7m a)ilSbۻ#Xe!=̆Y4'9s"NΰP\x4ۏuH/2&Ya@iYW|38F?RgSz"idw7: ֵdG;6&5R:W*^EKOO0S.uz4`< +4*ISSR+Jpuqĺj]zUtD xH>6߅Lp2Lw;X?UgG?R!ºʁ4#q*q+͑p4s#6&#eb"P6i@7-ܥizͥrќ<:b?!+)֍n$>?}Dd:6kM)%5mgL.-|Ou4lFy0dIHäΘly>_sPoz:MNe{:m5J=_,g˄-д,a&0f e9`U`?յ-G!!D:%ӥX¸yp6.TDS#)ӕy3f=:=J;E[t TN#)*(SoG(1@cXW=7WͱdVH׷R**HdXpցZ+_~%ixu\2?pWLG'!B0FXW prU#a壇|4LG}_b .0xc* 4=z$i1y"\g`!:8ntzʰNU +Q.tr qzVx5Ya c ̢dg:FJ `2j[֍F}]?:lS)^n_d7Zklu˫-ߵ2Sj0m/f;* +b"X$Ĕ/QHRD(P% ~ +GvU:kwsoRеgg{vf9l@ד[tXS: <} cź^hUi) zaH弳{!-0* t`ܔ8!a%G!ө_@7:;ZDsu0]SՖq( +P4XA~Td7d:P{GͰNL7:;g:Q";G Nj<"Asuݐ~TLWOGNd'[ wOl:˸XWzTMuj%ȮbS3xdGedQ%_ڡtYʓؼld;]{&21y&EtI: HAv#G݌mRf|JډeQ +зF8k`ot İpvws37sC;$ VO_Xn*\3yN)+;(.|Z-^:Ylv="i'#6>ױWgk8FFr%ۙ9r Xw8BNp^(UXA/*فuht !0[C!?VrdLX(7:Pk+7LW+o@'}bʕQ:}u8!':p'+ VC+G +JZ]pW4ƺ*+|?ɱޝI:XMAvCCv?2d7d:;\c=s߁.N@QSl+voL';a7:@`g'\J\gӝG,w ٰ7vr>b1tqU: C1FIIDjAuARw6´:N@GpOL`@ROLƜuz`::}%tڝ`4X¨6NKŦINsAvZ]X^c!߅:) 8Dv:yש< γepg׈{~C0- CU`1 +5fQ7\Ýsw?⁁]&cc23rԍ!ldwaÅGwڟmpn 7.<8Ï`mg^| k(7bXѬ7͞xHŦV voø)u9|]owuJgӑ%gg'7zr#{gڼK!8{uuU!qvb]qSX'# ҩitj9uU/fdӁuf1],NV<$.f#бGU L'fS:A8 *[ \u@ݻwO3]dzTt+)SsSNr|In⧳ mz~X<^Xu(rsS0\q~ȮrS2CǺ^"ga#z$8us,y]V9өE)va\HSj{Ơ!y-wˡC-_h?wG-~8<ޣ39\oZ ߅.0a{./TrvNfg{P1Jt>gzbl- Wo7~]< \l[Abwc<&m(Tng5+jJ'u0 +,õ4K#ֹ;\:Mu%c=Ta t(2#ܬmyZќujtY{:{?md'|tBtNǦ:B$~nr#~dױ)S3a/5oMYH:~>~臦b:-]]ndNv +j#h+MW]mɗ[; 3]tNs{N#Y:8\c]T +J;ZVg\^\TR*FG K!YX:ųvz59.0l3g1(5ʟ%Kd{? 7Co'sm4hxU|>vԚ:Z6k?p;qY>~W^:E6e=%'xh<.XTrPC[ݢ.zgTW2$vew{ 7s\:)u˦tq~(Z++sC=3us_Ptt-JУM%Nm+αsT`]d:I0@@oBhtֆ3] fd' qfG7bu/ևm*KJ5@_uC}GFXތ$(=>`qjJI؛(={_=0T1jx u֣ ++е[l/ /&;\蠶!9։w%5i k T,g(9ӹp/'-O++gb&NLeL'QǺ;t4G<:iHv?5]tpP9O:Xp]fX.N(Iӣ]zwb8NfGM#~u3tVc`:X4r +!9ur[RU;Zumv6룔t``_FZ$R`]dTQ\֑тq3%VQ:E֋pG/qx֜͛+.70&Nl1Ì4ha~;\]g?|oz9w%hnG1ڕ֟cpvRLN8@6PH?)Lzc˕yh;sz 7b:-W\?5kyR?XXz&G4/1>:ER-@9y&pd߁.t%߹Yc7?NvK67Tpew:X'(]Lu_(M5M'X Z6B!!XB9-!Avu48KM[Ϸ!Ǩ6r: +# 17: LWo:IuB9O=3ݚD`F +|S+t=]Qdlt=ȹx0 |c]\P ɇt:8v8!v;4WjfK\3ߤF/6H"ï47ݶ1z|tFq|>]gkYVw.>oҾ[Ý)'k&Onҹpt:V jT5 iB\e$[nu (ou=0חW&7% cܩ NML'C2AvC2A8v;alQpdW,g,N}p8HAa#R]0sSU('vrwĚs胣x:>>>Zh +YDX7c:Ա._P Ůvi S|׀uhQSvzt-/UZɱ.όp׵H:OYA^'z!-(KL&T:RTȠҀʭe 2üSS3óp>6L=rJ}So`1|L\(Sf:Çj {8~uĺ9g4tOi,d񎛱m|0:A?v\-o.g{Nfwd; XWǎu廊:$?ؤ_&ɌuOb)tKXY3cg9i)6AvϪsE=.2]$ +khXzm3ד] UM:~0bTLD.Z@sԃMuuTXXW@wȮhnuWR#!UH޷:|.Av__YGBgp\!x >tX3aP9*z` +ӵ(!0\%;&1$J-OY&d$X9>#:pg5h^PHpJsJyY%Y@ϔELވڌt٘|'NCliM7:8Vmp6TjQ7 vÊw˪=^i9E `a_|~~Aƺ]:* +oס+E9M00iuuHlo2`*[fwen^ nTs̹2:X |mXS3"޼^4 +ebCx^MVpʎZ #I)}jM8N@GV΍-#vN:8U:%;@XWvzl:pqu$O3d9.`1ΐ#ITE)tD~ L# )%F+q:Gt=ޅd,eRe[w%Ltwu\ ڕLGc@S)v)h1Uu7q/kDv.4ꘉ$iN+#SX9C8"+!";$֡Ҝ,0cFըN:hM73`|g1oTc͍̆]vřLHi)#vG]%:{^vU #^;Z`\6gnW [FohChb@aXG!U>ܕdG@WǟwY9be:Js?E+ݹsGa:Ixp}~(~CS}gR>"Ŀ6;:. ՄuRLMwuq:rcn}P2cu3M`3pdΣ%yV(YOEY8=.)ġ,fQnoT#Ցs%!l]NBd7N>PNlLgґ5e4j'Sj]U$0vo /,NiZo޼Yn>׍ N̹hu[SHhퟻ㦲Io-i"MB2%[3K^zu;cQ8Sh zlD #eGpWU~Toч 31b%߅hR*(WVG`ڋ]#+dXW"A_EA&%Qq Ju'R$;[2+t-,tĺG@sRȀx +ɮ@sm"=XG|_3L{=}p?!mTP_.:Aw +wbilXwu˕2"%iŭmnGNc~01]10)i + &(B^e +ee%Lit:T6*$ıeRس;Ŵ嵬 eݨG&v0o3/39ISf.cvk=mȇ.Bmyk X#hg>Zki +>V!#뙏9)+mɠE{-r.xUgcMrlg[aݙq&f62$c~?%̘:kcfr# YYIU+Ul$ցuxRVMZG6o%詻xkRZ%Q#dJNe&ǒov]-͙`Pľ Erտ; +X|4@%U#`:NpG3)hPXD*V&bJQKb:LWdwS?t7đ@s!8TepG#h΀.`ȎS1?H{./2aV&|Ǖ=:ّl7Aw،kXg|{# ZbQSLTC@韛u 4.:s/3Ld79-x-x0tht-e wlѵ!dLͱMu +t#{&'!H#)J.JvPA +h8#)ߑ$1ǁ;* lWMȎ ;rb~Xź*n NX:9qLOGGׯ_ke'b-Ѱ&w6ݶKl^Nt6:hԧ)W+jL)adMtm6kqOl AZw-Au߻F|זf#;uju +q z̟uFu5i~xDK ΍XNPjNg;:U+]Q-D|ɮ"w]ź^E?$r#o*h0Wb jF~Wګs>Ljzzfzz^hEBGFAXd!aKӛ}X;ߚ}]#?QcݓCVXKQN ׼]mb[ 仸w=CDmXiαNq`b/ 8z0BFkGT +@X)5F[U.U)VN/oC_XLK7?ut>hxwe-sm~b\KA .,>3{sz_`13.tӂzE|itOX\W{Got/R֒FX2GHz@P [bt%ՈՄb3z)^[L т p&e]00| +pYnc9l~v-dg:Nl꧇>ֹiru)LWE`;2B·w|p=6p޵ww8{Nr뤀nX qQ` ^u^6":Fs{Zբ uAWH:*l@vo;';TT ';uts:*҂ٽ߇mVwg:6Yz ;Kd`9:߿*&DN WI*TYH#up#Esg#w^#֊*X8Oջq7b @وi:INiVscAu%~~ZFz4htqv蓶p:PC~830m$/XB7_x6 7{{DzzFI";iQ$1ҟtꔷ^R<߱ 6mJs\`*P; t:3c]Gu[U$t@p۬n6\?9u'ӕ>Hl;:0`]xQO}ѵ$N3ݓ Њ +:ց:AF#t%4b@#?uXnd ֽzȎiui|r}OqMNεb:$gr!z(OFI:].Vz ǩE/vg&v%Av_LRPJ!DF!^?c]$M쉫0]JTܑmWUٗruVNCpQQnw{v17֙NFȱ.έX'?64qw8hsQr\#XׁNCsX'fˇ8̗VX|'  +E;u+~ @*V`hN4α%Ӌ^9 46 /#p-޼椎1kZ hcįJX|"T' +:IB9Z*ʱe_P_ʭԱ3]'@';7Nsc5AveqEpNs:LVzݻ3 :9ى :XTHǑ8*(U( Jow9'wqwwwb^Q~-.4~}hS ;}]`k@NGǷtVi:cwܗmG?&bd yS QDKȼ)<:SU;V8Z===;UI|"NGFO28?}tOP͙N4]:G<YHGvJ|@OP#:xu#֫‹ +Tioqs|koՒ]-^'Lx5'K@ljcQdU;.Y80G—J-|ѯ@{~Mz.>ۓuwi7e4f5F4u=oD ;y֔7T۪Zq"@lauKa]0}*>]}#}d$(]F(縧[Wd9>abE'Dv~'X FdU5(*y~+Ǻ Ut-]Q%;*Eb7/"R+WKIZ+UsS ć-ֹs֫$#AKjǎ|f;?9ؓvqt#xlz<ǂu(@.?M}eL#g&`~Wv䘷N]A0v*s]ui$UQ!a$v)lF[nFΥ<Aݘ +.USnQĻ+Oabt8poq~##t:,LX'讒 )!NKLpڿ7 W'WPi:9tj%XVB$"ʁu +t-E+sЅ\/gE{kQ:';Q&*X;>`3EQlwn$` +~UtLt8D~t#x(hufȏ.!GbqsKA'33;`zDs{ZU%eыi^yzidK59#3C%٭UqT׍ם?7nM&l_2^5STMc;(h5voxGFb_,kmoyF)ZۉuUـ>tۓSaIv@<{t')A<' +T{t[tO뢕W +@2]º@t``$ʉ*1N4%ź]]]NsoDs/ ڊu + \|*U wp *v4]:ZPK{R3,rw";Pb]+Jss# 6$:V)Id§<RNNz-Q5v$e(0%FT7'%rJm.{ُ(ZkI%ITG#& s[ Z3[[8zt?rަ^\_#֍@&Qϟp[XLޤrNZߊDq,hY$69yuF]0;##89:RߤUgT)F_&\ N>8B$&+FK@7"8je;w(,(Jx'։ɜ{7f>d+Ǧt`E+$yH2;H*HdVX2d+@wL*"tja:ɟvQ^[ "W?߱.Fr{<uFb:: 0]:m3N9- Av~"t&Z+'X/dG&Ql%+RVivRgZR4 \Y]֫eb^5CUQTȼ9IK셛^2a +7wOt UbtF tVJlw ^RNl0z|^jίiA|G[ twICiNhtҙMd5kQ7ۄΒgԴ>"_*ex/%>Ҳ^DSHNTmu}dF4.YK)%>ja޾+J0u$nb:;0L&X]wڒE03]; 8NLrBqSW@'ur>zgX'c]\Asq*P.Uo,X[bJvzxEE|ى ;FN F-ҷk!ikiG9!^{ؙN({U];TOS^KsjufLNQ.Qe!@ʝ:ϓF by;ly~rs|M#^4r֥iNmZU't{n6j5Cv^˯&rno1]n^ɾj +Z{4ݘ~׭$¼J1yL]:Ou1ӹb+ќ\uRb:@su'[A"ͩMX4Uc\tb&Te:E~HX'hNX'bXouF d]E-! %ӖlQ6Np'kN3au[1!ҡscN:b(GKqKr&4%R+g6VlJƨi -+TZz^E_p`$PmS^!a|iif5>źQF# +4_J?"`_^t|RsUh_4;s\W5Z\jUq\#VsEx|/=_O >S]O`Kۣ(v +T(|U}RgwLKyׁ2]XW)sCQ59iPvouFp'&%puw^:ɗuRFX0ϲ٘mmg:0w9NRSCpĠU qsKd`'wWDvpb΁jw0bՕVLG*NXaIKX݄uc]b:vX†a/6c )i +B#VE +t*Ӂu Ocq6'XL +Sp֑m=噖4SYk'9yDs5piD;be{~KJmU`MN^j +kw~Kuiz7?TK]Ihq㞪]2c"V.4WqpjM{+֑H^&$i79z1_r"'^ [^ݩwkh#]"UڍIuȓkIH''ּJB\]OԖtrT:[R82R^u~-Q^E^ OmV>85%. Zk/s5)}%=rSe]uUe-Ч}l(8+>.,rlG՘NA,a` bʖt~+e vu;;9sĚSmǵ:/驂dBk+_.-9r{znz  +I^ΏFr_Ky7_ot{a.ȍuQ6jJgL56Kwv;*&`ڙƭr3%;J9}51d]k$h6ZKTtMzL?58:˖KIsXز;/D@9ay송[>wJ6TMPAFni١j-*oѫv-20U'Qdi_YTV١>j|ma ENlBٵ2ZԏVM 4GƏ@S?&Ӱ4LGkdޘ|#LWb]pWp4^x.C':Ǐ+)`GEc`E"ǙU4]b,=-A|q-ӑ>dLgdO_ߣ:~6e:d:cȰi.a7LG:h@; G|c^EFҘjs͖r؈>L?K FMVL(GYPсqb݊u[i3f#9>p hqJw#U<k&fVDiYt|NifYnaquo}Qb +إv՘MI?D\muX-B\ilS@vnxvcvݿgP=ȶx<+C&[\QLVں0+"mQ[IKOY.8i5noz8t$;ؕ*V&JV3ryu(G)Y\Au4`SǪ5I֠ź:~. g{)QqHIauE䑧g*OD3:4XV2{{ULdѣG + +t8⬂C +t8zpG$Nr>߉=RӸY9,2#:9;I XW(c_)!1Nt )B9U9G !qU&V- l)qԒ첏m +1ͰwV3ImdGj^eMs8e:4w-& 1-| t)r/;V +؜0|2:c::zc fLWp鐒1q@WG"bmh˰Rtr[gJ#ӑHs::$Xu@l/b4XB|֌/O̒Ƥ<rFÆp7c:=arxz&idJU7ʹ%c:Mq(1t$5-8+.r,p)X =ΰa&tCVxЏ%]2nUi=1;;C &=i5Ƴ9(lx*MPvw5mY8N飾2 ߆m7ZHo}t +F=۲l.Zw 0BQh׬Ş?Vva")g俨R4ǖYr6f1:)ͨuڢ@Gce:9:B z'%;̘XGg8: T.T-]+Z\5_(:5tp8'"#;!&jQE'hHTLL@ʽb*;{l:9ӕt^dEBMsO\*޹( +@'ͩ,syl"1t"s +_|6 ssZUEML%߱%S%.9s' WRg;݂:αn31@7@8.+#2V5N-nqZ>S47bwu^b0w e6Q06gϸ +½1&0*ƕlz|bn[> quc-n_o'LWh_}~1?B⎗/_Pe\&O\w.n4:d.m[^_/'@qޭ_ApށxW]'̳ę+*(HF\6{ N#Ҁ,zG%-{..D~?tKh'8 DKg:lLf ִg:?W0Zb:7%@i+|KǺ\LX'U + (sK!8c *, +޿=K4'{j +{rdGűԱ$3ACK ~btQ+6X}qc4'AsuhR L9澺H@Hv:¢9q">=%.btu] +{_tHNs=S'.rR;45AaN0]$\w|Xca]do[> W&-n*5`t>7}|Vu}Q%}w yw>N/:X '9NF.1R/̥F/>O <m=zk5q|WljOA)܊҂b݊ +{T">wtϘ7gS1In~cZx0Eo>?N VīWq^l]M'*#mfȟcb-Uf͏d86n>uNYUQk:8;EB"r75N.Sc#zF7G#+nc]hc]6'##rsOqܷru:7"RԥC(Cz^YdWFk{wc_Epr@ M⎏UT }tȁuB'1`Cp#;`:ǺNvo IZ:ANs*]wAv꿨DdMCu'}vӞ١8;:bN +\wv%!buNvz,k}o: U9鲂Mtj dG"EZtLC+kDŽ.@>cw{ArԉaBW4GEI521Uwxo|i~~_`Y%@3kͺ4m"?SOXl8l_KS߁iljZ7䄞TD1O˱+lu=0hF w:2ck$we`]';|t#āxAĈuF`Z L` NL1=;dLױӧw: 6t-(Zw? +DvUʧת? +:U8NpnKߖX99ĉJ~Bip̫$,L@z$uq0M).:uพ"X_NP=:^Pܺ;PW'}໕I}t鍖~7m|+u[͙ǰZ:;HjX}.g5mnݜO̭+Tݟ/[fai{կ:%Br|Wt#n$޲ +gA23ikOvu$wdpR9( [>8%qr&`7QWdp'ڱe]:446XW-ºϚu:ILWz~&cD#q=3u,:|zHLW=y$ +t u5:'|#=7}b#HL>7iĎ͕w |i)?rN__ĩK:nu]`@>#}wɮ#( eCtV6Y)PdʋnHgW̄EY1`Xo4B\t*FX!zl2_vKrU~YK6-KHk0"NXF+':c23O +TuuuMO9\ɇіhjIG,&Pw|U,"dk{'q韛x>RU8.?Tf6s6]gOi-Z2LXMk'SRiFLXۀ;Ds@j Utc0Dև(ildףIKJg3FWF3V 86@G@gXLJKC ]a: +~0wĺ_U +e::4rt$ Gy@HeXWdɮbaǡb:"^]2@PMs֩H/\_^p} `:\ZS)!:O[ܑ e:zc]+fd9AEլL&j4pW IggG9 bx q;;YX%t6+e߉xsa l 4sPcҟY/Q;7,s#j=rdƑŴ//Xwp',Ҩ!*&|9%+/c`lS@)ߤQtvS%nr--clH2:y2ARax tmWjJ6YwZ8}A#'Qt;Ίvh[]i9Dk61lKv9":QeIM7m'b +LX0:s3/Db˓@4tu# ȎXW?]eL.@yuTp?~-:ź׫xu-Q q栊qw)im AѬJ<#&ĺ=dǔX J{ @v*L$;MsSY@Qheu\ !.()%Q +r ėgwzZGTf`{i +ӚǛxőL)p#,MHdgM~J\Z.K|=lœ?/܄y-Ħ_7'?n{,QhaM N}Q%.O˰Νyu6zZcAZլJjVϬ-HV9bz SaKgjr%j8)RI{fx~w^<&|샠H5G0[| u +['ƴwLH8x}ĦU%^ʼ7L}<72?Ƴ k +w(֬7quuwZ[1t$`Qp-DZ #!JD+*Dǥ歮Cg>Pc +Ѱ4GKb]ĺ;4{J4t:\Op]__\Y'ͱISQ2.VtN}֖@X2OtU-ֵd?:wS9lj*q U7!E@vmۃx:x&d|GdR4iY:4: +i֚49#`V(phҜ!ֱ굷L9xZܳq/KXb{D9.LScPm^SԗL3؂O2Ne5ZK':k \ "6/-Ĺ vfv4=;5)LdT>fG-]"Dg'KɤTAleRKǩ%Zc83V#u֙kDS3i3( Hv^U[iN8:z2b]݈ p5 !dXDSյ ܄UGtRc]QuM +U`@WW\XW}U鞋)٩~-RVA`X7:{;ȎY;y^FX2] G;=wHvul) i"EMCfeM))U/-YsTԌt试`4YGd7]iiD֨G͓VM]&rBy'e'p_/æE}vXFkpeXM_pĺ|HX Hvwaf +ȘN*eLWWe:q#C@醁FX)ʑ nui"ӵdLgL'nzJԦB~kiM&;f`j"i߱ISӪmqH+@tAVԲY5Luooa=q;{K1=O)9"t mskggi{[7NoW?v؂Ha'?b?:ѯ b-쳠l?һw\OK'uW;);!@O_Ky&idV +~k+W2<Г4{ʢhօLFnt5<4:rt4~4-LzUu;aƆu+6-:H.LGP:`XW(gLB y*(| +Xgd+ t#3S#֕> +XwuuXwZ#{b-ّd눽OCI!|;e:o:)}ՄW[#3eL ; +ɁAwOFdG$1Y%Yw5]{ZX/̲bM:;_ZPFٴ2 -%;Vs;&@=V,L!퓩/e߫QEUPVixIEA @UJ8ȣ} x^s> }لiydm9${f/POpQO}0a=mlS=(}^܈D_aP:eɶ䣘Oi뛶s;?N6^bsuKIOn`;KjxEpa%ɫ)^iHȮ57du䌬AR(GϦ4-P/Ryyd ]˘˥ë# Щ-R^ Dӑ@a>}$j4a;=Tpg@xMսt +Iv:)M.k&%;~|5~)'Q#_L?:Um 8 +wqujqs`5&ֵjiՈc]5Бw)-,SkA O^]*u8ecZd$uGhj2uԝՂ^m"PM/Y"4K,{ngfK̷ +eoLԦ(gCih&Ke +8)(N5 MGb]raR5*;!P3WfpRuwG%ӝ';xZ$;b3ی7ȮG))}}TaNXŮϏRQIv#S+AFvrd{= +dc\Iv::ip|tu$!nȮOJ#1P.E<6?cLK#ܑdGKK]ݤdG{yhզL zz^ t-ܵXX|7ɨufl-YȊ3jwz#C:gQ4VCBYk;l +w&E1vf<-֑FO5K)WS[P9䭺Р`IaFޛt4>&٬ |2%nlSf2yO^`8TpRC]]9LSIovt /)lMA'IdȖj8ºVr: P+|Fm06e{Hps4&M)Nʩ?cyH2NbNHytۣ^ӦE}5MXI ցHI&Ũanu92{Q:w*?3P4:]).+5#Ȯ!~ĺhOQG?IHvw8.1#i@)ܵGt wuw t%ͷ+u3Q:T iq98ĺQ*5ڪqZ}+1NWcw+PZ2mvi10?=N:p--q9TkO޵ Q'^#%8.Sw9Ogv\%l ]]\(۾~|b㙯΁S?LDjeam*`vaݹxS~OmQDmIk3y9)RgXwʵXg!VyVⒹovѥ{1c·y2Th#!c-ٵ(1FL3LG+L@<2|xKsTb }gGMXہp4SXpGMu8vcF>pLqL 2N+ρ_jt:%; ĺ:d4wtՑ{JAP]P-nBvHGKLM~i|#1L)7NMIG|(Q|h}Q lK2J+f wm%֡ +@ p ̐YWv|mpt#aտ˫zyʼnm[:9I՘KT mnO9x>z#}t'b0u#o1/GYʧwi<'kGy ~vlcޔ(lKVUN@>-aLnyrf{ܵiWNKpY<ӵ@eW[0MG3WIOjFL!ΘXg|bFX %%Ӎ^`ӽ t#D-ց>ڤcX8먫XzhM~`ݓMŇw`:(԰JNY'.~~ QW诂珛R+Xn&;pXg|cݪZy@3íXgd5:l::M:t9NY>Zu8-.Qaݤgy+(*XGWcLgdK9sPEۭQe;8c;mH>j֙GGl(>r>(V7U% rJ`.>Nfv kb#KѮؙ_cm[ɷ^+vO^A8Uk:&%Ex-!o Tv/[FE'-sllaV6&͵(׊uw4.gjc 2ir\<9ǥ^K|)6E9@pp_dW&`,:dl잊JsWNGaQS:rN9W Lc@]-:20GXW*=?-Jvwx]:%XScJȽ}my-.)&ӼWJ8k̥)) b 8&ɢΊiu;xG`zT[`@G`(5-hjT'Ow1֮q&3OjZMf?T[Sz/6R[2ne/cߵklavG^źX~-p =c[J-o(]ҵ#DL/Xޛ{ZlɞcH`-+)YzO$ExPgqK3Q3pgE?}ZhEHv4*`:`yu; }PN=9cDcɘbe9"Aĺt0uF@MXSSӣZKSm hd1ddWػ"P^MRA\8~8r2fӒ-˧h;,od:t?=D&]~sĺ ))ӵRö}u6WXג&7r($FfHHXnjl1Ovh2:N˰NMO'a|'֕`T5Q8hN_uWn&##RŷH98m `Ab ^!-PrwBrHSχzV2]uwE_X(ttĺ!0a(w$2Xs w:úZ24LG{H;$A|7 eu-a/.B`[7uZցC?+QD93)\) F{B'h)m ji9 +q{ zsUgYn B_ut#6Y%\_mœ̲urVkF7O4O^9Xg־|iuZ߮͞%T ;|K2N^>v<ű +|B?+3enJ[xv\cdK&zf,=2a&1N4㹖GbZ24hEך YάPO1T4ӂBM5 +njdW큌Tsf|Ggu?.\9OP=/EiYO0M5oOKWoi dKkɎA<)Vtdh@DJցT 2]bNjuTa]]Mt:7xtcѓ?Nξ;UV1:;V/٥{*USg@g3-MmvNNTú|SZ'U并vL-P&.:d<`ĺLLzTcq\Kv Z]h+fJ=6,ksTFp-)Q(Y6 أXpW MpuqIsZ&)( +q79:i!b!g"B.u(pGGE#+=\1:jtuD^LqIu#|oiu:b]ts}NZ]O$nEb;v?(2 ;;w +z{h4똋4G%Jc!:qKvs$eJd`|DƢoC{hz(k9,8XTkFkFooť򽙥)NHK7mMhy&/9jiktbV#^s:ŏ^T+ qs:2MjW1<68!QN4%o 'xdV=w^eɳ,i왔ڬao(@ w!PFeXך.6ѵc@@4/#;їksQΘX]NZ]w|8D9wzx:gk=]xhbud:I+_ pGUP% Vu +XWڏu;V…RUIJv:%;ݓN:iu,XWhX#67CؐخTnfn$q7ip~IL,d{: Yk?1["&&[Re֝jVY)c[ PYsSVCÝbݹs`eWKKSy!xuM::iq.CPkYi4N=>HuXYk#OS^F:v.3z9c*sm264ZF.gڨ*r^H~gsw>7_wIQKimN- a!묜%5AJ|k% ֥gP$7dLDVI3)Щ :uZЄ:T'џtBbrr +tĺ}q#ЩFXG}rJݛcOz@G & e:bc^fgbɮe:@WAm NEXp=;9 '_\: nskA/n?6u0̜BI=qvbgXIQLQٵK|вZYpD`:uJO:<`S~.cҁsn.}E.{b6O45_!C +t>YΖw88vm\Qpl-u2[6ji\{l&WLbHFs̙ˮ[Xgd)XL#PN#aN@ adU2w—SGH:\}V|;к1jr<_TtJvLw.)ٵԦXW1|C@f``ϹX!N#!O2U*%1"iOhΆl  +e"h%oBv:*iF4MN0q+^"QMuAMѺ֔G[:=!<燏rg6{SF8#v0Ӎ,tv`][\ IەO^= '!źx"c|}7EWvt>r'錉zu(53[2?Jci YjzDiiN;[c +& {.Q̖9ӑHsHpW4c797X; ֽZ,TkZFv;2d&e: +4 33@# D##nnn)p|Hדt ^ +jp4)UXGS2+w}w(ú?Hvx:}QU￾KUt=].7źԜu'.=u9wbi =Q&kzB鬉I!9y3o+Y̺& +~ڤE*Decݼ-vnV<6oc1]t{ERZ4is;wK<,o|J_'d|XoI,l$edtG{|]@;覆 k왋Ğ;a6u~{e:E$5vd8MS,![sF*m]F5k!f]謾gOve0c7:%j'&У͖ 7]꧱ c0Z+HY5⻒/ AOlش+QshԿUv35QyUo{՚Aԣ8¤3>~n9W}ɤ+څ{FP&ˬrJwJXgO j]KmIp'ˮ2 V -Z}hmRbWǪ*꬚9rtC+sLגZuM2t2kN|Tnz)S`]2]M-ʷȎpG@K rc0P 8Naĺb"r'"`ݓ>ͨ"8G2+ t%0Lk^難eu!t L";źk"1YLE#wJ2c3Au 2!(CL&dJM-!q).m:74񴅸eՑpɪV./,XӺf6s3YB\ -hoM9C2=]Y&uj؎0ߘ\r'b6U~^u@A;㷷YR4`76~]|b=>bŧG8 ,zTSeBm А+=WLɓWbݵid7|f1Q+`ZQU5N! }ӫК.b/~r{#39EW骗i;2,kv5rؑh+]Csq +T`ڑ(N. N{&))[iҞwt7/XgZ37ôKdY!_.URr.1Nk.+nBl0VÓpAfKSK;ut%P XgdgpbS:5W^ < BqGT&c: o7==XOD +V:7@v-ցZ{#Z#r>]']MK)a HvqD0c1,B{~-K,W]ƶ_^ +;[@Xwx4gd7܊x8ߑj!1fdw+IvԱB\F KnUڪ + ؘdpE| 7gӂ@튙:*Y܉aVӥ3Sci&lsqqFлcP0d XגMJvA%;O4kNӳZ+)Au +tw@vAvBXXub vNQqgԀuIy Lu&jܒ'H,AϚ/Kd%*.!Ѯ&e7]iO] zXCp8 +h.K}#hy";u>a:۩S+ޫ" ؋ Q_`yOZ;Q\|v|/›5oK㪰8FyE+Z1魞͓-M2'%ADV}?m!33)hy%5oEz-"^Lh3Is?ЙXg) X;dSc;L :S):u *٥yZXGOnXWUJy` +`Ȏ(ǀ"ӑtDzQZ !LdgXLXdSuԊHs99:ou8&)ٕ p@G%j=?E3a*] -XG4[t#ִM/DD-A@of:eZi22I z("(!& XGd;.ޒ%8kn[ѓ0ˁ]/xKZ4l'a@" z+o\)B4lj&m(mg~W>%vt/sWO_}{^㴞U.M/2]D;I~_~09<[q|g !G[2&,Vj.D6Ŭrm6΃hE@Lie1Fj$8Ȋ2-mxS+up&b]j3źNnEs +tjncg[khdӂ ާvn,ڥb @߇-gvZ6[}LڒR깠,Fs +^[_e=? +oߘpW 7!1E_ sE" g5Z8?rzGscw6;m5vqKncMR>7n7qT1hc #Y QEcCIdtKd1oO؇q=bhYfQZ]4c:G}rWWL>Zcnف.A/2Q w=S@g|K s zLG[U^NcQ +7f:9MĴd:a O;1rqL#2ÞD5:YIN3].It]`XDIRdp'X7j:r\X`h&;c<."C]tOS,u"]]VXW"֑Dg#։XGSd:b] Tt!Ӝ~}dT֒a:a$V`Esl~Uف.Ȏ't#ܑui|8 +t$1ڰ +q{;R[@\h$Q, +:ЙyݘO{^{QXIcm._ 2e1z +S痓"ݒFƸ;i @ t-ۏu4퐏;AH+1㧟@ +/*7G[lyPfcj =ΉJ5>;8;VITů e=CLE!GBKm=r~hrʈ@&mDhq#eRgn섻9&t <4mIL7jc! ֙J(L=֩\θG t+#Dž{}ǩlS)݇Яu;3Ա@gށt8\ǺjX\`] [u";\pZPkEvUOvwRkLMBN_NiAUo|0GOdףG*z)4Šj*<*n]o=t=)sӞط/ȧʶߟ,فaB!gp)#0LG#T-,S8^I>uKvmpG{^IFT:ALp-H~t|j G~pOND4%+"j1qբsK_,hk5O"]ĤN ;&K^NblO}oЇt3%8?[#̵j|E`K= ϘƼ欧"ܳ*,l@ `6"%+˰n*<]ȦlhMs,kNX[yϛt! &;>^AБt)0=q3ZEdG:U P@Gxdg ӿ댱+#JFRe`]I[4 '3y'ko{L0'KWowº8 +#(6N.t9Mn$8l_GLsR0Ue[rQ.2󚛍L½ϩpG*G{n$\x=o14NnL_RsnF_w-pa?i=Otw ̶\q-1~G*jV~PQtL$uwpDakkؿf;!Uzi }ޞ&rwTfˏ8z~6]g,nqemaD3ujE$$MoVIY,):?*Fn+B\9nq seXG#;G} u ohvB4örR:YJ2ru, 3\Xa*)"SzVFGpgJu$;cPXg}dg{B 3бNkGZ]AI"ӕ^?ku:yKu]t*t!(+xqXgUmXgqGB2Zvu+Sx+c>y59N.+U٩yXqlNW0fym.6_4*ዺM+x±w0l~2{ߏvo'Y\J{|뿑I DZfWXrڰ{,0_N;5}Q${7<ln|zM]wg=\|eu`7LxGŷ:kֳqг}$ep6wrdb%Ɯf{ #7z1֑`Z:Zp_5u-=;Xgg+[e?Xgקt[2 ^=Kbc$;]] /Aves:]]IvdOǑނw#q0#ӕȧU\]]͕fR[3ݫꔱj2Qhk3XgcUaܹr;[uwˈpGdׁXǂYOqw@خ.C]UJL4xF9f(?2)inƌJڱ1-2u9VЪZ.i<5=h.ͧE˭kimW }eh|zch~?cP:#A> , }~W_T olXw5c;&jhy,XvTE# BPQ>mZh֍o"N.uVS8 ;[E4`:]uQdOMsRIKdG#e%b1Fs3m.1QN)O3bEC+U78MOkӴRgm%5odME|0-mJ{-=]4 ,yJ#ڍU1FF9~i\f58J?DYm'K^v>( F,4*ۻ*}fqn٨4Gv0FcʑR9s fDŽig9r`b1vP(m@6ǫV4z2jzWY?Qff:uJ4Q  یu$8E9pFv8 `V @s+ V[7",xz`֩x °4Xǫ):+>˰LdLGS#xa/K+i_ GźUu)1.+ֺĺ%le; +{12݀uFvn=Jt8`@GK%7^b;.1qeTGгdkY-L<- 'ʱsVD(XN ?;+b7WA%SsfJ5#DB?j^e=)Z>GhԸ"Xz4 KvPhP$ֽ0#:|lEb{g1ql:n3:nPriW{I4tIS D{/u@giNS7dZXVD7%aL]ī +nJKa SGQugX4gLpS$ܩS8RxWite0 rJsFvt饍'+Ёr -!ƩˆQ݀u1b$%v3+XGK&~ODOM+)G{.m͠-U߾aswWx_XpW2݊q:MIysq/c+Cfev}eteQ@)1ZZX$>8ZfcYK<_Ko(YYg #zԥ#b7X`A*Yg7w/-l֞ˡحc(T`09Ud'p2 @v|zcG4|nz$O>ms>asnxMj/a\^չؓQd krv i6 +A V&)a!Y cb"iMTˢXcѴ"k1j7+zZpZB!!1Ǻ;9\E1+E Pu֒g?X@Kˊ\w103K1C_DcKpnis"t6̣^.5Y;e1]t9ćgn_̫s&$;X<{Ѻ/%<󔮛r n9?z=Ӱk>:EKSeKVc]t_::e.e&efxwU NiN+az3pÑŗQi/!ْXPZ* ԒѰi:@!xH9ꀎXLoGv0@tJvK +t:pAbjI e#RuXI>ߋLn +tvKmQ'dҗ{+dMu8:nd:l 6 ǥfu8:69Z^@s "N3@bH yj4AYⲴ6@c͢!ZB6SJ5S6*֥ڬTҜ+z@WOPa}x̤+H-ܦ O:R&YFv=ji9~9ɴd1|>d2 8<(F!w]ۦ[ëeg>Kk~CjyQֳżv/QͰ䩏Cf +2d! M(g=4N kYd&!F/=CzhQX|$Y7hM\u$F:Eg #н 8d:`ڏLC*`ee:`,ruLWjN +nzЧV;(T^5ΰJd\J˴e)Nmև-d7ӬK"~]7gz^-W_r[ZJ(⵵JP%:EO3'}uv&I2{=wko{}1x\?勖8*0ng9G~SVq|Pœ4κ;aޖįLs~ض(u[ +&f\A\6:'s['dEFSıʵEuS4V[+Rۂ鬀 +t!Ⱥ:BaB93܂f.7N t_US5*Dv +c+)F&|8Hvtjv0J;Lv:c:QϣX'#Ӎ%h&3b:Xg#޾iߟ8!MS:jbt-}_&;ҜC-y!iQiubyz~9Q0ƾa7NXgk.nsܿrUe'"_)*Eb1gzʷ5^ js;ͱSQtFQ[bڢzZ˥oURQgHXWuaƜ +ͼ + ƘN>j'$/P1U !˵q7|(x&Oa/S|K}q.,f~1N4Z f(:']-YRuWϪIU/1h6K E$y}W [N:"ۤ/8.NČuj$ֵdgg}72 t";dS.6 99N}i`I-ı +t3*o"XkYX]vC&2ͅ'c!օ/ҩ[X7dcmp|5S[@q ;u5Yrvсurڲ4䄻tt:AS=H.$G!ќAsঊu. e3{^;h@\`x7֍>HkTh~*֙އ>_}t(Xp&.:/nR"ֿx +Z1nE2]^ Ao+QW97>%Eog )zUGK;NQrB?^յh*d\+l%;ܨεޅ:O5ZB|׽? 𓗎Ԫ珇կD{ fZ߭.##]Wunngh׫wX Uyg='x) YUԡ\u\|rVk[eQT@Ygq;l?""E32}M#m'?2Ii24'̣5c:'{֍S;|Gt$DI4'*!0 P&![t:cnp\`P7_maΘi3QEvt$\M H^:Ҝ!>[q3i=re:aNzn3ͰN1;p@'slrbXm;w9P~#Ekd瘰[.ȮM"ZKd:ָ 6u7+m5-g74\t)wS +\|-ah,I>gjGkھEۏK{|ӣ/\(>&?r\ڨ#>qpOzDd&Ǧ9ֽ{S:"cxe^Au/7US2d7AvCoR-XX)T:]^::K+Jk쳢B 2;+N|g& SaNPIFsef>,'ܘըn ~':C _u[1;oxڳX*zxq8€lN'8:;WtgftSGߤNa"/{x^}f4q|ץ@4xDG;ԏ:>[fO<:Wkt~+ylz;F[GSБn~O~V;l$gWb]-dQ"K*f`(,*ƺ`Z[=z20iZesE}d|GͰz/.N_@t20؟nU5։t|XGw!44d:F^/썽fLXgӘ|nY/o7*GDL'G?cpĚכeP-3ie:o&໱O_o}ZQN[ U&ZtJT ڲ^L` q,fqTͲԡʅ>.$Z[cOsmE&>ɯξ1m/Eóкwu=*bgθ@kz9u< +~h=c1h…~.ƞ6Ȕ4A]oZ_ >x8] s 5z{WnZ ++ۙTN~S9s35}e\%;^f;zX~h <ـgdY_dHJUԅ@Q\$<>9W|t:`XG +{ɘ-dwuo\e|2ӯG>!aLTğΝPE9Q,L?tXG Tyvt<`ec:-P(i0[‘VQFZ#$+Y5G4pƫ(iźiK^]ocE6jRaP>]Ж1c".Z|4'_R7|k&rS놇:֜Q/R`S,WЩuрNC٧_gJsjGGCV2׳"O9NEi;<;ZetPvt泷qmۤ9 &"jY9 ʵMOb݋uuY5B=.VfPnDv@ ֵ2c.ܵ2 {{(nIv úqJ!!:*zRQ`͕k_E{Xߺu^oLtU#B=uF?bDD LmӒw`ߛt}}ՄpRKؙA&ʩw#C$1U]-ٱE6:6~$VIvr<>ҔdJ6d~Lf6qLgXdm8Lbimhr~[!ֵme3KGKgz[:0Yvjd4o+2`Oч}+^&:;"Db^8ZGv\<kӆ5?]à 5xrLh`?t{;2YfJyyMc%sw +]DȐ$ٙɚQމ4GXGv5{ +tYkq-ٕ`VF@grZ;..Q\uu- ))b@s:BJvuIv:ݣt݃@p@bΛXG$)@v,Jl')͡U$;8^[3Kf(B\Kv`:6@WcN!h0kbSYb}@a/Esc|f=mq/E&7M2R3 vcҚ̰-)MsRO0St|5*xzt9j]]_7mJ{]3Ƕ]\k09Ro8vJY}ۿћ쉲}%l+cL +kmqH[eKdg-y-{"ˎm36n[7RuD6 c8:u(+jLܠ 'X҄ iU\.)*w+[Y@LpgXPm6~ +tm2i,()%AtJQ@] ܳMUY{Ul6O6mQAsĺNΎ;Vw<`\b݄T 5azB%(Q'U uFv#kq2E[>d2"LROfķI/EɰxUcf:EBqn0>.=fGĹ /MOlդm|86o5>3{~aFKtrF?MhhGY^6ْ*q-g-d<ı$:6"Q M }O5*a: Ŭ9S,BLG-֑47ǵXǹPVI`s\fE̟Ao#3D")٩~ڋDuWc R盌`Q6-w:sg!:|-=ݤX@(( +ЁXt(٩jt$;JLwssCCAXWI-A+fAd:~jwC:l )_"nTn`0] { +J<)w!zJ#̂xAsu*^PKSiXq?YcXG:3R;ulS_74k0Y2ќ4f5ׇj hr43TvtOr"]z-:%$5:wr6v̞2[n&G:Ad)sAʡ8+ARVWd}|r1u UȐ۳`s4>j4t譆2Z ia:ш,DOnvP. $e->OZsHp{tYB'.Z/9=5rpwq򇴎'(+a\\./|o0Y=bR^ t`:$"8\lzW #@v% XDS)[A*iΘ JtEvUuhfN'*@u,#+%A_@C-mUi_}|7{}ۉD"&x,쪆LWz & +}JvESkVmRFs*spb2R^r_ђ,&͵6u&]&!MAv1FV?ejQE?f\ (A FcA8(w~Yw;쮮~{=n*97/o6 lmgwmxWgZvxn9nDALY|GåR%W}:ӎzGZ +%oߎh&@G#1J#_mIsUnNhTr^@ji-'. +qث|#cve77xtrY)7`b:bIZē܎Bs\8`W-O>\캰NޙαNd8I=*nL#8SNzeFw3{xxhΙS {yZ]tq/@9úϊJ-։:/ +ILWnFvߘ*}{V/ÝX|]<(|u)I@cDmg(GL@R*}_oXY9xg U"[> a2O ([`Ht1v }yUn;U4ze)%`z \Vh^13k"qnQ5k$/}\aZitwaFpݠ9ǹudq +Ԃ9F#13sL'p pB \3dIQ:AVu0dI/w{`OI Dv0]%_7Ʃ~.Ȏ%ծXYNv +`5b:g`=1]ݿ+bE]Ly['Rb2w`ݘLGij5?nnQ@h }effVa,\J7-Mk`j596/mDm6ON=y]?/ VpFj G9ŏ;EOM{=]*9Fz)v)N>X ou'8gIۭ3x&yK}j6k:,+Sԍ9͘N0ZԼP*n;nT@bBÁ(pÖ80<g:.oaq1 ad 4-3#ZQNV 68p甇Fqtû_`NLX<2b!@fNP3N](t(N˙Nus3X@' +ؙN?bb8_i&xXcWC) +tʐ(]- |֏wJޡ}Qa7+c_ k{gf];36K۞4.:3ϥ~uQ3&܆XC9ˍ0xqt8sYLȎ*93f@gxfnڵ꿵v(7{G>_]WM{s9ZKbs;BHIEcf䷠OocUSe@\soYd j P"E-qj~"mH=a.ܛ]y\@.Ɇp:: nrݚ,Vd!4@(d7|ݗtW :p* Bgb+9蓢]L^KЍt/M`v`NXp:Nqt`qXijjzL^48R] 8O{FL7}|/M( sK +ףܙ+[Cި"CۇRlrb`|gnA4:o>Y9pZG|͖?|_־vĮbvgUEX +۾=Wk^]Hi90hN}jV_g +w8!5qVRU+qd!T]F:!Z H&fXLXLQ$L,r'S`ENv:L'{@@F(]!(HQt|u'hVP˙NX^qGMn +Txx^c kɎ?? %q+G799q:҅b_I5iQ.U/9)yS&Tf"نdo521#E 8?.*yZC+ǵe^Ekl/XCf4G{-kcZ}¡\_;}3O@ 0ۑoG.&e6fajhp -x5,]P|1ϿR:WϢ`UMu`yvv\QBgɴp3!=Ȋtӥh'D[G tkβZhD.Z;UsmΓ7p73P=@GE{a@raϜk:f*aJ)|v2:LLx]ky2 .PxʟҜEun +9Dr#:J-ri~ho #j"fӼ֑g-iJAs%ƇX|3cbp% r:c:t:ܤXG#$}.R)= Dnt\uOEdG7=dXW0XXX)ܕu^u߉jI$֑ q׳u6T% !.B wu94=Oa%Z˧uлNL6򐖑̙*R{"в>oSEmXϴ>岶"auveZGImBy6C=hl aZck&8tڭ̴/ޚ~>m?N`M|rn!_NJA@$E_6)_-R+V&*bzg;ĺC.mF-2;h Zf4Gw`&a#g)ՠ[o[UkW7XNKWE)*- ;cRفHatuEsuXd؀SQ*_r /$qSuaoTd#QpXnj&bO+=w8;w{k~~ e:Aܔʘ~-2*ou|~/K $reXW-Z 8a=eUUL3K%aA[ڕ)OAe1iw Ȧ懬6ii>ܮ z&; +Y-]cgN8cr-OϹq4 _e?\oj(ׂB6mweغ9_NW94jB4v@t5@,o[S^kk֦ꠥmbI9nAvܙHSذMU&jkOp 6f>puJpPη{%)%ӑ> t @t/ob=&/60H))@s " F{$*{'":\IvEݓt$g@~bgpÂ'ّp?۠T{;N3k)vl^\ w-8 dWPh!Q|ZMD ZCJdV;KR,#c'i&W6kTX1YeZIψl$1q(CըY fiO$86`l}:XO왖xG>SgkϙLu ˷+]*sn_71SBԀweZILӟn XXGpy|ײ3$=$pޢR@,z'ˊi;UTy׏b}GthO`RhHmta tqP`J͖ŋm[j]O>j'r;scy;r+<H?axSL +(nu==4--1ui5|:^DY5ց ;~fuJveՕ.5e:;AtCl qSta˱Q7jJvu.))ֵ'|gY2-t?ulYSɮl|2ġYYΓT _+x[`֎ϐu&vc=7.\q ^km'uui[# @Maѱtqf"W;#ɕsGhGai8v}SMP =NG-=e&&g#ٴٶWOF?F˘|)B'e{VOٱe@ ;ig\o-1mjRҔk4 ϊee`JO#bUj-)otd:F,`EHp|?{ъͩiO&ުŢ SvdjKʌRb}tutN{~Ո(DjPuAʘXD&)4@UuE[.0lz (j< 9aW'СXgp7: +4WW†u o:u"쓺bADk7$a6vb&`]:=}Jj̰-Ww&MgQG7WkmIisM|':j}Y܉>GC-7wsxE [mL^ڎ~2sv1v;hzrrmNi: XlN6ALS$2Rrug/:Y#RkCGaNp@FP[vht* %ͩRM a)VWT5Θ4:`GXGK6D6#tw&/%bhM:֧ej)JuB"NQ#ߵX-)O^:~:;ú2]nמ24:4TdG#%ٕ"uC4$ӱ͞ MT+fWc:&g=2Z5Dm/W{5,*v[Z~Nr {Qۣf&}*U{teP>Y)WG'"G+<{GܴIAObWv+V~lEWUFOֽN>ڐSt%_ǩ`̄k`U`~-F  +U++[?}J9Zst٩5}Dyfh  N=i]ZC$!m5Ne`r[v~gќO2b]IMQnt`E:uqjϿ ~z5B7EEbH2{I&щ@gwt~,"aȰN 3㽼1D+l˹84Ju wr&tӫn hBz-AzHF?rh,d@Iv2˵-V$ X4r͚R³'T[hXLIUx,ڃE`MgH/Hבf'ҹ+J'Jps16 +r߶q`# ϷZ|o 8SXds+Tk Os?A= ?kvtV}фsauۃƓ뺝3Yo9!^vˢвgLۡlgQ; TY)LY" CX4AQ6ա{aMh!Е!̶=ZJ2?X\`LsN3vݰ.}>TW=0$L@vu5bbN9NɋXdM9J)F? %J\˽귐^M-Օ_TtO `XL qq7_9GXǫJģ(#<9tv%Ccb6;GpCEI8ie:n64X ꎒBI!ՐCV7Uç9.-.ٜbvK-A_ ޭu`>bmGUC;zF/{;jo5Nn=#.P|*g[OiPF7{2r@}Daɩڿ&0}R[~6^ :$+aluu ho,dIÏOS&Cᓶdǿ @#bc:MJv#{"֩ñ$ΰGaCk9n$KD`h01z휔ƭ;mьc=m-K)eYךi  B.,/Am-ߥ.z#iE.PIה=ԙG&16^PsVn&1$lgGF=;ۥs$YҀ9(/Sp|dkgOuwsd1kP fO4sY/Wv줇06ă0<-u67(A2ԼvX0ӖQm5+fxW[ Бt@9c9-ϯ"Kc*11Acue ~& zQ%8b&w#Xs@XbTtt#.%$}"U[7R}*0]@~iBv9Iv;4eCbN:]tIje{7qHKhRmEH +P|GʃtGs־:^!P7WwoVO?H΂mq_<ܽݔ1I ) gOY&CjYȰn-ck>לϠ *qrV"Qd-)Ŗ=evXV+a1F_Ip1JCo1p`jDѕF*XegXQ.ۼ-C:+N/nF +TiSt3czh=+l3)khf(ͤ0ɫqUV |c]Yn:L>v+Z]Je7uN@K?=IE q!(m"I.f@WqXJq8RJs*=RS'pWyIv: @px&RH@_E3{"jS:%t8aVtx/,jӓaM:b^oquqt: uCc0 %inK$)%%#F>uw$8 2)QNr\L +wuKø49vVdb='R ޡ +F|l63')5@=nb XRm36CJyOmcxZnCj55_ɚg9VA`QxLOuEIͤl zI:. 'g{u_'{ l)7Vm译}xnqfENb;`r╡Id;/VŴ845Wr!i%0~!ѥ]IT6Pn!>D9)Ȯ40t%`q8U3Hwp)!Vwt:@ܡHa񇧆u@q +BGEd:*I4:,:}4:|3Hv9{ qK{Xp7ݙ:&w#)ܕ=ӴԻ+u'#>e:4:$5EeHMs8'~ejμ) +1r,0ӬWgTǀ@zBiii{FpCP ]MnhBpFsމhI+/ `:`ZYޔXGWj9fS\E~)}Wo{)/(ЙHs6,:#:1 +-WaO)E'@7}{ U'ܽkX|7mɮq.ɎhBv;QX7!;<%! AHzẇr,-k;y}dggE4ǚJS^ꊣԪVs뀣MhyR FyP\^v>crIճ].{ KG&mϗ*BmL߾l^s GlkɫٽJJR/(n\(}k|k rmWZ-w)O͞"X3v˓?WÞ7EYIMY#1-Ry5װNk7#q @ Q +(QC3W>VۯtFvq +dќ]EFʴgLgnLGOo@<]l/R7{ Q!ցHCG&#)e: ,aNɎsXM`:;<`tCxWK֗_(7U 1Ǧqu+s# S:SgL7vwV*sb&.]$;<͍8et|dG%Y S:K[XNYAD\*krZ=ܑ )pb' 1]QcF֣^ErhΨa mt'gUݴ|(tKap&c'rfk&PXdo&|MvsrIaZ.'0ek?39ùn4o +Y&YLA4jrӞ9R*Wݮ4`M''cveЁ/χ qJZPNrZeev5:m#)L2=­Ln2r s1Onɮ/՟";jg$YRLіam`iSK7#bJymtqZi]t+~K= !;@,Z/d_D0xrh,!'ǩaM^npJv#-t00ߋ^Jӑ5?ۓpz5=-Y//"۵ZӇrTvFרc ͬ=it kMҜ܅v~O2tS/MvX*~[NK} ;|O>rr1єmZd'y%/%T< mKݩdOT/ӕ̟ݐO93d-CJ +zYs{Z`EԜ&gqcW8(ϱmŖa!"؁d{J=ǙS=51tѝ#YtpnކԐ'$ru4‚܅ s83lm!FW4?u0 5GVfp]%;ntNv8Jv4ۘ֙ >7t[ XWQ:uU(NyK]c:#uC]6Fe͜OuA]6dWG'(To DB ig}9w P :eÙ,kgp.<5;t12C=ԢY\\H =Y58U=PXwRZ|ULJ:`t3KqLwttܶ{2Vki]usS3x:m.zd^yսLA\.܅.9LE;R8`Gh_4V [x8[\ѩ|mePk([;|!OXj@(Nx1Zb?IlL68\}wM\dEv"x%v`]^,`74fSËwՎ\M˷C)w <4W.NkoQv94'SVukd6>?7ulZtY AaŹ#[1uwA 4l :Mpg!avKOqW{ccԗܫ ֊, ֦v6'_Z,l%K]D|/xзggczaՍ6<3#ij2UQ '~J^ t^LG|\cq3KXjPvkν[ W|da/@Jvf8LrIPk>)L^t0DZ.PB7` +srL@G&w<Οo:4^/ֽ)F[ߎ/8|\>z`t:c;nug;xñNΏj iW~4Pr -Ɂntֈ"O HtqvsCNyAv34ú@ٵ]TRH/2 ^\X6ro206yTq]:yZ۞x#m]"B~= mghy V~{*9i$yUj˓&#)^Ozzqmx/O'|Z<*aFÃ/@¹s79dFTtu ߵXBAh/S/{ӹ\@ze} ;g:Im@7 ٍ `Խ K|*Nr#|I@#u:oWssR6^<`񧍶hN⯮p[ > +wttq"x_E-)2$A"N)y ī|4G1:(eHm/ue1źy?n4XWayīƝOGrUXj°l#:&0 8v3}u\2Elje=38EYcm.3a:7c;ߩ.% ΥN,կZBzW)U2`[L53Fs܁ci=?d*_[uCxl'>'$dc[ٿvY; 9]\\tt+KXcF5 E:BTD:A=H;:C<(pRuq `HzKRG7 Kæj1htJs*y:~ b@#_(ܑZ+fI3!@L@D<<ֵ|Mu_LGMpr+l;w$lpa`嬘XWZXJ[qmֵ@=UǖIk3Hp-'ӱQ9.Ɏ4S2͙3[,!U$mĚ5[2LpPX㴐Y +ЧvRminy +qm#A7v +NI;gJc?Luúyٞ!5[kΪMmjf#JǗ2KqQ6KW?d#_`{|Fng"!ZpPVXzKOfdǪ#L7TmAE~J<,Z5f til޴F$%}ʃ-lo`;ix՚UԺ]!kRu3>|CG=[=pWFAç!Ϻۿ;~rZ9D92LdWefMDSNJ؂hXA7[*iaM+8Jm2Li+ڨ:+!N(K;uܤXgFlR($ʩyS-dPo! #什~ܤTLgZh:e:DXWR~ALG1C@#RܔXgdg(G3p/z./:U;LŸdGD0NɎXSúҟo  ZX\qXn:*))iN@ьa+4pGЃ*w0jBFS-o륔q\{4zʕʠUOOۿj[}XCYRYjiq`r:èV&L.0>|^ۓ +P%̡oV?G{ JCKo BWh/=W?5[lȪ1pZr݌{uOA:uh^l>3l w1'|5VfI*rĴCV>|DޅsWVZ%Zl+,E)l72Y$8Mo@^ut+U20+kL6u:eXa +X(g1oڴX@IE`+_iJv:vf&ف@%Ec_dXGc5@9:e +dǕC3dPfb@;NwNq5FM&8UCnuհ8e:4 Į=g3kOAҟ֯aq>+SC?Us :E!zغvPB4պ5s{-qڇX*cg:sufZ:8*BrOROu8B??cnKAo1l6o:ϒhMzT,&M}hmL3(%դmU -ތoZX)֝&(z)ّv L;UZ,:]1|gbw-!~_au*I#g6 +t_Mu$O)}W\4XG{vbR PċȡכZ3,a0u&Eҟ6%֑Ӎtyp d4uX?ni/c:{аݹ+fgJLvOfA 85)1Uf.>gRnfumAV +" X(9a#/ֱ:h]ڪwEٸOkzԊ"NXc#[҆e랹=A5׽>/8~D9?_{>MC4[+9I!3z]? +-4١1yZ.ʲ%lD +tZ4b U^Qlbb:je) 5(G_XgpGH.4vt<-+ 4גP8n(4>(S$XGQ$;AH +jd&<:Χb;bAKQ͉M7X4";ɖ!ЁZCKuۇ;.we+lp sfja|ou}?5ٵMJsMU d]TvREp{5>(S %{ +:R[dnVa>.X.Eqؘ*OVPnl:u+vT?G ohf{uzfVOv[ux*- /rsߤmmhu:ijO:pUA{r,^m Pem/u[2ҜYuMPY)L8%ڭ HgL(jS+ZSe:5  g&Ǻ7!úVz tLWR )TPLbbb ЄHPx-`:F$;Ջ ;ȰfqX?~+;QbUeLdǕYG]%w)aǕt'pLgd ـ@ XGӔɊBя7H;Mז-F]m!^jPAO+Z5,mS\pOt&N\ٞLg4GhgٳrYyד4vvs^!v0J]ݨ6{sVz;"]k,[>CHUt2)aҐV)L\L,MYwHvze$PQL`,f@$Й[^x2+{h%͡Q=aZsdXgLWD95h!֕%I>Cpr++'oL7cb08"b妊r"|bu*n:|/G;R'9TMuwd$;;|W4(.0-X=|n박taW*{V骑I@)i$@BVLĨ9N+cOOflT8<^·Jތ~U P.ZB{Ūv W}SȞΪ=Uf1O[pbZ R-u$tSswږ4ó{x۟ѕ׶snn|jnA)J@M@*UF\ٳV{<z7fJ|{z:lv=ȟn>[Feb#wH%K1#ڑ.A YC8,MU`%z:Ϡ(QЩa#˩;e:HD JSpE@T#XbݟE!)& q ;:dpG[QҞ[ĆӒ;tvORk OPExEu#|y*;?gOWR.]Mvݝ NgY4Te&g׫ZFh *ethgdʺl(g7\(&>FdXG+.Km-s_Js8&ʰn%|;UwE^&ASjr+NN@ΟXdXX(Q0bǕXSH"i7%D2D17Vw*)UQ#;XWb\Τ\;Gl4=:cP2Sic3neHtc4S+r2E*+^SA*etKf2ەAN^Tjt@ü ,/Ԧg~ڿv)I?4OAtVR>n) hf]w_^-t?t4HWB~7d~Ғ>.ՄK﫛.uoݛ_KD[ +=w8%K6ei%zj)AT]1*+U4Y1]$ܓF[5**46?N FjSKc;N```.Zow Xg)ٙ%"Xz[:u/_碃u E}X㧢SK=)[ JӁ>إXQH)qbd(A|_X#^uA/LGSRWQ㸘_e{QIv^::#; 6=M\TzK#1ffpX!tzUc@1m;cYH{PRX98m') [Ŏa@}es5uwY?_>#9Ͳގ^q|܃tEp(qSCjq?rf1nʘx&+٬LR`7f~kdQ0]MkBK:j=ʱaZ*) tjHyS;dVb2]/5rpwǽT-e)@ƪ`tQtf`oUbw%dtj?\en+@׉XWV= %CY+Ĭzj4ǫtS N(|f3fWef~ N͡6ރ95nzSpmw:E~޲s^B ~]-A/),hfgTso l+v߼ O|O Κc5u.Ij ݲhjM8bV4wORJypuZql)QΔǣ.z*NZ5=-/iN$ї]:_]2LGN-od.:`50:~(LXWbGG}(*nPǥEy*Hvut:Jv:c:͡:q]L5ᎫLCd=vŠnq3&)a /]%"GKuHhEɮ:r3"9ڐR+fViӫ~ݩU)j|^=2aI݈ }>G福C i:Sց^{>Hs唆窙d& \|A}Е*]2<X{"##]Ȝ6*͡f0i[1empA*PyWvN.+WIm$3ZzD\f%M%SޥWm|ڿ{NeU}&uruaنwrP#Y)ӱ |Zi^hK?iV+ jBNanrբL:]9 +dGK+4Gf(R QNnD9úw%-2S:-|AAvK%i@c@f"٭OĺG}yn$8"VWG0KW)o:*7˰6&ّy@`%]&+;MKc&Si&ź1kP..MizDrbʨ[`e=(wUBk/GHEߵ6?E_ӦFi RE")uڳpp8.r{A3'߳ZPT<.'22xѦiI&?W2ESsL=SC8RZ(}G'o؞̛ڌSIlauk#O7,vpঃ-I^["!ZUj4ib]3I n'ڴ6⵪1k3> +ܒ pVS()/Ɏ#+*3&MSǎ[qj`yXb(ߌ> ]0U@7"/w}K$a\ Qu-FvuwXʯiLG)ʣeXZ IJv;Y‚^580zdAe fڒG65%UBO'tJgtzq g)/2uG&@K(-yv,_@(Oe&Moa'$äyRWT떵Z~~=/n? -]8?ο `XH[{>V%ź$&:e[0Lݟik[p%<vB zmD&C\F`h +_SxnjS&2mi*$1eӚX&flEBAU@Aă3Q3;qnS=Jj[{4V:-ӂ֙kUjMsKs4uEW+P3O{OO (X021d@1@W"pHs$5XG몉PHvʘ\uw/b6 {kpJdX#s(x^' 81uٕݓLǿNC1[t(k8e̐-Yݴ!t·C18eM tɂLLXWee=E?eg@}j5BDiwg2x Pnd('m0#MM8SenON0I9lZG,Y>6dY[9܍'SV?bRh=7::oJԚȀ\fIlلn4ASmўzxl;Y(G4\lj#gKYt H (#S,"LWed)?bSŜɚ1+(_t& >9v+h95@Vdv *{F#ʱ@#ʩ4ʃT{ v# +/J#)֭?[:Ze`@oW3#ٕPI(,&S#)hp\XGR+)ց@UwUhF(ZC7}\+ISC/RX$ֽ +KA:|bJy9.Ȏ*Xfh;,de1*݂މ>~W51eXf7MLax\> tnzy>ͧƉȿ$1T^)B˰\x-m 괐x[;c9ڢY_})hKsX-Ox\X?'|VO>uZy^ټd&(lG'] {/Sȅ .`ݣm'v>4Le +N=Pf +#/4gk3Oukj2?&uQim'[FR-\INjS3}#z#JS + +O 8aqE:ӄ騿h("֩ P ͑ϏT8CƁX,i׻tT/vUX2L8])W^u|S9-+&+֡'+LX+$C㙜E9˪n-QtC( Ȃ*(q;n">61q)VUns9nJvȌSS= &Z^y42KO]z3nDQ2P'Gp>9:45`7LKoJϙ.N\לV\ˤ:-Ow,|-xjl8 Y2}ٶ~z4]zpx ڝGO@wծ|c.Si=j\b!!=+D<-0jȝ/Ch, 1}Ta!y-Z{UNN4&L^eaf)jdϴR u-^3t*5ϴ +tuFpԟ}y^@Wu \VQ.zCS#(j@vP b5]u%ި*M{a9>P2>1eF;׻Zs[㻬!)(:S2bp%ӡV AU71謕!]y-!N+ʑG_M^ȏH)fvX{$;ִ?o IQaߘ+}O|$oψ&b=:Uk7aìoӢg\ 'JK[zZ5y=QNZZmmA_gb|_>TJ}]4Z쟚0dz'YPgǣyr^l-j'56`~iDa@H-êX2 Fq{ۘq2#ETݐhM9N-4V(С;b#FJti1-h~u9:^E9VBX|ttM@(+.HM@T֡g:f9E9e:#;'"C9;L&Ȏ@.3Eax_Z*NᎇJOSzoM8>Z1^G56?-i$zضY4>)WUn9Oc˥9%M(,R)MYnf5f2v L7r|F3JoyJpP 8źtuUP|2,`+֡`XQHkPt(NUrpQ{(:t +Yud4@ uÃaɎC%֕u TWK᎛I-ź=Z +n,(Om9.Nɮj ˊu*݄uVƭ#WbceF%rt6 Nghk1qԤ?fyTh+$QY?˅r͡]6/;ı礛Uם;̕Ftmw{f5Xmdz~RQR ҡteO ǚ-[UKSD0iaf X۴!Vʙ_ҎvxbFdz:Z[[ά>~Fp`1?%A% XS\ ovͪV# +?\YvZM/+qāsQ.2Gb 0lCy B{8{$~pfH*!.Eco"8 utIv|}HW~3tuEg2kX7-ɎJ2-nK(ߕ$(~nbmވw)c: accpgXGwsX!hGb7 39)sD5Sl 2rrXkHpha^u@H 0JW۵t ܶ{-P73fM|/9`uv{ +򹴽|E٘raU O>-|{GYD5A4au: e8" -v al]q8Zg5lGmڭ,e;KU.+XznM +/`-Ct ЏG D7[Svc FыZM@d6xHф7׻:#) p,^Uq,D|#2Cb8fa] +@&XG{hu#QOuFv ~Y;l +3Nwz@G/9֩ދ3ri8ȇ#'."c(j=h8)%ӑ봃$t +beMvqe+G nY֫[@7kC!k: s&oǘ4-R^2wGj vlV}fy;ZT9.)y386/wnT]mqn4ޞ>%|Șj{s8*úɍ6耏(_UvPwK,qz 3X22m&L" ʽR@"BiF-,+XWR:m!|}΄k# !#uw1]#w 5[EoLm/SC@K" /YGԜpT#)ӍdDJ"+ heLaîw/͡F\X@IvrS<oX@Gc_ +ߎ>뛾9*w vhWju'_:uh!Jӟ]Bf e:ŜIwf`r YᎸ +i5a1BbybeS[#[.;[N ̀ډl8-1tt[rF36+ꌙ#lGm3ibKg; /٢]3cґa[RjWt " m:+WvLOS~8G\.L4ˇy<*Q?A\e_^'DWy}'Ks\ 92k2ԕ*f%5+/ۓPv5 wf-]p>?Kugquqx4t*a5 ̋vLSY tuCʧv7\;<)*DQ%فb8Ǒt95:c7XGJNiTXGELdX"!GDWF`LG27Xn<:;gs?1[}GudvC!L#+'nĚT@7A8#>>#6f"eDMcyv`v= &3̵[͚^\]^ib޾ g+fW۷1LCA::bUcf~gWqt?W(ȕԲ:qSEv"N5~F2%*%,ʻ鼽F-9֤U[!nO1d |/4ʭK7&y`:z>u $ HL'mxd' \9d}rԫZ\hI>1:J]A`Ên+,i%;tKC3좖؇{uޱEs#tMǖ*m.= ܵ)h]}wR8x4z*KQK|Yt\*Ux*y*'+@նZ{}mef7,u'Op X n;%:r>mdP:Z eK~Wi_inj5+ߴ1p3fm\;wo@PNo꟩բ%V&F]#sh%5<4~i23>_k2z;U延hJWrҩ#y Sw]Q8b ! +vsNnrqrN842]4o9U/;t:!(qjuwu _'NDžu-9 P3 ??qR5闝?Ւ]`4SmbZSNG跢űn'S18O56]P_Zy[sLWYk[ۣC4makE湕ZB\{cܜԡzZ8I/G!h1Xz[MOQkYkc ޾f4FX?{rPjWa}Շ&؉Xx=~:~?qyzqìH/[+øo0njݵL^}F)9 Շ{ ⦅sy{2TO2Q{W|?k2ѹ]Xq*]ۯ=iihܶ[{yjGЁ$jyrV~xDaի^`4=I*U1txԕC5`XåUttSX'O&SLDL:=tYrG**e w[}{7En]x7&:NbhNMD+?G@9ءFSiΙ`JTbMuӹ%1⡕M+١:V]|ů}?+`:6إ+`S(]b2+EWy8*`"xvd.ޙbҬZ( +5WܣjL-Xu W kM{:E6mQM-O\'r }T&]sƛ=laN`YM[Z_\֧2m +KE7#WqbS砏*GNhg.>u%7<_'y)T\ZBڳp{uso]+7"FbwҩWZV@9ʍN-L Qۚv3 XMβ7tv"|CNN҃Q8d+Av{3o!Ot"% D.bFq`G%`NOc >M-}|+x:X+ӢAvdwK;:ֵ򍡝(v4WnU w +&ăHiۃ*9EU]ҩzT/|WoR[V9sS Ey=~Ru)ЌB ܍ܨ6>Kd~A:N@OY~@sӳ@YC_@-3L/r9NmTDŽZy:2uJ@)B;Rmgtsw;kcn<ȳMli6K.]:U6L&Gv㇂u^|e~E XתT7 gNX4&/411 +{[SQ&);*[Cbe;йv[>:_6Ld"[-\`]:bXI0^ 9wM`B9`:ɱcMՙ:h59zVC#u] -&v}sT +t~kOH$]`)sV\mn Wu +L%RStT.?%^GJ`5[骗BO%BUzQ]8NDv]GBMI_v6thO7timgM Jpu}-:osf}^aEP7rcˀgȥNrqFb7ۙ XƽӑEcW4E/&]qMDxB칢h;xZm-Vc-ߔek?qƷT #T[ZUWE9 s[2#)Xnw}U\Q-k1NMː+-u +t +hKN:E\0cpOM:@'^XL^p P;^Do.H oMNEXTnI(ֱc]XS8Wω渤$S=;:"eEkO6+9՜ )^9(< xJQQ]N#b-4zͥ--ٵcBIqW;H:ίf w嶭 p6֩".д@Hݵ4͜CqmHs zu$mI9[ệgrloaKoo)}hG's>ɥk(8$)t4TBMY>W|z}XvZL[s\k({1TefpGe \54Ie&2M FK̚INGWܣ1H0٭х ʸƫ"q%Ǖ׹>Iy9hYկl&ӱq&oQ?â+ܙ_:2r˜"3(H$)2hkB8`XWWG1")ukaXowq/_Wnl$;uIyؙcz{!áTPD?R/mt eZX^Θ.qU)/%D޸6c LYNRf,~ew%4'v[6K!-Nthsww;RVvF+ǟ 4XSK"Y+FE5Xqݝ /Lde|?UjNJ7;t +T?jq> @Y0Nޥl0f=OUUU*Yc/r/gfb ݴf4Xr\yj22>jktbItANꩌڨD*uw`)G &TbLq1mxJGK[!"hhdfW0C2a"ЫW]@Bl/"ЕXTS41t::e9 d-aL VC;--=|@yu((%Z:ԗA +z;}DK3G?-,8gW3,,iJvJP0rL1M#;sL&9#Sg"5hkٺIpۑ.tXlbe%[pux +Drzs(̮F41k*'VP6'`K{/] +jǏYYa>׵t:WrX_dÜ`Z1~şQ-rdNM»%#d+VjazM[nLg6Ve*MHҜϰ=MC3> +.W5]gsS3{)F.UbpprnoJo+{ԡ`\tJSS!)֍]@-ԔL740ͰdGȆu; 9xL|5JȎKjNK?$;E<^SN6$eX oX[;59th1)؂[D$])SDd:E9ú4VeʳJ|Ƀ`#X^'Hͧd=iZSfaOܡs+ LK_ݎr=bz7ٳ58HoOjAhZMi!MYks2.+ϗٽ:\~Hj2d$$Ψ PK'))o2T ?ІO v8A7=6!2 >xHedܶ 9w%Y)|ˏڠ_x&%TjBhTUJ3cdGSKPJ%Щs3+wVqK44SKQnqjӥ(wu`AtߑT`:hW@!b{rS: 8Wȧ%uK22SOqo^(l?݊%aKgApG#sBvZQ¢ +NQ G BC Fy&DZH^"X7{qq%Y=Sa&DEc:Y[u [@i7T9lV2ڨ45FL#;Yw3$;W9>Yh;:Fd-uڷ#])CfZ-~;Ζͬƙ6w +M҇Ϳ~2i!# |.-vTNXv9f&8 +bG.p٣>oP:8CzL^if"mlY oIsehV*CH +[ +{Cr`wu(wO=!]b2XuC$8u%)[Td:HnTDA pHKA굈aoQ)uLX7avaNd:;e:ú9ٱ +:{[7DKm\qx,uzč8zKnP<=\3.b@{O , 2(N 4Zj醔 Xz-$\8Dz zúEӡlt26M]%RqQZ!͡/ErJ:mGlsX3y,x)Fb3ގG S:0V4YR]w麔-W\__bk +&߫stؼټ6[n;^5e3e0$u-Re: n683!M0 T$˒f.b Ǒ2/:'VjJvG8zh-]3X7"nApt?U2xLJ#A5ꀮcYn P2Wћ])0D9úI}}p}zzz"^K81}?QDXIN&bNoyw؊ ;Uźq +(=J?LE,Xgy8dj{C4N0' Xױ<|ŏ63s)}d%nI"|dO2ź`6l3}tKuA&k/]w{4Bff[1y+W/99ٝ[\GvhlIKF|,R4WbkŽk40'II#J+K`ݸޅЇiX[gjfiETa ([bO&e&˛VtfiZdo5ZdƠ8O&u#d"UZiIU 8T9>y0T4]g=娮A%a2gmwW?Dn&ߔಿVgn%mKɻnu>4yշ1Af%puEEE.|5|lb֥!2ȫD9KCDeuE}!F%By 74=x*+UKSSә`);rTR3Kѥ+@{wn:IH(oBȎ4UɎ4഼TbB$;P˗/S[Wĺ.*5⍈@m,o(DzO8nIgOiZwv(x^p|(1E9: bCǡTlѲ;V\RJ;oﬧ + +e bItf +dʧXeΗ@'e(s?:pvU'N{yo!%U +ς̮no=+\:JN(-W.5 9 uٍq;vnuݣ&mpQhF +pgR C4&>֕}̌zV+3)^ @]oh>Hmff2?( IM@suڋSJikwt7JHtt0wqYch^!YЁGX& XG8N 0:3[zȎ4gX*#A|4FSl+D]ʹ+ϏXg;@7jJKe&-i]Md:2hga/!z'͕pסe%59b?MY^VFӁ׊p (S tKd6ixKPE(5&t ]G[Ȟ6roy }:eb5wg-9M6oOV-$N')i]?}t9&3hr9S3_0;\2ӎ&ܤ1g MeSs]YYjeƞ5vf1fħ5,sP?Мa+Փ(]YF2]'Zgp[: PNFW d<@s$LIsXd:(iibLG1K@U@GK4# dwu9%NeX[p:[lW?}TXu"}ʘN'Ner\s0x0B;,!<4fZop6&F~zԤ%/zڐ2 TZXȎW}"rլt;iQ#5zf<}2ҭwI8̰L2ι_.gT-P`UrzϿء\^[0ܶ%7$7 }5{){rtcu*P~[Kn٣o {7VƲL ,9Ɩajϛʲuo9hVlwLps[e qҍТ(߁hrXME|ӫ:Ұ@GS`}ShJSHvĺw +t-x oJ#AZu@'^!8 +lu$U`;lHSx(p}#3_;ps(2!i<w,d%bjJ#i=ݚG9Ogw_AnYQn: k벷d)e?ZQXڢeoݞ,IO=朕s7ƽ% ^#<ƒPo|IeѺLB:e:KJsD9 =u/8ޖaZ&O{Zl]˥6EZHcVFD9U0BIp*Zn%Qj;Uכ wur,e8,C +Dd:-J%))) /7udgXg|uz}I;^WL;=N=\.;rR:3xkg6On=Fx<*-=!X|Vc{tn]C,0ɝv=5@3`}VSzu>n6%kfCwd7;YnԾ+pȪ_ :X}EmFstɆH|j~W:X'ә{h!]*g>4ROe-i^ӆq)[V9Y6h9 +ۓJs-8n6x :up߾h>{@[ve<~2VZ<ݭqgu!IV1ĪьyL1,iK˼xY[L-LHbKc> @g^{4uX:*ʭ[tȪ1))EnlI#ٽd JǺ&:^V"NQ.L7cRٱ+tXG+pr/ۄ;.`uh) +w*`] wTr&߽Ph9XBOc:;qة7#ǙBF2ֱ 4pY6u  h]^HRqєIJ-]Qabm,8(LmCʘoBϋ =23cلSM*]9z'LɆ`yRl/=^|Xw8_'fݞ#E}=] 57]PkLV'ُӒ, a֢=U>o3jE~G 5Kw͙gs0#=[p8DNRBU."m?J;j6UӋ2S؄85#Сp/֑xd:L"9Su)-^[?ȮS2ɎpG3J%r:擀xGHv%ө1nn~*ursGxp!PIFv +J$;QbZ؛p.죽 ]#LFwTά|;K'*m[.5.mJ5%rUΤ]ݡ ?q2j\}_:ttYU `+DbryecyP^ yqdmu3G\nA8qzW$$ڜp´Oͷ_gH? MLs'*Y ȤJs̭YyS h5[6O@3e{7R n$qGBXYIF2lwhڕX7\BҜ]q}a跗QP79B$ +wt! +P ܑPr̘XP$֭gu!!3Ȏ`uk6cAouOV>)n@<;wzKjʎ2ޏ"#RdRhZKc=y ]v0tHOx%YjJMsr|=`J=LК4pm]z}JsFMgƀ1'c]@qzOY 5S@#Heet>)?l{ݪ Һ AR:ۻ-uJX3_ubsSbw姱R '4?$Wί )E2hh`M O@g]-D^gjд23YLS3,mot @ߏ{~ OnxJU}}ldOMy6Rv3S[&:\,u؊uBt^[כ/ XֽKY?˰NɎ23{||\ׇORC=/6a>Pe\2n$K/Pt7α3ӝiU.?@r\t#N%-x23ݺedUrO?`WVc\w^~C +e>2`P2>s-b`=ٕd3}dz096L上urҿٛ $;ZeW:J|=ڳzuߗ^3 /~~Zs]H?YW6׶/o9[mm*b[œUnpKϻ%Γ89[*cZޖy2,즙QigYI-3; +%xk&~2BxhFQ$-cj[e:u`,avZmHs(}iĬ1/ . 9.䅤983Y@t/֡@ߑ6?90l8 .3|Ap>$a;hf_*Tni6?")"v)֑LdYHv +w +Z56Ă"?*ܭCĮի1<5 n^N1θϠ CcBXy&sD;Ȁe$fcc ա%G@US*Kcـ da/mYyE^ue3sUZAs/;鷘ӣfc]:~o=j/puea:6Ӳ0GX=/~N'(W5GOTl|}N+cXL~T.y>E_*0s]F]mmjTVGZoD[y:4Kpۄ4ILum5j.N1/= ܱAz7%S74B(+)֕投J|n&t@s( *uw)%ʙVd4XUFsof:ќbNɎG[t @v~ pG23F[Ůt;b"^Gv:%;4C<8%٭B c:ӇWb K]w@<ݙ%ܑpK@W*0 uLBAx.Y/CY2 DK׼Z^,+vל:vўieY/ZvX-˳r}VQ JjNNvL0M jʬ63jVڂ(s^Fկژa.O2vVс)6[yNju2?9O+ 4l@gtdkl됿ޞKhKqfKwFFnrb$FErk eͶ;r64A<4\aC;Mt5DGH۞4w IKvZoYo=*Q:j.NSc!uЄWA,ۃ[ 3HJp"ц%I[Iv*))ٕXo`:b qw'9n? jԐX34`ݟ_ł5 +_+[LPnuJ+@2]wuXȘVNdqlxu*`:;gC%!I>JvmVM2jKo 9^|GpVBJMz2ee+Vt=QLe5)(JrԧHhmt>԰/ŴӼ-ʷKn#_wZ,G_.G-=>zout靉-sҽG6pkt/ @1zG)kczrÕ,umhlo)WR Ttا]b7J +@Vr 3_,$fedFw Q3Nf,Y&bAy}2&wMIg 8$8hT@h!sJ)i$ĩ+ɎL~Bstd:U|K3^uCYhPP*Vd:#;IvֱpSTt((Хrz(uwY9twu~; oUqۖ^W@[UV1ޞ$;e:0eBdeW}Fs 8 !3de=+ϨJVR&2őqϺ[YI^6lDlW֣\~l +k;_qKJvRm^Vs3*\R LϏ1RH Y՘[c7ȭ$Cs.Ekpf;/-tSC$c;J +(=12VL򈦡lRMO4+-+,Pi!5 5`:4iRtzqJs+Sc9mhN9eYPS3;uRuK L)A,Ӕrq4}NTծFy3:~튏!fl={4j|tw%u|W_BJH|cWsFulC3S"cIKF3Nԧ+jFf94d|dymXgC-DA4YR*udLc뎥]rm>ƪڽyI4ıL=mQ§ +qtpGZ6+J}Vus3jʬI+NI $x;N3c5q4?&?_ῴ$X d$$-`t[4 GGdf?Fu몚 E#EH\x WD-L}xN)0NP p\$;C<: J{s{[VѰ4Dz@N@ !z°NU^a͢b!hXG1t[d֠$j8X13ql }SG_)]f,YOm4ф{f$^gi~Xx|ۅ:2uk +u`9rr3kVXc9=sPN{3K|];#oenliOe{q;<֭o)eǎ܅$ߙ_1:wJpaEç G $ MYYk*QGvVߥ53*Y&h5 Js?!ٲgهdG;df Jp0`qj̬\5šQN"kfї&2@vfzYIyVKSuLGodW"!:E9tVcdGpKcҜF.3!1āu|^]trbZbGç/Yʑp XH?{u§oTDSe O=ߢE(_b7KtU+J(#|Q]OKaU$hg971m`LkL9](3܎Xg37َ,rfQ{BW>: vB\Tp5 Y}iogN;Pԁ[}қ V̟n5 _whY%xA Tʓ3/o⨡MK9*wry\*g%(i.#iM)ܺ|Y.ĺ2 јYi 4q\ډfv;%f`Pn6ĴS[fŅ&ʩs.N|f:b7"<&)ֽ> +R[ZcLdg}[hf١Xnڹ#;JWU"vDnKVϙXPS>(mH9;Js@O~JpuX'& d=5"ے 4lhTDÙ2C3bM8g.L#vː5k%Sv_3ȞWCj$g dyE/GϚ3m%C6AB{ov֦cioGF+>Hgg CQ< ؐrN]؃N6WrvszU=0󋤋oYHp^KM]x&xΏ&3%ia-3`9Z&w7xBjeMctIg +xf4yPzctkvP.],gM#%UVġLSSѐJ3#]';իW ;0G:%I3m[%^:KCwz+J#n .[ wV%Ϗbf:|wwJvGXf њ!"1ueAw42?KE< Zg۲Gn[M8pmԜ$ ;nrnk?`Hz{|#(_~g]>Mgsri1& S4s1HM_KK|,ݯ&>K [jYR9DRD4Q@e7XG32mRۀut tWZqԲ$;֔dggBSu7!|c7A#u :r1QN47`Qt\tu`:h?L7^waסu8%ݷށ:xkQb$;4(BX q _֯]GvW3tGwR^b ~X*;Ne{,fG>49W LgEf᥹ӕ9|usuoaȧe7[Ι+TzuݺݎcSEgs(e[&6u +|doϷߎ篱o,N^c9syѭ wLgnoM7ʏȦcʆdL#4$s 1JYOQʤIIe}$i rr4閇Qct5Н + +3ԆJ?#8ԐPv@wHv4|tuHpD*D31<b cKTDTEv CuUǥ*͡@)%翯4K;øfKSg JC ֭Xa!*h JC\kɎ0sn,C}ٓY`<$ $>)<#V+ 8 'h-gGdC+p8G-MgxƤ9KdM &3T~.fu=lvَ*:>e3[n{ek^) (YRooq [^*xrB&`4r/9&ŷLtڳRFm1@:|+ *+[QCjzKWL+i^]<=jJ{أ2nD$#b݇wGd:`})edX)iYvHvRt +wy!y'ߊֵ=>DBů-*:#Y=@ǐa!j<31+YO<$b|gzS`gMQ7G*fZDWy(ULhX6I'Tڸ`:XA7UujrԠb9sku9鎇j;æcOWg뜓褳%R˷XŇVQyt^l B\A2m,g^4-ߜB6YD et1@Ƣ9jk2Z-?ݑĞ)i +C/4 'A 5i|L|+Qn:;S)өȎ/M+6o]HgXgGģ[G%xlFvoDIs) )%})(u@H=4JyuQ_$;X(LwRC<0*XC8>3D!J_ +pH^0# X8M?L22/JSc82ed=eDT_E.;f |ԼcIJ+>3] ndrΰ]eΔmef/R:eW uɱvC_d~ipArr+h?\0NݨS@F o<0NM_8T4mSAk1 T(h+{ўvp4rڧ]V?uZ1$"dSskSF.X&Ls_SW4Ǽt@gLGj3ᛊ@eAM|qAwC@Fbú{QZ!0:U=5.pXcgD9:@+@"C8YzKLKtB){5 q Jv䎒XFEuJpd"^XGxdp~ح#)a;|?L +\*0TD]tU֕Ȕpg:=/Z31;yZ 4LLFpeSc!Nkӈ]6z<䑕D-$2=LGi2E[+ZεDlX%Az&} ]PMjG!ao|dC<0mFFoՂjWfnKӈ欬e.Q7wƯV O=,o&>Đ0,7nQnrw <†Sӄ؍eӁ`1܄,^U$g]}FiS11g,9Ttok]m+l֤1SFJ2 +q(=,lr\%\E+nvP5XGSRPS8JI3SeB + +)-X[HЗSSĜ2^*pptdgpLͬ5uȎGP) nf. ZÂme@,QL@|eb&izHe:.iB՘3G@CoVHvKo/ALQ;seõ7o9%է4UhZYoWR촖_*][lmiKҖ_]#>rݿ؜s~լi̽u_syOZkˮZz^x5BI#f-C?u*cU2]Is-Z23Z67I7! VәX[b6 D_J}U2"8rD@8t8dԈg]Y:ʮteG{"_T.3\cIRd͙fL&SxmxȦH f;9:::0˻ܬ?*5꺗-_SS'd(kf(ӑzP8źVum)֑}q(-[_7"l\\Ò |a=CuL8R^/!92K3z/su=:Ԭh2T>&CeFWb>UӀq;&f +YiAKr2|뷆x73.ͺӮ^*3-91u2.R%uk;r]ɲK|0M?va>] }r2yЀvC*3*Ӻ![܌r43ѱd746D![/3fp QL:-I; + +nBa6S4vu@d%ӝʘdC%1)tNK}&3RʧWcu\.1 ozHn ?*;n"?qt,0%>D6^X>%eL6iT׌`.hʹ5K4Z9whCoj`t-Llnz5A);Ek9kgC'c-֬E֨7+nm +.r)lras}o]hVeAWkG +؄ty{n龞ʘVbe QS`ݪAnRlu^*u]N.BK?C3Còj(#h͂gS|+58#ө_tוyTlռvnY4APvK#[n,')P@*Kiͽu,LG[mt~j] wn?߄必S$Yty"~|/aPCch/%%e%b@2Nvp>i.#7{o55zE»eL2qkN3[l03*)g;iR'5U9\ 勗g9Qrϓ0/+8jz p8R N<[j 6it3TD!Ǿ9t,6{(\ȶ嵜@m  +_ؕ;-5*3̕#X`feP|)3 *ĤK|LZLX {03VWJ m)XvhNOo;+CsBզjͲ,ݯfo^}ҮLG?D[(AR;:]GL9֛F:Hv +,uTtխ'Y +w'qp;%͈r'ySS2ݪad= ߕp4Ý4Rd3uc:^Ivz{2eF/͆CdU˷LOn;'Q{: QrD6Kc)Ju9rD>?SgVP{tt6iJIZv R6P'_h=vIp tr:iW\@]1VW#{`{s>h <tqMMMt|**YED m``Xg))dLa|tfA ڠlObm:G N tY #sert,+"[$ΰN*n7\GsIm8TSSKۄeȨ-9n]ApJsP̷HdĺldudG$uXdWbLKŁֺ:LWaXOwf{Q oXpױaVr Z)",DZ@U419!!mxKc J֕uJR3Wf!wf ЭOgXb&]5c"锬au2 M(Sx`4Oӣ ƥl`и{\W|E7Yz'eSJІuIN^I6 z.[K(gך2[#b[8MFCm\(Ure~WX3KcKIdl2tFOUtbtkpq:EM3sHCRRIs(Wb؍XG ':!xJ3:+nUuw$;bXG3#rX/'.it _~B[d [Xg4ב]b [_;Wra! `ՓElTݒYׅH鮏cd[+d7(ə5[טӀ ` fuŮ7$V))M~FWW)2['IG^[w`Hdfi`7uDi`γx8xt][̳_MxgQ+~QWm>a7ş? Q'w9XWGӀe/"CO ִriq5= + ̐0a>J9N=Uwq*K; +I]ah:-[\44 6ub)k +DA%n()PGsIv@Oz˰hN.ҜRD.NNH59źQu4(;~x +wlXgdԦpdzyJv+"J$cXq$g2 9vY;t%͈gNYd7-VYǵlH4 w5@x*dN掴Zڤ\lv=Z-̪q>IKTw^~-SuѴ;˞~0{yM={OP>Ty4ٱ8"sVY +[2~Y[bP xۏ#u4=;`^㡕DƀM@tAozi#&XXJ3 o3=4`[C3۾F|3֥ ٩#V>Q=%;Pf<:qd<% 9F2=%塢me +i%f2ͪe=+ > endobj 42 0 obj [/View/Design] endobj 43 0 obj <>>> endobj 29 0 obj <> endobj 28 0 obj <> endobj 44 0 obj <> endobj 45 0 obj <>stream +%!PS-Adobe-3.0 +%%Creator: Adobe Illustrator(R) 24.0 +%%AI8_CreatorVersion: 25.0.0 +%%For: (Carlos Valdes) () +%%Title: (Logo Disruptive.pdf) +%%CreationDate: 3/12/2024 10:59 PM +%%Canvassize: 16383 +%%BoundingBox: 0 -2 287 286 +%%HiResBoundingBox: 0.320277690887451 -1.91973924636841 286.879730224609 285.359710693359 +%%DocumentProcessColors: Cyan Magenta Yellow Black +%AI5_FileFormat 14.0 +%AI12_BuildNumber: 60 +%AI3_ColorUsage: Color +%AI7_ImageSettings: 0 +%%RGBProcessColor: 0 0 0 ([Registro]) +%AI3_Cropmarks: 54.2086658057133 53.6685310405064 232.791342971068 232.251208205861 +%AI3_TemplateBox: 141.5 140.5 141.5 140.5 +%AI3_TileBox: -129.49999561161 -211.040130376816 416.50000438839 496.959869623184 +%AI3_DocumentPreview: None +%AI5_ArtSize: 14400 14400 +%AI5_RulerUnits: 1 +%AI24_LargeCanvasScale: 1 +%AI9_ColorModel: 1 +%AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 +%AI5_TargetResolution: 800 +%AI5_NumLayers: 1 +%AI9_OpenToView: -796 604 1 1588 912 26 0 0 70 111 0 0 0 1 1 0 1 1 0 1 +%AI5_OpenViewLayers: 7 +%%PageOrigin:-156 -280 +%AI7_GridSettings: 72 8 72 8 1 0 0.800000011920929 0.800000011920929 0.800000011920929 0.899999976158142 0.899999976158142 0.899999976158142 +%AI9_Flatten: 1 +%AI12_CMSettings: 00.MS +%%EndComments + +endstream endobj 46 0 obj <>stream +%AI24_ZStandard_Data(/Xp8B+'wOb\O)3vTg5Vͪd5}jDux^ + +w +x +-g"ݳ53?q<kٍg4`P;7l2y쥞ݳ`[[+\ۗ7隦mnIL%Mrm-N=C$gw./5SKxYzd671![iMt=n<׷<Ӽze2L|bvexFڤM4M4mgYv&h6ִ92GѳM$ !Ȼs/Mk/5Mdl |647uLq<^2mo{&gsiJP 44io4ȷ=/qL5~{7j:~[47|M;!y4xʟ뷆o%isMͥ/n\MuxFr6vr42G+˓E~ݺ}e׻2P=Jo=^"Dn[Wɹ3vipLXirpxv(*ώ޹LPoznag. W`Yi͵ Gs3^z֔D,6KfvEn +nD.ɞإwWvi.(A4ޜ<ʛS O7*wϊ vB!{`^Awμw]e7rpML/ڃci5wAm{̽뙆)ŏ^C밬JŻl{]K=|Vϳ^vs$Lץ#Lu<]_\kPnyKR3M3xR2%H;Q%id: D}Ow3v?6,jAgGb/9|;Z̖Q?sM|:Y}9W\v7Zŭtw!8!l2\ߨҋ< +Xͻw36˸{G;7?`{Eɿvi[v{ .߶{nyOwLy~Oxۍg^wzF&)Rs21O9GH?HD$&7;?9ٻx={M4=wH $JۍO~}GğfO%7wF8OMt&f|F"(6vs\mO !(Ql G}$\[3#n.ݳvvs1̉< p47xq[{<ٍ(v=dzƶ?mKs;̂FxI6mUOZC㸡#U\OחЙZ)@`KBjj8}7V< Z6U!-V7X#!VZSc!oKÓ!R yACp;:҅nۄ]FkZDob{{֪pK9x@`b%t +8 R2 +H+qrm\ޏC:n"srGk&e4V8jXY=srMD,[vᗆWV[Ѭ>FUGSk6ehSDz\!MFIY.Ap 13Jh:ɣy]j;N$\g(L3V1x@t&-h2&u{!F*5sq :]Nr]  &T0o +ie&x@/'j:n] SH)Y>Q(I.,p%B&%e)yCJV)rS4 +UTf4p]bȄjqؖhwMfĒ+ !tAS'ugs ٞŀT4)9-j>45 kq0 qCHhe@j.)5vJH9,A)kO\gup<BdROъIALuݰ@ºr*JF}f*J*JuJ0:Ό )"i/-0ڀ7'.$a%nrdS>("jFƧ0wo\7(3DbqdNt&vI&%Ci@39,lTPQ݀<qyqE]`qZ2NGHBFN= XmùIHpK J#/W$(qLhP&CR%TIdfwmS*y S*S]LQ!ڒ]w</'=-iaK[u8V[eaj!!fUvKAڡ9rZTmnRQ;::~aI߹ta \u+TU'"_8% k*] 3^-D +cq%(!_\!_mSǏ4a&\?B` 9/,><$߱ahO:*T{^n/_p]I 4""FzZ<(YcAv5+/:5+ZhAA#o1nF%u^(O;2 FNh,(n7&< x0B'*M0gO)aFP2T\B RE ,aFbŊpT1>-fdQb g[x0t!u^Ҹ}]ߧ$WrՕe6"oLSX0'%f/. <\A[+^*=)"m\FW) /63NS%aLuje\,w荏1vK0'.1IE: [ʅ1bE+: [czhΙFO*LD mQwVw7il)ZRSdH)WFkY,R,Υ%ܮInה^ +Qhtݢ[mUW~_c:p?wRc bͤ5R+@3Q@4 )0Q.bܩK|r/0Axniy< /6[utltlcd0/eeez,ZXMlY6Lեű%K/$m0 Ǘj=V٤3Wȷb&\د3:]j0rv*?+s^JK\/Ih4%jٳZ$X&Rj!Y^b9!5&zӭ#57ɵ!uEfZ欎_Q)ZT-ku&~^s?}&e҅'ta~@}~´?"~b/^6< <~,lY=PǞl%2mAy?[[{̢o߰e'9&X w1Gˤ-uTݰMM6-ZȏVH45futFI(@h$ $` +@ ! 6 d $@ +P(@ .@ 8 BtAX``4,8 t 0lX +@@" ` ` @@&PL( `Ѐ8xD@(P +T2 h@@:x:蠃8:`6`6@ 8 6hAd @hdAhAddA2 >`pXPA\pTPX`TPA<t6 l@@4 `0p `.p XP@,@A( +T"8 XL,@ +P ` <B2礟Ž]iz}һ"9Iy?AQ3r'p@X^=}ѲAW/D < *wƸ'K{G^79siW=zCQM|RI7ʛ`c@: -VƋ䢦-2mPu$ѢސVAl* s<`f4|cn7:w UG2KΥQe!B}OV < 8dd5c:_:6/TC:$2FІysyY_ :ZlUH񧩀l#W(Pu,5&Ch ϔ kz +UG^z6bZmWXB&PVJtD +""E*wυKA,h݄#9faB<]: 8Cb7NCש7nyq3u)l3z +Bbխµ[-kRGk:/oͮ%\+Qt+:eTX*Z%*}[ejUb3WD-`F5BȐ]rꡎ$Uצt?zxvɢ|a¶{S9hC1L $aE;;d~vw < k2U4mo`l8uғ'G婽^< fvK4qY5g~eUxxMsqO5(㤶,:ꈞPu$L $TO/}dr%Gȉ8Ө%= F>DD(^=q 8 )5~noHВӖŰ%%wVI]qr3LS UO%wr xvf]T:dbӆyY]ۄIfw̅, X%`]Nf#4)EaOC>5 M#0TbQEU'BZUBrbJ}fX$ e)@g)>]{&bheM9'|+S2Pu(`3ΡsEk{I%dro8(c(ʵ,/0>]ie]DsxPB]k>nP y2x@2^,_Gq;u1rT8]"(FA!%/MsFwY +8aEN5aCKyIqjZ^8LM٥frMʌpZN|$8 +=[ǥWIfmW(>/{ZUy,Ԋ*.w 2 +TߡM6)&(FL&!Y1HgMEEbT[#Pf}1!Ej>К-q̞iR+x@XIq6banv +i7:U(UY5;b̨vC 煅Љq +jqZH0X6O 2q{0Q. Ci%<:X~N%k/h]< n>ZS$Y͌՘ͨcoeXadN62wU[ugXfp` Fqmز|د^MY1-5MUUD:@($ Ѳv5F&LB*H c0(90B)%MZh='jz5"rExekR4xc.7kd 6lVs6ԚCx/d[wf2hMԓ?zoD"cy&ItؓƦPy]q1G%$iF2?F\3`2["{?ѽ)h[3bުxY-]f>@0 RVF+CS +zKvuE@antBOt?0,"0.bGLXaI +/ u5R&OĴPhU[t. zQuK qcW.tI¼s59Bny-)J]=AOd܇r26e 2 &Ea͊E 3G,tg)V">L-BY2HFaܲ\1!|潢Kpp9ouފc% +KvruXB#j%v .-@ZQ -,s WcqU$ kzYѧ57}ġx| q6e􌹴`a(NSF!0=-5MllkCF)i@P0d°6$'=*lDee1TYYo8ߊvTT9%uZsW9%h$~#cFUDTJޖA˽Uq[ܺsJ)99% +!ēDzWEL˄5\*;B =>I1uB6Npƞ^K {RމG>E,``hF>8{<3޴pea`ڢEa¤\K0e=ρM2G=GD3jO+9л2$@/ )8%${Y<mkR(l0x@mΧ=M.\ȸ_i&s~V'UkknFM)LHF&VY1ʳ2 +'wÃop$?W[+>&> Va~Ws(I"[.4e;udr A*Ӛ{O6k!-͢W%l; tÅJ]n&)t x|TV8{à2 ># CD3kYK,b8)F] 4;2Wv5ŽNm}.}QvGl,. ,Bu5a jq)z>ۂCžVE d/.7]c +Ri0?ֻbuͫ$jsRwB @t9|ZZe颂f!! u + Yвnx-ɶ/7DvS `o֭!/1"dµh%- RT@C18_HK\LRO Yzfh[U[֣7)9#wpX=g0cFl_)sKڬuϢu}[=/CK(9IM +;Z]!cVSN䒸*P೺nب61iVo6|YI$k@o*օ%{fim-xÂ|ȷ/~=3/SwVPyva. +ChnǝlY<@`'uP,]5|ro}{uZ\5 lJ& +0QlU;qJ#2 } NV.E45++֔ +ɋJ?bU%P#A +UGŨf !EhwF.EFIp "ך2.J\sNud_?5F2cg|mu?m=1ceb!G@Ok+zaፔw=WumS5ə8_iaɬ‰_bh70 T)*cvfqf:)rf˞8BwhcѕHHe*Y ,447C⪡O Z4`Fv]X9r2 _)d&8 e֎禪U&_f`bӏ|" +|kBn{mim0nQ8Q,֎/ !HQL7pY +[u1F8IY7ZKq,MM$AzMɊ0tCS`-H*1cad>XRA[ָsp6cirrMζ V|A/h{{u(_A& lQȁX3+=Q~q yҵj1kpd~fU_ Q>#Β盂(VvṆu%!gB7n}Q!к21PѺW{+Kr>^K>uY[۝aߊ,ߏ ɶf7ϼ"ˤ1QJƐߵaÜmZx4͘q~#򷞹ճHG8FʻS:fUk.n$[!Ep 7d]BLlP.` dhg/1 5wIxH^'ӟ29D7fس >EӪmn%r Pe036Qi, n8B_SU-I8 ~XU"Мp"RhÝ$R`Vh*5@CZ\ ЄEEïQIkFk{#9[~?Ѣ._@ꅧ$(kmh[e5%0ЗG8)(Cm6Ճ24@SiKK !h}|j0/3MU˔qħŋcK1p:ZWFMf2[;llژI^_z94gyf d5vzGEX+:^֗a1"4DK}%I6l9"J5M5mSCT|lIZʋn{`}.iyLDC4ds =_v҈B=v>" +uJp; YRc)T-)n \"AA{)RDFei;6YfoƏ.^Ub*R|Nr' (.4cs &,zpMT{ty+ު&3sZR^phD,ZϳsoSϭ,dc"7'3M<s_R7*UF nx{z)AA;j?꽱$n*D)Ѷ*Bx[0G!̉LQx.x@ 0༧UIlc#+kۢ_aliZy*:z09?="?&5b1KE*̓NRW=]Pj@NFL>{mPT&| H( @"l?=?@ڱG?FRfwľJBi|x{ +^Zqݪ8ݾQq3+v[;/Z)skV,S,7s_׏m޷j/ҹ;MNZD?_uk6{\?rTWt;#E9uS/2;\?} fEc} Rom3$$\3LwWڷT\J/WܱgKZ0X %;K%>kG-~||smTc$r0} J-t,eO?f0Giա)%QhmQ7FS6M$ڼΩ51hɑ*awR0>k|2Um(/ƬUl5-dgҟSt;@9c%n>q:`jπ=`Jm[iTL\?'ґ*n H⹤9Kfb,ǎ-WMqy/iS! ;S*jZsO~0@ -r>$l+r 3Fu<mm*r.XvR͍KNz~''47qW!Ĭ>yncZsR0R3YbGr}SRBgLgG|y:-E1UEʯS}l3˦C *Ƕ|Gj'1@n6[<;+9P<jA7+M,f~}vyD%D Tϟ,P;Tz@4yoWʛ{]=va۲Hyp1p + lMRyyɢM;1zy)er+wBP5E;~[.)lӠ)?6iȜ&: uG)`"/ RmUa=~$KT:[}uPfsӽ/s,rCDݮfxs2v%K0 wfDRiqq_Ur*ѫ 1@8v! `?avRL}|x1Bð=泔)O:HuDhP +L,^[,gXM|hPT^Lizep߉`9~ɲҘ sDoȇ7qDs"ucn 2-r]3*ygk̾VjP?E wcUq{#ͺ?R%W`& ?&|Mr7UZb /YSһ LnȤ*ˤ-UhZT"Hо?vAOLSOh/3u{jQєꂩ/=$b(w}TuOTћeYKsDtDk' g]GÖ0@,\a5BGR}P\o=Ք( /z1/@a̋$Dnf[Al%uXlK,-,{E(p*ϳha?HvHߧ@,%!^ْ44ҧt&{_r\Oҏ +l` %ަ&NѮ'}P ?_ $EO ]R[zsNV.e]6Uã j '"=렠v:/h]2$\yPFSF&2"/- i l"^2Zx ̹/L* |yK|z\ '. 鎀0^_D+$MBl]?(9 ]!!9 IOŨ3!{i#TX`^f)"QmCZ7!̐rvH!A"jbʉe,L- R"SL6,QAX1]59s  q'1r%ҪjBB#LWv =AÇ`mYCܳVu Gꄄ+s*ו +_=XQ%l3"q8,$S*˚cO>Nњ.@cX!m| ,wFvIC((YĂd'f ))>*P0OLC4=- +{QC8.#6ڜ[> +da^]L!뺹C,-J wvV^`chiɇB]f%FwHkN[O]kkF )d3d MKiwfQ w" +!1~wHTQ,>EGP}-9\/V-UkN(M>K_&V;۵f9h* a .rjقc^1J^w,"E R-6/jNa9Y{Ga۩fdTB`&q +q(D 0 L #"AAdH/H- xXZ0 TxQe?] +a5*RfaԞ :`(^oYTeP>a8S: |ʌ3(dƏ&mr`,AVmߙFaڛddɯb;s#&Di[ g&\юƉ0=>GIЍ̽V2΀ "WT]mkҨ\ef{霭X .ĿgCRY"뇀"0_&J1]Z( ( +}smD.9\W@O֐|-[+ڀ"4Lu aX%K(e Ge%Vk^G}rdև[5kǸC NpV{rl 0ny3AԼ҄I,#/tbt;b҅:fg8yg&sH{ m"z+ɭ6?ҌMg4ZHU'>}?cop6ӍX'yZ 5l0GH5jvgr=x Mo0z/&ۜ +l _T$0@ gopޤyzj~Վh4&d8z 6(͋?Oua]AwS`E=ԭ0Jq:VhnN +\1(A^P¿ ,h<>v7 +[)(BKhXk$:TdIQ3 f4e-aH{9җO5g8QW@Os˪| jY{R>MPwqMMT#s}9p0Èݜ!!E}VDF 鲂 {+U8$SB^ި-q&jEjnp= gx WkQ?<fEYh 2=x&cůV.!❍K\}q v pZbhM4$"r)/Y*{oZUG=D,qSE8iƧ+V0kh1tXk[Hϩ(!!-o9| iVջ)>x5O]4CBъ覛xiؐd&;n>l)48Ew'< Oٺ +,B*EH`V)3sis;ȭ^>΀z7,4>0q܆|G2yfAZ>8 D)`'N,u7b|Pv<.NL@ ⺯0D23C٨1V@ZW<&3{]N +˘|Zn` X +e+YZZ2|g7/aok6e4Ssm=q`Qc ^B\2@uJӴgpdѢd>Xώ[ߜ!cgt(i҄~~:W5q*,~Ͻ~mF?\ǿ;I ",*y /;1 38'}1.A7ـ |ӛYt} 0Q .TYfRI>%snCz3>k\B.ՊK{ﵑqE# q=W + B;~ePAڦҀp +'ow9Yi]bO4_ȼv{N>D3CION®z&S*Y huebH.3R3 xKjO@}'}5x<_{2.j5!2piy):ZEww$#EX oa)ONO4p.3~w @P5Eu,AE)&7+B +pK8QF!'aΘ{f3Vo]:\{ummBλ=WbWmX،X+Z؄lWzdL`F`I JԞD{7.Χ*"9PCױִN/bl 1DQX"ۻYiJMݍ%_1 N͑Kij 6)L(t*}?h$̒>nzk?/<I]k݊c=,¢G'K9t}xF{@8"5Y7pNg+UKj5Y\_{/N0 p?ר7\,g/DD"( ,`\raDetG(b!D6-R+h6vECH_KCk +PN>yd$C"̱uB<=gV8¯E8U{/Xc\̱`|e>B$VjYsmj~g3'$Ll3|G:͘hos/Sҕw07R&, %b-3 7"úMe&d'&R`WYd6y!$f :$K$Qb>ͥ dj3OB7 + BsoQJCZkB vn檁~B t`צ{?$9(!JEW[;(wkpT 軺ʴ^F@ZTT$gLRLSos781ľF6xbྋk"؎CVHFobfp)/|7@|I/@ƶ+IQFN1&rYA~\c˫z0\J"<-uҥ=m-hɇUv`vvی.O :^^'r{͍y^(+@ݍTCM:Qw7nm\^(9 2Q' g/|BK6.wIವկ;yvG4<a/GȜ4L?]DLނEINV,;/B*a 7gX@We:.1TAhgvrxCU[MbZ^|ڄ ֎J.1.=hX)\!MC*WXutR>UrM ?0ɶ`&9^}[Qly[ixrcyM;0E=M0= RP"*Ы۷PxʛyвhGPsTH9E(Lqs%&7P$\UAȲia>, "߲#{h9ńë\@U;؈]̊wu S N$jFwokSW{O`&mu#efD¢U)O st93>M" !2Y3uAMze5` cG'y,n<$hK!11 +irñ?7eK0& c + Ylteq!߂Dƈ/}*! Ds/ 6$>L"kϐkDӠ>GD|kmԧH^SާP43 ~#Vv= N{Á-ώnZ|,i̎#K=1~γ:K@W;vM8q{&(C<8E_znISjܥ3p+aEg(WKM~rϬ&N%b"JDXC3VKM8,48c|ĨzTҟF*|idTQi-yXqKz+j`p8s' +W;O$4߶nC2J!8.$''e: ztkhʠ+|y}huwT&]kaTURD]~f83 $Fo屵@o\yM^&6G=I'b^& r Ro%'/d*_YMnVRnSzo ?>ðM~VGf>{q_ďdB>7I/fQO?x3tXhnu}cv\MDNy&KIyoaKrirϊGRS7ZE,ge*(݁Lkμ:q1U[tbE'ޞV`kjg6Ch1XgUao$'OCy spUOO.5!`вp2atD ;?|YG{>r3+-o9D)] rk',76OZ8 +uiHKdD9=B.9 1ONW7b@?{fI;= n*QZ!.yU +>ΈmZzV#Wʡ,I |g١)_y%#:j1ή=;OߌHA&|m``zި `Xq!-2ts TH{Iƿ:n0!rN*e1ҁ$!7Bq!_4jV)>\ +şݯu{8jBNicu{Ze P +4Zs*FXx6a W)hNjFrڈ&m^=a%H3koI;zhr!93DiBYVl} zyH6knͱ9! 8t0vjz+|{AFT\@ Kl@6s2?JJLHw96Qȯ2%l]eWt٧_2 vB +EG̰A|BH+'t漏q}@8o\!C4@/+'pD2,`v kk +&?AdԵyE9flX 4Ce0𸀲%QccA7a,͗!_$j9co2]@Uek*; ŤlJSN<@+!ENds|`G-Q11Ip$(77;a_@ z |1 Tfo:UАz8EQ\IsaG쑋,D_^YSrKA 8/€9pf9[w^)ہz:H %Jq Nq1 RP%/։QXŪ0!25^ۢ41I`,/>K/Qr ͐RPˆx&RR~}x25`OX0}U8FM!BGGdٰ8*FW6 r1=`[ "s n?dJ+QvܙB*R2z3EXS9Ru|oND bz#1X`CƏ\ Vo8/M>m{LD}ӈxИse3YxTn>n n9/Nę֐5abHϤD\+Lh{8֎tA: J.Bɸb§@{P y~NC5k`79C6N#܉gњ6H&M6z-)Jp0q\Z^tzw݁gT{pfrgdQ;mzPodm9s*_xaƂ %M2g]s Xwt_>&pA+OxYL?;>Qe 2_1GXoR 7FR& wZ’OrBTu62 +$?o䶢zPSEyN}4B`'wBȏ&@([pum +69kV u &'u\=^SMI| 3U@#c)$aaBܗ5huR~n+X&,.="$e/( AZgO<> 6pzߛ6څhX}cyС$*Gي %:zm!Z 5#H7{VP.@Z3jL!<ܿJR*6Eޟ)# mvEmW͘@fՍԑ:3/8cŤZzJ7&c;shߧ:;T榎`H82@X~Edސ"oN^n`NѫvʫA/>ЇUbt6XV;{kx]|mn̡]S_q[{n>0Udp~KfoDf7|sgq"@fz3x林'A/EB|]åDr;${oħ"xpU_k7:$E a sh~q0u׳\ST!t5Fl[389jdҥT|}]ڤ3] ˒o;?vy@$xό ?n2;ъۢР-yID`'21~!B^3/k?gP~I\pXkĥ$h?{XmȈ9c_\ 2"} x0^ey4uY*qlP)Q92yMu?A,eiJ^ -AlI W8L`^Gv"n rY՞ZٙZLUhc 讔zRh$1v'ucT1R&.&AiozNI:x:Dz8)"=խY1=DXZF*X<ÐTVhvAzd瑵5* :XAzKSJ^ÝvO-g<l#Ư$`ʼu{P*ԝ=M7Kck!z}&7W޷knzh ^XM&m){v.&fض6wVdyyw.GB= +EQ 'I`0XkAa4I03a`RP('0{Ҁ"($Ƙs98Ah4izR. (rw`0y(iˁa)e{k-c!R. 1FAnaw*kms>UJ9Zkngιw{kSJ6M#9Rӧ{GwZ+x}<k6Ik[kk-4HR,c{ sXkim xRET@`@ bAZ T4k +!X<$ @ $@D&1;E,x\_ nP6mM %/@jLə(<,nSw﫻"JED>I6""faPJ :.ȷk""V' +gp.Z,QAC({\hԑYA'v5Qܜ\R( 5~A3Rw,a°];躻A]Ja hlf}B#\Db+v+-;i.;@,5̩ BC1M҈HL/5p.b@P*ILh2bJb<)U_hc$8!X9;]| 9}K +k lK$d™BEUPHYJgj1Mh) +2}ݸGɐ*5EZ0kjup!GEԇ1a&[0dztPҽgcIQ`1=Sg8riI%`Xi#&BKunSv`+Fj1/e\7"3%6/}#Whɀ $˲o>ò/k-e?L ۦ^QpMX&fʽLķP#0_<)SڽCkL]:dy|W%A>㝹kr{/,I 42Rwsy,vU}1R]&l!yDro22Qr0VЦ Uɽ'[ajBA(ʠv 5q}RWtO⇑Rې@i(}5ZSdՔYn5=F$y㊎rQ3Q 󖏁E xkb:W(%RxslDyyVDY(யKZ>\<@{mäGcД)BRsy6P9 b<7WMD {V٤VCvqi}"f+Icr o0bQ_WEgJ:[(.puJV}}uRrֺ[0zUB=إ}2q7\eRM^%lq־d pR8}g^Ju+Ѧ2&I{ ]aLw1]ZEp+TVhIđ+|sM/Y̲J(xOt> wH۞J4Y3[B[Bz]Gs@4@*~T4,-v +$J:snX\ԊCLɽm=ώm+vE=kd +!@ +C3#U?P\M| H=k&!I^J%%gǵ+5^K(˜T>:߃N.;z׈''E$Y5e uNQ.+zJ eXoU1{ @dCEUOJ꽼~ d&rvvNpaT&S1_C47'`(+9J_*uU&EB7Wb5XoG?IDνU0¹ 2ddA4!ݷxDS5,n\AWȪ:kH_ +9)D}Q^_1r5҅e:AaMwΦ#bWKݭbuY +2tsuQ~Cq˅I[?՝ WhD GP{/\n TsRO཭HFp=nl߻Bc6%̌n llef>`lK96%k7Ă0/[^.^&z +깦n3ZI/"ZAmK(^7x1`!42,xZc?UL|9cl?d\d$q4:jgLEevrV΀ +[U[ENLXtγC,:"-_47뻎Xnb-{d5:| Z]u^8ޗ1G~xS! mPpݪy \+&=r83ڪE:}90$/ ݸg\&*K,:k} h~(v? _7#˙irtVwYi壈Fs]632(M<^"BGW F8eؤMRFÎvۧ3q%y9m\8ʨNUj!e?p HzK"jb~+GV=5%K)„m ק/M]߰u⚐"}zܜMNh<Fe!1*q-*u6oCWE. 4nFKtS Ђ3K *+ζB\Ը>yN5N)⋁ 8p(LKUwl>j +@8463\6ԧU՝X #cRmpJOf|y)СʪD+p_t;&8{겡><-6V#m صL3ST)dlKE"wI ZʰXΕ+kteu˧L Z7^i(씯t?1]vn1YBL|Fpn/εJ[~l^z[&W{{? +6W?{ Z1djRp[@7kI~6^A +s:0/ }iH&;RCM} ¥ u O! &%֍.[}hۋmdyɄO;Z }=m>^k/R=Yş6>bz& +" a :u-lr Zuº&Oh7TZJ -B/wCd/FT97(tJ2VK28Pꦱ'm#\`dq'{vʑ bQeR+Wwa!۳*i"xQY@"g(?->Jaѣ4d.}-ߡ.,/KLo]#%WmCfr\1% O'_8YZtu跄(4Yњ4\\kRa+ץ~iFڈ`lк{|v`WhcNSג8w< +&J$&ԅ0q1MxWwwVx@Q"ټ̒7ށH8_xb%241ʀ=)ݬGuub̦2C!4\R/b roSGb Y82ծW7RvsdYi:;|\4-jZhK>/ۢ +9ZGnIM*=MReca勍v0Sהwsim }drs2^~-ow\_ +:O_U = 0 +D:]ɔ(%"85sDҖ!pa&J#*[%&$#ЭPPm^ê30vxЉMk,%+*YRۚk覄H%(SWfX{%W}2] w|jtP'%`$Ɵ.g\Ȣf( a]0hSxD 6 [w ٴR"8ҭL|H9hЂ WrPy@zDvϫ w3~T|ʄ@ԣJ׻"/$+㦈[2}l>)ݴ@`;)bPn _s<'͋ FviYIR +Ya쒳;)7'FPxZ:@(B2YǢZ zQ|k.,vǖsmP簅оBH˗tA*3p܂Iڋ0H +qf(謃b9໱@ W{L?~D"< ayu-`roA]@X,ԮuuĪն\' 2>[Q`l":k=IZ$qFIϽ5]¥ln] +m&[֖ڠ4wnyZ瞑 _Jw9s_[ЅƓR{xmX쭸KrK%[@UgԧJRW_Hpau K.WD)>u*f3BO +O#FY`K*Lۏ-:3u}-oX/ }+2.n +c}d+K7Ng;߯;xj\ݞ2|YAPxvw[J]aV^hL(%HE;{rS< stt`}gS0+)wbLSzR#˳>xqcKؿ)3OG&"vWV-Sh`*욀Lnk^D-]EL;72co:l~ VVl+Ts,TńW<ɺu_ zA?YFZQ>9D/}T ,"Vt5EJ{Cq`+i0g07|m̆fSxqgk&[ijК+"%4Ŵk:{tqȖb(K2_0TE.b_$rVV5~KՑ>ؑ(v\h|Cy I1xIRlci{Ig錚ΌL*ﺾ[[.S(8zG>^.t)qo-RaB0eWMp/+)Rtt Me.]#3ةբ@9fD:*_P}ɱTMeʝQK R. doPi:gLmFtE\wVl~m4IU "#NsRJZcYc&hrLַOwE]KwfG| ]Ud|9<%/wԭiSu\C10_|$ڌdY)5ڽӡ=1ucuLJ\u+2R:?AVOWvMj.rDkI$xzsոLob5 Md`W[1㔴iDҧ!zB(ށA\`E;.@s]Ѱfh+֗LMcQgV}CBFzw51Hm?A9JmqS)bFN[9izqx2#n_P,7`=DݕÀ^pbβW+֧:4V UQgqU+ګ\AH27·tdPA`=&wO9E VX`p dm:E}#ƹg$?).Ni=I1Ui۵yebb:QrɃSec$Rrނ)`Yŀ[6OW%zMң I>*pEhġo8sc*\NzkxCW@+ׇ&a.RVmqF}&C 4țNIf2Ka9;ϮwT+GE? Gy6mvkڭ$Aƒ@γ4@(+x +c&ScA:p%4Do)w9T1…ΈBu_."Yvʕ||MΫRm`<)o gƥ=9ձpsF'v|(L]/Ť w LFs +']2-q7&veR7*5|,}8ݳ vIK1G1DuwE%rL߂L've"\0EBDn uMa|E}k +9(u)ވ<@QJ|WT> Z#Ҵʍ!c*`_+>W B.іZ[ XMx$crcW,gwD6 TmsAb6Hf XNHa~!=2ٷxJ!W)HS55Y)0Oe )̂(N)Ktaд ϑ8ᅨ.^;PUe w˺mӝWp3`O'bt״,M|1ت=K{\4I!<.p?S%u+1;`(n7 : rp.#Qt+Ḙɖ.[xǷU+&49+2֛z-<4|D'BZI໋2c+^5 UB[7"7BDPMuC H!QpNEǞ&daZBE +`"MF-xQf(NҺvUNYɮYS"jx2lj\*k d'6MiDtC1ߋyniJa<8֯v^pDWr׀7vLs,Ro -]2lY7Mnۘ z[_{+[!+.li졘i@OTm.l[JYRiK"K="ŝ{䥦SvZHw_[\P E Wf b^wruDƗ +-^/2̉CuGuwe]>&8rXw)VU'2T>AC,AnRu8 C#Lb~Ovcˆ1 +**G@ +)%Ewey vP@eƝc*ur<i_:)ÍwSN/[Ol*ӣ3ɈGxyFa-{Nc(.q[5mA*[PÉPC+xu캣9*лn*.dA` Y1EY)h@:!}7Q D8&7i9~M {<@j^^pͲ_ڝ_H}걅]ڻMӜ2^s(fF+k2$~ -Õ7Q$ZzB^Q4D]+R vc)'"y)_:nF~ig_rtYQ?Eر{w=BE})W{Hmm1(˽Q,^j57k>8v}W6v{"p[D9׃ɇS_J=V(|Yq.(m]  I+a(Z4GD|dDX!d;Yyy-̞l0X_j1ݖ AI%m,S.ԱՑ4hUCvz3h Nɱ_ُtB$ov?_H@\+Kre)Ѧg yk2}R@q]Vp;a+b/#v|ݽK0V D_I$uJ j!9fޜ)wڣתOl]m ͤmLNdxe]EfBĘ[kXn%{`SJ#/mtcb}ݖV43&EF}کcHCۂ0= nKO9 +Og=h+IbU3o[&_|@l1gDa&8LBP2gKcyվ4Xvb¬+Cġܡݝ& _x ͉ hD}UDl(J2# 'orP!01 u5 +3UDx{y׻ bUCֈ+oRPٝT.J\ OZCA㲀RwP:MfPHiS}2l66g4Ty<&}7kUѤH[KvYUf?ʖ~i(Bi|&Ѐo$qbAoj_euxL~WԾ\$'}:EU6= +3̠&x +i#2)~ƲD ['NŹH2~G?Hrsy-A[uGRZvf]*x/ZB#7/.F:>N}KE\}tP]2Mz[VzT`XJzwY}%02A>Ŏi,bջ!3#.8r$o<oj9l&Em)NӌIjBw" YpJ:fŇ61kOmUQ8A'Z$ݥ/o|ah`V^jIe\gD ؗ:?W~;`{q 8~Ί$x&uMy5rH܌ lE~q|f;UZY㹓?`~Sŧ+ ;&1SP )INB:_)L"5\c_ * cbMa91_i/Q2=hi!K)~3ZAq  d+`79y RI.J*?E|PZ tM!}g!Gӄ1ܕ6D6YfpMX.2+$&v8IC=UU}m?ԨO%[ݢ T)tBa +Bp-)_md05"0{")eb)nSٿ~p?kLOqi] .؅0l"IQGMUx5Q9+nrmtj?ţF06B\VG4cLULht%aS-Zt >~$AR'1g,)$e3@HQYLi;K :gPYPX)tzڎ(>,g MUǜrưlʐo]N_[ҥ NY释9 ר. +-j5-\ԁݭlj\sm1{Ω\tAMVyrN cq]hbsYGg+N +mGU%F~ ^TڥUWm@ ޯn)EH:궪|ӻv?4rَU)͘fו(rϱ;.ݟ4ّ8B*h :''xҾK]9yߥf^5 .>(e˲k{Ppvb At,Bۚ]/52 5"D>+VAa <[ZٹMwؑ<˒i+Si!uҖUKHl쨍$9:.5ۑ4j[Bp5CB kwtߧ` +hVF@!˫t +7W NR<ѫ`5N3JsF)#0pnM_bs.,FKeX4닊ێ5 M{.Z{{ssdFH#MjMbXģ#xV͞[޹v1:/cj ؓLj[4q\D~gѥp3KgQ18gHPWD}z\6a K%.YM7C>sLhX/W/ +7<)]ĤR+xR#&J܇H +80Vw'I;u +Fnnw?ʃtk]iVeYݝzs.q3[폥h-r6ot8 }!AOE0fG;< Wm"j<o_c&/Ԟ{Hm/#scY?V#;b527,EJ-wZ觭Nh;T;#N^u{s̤3"Bj fHKTVd +/ĵċ(e+9l%Of@ ЕG3oGز[n(HRgj1E ?sI%C Gj?-n7.ґr"!Xhu"UcUNaO=@B}-lY'Ut(LJD^[CjWE + [b4:EkH[*h=(2^*]R8p{RN=S7u7^͊\Y1Jb/%3%crQ9Xg%oSy"W F:5 +qSE$>d-],c:^Y}y2rkcLc +$m ;_t HH͢ތ>jj +~ 6}> +NitwmIU"EvhTig׌DGm[<2a/\\Dl5vr 1X. ؝56%B@獣nv(L` )IX4!+_Y>]Rq;{jp2rFQ֑kW9<Ոk\ю8g-7:}=mZWZzœ Jt@lkE$b=_ E. +joqi+t\\"ddKX`f5\bī[[]r"@[:)vLQaWD6fd +%.H=.ĪcǂH8 h7Ъ\A %@[d{9dabʍ&I2J {q.Am4B^5,)H8m|HB +֦z酽5-#0Gοڙ1*|sÎ`{JruW; +/3RLbaPď̪1=Dgx'9Ub[16Z9 /Z>^e9µQp\\ PԲDqT:*q5|PVLN/g0`{9}.nP(?NLPc[7uGڅ>4KGap#`QR$vwb)]v>3YocB]x&R0yfL]]}U]6P&EVE_ڒiRpAf"v0^9y#M%8<\ _xC.82]}ϒcw{K]\wr)88dӓCݷgtnԸi8a{ 9W.ņpj>|!EuZb`p[ +C ˪hO7eͷg]c+j8sfyTZ4@P7~{$Mʓ> arj^ +iYܽe^R#⚥\}_Sra]{̮#4PEWlJ9@_1!|2ubu#0+I6v.,t8;3Fy5Rv$4N0$dmāY'W Go-P3pW>c!'uߔC.]bڅ?V?lm)ѠѮ/wyW晴&uxѵO/\kk 𠫋ןk@m9j' $D״YL)""Sg{TZ]CEi>8Pd7ڝwNk&t lrf$RnpL`a|νn-Z8&B7zL8Y+#ublI7wXqߌPO}yTΫ *;iҞ.7cO=NiujאR:\Gm{?ʑ$K7IGrE ۄ{.VU-M6LsJBfχݤd)30 M)A: ̜ռ$*~`{UrJzDs WLZ{Lp Bt ^u!;`ɲ-9H~N+F7*(JRyN +ؙS,,?{siO Q  %C}ݓ\BAFQo/Mhq$j u5k< a8Z35_sw7-sqaj»$L &Aea&8vf2X Nu-ڕ+e 9. Un5Z8q\.a{q VȻjƪ4%Zʿ]3/ Fek J;EvE~n (.^K3*x@@UӮ&䈞sE齾O;% ݔ~45&|65T=w2KiInd0^nN:wD iŸUV1.B$hj(x_)[?lfDwNENo/տ]+DqAS/_Yw0rϦ~FoY䓝!G.Yc!n^InX+못!&ԅ" +_;p8\/to%#.h%kZr{dHeOWjӠ(hyې᥅K tx>Kv;DW&Nd&":.k 3х2)ejHH|!k'$ o:)c.֧ Im(G H_)V`#y§(fa9N:($a/?;@8g9n3R[U!߇6.%ھ톱Q^3)8"Zv9ʞo:%b +[bŌӃt!$ S*!6GB\U. S/BwA]vO TAPcZo"HH/:Wʍ2![5s /&ȅPo(EB3*Hq1Ƙʼnx ՘;+0ݴaD1>/5u#R{7YCmk}piJuNmit*b=/7V Í~-(Tਡe8L5pě{F5Pf=+,%&z)^o%d (4 ׾T72 rV<(ާRJ>bdmݪWv_gfa^400LLAT03'R +33'A<w!L;D.jݪZâ,# B̌fFP$TP]Wa?Ъمx59b1&Y9ЮR3 ߦRtVb$ +L)*8DYWV#g)#ɒkG}D.SQW={LuE{'x@X,_xƲ +&}ssqpb Qsl9xŴu vKEA`6^%˾t3g44y[B* +8g%(RYB"~>Q_kຬ>0.ǝ8˪ծ80-D58N +0jW.vmB.ܳ0!Ob庲k3ۦTg(|nXcbjǴn W$8FS;[o3&{jt](L`֭eSG,o?d2cQN8jƼ sB& +RZ|5|%e&ـ:K5H5-)f"2䶙Iyg$Xh;8^{O8NBڛCGʗT&YyZvWw(j` qMqF:Эγ$~ӄ 0J]z["Q]COE[jQh(߬qYQj 4[AFPL @1F0ŭtr +^KL&ϸ\O[TZ,>h9q8QfD@˵S!v^$u6\sc*ڶHRݍ6_I)d5ᗮvs r>-5rȱ]Cz˥M$r`Ĕg!(DXd}uxwlP ᢚwOPpjS|~B&CbT>nă\%:%?H!Rov/0n?bwQL([W1u=q^*1 #jɨ$'6r*}DOMaOnł1uW4O΢:#%7Z՚6zӝ%Ժ2VŸwZo:&j08BaZ 3a$up@"x N( j\pQHSaO@LxOC'}yƧ-[ ~W :&%P6jwJa8SSt]rALX<:캦OGO]i&dIV#b`)'bg:#uY@. F{\}YMvDiJSWޮ+ݲ' +(84rg.+No=7g~pxƢD H>@m\xӛFmg{v"N5vQN L6Dߠb"|N(&MƘio*+zFN&ǢF2Bηd݈jER绛f#Zq yeт"`=L!ߑ]袩íVu +fRbِzۖtWBhaAV,HpmRtw ,-F>9,.|$Enj%P B{TU=Q$E]>_P~s *C5GMtqu=#ƁW.Ve2*,H +_ubP)-!nQk*u5?Y v +bM"*ۢc݋L9u!uHЋּgC-g]-`e8xo]֐E9:SK^x +3N\v70/jfU;z9.TW_9m\/r^ϕQm"$ts;xVQ8J:E x DCXƸYZr' Eɻt(+ET7-sϤU2~.OV%~ft'{]uun-PH+ Vl^"#kltQ `fxլQ>,%TFEuQ00{3ω`i&;5ZYȳթ8Yk˺t!~@J_R^[ẻ]Sn5*Q~ֵ#m'ji>n%ZιR4*Ddr) NәfdjCvpYoG&|=IT+'^@M|R`S!>n-&)zz&BS`5Sl?EhWE]E =#8`?MmZ*s{ 3hT!>gxB UlIV>k.,LO-.VU, #Ksb/tH6j~!\ B`Do3*x ꑏ6<t<]28]m݌5ǨL\k=p@tT/nڃDž@HW4z8aMɢ`pz)]LA+2C(h/4oށDj~LэPZmm3N;Ƞ,%NYGBn/)vj)eUy WU@z XK9Gx=)3YPVa›Ԧۛ8cj6J7XEY8y'pS](KFVQ?A`1Jգ,!h7Yvj=x]Pz(uwmng%O!n|dD~]s2 .HIky}ϕ &G R6=pL9~t*nDS .*3ܮb(udfR=A_^Wp_ Ԗ]p ЭVB'{jF:ՠ׽6`EԼW6`‡]k~ݼJ~?iRFrMݑ 6]|8r.Ir˜GPQL7P?Z lIw4AJm2_qǴ:yl?|9CU4y6毭b<|Mz?h?$Qض |kxB +0\ +[zlP^h(䄧UQLAQXh?SdpJ"DA4"vؽC&(/vZ0MMW:x +p&yaqP(OeJHloc wiTuܵSn3S[%gv ]Y`DFKk/q.ﶮۏy(10u#5PlEi;U1MS,9ջ.ׅnhvuV@SӃhv +:%$>:U[3Ec;GwE{n+$3UBQr8&Bg謡n/Oȭ1T=}E1"@_x_l`/$V|N݆hC +F{v\tؗ*R-N9&\YLLo}=4vp0gv)ϖPk˳) ;Q0`N#bK-Bޟ)1 + a P1 oM}gaޑ4sR{vH4i4IeSp&)mQF' Vyj{?K]Yhc `ͼ̅ >Xѡ=m}ji2Eh;KQ5WIfN抹EJ.Z?4m!#&*hB~rn86vNTh.o[z%5zQDŽGd4sˌ\U!uȋ9F|ӏ<0'bJQk,Ȩ>CπJt,8ꤝ:Hun8$]x-ebׅXS!m˘m]yS)T\uuje W5?B yE5`m).?7{G]{Y54̌K4l5QJ;LvcG4FE2uFL18X&Z[eSCLjt膆J$a[ =+%S4p\y5}2*u3 ("; $ Lެ@<ӹzPXMg`_7ϩzExW^!6g@-| 3\jG +/@݀]ϤA8$yTˇQґf[P]Q^4:Rf+F粩*ӱVAwר9Db'^",pe*]"sHY!YHyjAv),z۲!0 L+R>ՄYF}z:o^dYxS9r4&4-,=Lj=z/{ށ`h)VemfI2ݛwXtĠɬ%x9/2ۘIcc mF`}5K.VY>h꾷-Q 1Ȕ…ڒ:x;Sc+V.8&\eobU?)1iL' wd'{: Mn-&NvSōQ] "fʰ5L{v͵1n{ؕ0oIB0fDU".@Ls6 '9թިtI}4Ԓ@ϼ W +C:$z؇!zpőPY.^SjaU\ Nf,΀kF=gP-=Ղ="ze!lcN/RyJI:lDb0'+} zL³I@77}#*]m 2A߻q-aC{2Qm kqQ-R,5+JGK7L87^p[R +G נ꧹;/^KΈ%ތ;zb)m|cu *BmT?QzHd !v1VKiH[ +ijcdp Zwv- Ae~N A*T?=Ю7"֛aFW;OS`ڵ\C~Kԧ;1%BO{>NF0Nh$~BK⺏j9dj. ˌKݾO ړtH +Ҭ +F@w6*Anl-9`7ya^jΑfͫIJۏzb̨w:a*D,T>;GAkl!sܮW%bX9GQwJb:ktOob1u,WNk2-(J#5ki7JlG/CtXLbG.m>̋/\\;@:n\H$:nP7h&9t.Jq `Thf` ڌTɗ̎]f7 a^Y͞.;EZǭЏS&ӋrPzR?q*S79` 0t/P(r;qX[WL;Ty[6,4Ս:eK7l27!J ۘq%zLhS3Z,<زr XVYi=B ^e lPke9=7oT&f(\ 4 8m4LʁUM7?.<,nڰ~8:Ypk쒼Xf]!K_ЧQ4WaZL`z#ΈsXCӝˊ?L@g"&r;T.uB7 ]hzk+5j]I BR<ҩ9u|˭ =mm 3fk!F]9PN~ +4vqޗN!/zU]On~PRR;X +Ӵ˨(Lҧ5 a#M̎0 q.$"@VTiƒnkT2#Bdb,~{Fi6WO&iQ9 hJ =gEF"*ǛLl 6yFzhB$gp.HX'J!˝G)lmѧ)el L9QQHej"E ȧ{+j-fke$ß%3L{/O 8| q~7EQ1޼0y󵙋}iod_"OY"΅0E9",5˾Zٿ,(=Cǫ EVLEJJ Uם/l3SW|8d22ߋlM~o#9qVLY{ql OEC1\+)*H`UW$8l,l5vݺ~MVMe`ŮS:]}.[wA(ֈَ>دIF + Lfq)>ϡ +2yoU mKð5Y =5IF^o+ޯnx2Qe"h4@7{ `+rY`KƿmԦYm wII|V2k.BD.=A&11{ d&cU!-^4U {Գr5'M1%ĖD +@߰ۻ{™t:4Hu9@\'BfҴ$ yOe=wzT Uc,J^:(tirNn-iqo.Fe-p9M">6r0LU/ +f-$HB~չ%2T?ht0+nͲ饲S(GVk +`-nb ǺgU k}f_axd ,tŋP3B#8zȸoq)T91BK1Y³D7$$rv[SwnsOP_U\v4ބEMLE^B{k(3XiMSi]s_l69'm늺5 +$ XS$k2n v7s 60?{fX*hӰIa鏐y!vi +좼$TE`죻fnb|e=s^s(d5t8*GGs*F`K Lu͛lWa(3hW8AduIfDBZ +@Yn(ϑ n%Ir3ི:@RlrR)^)#m \c @"VSyU)e0U ; 9sH \8&!AWYLaW +`;#^ 䢮߇<Ÿfҋs*lIsS)՚:swzH/*@[a nH3]?RTy. +\1 h+R dUQ0A(<[LS\ Sl]b tY=Km.pݔx ywԔ~nT䒴\WlJ"ӏv_vau䐦IC* +~nͫu%{UucF!$N +&;Bt폫 yogc2M=]bGrwDx'+i8ǭBQ̕SLB$:POTˉ Mf.Q4^6c|45AmURwKeAȸR"bK a߄&Ju(YԱ@(ul(V>N/3`12!o$ nvA +Z2A^,=i{>OyblMNW\iƫ| ͧA')l6 A:F  uhb;PC v 5rnSkaz,|dzfYsE;O~InՋ^@Ats~Ekvv5Wa*0BN @L*[uhn^Zߏ`BRwq0O&3met$-OmAQ$%Ldd3z<`w#]G.k}Z4)Aк]̟m)sh]l\/4ꖺl ZQk40^IR,ڗT[dwv5ݰ"%|crkMxfe]v0NB7vM]R+isS}kqpIU !\@R'34Щno1Qua<];W4X&&n_ƵBy('{<\-HT/rQFU%]ɍ-O~-}^vW]UBI+6qX;vzwwI>ת#At V[  +ay;?ѥrߡyWVoa,}L뗔\yΠ] fc=]k0m'kN%<{dK[TE2V$mhyŵ;MLwxю 6&R E&]gZz8Zٲ 1<\Lpm$m AiGKE)k40H-7 +bGv&)٨]y51Hж[{ԮJݤoSuBӮ:RS]$U!0A]˟ShbmDŽ$nڋK*:&F4B(,W?E-yT??b AҚ0ft9` 3ޟI1tHAtaD' vw2IoILn)۲nQr)dcCk_}P_|j *: ȅ|#X~MC]&8b"lKig-i x*ĪsyY>Y3h{W(Y ʕ K@՘NTG-XC6w`Pư0 +XS\ z%r U0-M0R/pc(Pt\xŠ?.uË:>P }!A=(-{niC*Jogκ+٦U-\m<`3'2>&ŤJ9b W-:z|Jܷ}iG! +]X4$Qd-0!R_ gIf^@rdCu1᷊:Ռt1A`ueս[TIvV߃ҾA3RNhlu´ +C{]u-+SfspbrȎG%y]:6_h՛X]+nh, KM([ҊHCYK@3w*-:ۚ>w\2,+)}o]h._i]vsMP֛#DݕHV4NKlAazI\grl@HJH{CHMcC]Mȅu|Wk'e"%v*t7WzŷTG]U`]0M)];įHNY kk ÆaFF֧NQXyb7zS,8kܿDJ|.brH b,Nj$qĖ< KWΓ2)p!z&tMJJRMQ^/'VˣU:\_)fpYHk&MY)Z4,hwau@XkHldA [CUrS~wKlfXrSف +mW#?MǦ^֏M(dQA*|FFD;01"3xDBn~s8Жj};Lǧ=/mхsn3_Lv[!_2.<ֶ%"%*L\3SWuYyw".By}]̾".z`6k:'jrnW 5 m5ZT^7&-_ꯚ<ǤQ?_Ni4>( 0, +:Y(*hɗ Yt%:"ݵ8$# +m3/MqBr4DARf횑hZȕeq4o\UtOX#FxpM7`fl,5>-u`3i=U؄e1#+WO+gl +1=G֕GU +Pnm%ք,%nrv7YSvxMV"',v nKmQEIn˗@_zrGH{QYS7vL<_/K E]R RӢ-ťmW5Mg<5QǨ^c]P3hZ^LqTbꎩg\ Zibrױkbq39&v+>٥F )aEu4uZv|iE Ɔ,LE=.%d-4A6D~Fo(w#a0::CS:``âR:A<rH@([̈,dqG퐀GNEKӉcO`-` +2K+cTj|YK﹠V_tT,(И 0}e􊔯ZkTS-q<$ {ԍsXI.?&2!]mrcV.}Hh*gzm([{5mugnڽgITVDM~i@zlZ/$g&ńݫk)]"xuuM8&K ƈ;_nc( lD+4}2*g"yA7t=ܸT+W $|G6hd؊;ey& z_p"5iGA]CR0=b|Y1Ty1m/b `MmЀ(V^U?־"B;\7' v,VQ:})=heS*Ktb,Y p11;B٥e`r!z2X^?*Жᵩ[/KZa`\'Ga.-ۍVƺh`Ze`j1n$&avÇ`)]1M4 ᇔGumJEq_,:fHzPEvݦCRjfW8HN +Mꍃ]h;Z1BjږfkO` +Lf>;;-OHN2 $7fYU +)Oy@xCp5·O}~حd#` ϘmYk-Uh'ݷ3d|HAr$( l/gGŒgxڥZXu 9wLߵ ­Xb6ts!"iy*S +KrqKX]IPt0̂7'Hɭsy=MKtt:[u&Zv2UxużyL_B <^a?vIn  19цu9)S'_t;!Ld:!SΌ}9̮1h27KxnS9@p-*(U7CK{j!ެYG===|(8P&?9QOm0нXf]f}LĤ>DKڋL5 L^4u!2-X0$Ơnc  *0žC>ڗ:IA}:N OB{k35/?g]cq e9 p6(@8_>B:Щ +˽($> F +RMQBf㄰7[kT(:s:CUYgՈ:s՞oX}md4i>I b3+ nsrZ9Mm'O&sOw(J ;=FG -\hCtWL%sgMqN$m%%GVӚ:QsćM +((2~s-ԥ7lԂ%*F9Hײ7"Qp[ +Qa+_#ԅƟո_sY_+Ml2*B[v +Q +endstream endobj 47 0 obj <>stream +={(h{=Guc~Y$  `r˖ T"D]Ć|v-8yشU_·v4}4 K0ꕴ),UC&cb!p_-wua%z T"ZlDߟp,f;@|f@lHO _%D."9vtq fPj~fj(@z]ê0PL y| Q9+&qՎg?@Kg)er, K^n#3!SқdF +҅~kd C+Фꤾ;u]~j'͑aڦ1 +Pfxe(gi\ƒܣp.Z_uu{Y|#QbOݬ춑YT]w,&Y.P +2b2ozd-ݒ/lT'+ģ`8ϞYwæVRR!,{…)P76'c7u%* L&L4qMVk DE_ZvC2ĞߟGHmqݹڹ]H0vGamW;V(|p*ǎb埖-|-m5g )PvBT 'ZAʦxwyؗ)B%u0Ƶ +עRԬ]Bgcgl]c ?AHRF9zkSSi8QG prƮ"Q@>~0'[EX͵*rnI5Ko*?1a $5^"@2LL1|Ά<"S隻MqdAZN1 u_*gi.zЮ}09JwwSL"f '"QSmhKKMueߠCwnRB#XrјH Typ2iqtJumh\ī$*q5]ٳ6;9~>G98הj[͊?`Xc3l]tb%7A IFȭ<否5*f^x%iXqk1Ne.3=ݑI|f͚s뢸UX\w!)7!oa{(%"gzvqiɗlS.> 䳋vw0;bݷ)3sRP}7jwu_o{Jٕ5k7m`"lrcjtrLzCQBly't,q[F`fxmͫ_weѕ/h[&8ʴ>0`$^ IbҒ8flqo8e!+;sdRTeayA%xͧK ]NZ~Wi+Oۍ9KJmm3ulK@ջ1߂KI]IYN + 1e#A+PLnT^P?ByX-VBKj͓ߍk&p.hoAr/h#T>尔s҂Tk K(ft>%%ך?%gYM`u1uYq)U_sk@*l D^G'qpKFD/C+D8jN~o6ŏݿv9!y]k^ kNIeik@@|O_w1`LZIܴ2^(rR3t7)ϡޒvZS/#HZL_<ؔ &_Mo+>npd݂42J?ݩvl!Nƻ^X#62akOLv@F;wnw0 Z|ɕ#=ri+#nD&C /#Y`nV P-0$,l@R-6\Wi/n=5O4BML?y+^7.ŐByY3)Ve;Hq Ƥ,%q1v26k/YjMZbX%1R3 G>l={*f@:ޒ @kIdNH껅r3tN9GN?3.]~ +6"o݉}gC@J +ebTm(qyx(ܬ\J3>uhЛT=aioJ] +G֒x5:ֺSxte}&n|&)h Ю5`6s`pdn}g1 0aD9˖|1aCw?$"~1u XI-Mȣ@”R6FL$=G0X0p6>^LXqj)RES<7:kX +C]QBm1Ƀ/[+U%뎿,.K-[_|N=0i~A)j4ܴI]+j%LD[2/n\_>ʤh3K ap.Ń 0pC\iM"tXG;vzlB4F6 %GtiE$y#tWމ}<VN?Tmz6M,=Ny )PӸj9{n#HJl$}1o[_LiʹU# dv.~"]"G+κUh"%h1~I_ +@ʕk__M1ܘuqJj 8v1XUza*.dVW uQKߍ2g)] +8KL,~u~]կ=S Krh5tlPdA*Řgչ\ +EOf.4)mt}&\]A;"8]mS{0Ү1s;5 PZo0W+eLsC1)-$N4-,H˅:&@H_Ӝ=:gf% нIיxW.j]K>*x: +'ϫgb Je<<0jMsmHɤ,_AkHݽҷe7O$)y3;ۉA&1 2O(†PǓԶFK ԬҼ(~֧eKkٗf_dŧ3Ջg!{Y -keI^d7׹c!e$UJ}s + kY;leBN*hw͑BX;64o.YݙD׍UTtIK1YwAz]`at:Ġ]3$)bqjBLI}xaݮb"8),JAMSҮzSZˬr +]K9ר z8@]s n H4l +C^WW]\OmP޲b% hty R +^T,Į +3]Vs\;T`!)%ʮ{u}0pp׮נc3:A/݉-E!֎#vuSݍیj +JoZ$˺ uT +m_*Ө[gJw* X#">$i?~5WZ.RM?^$u/^Mt&m-ԁ%e>N)r_r0rA/I5;5FqFZZ'=aibҸ*n7Mx"e1 +Qի ]QB<#/r ɝ:CW_Yi۽ihW, @wXv&a LOjn]?a'Lc`EFQ\x[񏩈3(ԕ:)PNP~iBN Z#у+ŞLMF ;CR$[tiGHL"~ʒ0؅ 8%VfN7)#u@\7|(ú.v/]vY5C?ɩ`y0AˆD8XjA\*|A#Uh;Qs.sj%R$SG[N2m ڽP1Ճv;}usXw51^bIu!hWkv:2SܣȕxCn)D.R"}pS +ȒxbӦ@"0D`..uq&s!_{(4Ex\.tFԕ;BpDAETSc.$v`qeţK΁mY8իl4# (*:5~ nnͲH37+Y5\НW*Pw槷 U|4= +l>1==^H}]"\\xuvrACzW9]2Qw|Fnu[^<*ҴwdMbkX{1HN)7N +! b‘MB)~|v./A)LԮK n0Y{[7rz=vC-IDp7!%ޟu58&\]qC\Ӽnҿ?83gNnp'*zeǧx9` +qnSh7"6iɟPҖ &zu>&w@`ZgB݀KwΌn•.(Hoo:B踺\8CIS*x9|1Iݱ1WɧǸ.T`et~tSXbV"Rmwj!v{dVʶC,>k%>TnH+BZkTdqY!ҏ5sG쳞h.&'|Q4kzRQpe]5NqEn\ :P^3 +nnr2@e"S:Uo+%a[[.7gZeڍvE+/]ujǴ1# Sb ~CSu2n_3!FЀnGLy"4Y<}]rݍf׭uY.eϞ)&XCEvVl/-e/]B@(E/ہ֯.Q\0lN_VDky߆&S+Od{zEjNX +2Ky?vK=FJ.)-54jN5QD"6*_0{riv< ФG`jw62(_J+1є,w/Q`-3v3Z?WeF'aجJz<o~att>aB0?XD qSz9%6XߞRO-\0 +@F/)H`0E ,%o ,*Ena C^}DgƧy{?Q5}IDW]kN1T_.EXQhKyQb(` ->Nn2n":ngӺtzD7 ׮ mMg׵ЮL~mC==1O}w Ս[Wpm U&Fkb˧zS"%nϗ#SMʄ 7׍w5i]q=?b)bb!tE+2WUżﵺimYF3}<QIBxG+^b|mH#-)j,9ϧcBOKӰ-Kpd_1Kf<*QLkA))= Ur@ QM+ܮ;?h$>WAd[>j!rgXpdֈ?gN,4PJR-rH wd0Ms).tlp;G'vAaHׁ\oY5zQ?TQ̰D}ln#>]QKI{ $-SwqlZC:HEqIp[~ 4F3N:bz1S* oP˲ݩJZv׺m0ؓD8a& 7d0NXv AN(o?Ix +}64Lj=s)MQ&0o]n\L+. xvvI 6AK"5FtqS*yh HfCxs0Œ >QN>݊utu=W:K* :w?6[cI-0 Lt C &i^I(yZϏ;g;R~Ρ[LipGjЀ9/l8heD]]~$8=`9Zτ]"VS ~N- +$M|,V_Hfye/3Ȕ\T$L@}Ҽ󢲽Nrqtx* #Q%O aZ.NYLu(d~;ܣ}!E#Sz[]6Pą"1~:C0eƥ:ЮElzcH;nL|KⅉSUpzuvOz uXS d1b) 9&>&#;mI 9ᬮT0-{[|'aJZ҈l\phAFәH*y1Iծ;vg 0\mFEXh hK +x8JKn Y[Rq]~8AeLtp;Z^˭6 VUKc=`4Ϋ6%a|.2P;iv!ToӇ<.MP{f;9G([Y~-o(Иr*&rR_H&DxT @(U&XzMu՜W!Q1>\\O=]Zұ ȴzi3@c#銶=QEd7` [#5HcHoZe`Ի@٣vMe#\9xtʹnzOɍ52K~Cw +OtK{E606X+o%eG/˵#uT;aPug8,2G9Dg4's wSM1yd>'1Vkݛ)AT1#L >TY)K$븄eb?7R?VGLA5*u%1A7]Ȃw! Ft$D;=Ia.!" zş(da.7V5(E_|*垂L(>iN ]D H 4KGCgV!DUXkm"@v]NPuۈ`L X6ovsȹH'OT=Le[.4fԐE/^躥ɸv3oe`aTʥT)2*]\2C1b0Xd;$*ee I̾U=&& o5EA:lgyrI|Fv^/a+ & `˘|jF@eU>&alyr2X5ao&[ ) L%S3B. 8ݩiՓ -Z7՗b +qZhN0z +S>s+B+&rRp{:84ew3:51[*yk)6 ]cgiݸ3uHъx&/D +7.0S$ɕ>+0] +vWr(O[I{Re0k4=lkp.:LU Ė?֝v;&I.H rNiiwWw < B1@hsL}&0(I\ׂr|0)0/; 3* vbb]b Z&vU;gX,ꨩئ9La)⋐Jx/vb>50o!f +E^xR{$ CvhiQ=ڭɞK5 |s fMc);뒫D"3_gH̹Pu 8ުj|+u]Y$z}`X-{%@[wZ,O*6sA6\(nwE`?!LUeZ'C +d ;oYդ?p׬M=9'gsɠe쒫-8:D:N)NX*1kٸKVeh&\qE4X;CWsZs:e. Vb~w7T{OQץ肷rĦ}c5}[ +|hh^&VhǓyхNgtJNxa&: yx n nr 1] +"eq"p-7nH\U$PM; ݚ܏{J2Ƴ{T کV+ݧe2Hw^+yx ^Xv ؙpJ;*^O6[B0k[Y6bׂ0À-=ڕ~c+fmUm#Lńo#y.@o6[;{e4aҴ]N^hMo:9Y"q6j:]m;0*FBCJ>aПk7RM&M,.ZYNŖ0= v7V^01%_""n,pUb\AhӋYz2WMvKvȴ|BQx%)&r-w Y̯mJn] F,iL^hv`0d3,10k2޲WsŘ1̘x$PK"8wDL,,uۙ-/,ttNO| i0U"]kMjĢ \db,8~7Cv j2v6hψbnEY +f [(W"3KXDտ HT:e~tnXru\CΖI>FLYLprxY',.F]5= +tX.{޴6e, :>1vdpwNBhMޱ^*9yT5s]-K)Au@ѡZcڝ~] +o96+ip8b1@E./L`oa]꺫١ +mrЧʫ+p Z]Kl|T^:8$BݗJl=_D< +! >syFxD\U:6Tq;FP-lakXVP#(hK?FDPᶤlE_t&eYZh89e-n,_.(wpn) :8 +kb9HvG<>)I@;CLJpJ«9Yڡ=XQ6HltK~*> 脭9"@ja:FT]ѥ]cSYY)l'F:XEv%e;ݟ{_ۉ]n@p dy +#+^GOu0G#[(HɀsSH1uιK܂O#ݩl׵{Zu]\o@@pLSWEշJJAĴWu!pPQxЍn°v9"9R4]7Ε&ҮZ>tZ*..ѺL )Ll)ټ;O)68•Ռٕ| ˮ0RSڥY+ +U'+UÔ@W{}qJ9ds1 bC\ǔa Hsȉxwuͺ`EBĮ4ecR/&,E5ZoV_>BSvt^Rܹ/>-74 $Zxzhqri9(`wױ $>V*m5QyY4+wzk/ʮ.F"O$5:;`.2I7f`J^咵1%R.qb1zDU5>hALϼzɷn(*%4fG}oe9UUnR0YZG@FLKV&4"cRx`Wz1s@Iިawl)m!quIsPy +ѽVDW-r.-Lڅ*TiDdxk]Zr]SfՈαWK~!i.LM7@ 3v3RHŔwvDŽv>vC^z׃dxz0"b0 ^7S`-R#>cs|̺,W XO}qa2o~`u'+c?'-N78I +30#t1N|iе3 +Ib +Lğ3^wY~'h 4ߢuي M;܀tz~ Y f)΂[E(%1_# +$SVM*$HLk\wc/G3{i!" ZO@ ,g12V׵ kLL0ŗ7"h8o, y1rfPR.7[ݕtt@k]a❡ Rbs1]MV`LAzn)]3U/bvMιUppLIZ$UWBe ;ˍ52k(~T1]kbqo̬}%t~0ITb%uY@Z'jY(R|߳ȣʰi} ,Эb2uiѐ2|Cg[+-]m`IsQAD7 G{$/M mYzJS$- =kSbooPZ/&|G4"S^{+:.bs؃k4T.kEZXR7^w.bÕ_$aUᱼJt0uIn<=]bVYF=*񾆩giǠGʷ|+`JB„µ.ע0Yu]djͲS:u &F>tOծ{%E|օ„z0XR۫}+TO0t:j$Lt/0m]tS6X4vʍ607`% tavSNw[ 5>dc&cd4 "Xn`}O**{/#DdsۭQV=^m=X{g+\.J/&үd}hli@ZfY٣; j +PSTJa4Wl۔ۨD#*-B?H +6S)zeWOґ`)mOg(?^}i0X1?vUaƔ4 +;acbzy|\"v`73 #PnGi L:zgv, aٕŘT&йnx/F)bS|HS<ɧsi KocJ; |䟪x5GHD'P(2?S0$ %y{*b%W 1r@Vz +kBȧpk;Q=!| Kp"^(`]*m<&.v(UPs]]&Nmwtdo+͹;$V!M[=6J>eaG*DuTE~!Qjsx +p2ji݀ +tG`\CJ9w&-8q7e6(3x<]I}ν 9&ei ȣ"՝vӧ䖭'V5.hhP@IF#!NY᝘tR|sDsxV*^65\[oqRt5)UWWSNR(-ٔ&_;J S{BGO;0|E8r**xɚgp>Xa!5^.S}-$)۟\j)D>%zv?ΕfU=`m>v v"@hu6]^h܄Q508wZpȥÓ} ]mj}M+u&,*vcHyշ0,~9kYUjѾ'|c 'm%6ʿtqu$&xpcs@s]|]z^ +&Kh%$Vkj]_XQSo]8yl2!in?ZkpvhWN3L. +c4IEcTm32dGRNHtufF5SC0adww,g]1{n 'R{LKl h[6ح mS|F5% u/\h^|áof>v&f#tQwI w&RСz i(\gYOIلD;ACI_"yp q'g:=sm BwA J.ȍXiyJ=8j g,tI=M8&TOKM#7;%C>էi'VB˒ixS2VPWeq8ky. ;t^/O@9L] H3vijT. jLuxWe)Y؃Ayu NxM!F#gMr#X:zt@[N!ju)\vb%݅b Ѵε󠽘?_U ؽw- sz1E庮0o/vi1LRDpC\8[Œ?䫠S^ Y:iLv("Y Fqt) $Kc;nh[̹s!ϖ[qA^Lj,21y@1jS^\jDu]kb̫,c0nFuƒ9߿]2 3ЮvO-8p.+(UB)1萶Q[J5c74#X+UUZ (0* {[dFCjD66hA+6VR17/ OKP_W IyR6߬jB-ܝR>1H{*2DeBvdo{e|)"^#n*"LZDAT:S @ZlKH7bi~Yuf4u紗oʓ[E2kė{C[AP@>HTu&3Ң}LJ Wg/3E#=. b4ȺUEv$&Qd{c"bJ +eL|pP./L [yБpօ}0Bor]х%y'uUd" Fv%LU(]?AQ B >=Lwn0՚%'!"]kc~G}5]6] 8[eF݀oCN `Z/X4hqKin5<mD r]s@\e[D@,_D psqy)wDQ0%eW0\ӧHV0^~lnɘE(v,xOk-D*;qYRs GZ|AVجpҌ?9j#p_Bja34$jVS%gW0ɇɿw2{7/Vv׮\sflk+r'MVS Ma[ca_$"1%i4.ܼpqH;^˜a{+ #v/]Eܢ"]k-n@HmhSџeG"N'Ghv̫)a'_)'AlgHL<<@TVdeZ`}1 & ,J89/N,ZS9k㭛-cSL gnc\ +c(de)#B{Oe:8XptìVhE NADoEot4keLf 9.佗y}FqYqEI|l.NzXSmTzbpՔJ? +NPc:-Ƌe0ou2PjITB%0B^AU,q~x3~a4~}e%)ńi?+D Rv2Kk^-[=tWٮ+h%)ShG%dSV>^w ׍IVͻ5u8z>Te2毥+*i;*8Ƶ\WKOdd0~+=+pC(Crc&Z߮M8ТI)RG*YW׻ޤt[&m0 ?`5bKIīiBh$Z_\uWmSf\]8е@Jmw`l8]T܂j𕛓LrW okt,rɳrsZĩa+nUM+BBvu)JR@:iB?}N;qrf`Ֆ3Ɋaz.nTϮ؛O K=o*Het' >aORQ $セôܦƭװ䳸봩קĦȧȪ鰽vP,Ca'BTpk X0 @ Ԇo)cC#)|+ .MZz jfTs[9H bΑv8fU-ٙtgwmdSф0uw5]lDqެ6dI 0ϯ,OYkAcUHLzS0MdMG7,oUgW+^bz2v9% p .)SȺgf+'UΧ e .=sCŐO%i, :E K=S^Law~YHJe L?P`Eb2&#ތUS,c6ܘ(ڽi-$?TE[yt*7Ӣ:|TA2Toٹ2Qԯ +\w?2&C޲ b ?3K +57U;8 baTv"14M.*hG7g8&6r#颣O) ֕V1K9cOb0k9~~̞P(1 AmVC^Vj͕wo߫,G' ˼SCY-a K $Jphyѿ&Of>M~p7>HD"^f]S>A !Y=r0 tnD+83h0nSL^n or2HSg7ބ6PasT:೜T +א'G˪}TTPT8WP]:JtldqmR_djm!L}\}vO|quEy[q97@)0#It~x {pؼ.)RA1u)̨ 9Q^G*jWC^z +_ܵ|Fn}}MYpҮ: K&y8MPdErF>A$}^ٮ]0kJ^{auO|}e&TEPail醴}v{2M +L ]dg]oW*Cx'# tNh~tcwA`7 +q[騩3]+"N+ " oEH=VєX^9.X?J=rw98K骐 c^ѐM + 33]pU"7)H]ۥS;Mb` +De.}H`\YمL涽OG7L[S ?ާ.LJ(H`U)'s +lɰs jwAp0Tp?T7d]_*E>jw1ۨ;EnԈoV L8K7F}3[rB5h +DtL;OZK)ԪD39|e d]jE#h@`+ʔr +>ĻL"Tjeg$=bPve|]_q+6f7i45f4eem2hZoځJRL8wo=J0)0kqif|5: {\Iřm br;Hz/ӯa g委lA;j.}ţ{3NپZ{Bֺ`euK :H|M2 -ʚ炔do ޷X Pa!+tQ-Nl[bYH$KO0lo + ʩ E_m)%\TΡLib f-UFQTƋ[r=۫לQWF(4Y$|EAneО+bz +)=םOۧ0x0U+u#ӭɏ %K(PTe^L|iǛ}CLC[t77qb%h:D7оK {3Ij%^ Fp@!ۍYdqx2)g|`dٸ{M޽Ѐ,PihPӨWAr 8W)gnҼŨ\J#k?eX0Y 47w&L~Sԁ:ƾ 4DzUvrVAOƯQ&B\6{)`4>P}q`2v°0pREr6 +i\,ĶyYlw?o hwb~/tE2^ZjZ9~Z`v {u!1Tfob7' YoqjA$_+@CАh78|KGjaV]G\\Q$vyPW49v@;- :yТZ^ &YnWщwgve/׼^=-rM5v^Wu +?uhYY-m'#TQ|m'=* T$k)bvS[ԖNuiN7' & u2uKu17yUn0u)RPׅ%zXM @XX"`']4.8&۳}G׵C)Pǝ2nf,x* +a>pkv}D"{8#c^HY!Z[[SYsx:aPcOX=ubaGSs!޿kiJb8B2Tg1 tRB RZ+**O ^ QSbbv KA+QCD3·Z5 ׊ǮB>ITK oRH$R0!s-=ߝ[)jۯbRFsg9A29G*XٚNZgfWvt9hwCDa$|ݛDj)'RT4n}F"AD2 +I!q0~:q04Nq̺ic5>,+Y#\T +{YuiծurZBߖ(*z#5WT c\34u/y{nècۍmgiE_I_. G|z%(+* +hsT ˡ/ڿN64ʑ/\"ݘ9,sSa>i%15*ZGQbdjdRQK(1ȭj(yoQPsMZj9!RZJtC[ͩ"v3ENrwÄQF\D`띑+a?Pj$ +:@]`Qٜ"dp> z؊w2쒚-pޟ tݷAnzPqSvu3b͉JI]w3u G !x,Gt]r]\JAl`Y,TM7cQWagwx6f] ݠ &oA!,aPhbO4&v۞TpSnC#W@5`woKWhh.mߤH]  8NW- ״ ᪸$} +Iڒ]QAjeO[-8jݭQ=FN>=DDlm!67$TzI$6k# ދ ؂&A۽Ʊ1g;K1Hbv{%R>\*J*Ͱ_i*J>k Ih&uY4 +T<EU"\3mJvw*KqjW r\G]tԳlA'mPL\,}^]=PՔ. @m +C%E$Uj׮˰9 f 0[]eVV'pr=++ +dQt3ުBהi.@˹Si=d!aqnhL)g'S4#9 G Qnh,L_g{u <f5(vtNS~{ӰF`pC *ՠ'aa ̰a [z|=v  8֚ '5rݽ,1XQ '/N1gp2;(Ec6fxŖ>7NUG(rj +U 4T/creRm14QP+FV4IwҔP`FwL#ۅg&qLٝ/Pز%]*y/<1gcE|% 9^~jmM0: + )BOzGHIlb vQj + &ax +kW>ԧ7FlT-hnb7)dC"l7kRw_ciS` +&Maަ/L庂,R\S>7 .H>9jEPYUc9R@&S`M2]si?C &hʏU>knѮk)Wpn9J! r=>/pV Y.6,VA.~nbCݨ? +ҵԘ%t +jp(K7F-?+֮&mtbyfE %1{mb{/Ɣ3geM8h!9Ss+xR$"bB+F2D1 dQԗ?6=9"dBeKpC ':pq #L2=nD"BEK: hsbc1S|^{3 GT=W!Z*{3v>i-dOM'GQȿҟ6Zlrgl0`E8&fI3E;NVVdlŕ Ud܁0-=`*0'T+z]8p~ +v6n]>\vʋ6^cW>VSŮkm +iN;GFZfl#Bzxݣ)ߦSlwH+ UTB!vxR0%#lDAGuwAP5g⺀`Wo)ѽR$"߼ GbwWw8qؒ,5ɘuA4(*з#2dh %;x;/e'p)E + ?+j7&D_!{ n}ڋD9W+{z cL᭚;1:E.p#d2{`R$E!M`a%A2. ++w_퐏g+]T"?֖Sb;4G XJմ|thsF1by!Yr,n7g.XaТAuxej>+F:6 +NpwZx[-:m\U%d|VļŖ!.&8VByXG#7ڈ`E +tjxc-߽ssȬ֯V[%i> ;Tdc/[ Z1 Ռc +c֑KC["yNE) Po>+w+ڝ֯<<*LJ3IDQ\ nJٌs +W*#̯c,f +$`oMy3(5byBS˺ʖQzBaꖯk(i}"#;LYW ڥj.#hQJym+ QJQ&N"Hìi:Gq햗.T, p|Lt%sI*R(A5¦#bDQ/Uﳘ5]-3ݕ$jcBCHg&1t}X&ijYUYpj< 1UB6h[(|=j-z̍pJ7) w*p-t\oiFS)T*ueX (iO ".W<rr.T&!'^B!}Ÿ4HaHxxòY?G~8f< sVQ+yfK*'/64f)j6jE *-ZL..L.N,d(7hޤ‹ p{>,YV8&[Fw@k]v%X[LOqʄ$f8 +$z#k18&)]Iy150D/&ו&vb +$76!j)uID]D>0Db❸0?nC)77yH &)a8:zvYH"t޴9=+4I켳}H=Z¬Aw~1htK.p$VB=l]k/-S49V Ϳ 72mAb%o=[PA)XrR/rfPSCl^'M`^AFI/AuWl+|]=Fpis<% !|ti-cp.rn $msXx +\d4~80g2p2Ps6PMڧ|g u [s#@Qwlх=j(ιFR.jHc̑?em%xf7v\ȑ\FnKBq + & zw +>k*#E7tVD7agv LBݯ]LݸDVvE~ +!,yC1{ݥ7ؕ|(`S쪙vvG"m+/e6ލqA$bcte]Dٔ?sN2L\wbF7lA9vLܮb@˜!zhwxޙ"t*hubu^%".*HLpS_8.݃)g8y ]9yepJǖ;b/^{Rd|$s@+T+ B.،.!(fSchp'ח>&/93~ 1%֑%G|d3[ݖerWUzkNAa !HXXvQ+pOQ]V + +Sˮ;]T .ghSp;HhM)`م &-AO&nbN$|0>auSdK؝LNc +n\ aN,ZL^@<`%vu(TB]Y;HC0R_ +3nW(V{fS1xd[k!HjwUh͉d2DY" qkxrr[K##V5?u@fNlx8b߮ @LgȲ5q V/Ȃ bPI i8[=|[n"F uC"'1mt3`Ԋ䘃ר, &Q]7PCBLx?S< +5+nEnnMx +lz'ޝP%<%:>JiZbB3jN m^p@l蒴'F PQ=V_Q%`_CŮ Kz%_la]$fI X t 6Γ̃seWO_hD׋!4 GM.j7# Q+;7x2t$.,(߁9(\Y]LTB)ejbK]H8S?[15Qz:RtKbA4Gw=*AӸr?̬`NbzĄ{Hwޠ8ohإ˫ +OLujx,#^"6980mp Y‡']~SEh]mvPi}^oqN@\csqewouYb`9S'5NgZ +ISWTt`28^cTP62NQ`&gj3ŒlKI| _ +Nڙ-pKwh?,@~/&yb^okV puJDEraG,T5h?x{4i-ʽS]Ld/硻M[еix#skK{;T îRg ~VJ"]Շn+ +6RxsS;եԟ bu$z-|rhi_ ؂Ԕ;kYNxEŀ4l]MtWD~!_ؐNL"1wwj\؎IBJ Y +:R8s;2of mFunu +9w6F uv9(6#q'/G?L&&nk1{2[5]da"W@Na\1JpQuzc6D)?@à)3^M{b"n蟕]뺲] +&uM,hS0&#&D]T|ݥ |S.OKV+Be +[pٶiwIoG=@)AC!\οq;߰{F9dpBDUF̹ww£#g_/g6ؓ3f +Ad،pc婻}yRU`^k.O*Յh mdtsӺQoh3T z41eA2AJSS?k +u89ڭv h>#еoU'#T"kA`GTV$_"O+ef ,~hR}vk0; t +)-Ύl7/4  +^u+2pVw"C, Ck;]]鍪yQ!K1E)o)*^AΐJ]6G}P-uK!fs6zI&#W\r;x@PnAJ#x[n +L4|{Ul2TA"VQ* l "qt )FpKοV@z|nئ +iոy/6Y/Yt%Jަ}= +%=]p&g2uT?@)wF.ݩvBhKй4׀O0/WoZ` wxaUQ7L inI>Į@ӻ`sĤ2 S]x V;]no[-Gwh T~J(M6yʹ- Z&"l_8~KYUMTI?Z*S%K~DyD8wLゝEjji s]hYʁu0L[;l;7i 5[Z@H8]ܰoin*U"Q 9(B+ -I= )9\Ӹ~'j5=A@4Z7bU/GNg΢Є;Ƣr_fEOj_Ce֗'̪.sv\>\rfp]:Rl6u2t.T J+mjxPuDnx^nBR5L& , FSzs{vB"I浨8 ;,GG"RY%=A2^kpu'|b"ücbzqh +s/+y&mpvuϪua}V#4v{] iוn)t@l0Ll5P՝Bdb1+ :wiBL v,Za7*LGr_$. PvI +L"V7Ezgs<+!֊Q1ߍgt '0>vm^HB.ힳV„ݛ8E8>.A4u? +o,-0uXm.~Itu•ONFsIPi֛A{#-|Y䞾ϬV}+@څ9g}bbnIį0Bɾ@H-*kpa}!Rȝ99 bq<PC4Qf'L{Dd"6NdmmBp笴PF5]wUZ QbBr~QߝRAf^-|.t4" ]tA@:qݒ@lExn9^1uvm.R}j@Vji1tJkCȌV6RxL +iqPnsEN$_T'unsԀOZh:TyJV̻mupԓ7`:=1+niG8A*vN}QnLJZ5I&DDY$O>9ޘBj5FE ut?vaEZ(2E_KԾ3+6gm^'Dg,z`gz<10I7_Rv/5Jg[*mde1=tC0*Z c{!ǹQ[R73^KFL1`wtL.]x+c +r;,3B0ίRg8Hn}{mkU33^pD:2vAFХo26&mL MwbР`ȣ-).B3= Z|+Sx.cߦ|I< #0k  +늪4s2tlvj:8-+\bYo(<QI2.^C(CFz$kƱ|]*Axxh5?::&BrOhN꧙Xk`ĹVƵ+ݝb~kun7@/C>Jm$:Çq1]G ZxR2-w`v_p>ŭ1v}_{]w=CgMᘶg 1!uE.t%xUCXstr݀9& +bv݀>yӥn˽ŕP0$i0s?* Yڍ7iFȗd;D۠Ɣ%0)qAe8F8 [:?^].Xޔ9LQ:⣬.Ńmͻ azܣml\t@ |fl͕XڔnS޲Ha`ҽaddS$Fމ|iϾ* q? + +ၦiìU5+=WO?ՙXqt!9Ugt0orf2{RX 66]Ӵh?3M;-MY~Hn_xj)٣Gulw˝.]wD312*!9XhMSUg)`"$`{H:` :ODYc,EbL,&&W~Mj`AL ԛ`?)/Mq&JL&7ڕ ,'ؽx궙TȩaJ%ӻ`()+e-׆W};n]NaQL -#hh _y Ǧ"N5W7/w][֭+/0IbiBh7RH\;uvޣRp#C]A:UWUwEqkH4$E8*/̹7;"R!pTP!L-Pp@UtĞhg4?uHa86zh?\vW;r3@oRҢ̐LJ89( X}ثfxrkavtfP|j['gCT1 RO'יď$kb^Ph:w.#%fa5sa߈:\f^~paVX]Md\Oq ;4;J&Yq!Qόfޕ]LEXMbtb1+B95ƾR+|C95Hd@ ]!F6%UAH{K9-Eclüt?jq:-Grva +)m%%e4f\!~-l;hޣw󶅏SԠq%ݍAciBdu+ȚoZ+#߂z$On!}W<#ʮ[>HL v(o7ׄ ÷ya(,v4:µ^MF)Li{|Cj +-LU.kڥ78/vwA4 +H8ftB0d3F ]9@:IƐ*9{p]64˗oP`bzM*e^,(*AI9Nu%N&, +Bo[h\7R$,o=UxK 0 +M~~ߌtBjz|a"l5nㄺ{y(#\dXQ$5kxYv/u57&=d,޷vӵ{x߫.]|Av I/zW"~ SI0_FKV0y?&Iy)!]@8*2/rLa7ػv-pI r>MV՚:J0Fp1g]`2v=x3mWV.jIao׎-hS(LD "_D <;ID=BnNkN*iL~3 yуEiT( +RsW^+죕JʹS7`}W "P͍ul4ug< tErjP! +[9:Qo#:u#%ԝHH&HAlҘ~\H6LY؝s}3O;T5zkdM H!+pUz!2u=RӑМq+[*Ф4, +`OTJM*PZEj%gVcU ?n{,Ňl BQv&h͠09LAʆO^ # +BhOmxR[>? B}rXi( "!䣑K/${ʹTS\ EoN+iwoٌ0~F=L=EI':Ԉtkғ0,t]5կK.`U՛LT҉e{_\`|Laxx{;>L!*3KlQcceޘ} Kk[qܰ +W%k_@B [^vX7?Mނ's"Nn1yGX^UZWye1/bէ"f[KB(8tljUO ǍWD ڝ¾%U@m`)T"tFR>J#rVcfأ0%mWїFi/ 0XL"o0_h~]' htB:[zƷ0uq.&ܓ 6D^*y tKb|[x1˱@Xa6t/X` '&l)SSOZ׼/X=$Ra Wirppݏ.-뿤n F֙|Okuͺ;_EoVw4Sr$75B]|:}1+B>ZRsr]e,|ès`*P2u_ + 5X V[-o&8[R'A5O)ZP"72ϔz i:v9+Wޚl&lԬ4hc5BF%?nAX>R?'x6iN[uKm1dֶ-b\ ;\NB+iXs| F9j(#3">SiD9G ]S&Bo't/DGT/t)r$ek86-ݣ l͵h}fUUUMOat`hR9zTFL؟{(T5\8 =b~)b]fwd¾5)9JV& %] O]eڅ<ad^.i9S}l}E,vcR0گ Թnʇ֡g%]K*2@ݓevxsLVu'յ=Tq^ݓ9(ݍK8B]:7lrlk?ߞ[B6j.j7uKIщn'Gvrq*EUBvQ˴VDm +5S>&}2H;LVƒ[jmٶ|"Dw)uQ1*A^2 nt爩0ɭFQ:ҷ/R0C8C~} .f諻r;yy`i"dbir UpaPir[Ib1bI+*wdfSGf}n w#!IF3;2ハMts6/)@î?31mMKCv[2\" e϶!EfQ5{ IvhaA s>$,LJ.]foSSKfh^e](JNC) ]<a1Es +CKH3< îG3VIrT8w "54vv *f8S n0S2]I>QmXwfxxOe5urn}].R= uSb b[򊰻uA*W]"% 9{]O>>\!oː#lmBN>#b@&j:`*$i. a9]S(<҇(-Tx\h̤$Ө;Ňn} +Ar.yھv&AHzoJۙVg(eŇ$&\E)d!(;9qs`rNZ8hֱ}Nr2{w˓'2pgA{e%Je1f>Ų#SļD+>&8Zl1h_3+&&']&G}{ihS"-foPh1/>^t;<խyM.L]zۥY]0mWtQף8K3a3EJAzTBP +}wYa^,eub׋vvXtavuoE^Cn5(^Jv?m5&Jy-_)kW$J)KrZ/xV +8~Ǘ/uPbIYi5J p_@>A(n^Gf-5Z)XCIlljSՙMݬ:"= +; th.@] w+dE9O\w0VȒ27hJ"⌀:)ytb'ⷙЅb(/!nENw%;sRi  RTw䏸6C!Zw"2Vݲy[b1i +P&_1ɗ*B +Ƕq tUdB +qdq6'/. w`zuJG!,S}>gfm +)(QG?1"z7Kb"BpWs |JNIoh^Hql-׬R(hE!JVׂfCl/ЃeW3$E*yE?c$d*lQ,t+5nk9J]5vPTht5%P3KIA,ۿGݝ=&YQԬ4qi-'Hov#ȄVa[ZQH"vv؃q`ܓynNhQ\LMM\WCnCuS7$r~K40L=;_w_2|Q _eaJnUu+UN믛Ui7򗰪>RBId]Η(z] +_ubw0AI;#-A!pV䥅P6veGkL۰Ac>BiRմ"RvI3ma}^@}J1`ދmlC, B~a :ϭpGA+wI}A7iJX) \wSep˭`Cmd`oǑ;T0o"FHRpPšcbX6S@y`ӝFoԆ(!1KL57dX6v1pZLo +nW'D9\QdLQ +nBt3O%vw6+TO˙ o+-vE]^:kK1%˾ϵ0$.+`WLK#ޡ]0ŔnGRX]^W[ֺE됥H5וDNӅ`vOpd4}6hI`OLD(K ᱩӯn)v)n@jnFk6E7 rqI9RU>o'Cpjqr )=YQL皷Eq(K}j;xy ܒ̓dI}CR;deMiXjE5Ӓ%*)=sʂcj",R27#wH6i&TAvh*Us_{-j6mF; "dw#DăqHkmtF7Up{6p'Rah\F%fiwtl]?b6R6Ue +NӒ|.jR)2T;To ua$Ÿ׻+ָ .^]@oK+e&nF@Et|<Q,49>b_LRQuզ"byŌAL benuM`h8|ڭvS7+/%L<G"RDFUn1<8^s!#z{n./&V;S}Ĺ$ջO'_]'׮=\ F9JԷ oit\1ә  Ti۟B5~RP ]Jõ ?z JM`.pE+rSiM뢨;QtB t$]z/E.uWeGnԺ g}R)eh77Z[#+s)8n7PnQ\7di(TDK".Sw R[) Mvna2_HwrujD5 I(ʉV:0?z=QsR>ö@ %=pD|&P7d'Ѐ)K,كfӕ2bgoj,<\ˎtIwSmӻrIk }5X `øx9f=IܴUy"?b9לވټP-B/n{Z|sRj^UGƁ -/_W-RF\[nRSc/G<昢]whn;lݍ{h8cb`b!5Rހs]TgwRrP~ ;N>$)n Lu01->:g-beݽ]#w]CJW|BVicqbE !FKj[RDd>Fl ]+W eH.U/B֒Ja/e"--{[62F"Hw ɥr1V\6\ +o#H<~m$Wjc; z +U_t)c_QxG~Kg )D8ap?߈qbv"СkRyȌijp,Z3PnIFx0MI8Urԕ*HɄʕtO KFOf@(.ڈ/7C <ʊ"{1 ?!څ#7hMh['7wC;~лּļh2TB֚T/G6~)g› qb5CgVB",$ iZ8%)N,Įrb=LTX%h='E]9=,o(c) wd@Th.BڍANQ?ٹ x`M:n-;b"Ql}8)H4uwxL7e&|T-Ŭ(OPKmM /=7/BݘFus]}-ɱ71k^] 4 @,`Zjeř[M dZ /g[foKpޔs5,ԊRI-N[[,/I1fQW +xHdw1$4+֝RP}xGrɚ! 6 `DJCQD + )jلUrl2ȌQE+1%퉻DB]C~s!rWiaPNNI:bTQpۿ`:V<5Xsރ.khL,MV[$\Az _{=k:݅n#c,-h]$5hB6Ez׳synbD& ̧݋(Ӑ˱I(.GgEU;KP')p7S01P.Y܈ivgj+y"<>v&nx}FI@c]]/,Su3WE+{\$Yc.DpF+fķ@&~^Dhp" 6)LF>>4gBϼt[x]Ifj +[&ޞ5 X?Y墽TX9bZ E}Br$xCfFm7`vaƉe!zV7 İɻ$%y!19qf=)2=@!Aie;zx +TR¸pmnC@ h vÒ,#AtN;=y{ ܡbNuf  F$ZְʉgJP+ubKxѧ{b 7~eS+pƢ*7ꐣ?9cPpMڝUك7yPaQC +>lj7J䉮M1]8}ގ囆jxfS7%f])a0ɯ-)tdIYN%.Lab#s=3S~4ג ϒ0ܩNagٓ8[0]rqgaDJկ+b^$ R@*& ӠWn"Ϟ'jɬ_" +(<"f&H[>Jӵ%.uCzMިWɏO60]OzC~q\) \J{aC͚YQ{^Jͧ cddCR_z+p֞[g&t'Vwh," +X4|ҎHG桪(cXMa aD"3T.&0x#BY#ӏc>ֶl dԲuǖwݹ`2v)6U$ maw w1BgD ֧z#O^y3&^ޖ 1l(ρO\3ڪ +%_JMϸ|k~ʩ"&;1]߷zvV>;j'=8:76VwȭQJ$ABD$C9b|8{9$Z +N4]MutV)bC+i(ϯ,,wa]~""M1pG>g.B碜#l2&x'g^u S#yx]oUODZZs]xQ֣MvLnlw]R"TS(iֹ! ABu 7`vB0ټP+fˇMqrSlqԅvDL]nm`dc1 +ESP(4}$$)h6p:Kd$ogOn/?KDkbTyxc+XcnN(6Pg{B…VR|a9!Udˍ!vD0Ž g5cF2 j*yQP~%\;`_7*pQ1V$ި#`$S6ӓng/Y:Ɣ"6UdD*EyGR3',/8zW%N|EW0"W?msX̦BɈsG sR#.?}-?2V)ĸdB_tɩ9ܨW.&-%UŐ^ʔ}6ng +<#8k7 >ts I0!BE2{ؽ Wd)a:؍m崻 +=bw&p2u93$euLB bi n.w zJscF_Z5 f.nT +i&R+<;YѩePN{%CdX.,#Ry3] a X[:g}tW0W+#$1Fat'lh mR m8 ]BYAq86ύpUg O#?[R3]74PÃηTm4;X_xW 9?'mA!mU]V'B-VXFbB44+nTb'#O[ Lsiz1y LmL4V0dӌLZh2r2ƹ.f')61v*9UK|B֎yrx"6\"F>B|EGe[;6 _ ϶}]=M@T k=aEXϬzt ÷e-Ô9yi.hŪxh>\uUzOt*~+\Yhf']#2LŒT:pBEEB%::Yق9[3Ꮵ oٰo^Nn7DW8H jDTJ2s&h dQ-ӗ-d~C"kX~ ,-QiZSM߯Gɳހ8N}\{#J)C辨(UP۟@ѧEd:ӳA $W&]c[}==}PZN tMD 8Bc4 SUI-Ah!~&G*r\ Xx`:14͉KcIun]+r .(92pt]l0BIf(uGLYP i eEn/` +| b +us݂\llƄ Cnŋ]]w&a"2(k i&葫V. &\{fpRhZ c]_}ڕk }fZ)kэFڅ.Ju͂G9z*cP#/Jb)yeZRMfum 6J+YD2r ^:q.$f5JGpKO-4ƒiд ..bYuEݛ𴽈`@T팧͊a(C2}kcV&b '\ɪKG/gX377aZ[O>tLY9w,(6PP.j5_CUME| b`③#0[l' +vg6OGg5ި%k֨.4BKLeSG[HhXAѕcVpP&i\buYMrFz_\&WvZqoaEޡ" G7N͉=0, r[o7}If 4Z%5YMB~b 5Q+lhgTg񡠭C+ST_9)Ɖӣbae1E'¼)|7-՝wpL1"xȴbS9J$slP-SBX=ah֏#fR>Uf˹3ń0K`SlI-#Gc(sޮZNj姨uw\SW6?bl|⮣HNx-{}&=Eޢ.1£*VAT, #R+ ӦpC#voVP5Lzv$0ExS9? Hݶh`r"{[0:..ݝtuuʧBYLeGKz݂Zx`]%H/C޷A5w1}ED'ի|)Q[];]gئS`u2[)lK +}¤əH0,徭X7GڈQJa4$m1*4.R?B=QQ/^<8ړZ|C|k2l)㈈E0L9;tXoCZ(ހdٖDjhXRUx9Y;@+ohTY=0KtGXbϊ6T1V~wsWmkE)VǍ@+w"g6A[m(zC)QTy1o_sմx?4?ErY6y w=j7 -d>-Ǭ"oU}Q߲zMUpdGHA[6J"aIІ$y@<[ޫ^cX\aq*3@;piNXqi6ƃISD/S<0A_*J>aaC,V׺oKRTx&|z\m[}gF +4`y]AgzXw{θ|ѮĜԶn8 |kS.L˅feeVLB* { &HwBIKӥz5:RteIcFhvF\^Ͽ!u +Gw$N;LVTN(?ni@n,Wظ֯󙐢Qේ4ԷF&pcp$3o|kP**`m+{ 2 gU~)O_f73 ӰȤKnk. P5u[7-d$~8C"ˆJzF +rU +Ӊ)jxOI9[`2 ޘp] .;@q#wK-Nsa?] -X\3lJ{)0; y+X?؛/l,krCB#8yƒ$ kWR$#mڅۦg4"@/ ;?5h]ƚfw0ʣ0utPzvHţO&'flTeZ^weh۪~'>P2(LI]6|I_EX~ +xv=~+m4{FxL}" gyZF6\]sR!*a2u[:xuIB/Pw.\͏j?&Stȯ[LќLrSEﺓL]t_=[Fv7 +;A&H- +ο[N.%MsB}E*P_ٝm$TC Y}\2[Q|X#w:bt2h)g/I*s촶uFnjln% ^+\u+in0NSvM@=f> jkzKJC0mY7`.=A#Z +{fi;0;|5dS!^hDS;yd4z{#[YK2$,դ^4Bm%6o-5ηy +6q;bu#xs_ȱwt~BƲbBQ$5uJE'Pu~T~'@2 4Xjj|%0*9jaU1C?NA1Kw*g +*[EBB +?F"Sv5WP̸Z%-Mo({¨#Xf~F&D G!+DZN]M9g fpsa@{|a!tk{2~횁PE,V$vE--./e).Mt%]2F^Ldߩp:Zb + 'nݚ]C)_p<]TP)ݵ,uDL;Aa*FPS2'O{}oĤjװarYEW,CNZ7_ݢݑGy3hdXaByIui4vcu b +nKGW*y{̑m]aI y11Ntr~G06) t֎U7KniTEDBaQ&W|2PÍvuZ%~{NKJPs1w*Or]I1BR2! s{d V +09WZm.?'l>8Fɬȗe(A;7`tj<a!#^51 ]N_Ht¥>d%Zw>t`K *t'Rr#12* r`0-,ɼnKUZOPl>Jn"f#]GQ.p +MJ+CuG玌@gKgF79Br8hWTAvº* 6%PICLת$[@^(@8FZ +elOA(xW'͎I^MX2鰡c_uAPqqea?2Dllɳ+OX/PO5jv;dFII3`Kν_htLCƓ mx2`E6 g^0GC{tLOuVkGU]GSLRs|rh.&{&L.EڍB}d2&jE" sOb1jb/xVnvbw2hx{E`MR$c +@|#L]VK!n!Q czb.I0!B 4NyarO(kA,űr..MƗNoLP]m)o'n7Z#-%} =a/Le[}rO|\4ʽ׾}bŤiywf:rd[-Ҳ _$QA"`.Xd>սnk.B3sYl\\qh0^ BCB+? f@|U>;9qs@{k`BM +QqWi; l%xP?Q@X ^܁#AD?ҹ HpI$ XD7]hZh_ ι5M"*XUeYѶg31&p[+TɱRէqq 4}*^彗>^ф{r +Mzg ^I5bzmsW )T+[ruPv9x`s6ppt+ٖCUBd~ 4I߹ė0^ /6zzvD&r0z-.TǴ݊vm +nYJ"5oKC7TX^B SP%Elϑ h79q< MHh 9W(vcc^*=ᨛIocfpژ<^:}/N)狔8x%n&kfL(t6U}y>'M)֧e5TKG.)ăP20m~Wd#y∺г/.:3dm,>D? ^p4LF]̈́VΙ4Jp `k81pA ?B Jqzlԍz",($ilz2y(kA8 RX}sX<$F\>s ޛ u^!)>2!),O4_MJEwr9_bοVֶz +bJH*Gth׃\}H00T. LA~+e}][ſIRWelÜW|UuD%TTv9Kyܻ<2?hQEiW5ɇY>eL9]ZTu3hR)[/ xSyw;ꖕ IZDQ0 iw* 4K0.ݔ)H ꖼJ7!S/I-ďujK֧vLds לūmCG3}.mx_ iIENjJtX ߵd +Zc= +Wo˖(3xj8$ZG<(Q`%a(c`oC1SGFAڕ Vd?~?2_Cڱǃ/E{''Eɉq, +/G]S +y+8u_VY-$]4-:1ZTG]P0K3%̩ܚ썹i^¾;o%WP˃NtHcr7\.S'%,,HQrCoW~h*_Jx{Y +Cu=r˥3?JXPh7p9rMh^3`񺓘 c%( T17CT6u|zUn{c]38ٍ'1m +W)"RWIƑh=]JPmDݨۀcU]ytl@#\wYGA +86&6$}2zbV74F<69Qr8bXG|%q m:k1/[zLv,{[T#닒e'NuO pGF jiQRȴGj +mςpC{l 9ux(!3󫾾\<ؒQUo-|806 +`09{ɛ$F>pHi2:܉hB@@Hor)ǾKn@i0.%79:S!ႨJLPm=sеa0j9/ݞ MJMKU2/=2%&֛CT7|-U@QnZb02Mxy)rZƙ^/{X&q0|ږ9Ƨ6 290]u)):Ȣp(ĨonV*%2jKY>A( 8 뤨觰ШfI0y5tue=̩ 'Di %Zl-jzHmdqlfR!u3r=oX/wz.3<[J߼5{~;Wo̦E=Ƣմ-L#UA$#=w{YcŖW%b**:.W +t]@fR9%5NMJuZXsYAϺ[0*lPN[; cVzfv[-1v2CI%8D; +%QTOcHQlxl +%QX7r8%5+>*'SIV "}4ӮbTfWW#!dCK[UCMt> fUVWkp"A"gxb߂^#^liyFƴgLI0 4PwESd:!i؀ѽ`= ub*4҉/ 2 *E(ξd 14J6DI4ķ YL9;'ZMEcCm{'F#' -cw6 +pdƯ^G%B1\k14֫`jFApnoZ;eR +endstream endobj 48 0 obj <>stream +gOlǹ_rDP(T,fgxeӆ7C*PX0E~ʀ[o6.0L`RױWNg'6+)ph[]IUY] t Y$4)UE96D:vfU^r-,4onPHᄊPڅ6pLEvbW=^%v.2ꎰցW; j+KԽaO?TĸK3{5I=k?$0(^ M3./q/ +|\-o[[:T +-:#XF[VzPVURDuXPRa/wt/N-7jAH Mc|wT:egvvy'vʫ5gaYt"ذ^J뾯v0K6gm^2tD_qR,5m$5 Y6f SE_ 1e +rd31D :g+.϶ @ZWVe30|N/sMj&Ϳh^Itz"G+ O],mtE3从3zIH3fTvgrZ1=yEm-FHpLYs]ol.oI"ڝ(\SxhNk%VZ G 7]vkkTܛb &躦]:b:hWNLea8>VWAM80$/gf Qw34 K,QK߹ jR%Ґ"ygH͹sO޴nRޫk#F0!Þ+熪Z_\ԕlRS1Dv95N[fS-AɃ_Rx1&KQI܍_%fמ OCk_Od "h,*5NC% XW 'vmcg)NvBKZ,1͌h*I:쪨'.gFz&*m7cYmQ}ٕ~FA"{Nw#`U"w+{Ri,uE,ZŒ5D؀ib˘\[nUFkaŭm+2Ia"^7vg&pX])-E:W8\!v|ن_]nj(~rVZ]h ˆʗd +C3L.xwzb<33s)Hs\`L@^2:4JŎv,a҉,9J-ce3rgtGtBY2뮥\X9wE+'7ctJt!UqDVHd0UX_b!pZ=vY`un t5EL ikrR'#W@q>%Zs,9Cl tD=(+zG˜&ǘq;)ݓY8eO?eqTz˹?ΊHǻ]vZR~u%\~ԃR8;4[&3#R#kBT0/\(XQi"ɵ0(: jv  4J7f Lzo.jxqjvI wv}p]2yIsdMd*sL2Ũw;v9LT/h@E*W8|lrU0+`y?CZ#W)ƹdNl+u⫮AQ§+ɷ)=z-\wZ 3D_J<30D+E%jԦqDz`Nh$H:Y^[t,C +cX\yf5b.Յ;vz]3Z.n(GMQ'?U*增ezG_PV䤙bbqL/3tuL$">.N͎ضMn +NVUϴ@ 00ߜo#svm[ +SU=y|I70TŢJex]05*bL.+"AE +4>aC5gϕ¬vfe.._ i=MYE /.iʭl'R@Krˆ^si2:y3!lb]D :}eȪ !n]OLRd꤀4U(,[Nex <ցS +xD'C R +lQq)đJ\@Bh#i9+֜do|FR X80B]ӫMAw H8I5VqAEa4Á8ͣ49z=tkku :7WEW@L96IULQ(4)1uh Nޡ!<Ȅ_Q*V:p3,~ Ŀ&*.]n%;|L2O!V֮4`=` ˜nPd1%-xֈj3d#6\e5;k08ekDA yϙZ([oUX۶2*#7C? V|@IҖ 0R8l#hzlh$@nIc\4f]< +Gثa{+߆\Id!VSo +AR <;g*xu1*Pˁ"%Z/(>^ z)n%G#9:Fe](r-d@>\eB]#x-uR[:IDvXrvZ_4ջ.p',jSڵKp0A +(=וSǓL];69n iq7|`4X"W0FO(u\A" p)]\yٖ],_,o=%:oMz @E8#Ն 8QY^_kV>dS[K0`y/ DnDA *ghp+V X9cvSk `_ug_~iGt trܭ}Ju +,+|lhvD:NK)%WwY-L.x{Pra kv(61>1u7wW?pIęs}%=lhH/_L5\._|Y](ZD["ax}HhDq!M>41h7yF**ZQw9vED+ff8w; Tl y \w;v-yVz6W>i7[L6 +JI/$(=rY4G-&Kp q3v%yL"v-E# -v^R.cS@hRvX4GnF[2VPAeoc6[q*SZ: ';2] jpMtwUTBr]X ܩ":,ugY;CʟKlv=2+Z%\f|vW]LB"<^]7zt| r񼟫i9 3݁`]w&ծ?+]% +"OrܤᔩP#4YԖJsuw׈)N Oq~ZWL2z0'QĩrM_#H{m1+C +jTeb4OBtr=|ߘVɌOSDϿYԿ> Ĕ ?L[orb*eU1̞#Yۀ P7)y4Hx3IkH\VNƩv% Eu0dr"\@qѠ!q=,_*n[Us (v[%Fێ;p cy'l\t&֎h"- +c\59U\nJ&S+0uȴsϭ{z7qJSfjWڱw't,Zۅ"+:n؃>ڲS"E21!Ǯt:fi!YizjGR0 SSHGu!Vr &]_Fx'ZcdjhpГea"b)+x Nqv +%UXA%kQ,KȭiP'T|4 t~sm`u. ):\_YCA ""/{ Ǽ@$Hh)g"FKy xm]puI" Of]9, UΌH)|:g∧oR;5|cEy 4V[A)m}5vPQ[+Do.IɾqSL$D)V/3j+_0A`T!*\oh!Kdke '0B{S({ K wbwf DU ɻaI%kw䡙SϻL͗~uE*JY*JR}3 U<æ[{qv._(*UuMn]S׬)eWHN[F`1Q섹v]#~8gf]קAѴL SGiWuݯv{ii#W%E. j299XaHx̧?FpzYBn"~6>Q= xɀg]L^4%!]NRn6JIނ0{,kGG/C=y!D|_ZuE'I@yy+FxvxpPf~J^I Pt[M%$(p ѣ&h/eXw[!j#IaR MU U6[Ͼإ HE}C%mZef`iH0A`rR|)r#i*X +0%C] 6@t 7AG;[̷e!l-zYy^{`U"VXz򕣑^\TNCZ&md skQC[@.(զ) :qЉ2uW?29#lּ;\\9/Q!"xZ`Yo(R< +RL+QXPك L;:ŏxx jjӞV2FڭrO~O`pl [e#m7l)kM`[ =e~w3B 'G.L rxWmI[f"Do 9vSt]|yYuҊU@/JۺceZL?2eWvP@>ەSS[6WWk\;841&9/m F?ܚ`-ڝ-4~g +) +CcyRϋrq5,\m)}C3 +IMN~ۓ:ιCyA†l6IږԏNIohUK/,u"ˉMsiTb$`k$LsR*Y) |ļ.=_ջ87(Cs?hL&|E;cѶ9Qoآ2Dc|1p]$}MFJ'_XLV,\Fnu$$w^#m@۵7dI!yັ>[8#OLuuObu'^F.޼MNFdrWn¨v-Ge +()Rh\w97:y +`ʘ]8#Mi`Ea ԵӚg,I=*09%#/u#6驋8hlzy \;v!'NHCtk]VnfjPmAb܄[H4|M<2n˩a҈n|4WR Tf k**%vv܁+Τ +2* O;Ax^i50Jr gN'\@ЀM#I14iSw= I!CPjs&[JoA_K )5z/bk*rҭk({z@Rtsg|=?dx(ƐMDxm*eVl$# >Z(ce"g&BjnqXW|$;<*Odx3&,m6yGv'IYC uq#'x'zͤ6E]W."u +nS0[1 +Uxwnp\](#, Ygw1>0:>fr `nF]>JCYmP r%^KFK@.KV$>9_]ŀ|2$G5D[03tC*Zݶg +!47 nB^)wu}c)KJ_2b]ADwg ϫ &.\"ϐsn|]Ťϑ&4L(ÔQbu[wY ,kͦnS0ssv`C݅ CkTGBqEi=dxO>%+J#:~ASGF_Ǭbd`ul#IY•)7G*kKHڹ18 =} >T0Zf]+|l}Ńh/^Po Ahozeբ2/,)6A!EƁ@S>CLD6 jꝼg[ڹm aX.ΐaUx@n*7 qq+ }u^C [VCfEoݼ*}ڝV`#kXf\&(䃼y"ZX7S4ZfiL)L%w}dz1gTVw{.0UNm^QnⲅZ/SG c^4t)Ld`5E5Z +u8Fd„&2kUbad* QfD 1xpϪH +4Cn᥋j*Jr}r K|sL~AȪ, @W23nyXJk,ڸnH?p2i;I|T pҐEQ2=p)Ŵހq-4uB *Ŷx4쾭xmĮtI$@DDO e~0 =a@ ;-?3$-gI0[W5Ӄ0GLu אxK*m%]O [zNtCfrmtg8wWf~m9>.ǼH|7c&׭=oʞՍ nN:TD U]PE-]؟pt8&xR'enjעn7NMd0coYv7Mڥ +XY:ڕ2Ak ޠOB/w}a?%m1+vㆩ->[Axa͑2fs,&DvRz拖#^p4ftĠt+ F)?*,"{1E_^J\]8[+U +g.@]>H!k8$[ m<)ݾhN/b%g.v2hۧ0}KBOmW,hXi_EL, jM)9!tכ]A}Pי2ϭ>v?ʯ;Q:f߿^'H_1u9MרYuoG6fVwή6زONPױwK"B|6Da=}jDi*cj%Q9V7<;pnZ?l.el8,7']_Qlak0-"RH"XoQV> \W1SH*ɲ= +skPqsz?U)%*&qaAnJd=Yj)A>,!$eR;=p喳b}i_bj_ރ䁦R҄{o#/ QjT$ ++݂>Ρ* KMhIJ+]h@VEw E%Qȣ,uAieU^Ը@xtYwcbw<\Hc"_ޫ0|]PB0y +wP7)8!A;)_A΁3ɳ4x" ir?ɧmeԺ;1\InSDd]q(R7A5fl%ea3{XκŷY6XB'{ 8% mhW wUku d֗PuxtauKt[6LE۩>u[*!t]C.-0䵋5[iKɍЀ?K6 +r"Xe--`ckOg8KK0vj*`6[rPui +4Nm*U^浽d A'~eRDʑ̙9+_KniN.AVs—8؄rr&774k}'$vG]e$ahҼ/ζBg}fZ5<{Zy]1N^tQH8\{ >%Ջ:B(F1 RdY% $=Hj"h;Uf$i[g yjrTv pKKL)2}= T2{ Cʯw*PWAhGu1',fbݽkwcvi]!@U%TːѵWSGqeEtt*EE43&uq}l4 Lpr]gꖛ *q-2l V;v -5^"&ЀvzvTۡɇW!XC +;ǽCn}`;,~LQ6r^[[v>](P0EeWF 5)>j QOd2i [M{d{;,h'mU ܂_h@RoFZ^ gjBdBZI28ST;4w|NxԐL79&M$6|ju:4. wՑL\rjF4]t*:nyx_\v"8H*y=CLo"0Pw/Ȋs[cKo\/ogʋalG0LCo(%׮ wl")+݂iڥ\Tx-6]Oޤwi1 ]&t3S(BLu;&*Q5UE3xZ7] t,E{ՍY>jzt<(Ya*c,g{.eנH/_v77;S# t%HD?vZւF:ΚCn(QU[hod,ע{to7{KdIU$=w ,%Tˋ-bsQ bE4p3ta%-x魟@qPi*DX.e[9߅Uᒵd!V#7kUXmv9I iWb?1jT>o[TcMR=lEaȶq┢Uz)'  ([jьI֚~{a}Yvn CIӱ+542%\޿#`2ԤbJ{e2ˡm)ez #]wt1 {CPPiB{/DhKsd3}[L|녌FIgiwAw`1Ik}gQQ/ky1`yNCX +StC~;Ac#%)\ K]+喺Ν]zwu? ʤtY$}iJ¥E`w\7&LDUe bbR*7ubBxEyQG%fya_n\yWՂӾCQٖ. Wgƽ2eGΣ) +qsoو~ z|n5n±~}<؄۱a\76 ȯ̋ve+Q?[! ?\r .V0d9VmN|6iQ{{)dϟRFu[MEl xTF@ X 濜͎E8kr˚@I nz2 J@O=r,뾢3|PK1PK."\K}鞖0 &Ef8Š0]vm1nwۭ y2A~7ҿ{|Fv#v,BQ'ӄVSUZE_p(LVuBݍj9'{m_w\ܸu纵\cb9ѮcJp$ԝvD qP/R# ~On&ڼ%?@hD-S׊nAV2헬g1wrNr\M ]"*fF|U*/Õޢp8`m٘ +9cA^rTo2wq2&m1 +,d;SJ &lwľܢ^ ]|hϒ{ <`v˹oI #2z$xQQ R'k]$EݵqD~wozFzҎ +~|۳)y0K>!]|vԚ3r՟9@.5諛>|יuiB>rԳ-]qzǟRw^G<)o>LC.n?@ + Ü.JzE"?|*joA&/i)avi ݝ1O1JǮSYh}h_Ex9BeX'u5Œ+,iS +vJgE|;bP>s<=eXsyY.Q)0uN¿mӘv}n=㮨Db|-Q%)nRjg>>X꺋c.Μ1{?Q"ԥT!׳m hIR9gTRZu)Pja˄V~.s0M𠷗Ko;oMȊvthF%g#6]2L{H 0#fT?yF0qannL;ʠl\c"Kkܾ2)ߘo;>5P*?I)ܥ<Ѭ|@CmkHf,^6ܘp,aiXNrXtLh0|t ]#k@%o/~u[ĆsUroL)ӺP*%zF=ltε2}w>*L&}cgdH,;^GyE/Q p\(-m/2f>A]h v{"5$AhŁQn3Yo@?LMR2|`nTu-y Er ߧ]n{ 6Oˡ*. tHan.uxb2݆zUza=)R*;r_ORa+:smp> Y̜ ;&R:en$pmnKԝBqk7b[2%|t}`?yjo)h1lZL,Ys9fVryŪ%qX0Oǧ,`fIn,M/z8]]x\;7Oz%PkI89TK1<&y`C5Zbki}K{FVLL8 +%22nOt,X sA= )RAw0b"[ LhH|rtdڍvH)0g{ɐDKez&UhFzXH&3ޠ 8]JVWw/+czO*{{V+*rbq,4ä)CQRe|m- 3~w3F)YQʂD.B"| Wdfϧ;̌}5XDXSɥU!8J\miEk*FզLԐJQu1#gԲZ ;6[,_>Ip}EY+M7y~]FǬ]k$K}zM=kKh}9u!_qqbʑ؅I >ҫH-ryY8gm󂽿MG6&gʍ˲ZR@!$^8ˤ+xV (A 7E2L-D,P{$|N[tMH]!$ +QT){yڐ6{-6! py-{0C +2[)7)5~T/!=O.G= Rf{s+/>hdD љ03!D) ܹ3!\+&xaĹ=,A ޢLZ}TnٞÿAbϲ%VAÍڃagZRwu +i,ѻ3dn:1I{u5 |n f:peۓ{.@cl)~6/ƫ,ur#)]7712XW8WJ4Qʇ+$>xQdT)\# E-nf$#W* td"9%<;U_QzvS(j6py"!A4>ڮi{cBrnk]6S0K b|/7o.eQºTDNNi 6oOy9*._xBԌ6 \37i=Y͝+"yx Hx; 0WB^_@YYZ _tJw8;cZW#-^8x \+[U~3 D >]`ԥ5oDzO6^=Xy"XNcjɡ7L.}m%a#]D3&n6Go/y >aJWS,`]bvmShy|]H?o(U\ޭœ7Bк A1 .ݤs{a6(Awc]ǧR8/!UgVZiSLT +NRݟSzՑ]ﺰۧܶ@$)h{ەrDEAJZ@4os! t +%eLlgɹo"xjՀNz,\{ί̽OX⥅Ri,;pEЖM>0o@L,Tb/ܴe!Eո(⠢QGz7yqLܥ*^ Lle0bK8nr4kQ|:Lyeᾲ`>Ar;V,^Ά*W!^=ٕjR?:9E&:^.fiHjZg$Qܰ#>y~Buӝʓ +Җ@I.bn_ Eہ +ZmFֲ{MqeiMD"ͳ0OUҹ;Q It!,o 듷v[YznrVE0uC%v(<,%]H;V~XEQm-uY W^(vIbJCd/C[X075H~+6 7o*7Kcu5P`{b~%@]Ƙ-;ϽAʦlq&ZSTs/eW'r[kC4_޻ɬTjty#ٸ@ٌ6QE[0yR0mjկ`jD%@..gÝN5UU)FnO'x2.Fn4k<+l-"}tU/@hA{&i:ګgkc?4Û:T$-':q <ߜ!)*'GEcz9`~1MHucvP1oqׅZղ/adt*D!Arzwv;Wɼc[ǩ$ }*dW7D`ՋA +EBQ7FeѵX ndwTJhV/Z|jX,vKw'@ln"4LS0"zj尧Hc-I#&.Ʌ`cwU֢A2^ B].N%(ȋ֒1<}K)nA 94]BrJ +>tI$7j6 +6ZWa`>7>!4.\mHFBUF +<5];pu N$?s1x>%_4ԪI6 +߄,>?u)?PFџ Cd wpC~B{*|Y?8zb^VqY>C!QDc& EV +Pc)f~g2@qݐ O0 +N*Jz~w-xoBp{gGy]pH! LQ'(?>6JkEzܽe ٨)Ħ4bZ80&f}$o(x>]p%݂%W*˂飴 E+vybuQK&,ʴf ݪcWSkcԤ7n>g biũN)?ݘr8cdQW8z/̹Kwķ8d'= +ݭ-BA{btwˀq4.!wW;Jwb*SѦza@h%b~uMxJTIH$,ertkmG[Xf5i oJѿA̮P]Y[jM*eb$LP&4 VBXb0R;tmX~N|al2m3&ggR{|1)ʼnXe)2"kNHՕKFRhK"DW(&?R+:UV?J9Fox[[ZUa|ս=0TW1 D=<ɯfv~3Pʛ>ʅ&pd5X|عTϺXKqZac}b2sƌw{g7>H$drȡ5*hw|?7SHmHm0>(14auut-]$,<]0A7ikk >݃WR5y[rޞv (J7ii rXN,d;jV,i H"]J1>>ҝ.:Ց? 4lnNTKԚ B.sѳ@ DTþOuGƻLO:ö eDrI6) x{\+';j|# Qja].%X&6-W-)$QNݝł\s5Xk)/AjJY3c({DEI=܏e`}ɾ|G@=1l;>gomҹ,xquhb\c\AXJ4pFIu*Ɓ4˞}ݻKl;Cjd~!^4/=Qc^_TIC[azǔ1\'`80soǿ'puBic%A=WO31<[ػS Av>F|iAeD\{") ]N˾T&٦r:; vE&PކLWXlatK2 +(PƩ%QL!8ǂBO ~.eKoA URa €\Kp Rgi"ܲO &z.,y {h̯]wD'ʡ<'50N>3 [Ni= "+NZvG|ԧJ1vN^fjL!D;PA4s 4hӛo<(GTsVZQ2ΝnYQ{m56"i>Vu /^YnoYR-4R̽dUyGqUƩK wa +Y1(:>SUP.Tn&%{&ӻ{nm %z781݀iǁFcu4^%?EwSLVVY>U91I]htWѥo[OjTb(]UՍdӦ.I{Za_"E# _|Nm;na0*\'d5ʢsW1E1Xܣvz?p\-" y~k!P1@zLJݷt)17D2] H+̄d)(<`ZdVS7U;܊75z-U [ѕA>x8&S,Ȟl& d.r,Ea,{PbQE=+?`013}mFDLǁ̴c9#sKy .5ҬR.RX$i K_h^z! ض ~*Q/% !!MLm>M0(GnՃsl ,V$ &H7p7pn?Xz\%IV H*gaEe)a듓Ck΂HHzr.2QUѬN>Z ReC+<&Eċ ̓ ;D nZq^Qd\+p+ fRz XF=s [$+i RBS-ھo+pMu,<S(U9llK/=F.KJō!(e]׵Ykŋ#j7=^j{D,.eʒ ۺ<7yW.][ZM(pD7D ~,=h_.8+]DםIn ۰ȴvLu6} ʘ)d 1f]>)vc vA@TĄj@g6 MwM@I4jwEWkW)l S\:FHTqoRj(.db>R\sN풰,~-vn?yjŷ*rte5 +ޅ5xޏo'uc$&Tѓ2ڲNlZHj䗡y6ר> 7̪޳vJd'ja*+z;R[ <FԳ|{J +XXU -`iQl\;: >ĻR$}`Jqn"Hč-3?cbᦇ\}NpLDIMK_F +1iM"G-[3|BP'ܪj4]Ʋ5vq@en8#ȦyRDY`#]x?לI(N c|vYȌy_qڄdY}Z{5:Dd;|v6irԘẌqov1DrX2Kpph./8Am VN./z5KsբZy5)$2dCK]s&ŜBnL5+h2ԓE;itWl>H]\Zdݭ>-Hb: ѫychmZ<,񼞐]hNom#)XDdur +.|mkP7uaKa98,nA*A +ORwC8%Mڛ-`-ν5|=[{#EvqD<ҩ!)TLVsϴh߮;^jfEA/Bם<+~oЛ$1(IR +h<՚Q;qW }VK3MKP]E&"Vj*HNu}y]^|_AȵQ؝"Aw 1';h*}.^uXX:4*81!kӱP+(wkKw|8 "0X3(꥘'ͱ2)TUxrZ\wW'(R=+nFuō"c dFw>gKl)"FmS/Ě4[?G?ZD%5[PKοV o5 A^ZiF5J$L<;4CtJoZAse(_!WnH2 d[Jg;z +!00~A)fҘ\c|PyCHd[ZbzW~8y~smJRb/xMUMIT`\VH133S0#I25>jxZ'QzMSȼ> ܾs ˖~mnLLyG'/xT'c<%{ïo SZp{}=nݢN` KkWm] G^O6\9JM.EM\~A'}j +xn^z( Iy2tKt# ]vt$v4Gp).V?OP?YbF+s+Z!I;C^&<1'r5Jέ\Gts@\ӦgOjKZIIo7؃*PsdsYCDthEv'O@5ܫ)8s^V|2qtE~Ii-\X( F\a;i3õ=[̆/%EEzh<l5R6[XZ +s@4*FB0Y/CT b< k&PLK+rg-~bY]x/du{fL/wt4#b<)!5*stǤ/uD4?Yq%&8 +ޤ^ ̇.-~XRr +{ZQMnq$)Z@)SH% P0z-'[pd.:Z*zl;`V<~Z<>Z[7S5~/*h 1Fa;VL$MGѣEΒQ(+j+AߣR8V.Ģ k_d?|T·UoрI5,$jā1XKZv :[lSbTssI}LxU?g i-/wĮ$ivOX3P48{Ud+$zrΛ4{3҅u@chbU膍>}]@./fBǡ0B*):p δPnPj ao.&<19{:"b1([3h[&zQu#)rsݱZw6*ݘ6>ם] +'ɆD5]tWk#Ш-74m&ss/|}ITjҵD‹L +ݫ$@ŝ}s+, u U`;k2\-FQJT%9 {%EVJQd`[b43dKS%_0rR:):28^Bnxo6aԽh|J[[WPj9gK-nE;ۯV5OH=+5vfe]!/ؓ; t">Z[SG}4T2-ʽ,( !Pֶ?{[- De-H0sBQZ +0nN&ݶw핐x^\qz壕!ǎ. zaoGqtS/&̫ffyCјc^֔c%n^{-^IM a*X%F98xk=lĠiYTFpU>g&'$,-B{k+)a#Marh`!x)eqKºF +>Tg\("ЍZJC[}!KGm4>ֿEt% җxKN',=5CGGԕ ֨^),|d*buvuYrf17G 6c"d8 ō5MIKA m!#,'tS ϝ<""I^9I;{02)KiR@KfUJ\]•V/@`+M4B; @9v!<8dߌE1B<B&9ZۣP$?@5!d֐\BT8:c6VvSMqڌ=5]f~-`7x&Pp'vĂJ]$3vf-z_^xYxJu4ˣ $7IlKۅQ1#`E.4Vov;;}t;lV8mWq¤V1FLR!5N0PL2y] +AƔGZBʆ0),V,0bR(0 0k6!S䮻uvPB,$td +X LJtW'(*-^(V5,DlAlXeVWˆmС%g34 qHϤJQYIcqN$L;sLzG+۔lܵbo_w7{Ajׅ& pq#WU=ϤjHw3lS-z+pxPSi#{H,ib`1xiTOE IkA嗰]7Wo#H$7.u([1/^{k6떆$-RD ׵١ݶD9_vOmARuW.V$BRe S_]Eŀ!#k>ӈMNw`c%x6Asra*s9-Ø\̹w’@Í\2vjdӢ'тX;7byƹ*hAD *<>[Wg]" +Ţ۲=YƅARfo-rD nMЃ~Z~^l\P#dݙPw jo[pTĀ@l4.@ߧ09]bnPIP?l՛Nf9_8_TwatB{5{x25؃v :36[]rPFj|K61O_${ +6TΏo,vCAP^^8I=vX5Oz̯^49J]PvZHO\ ,ټ?8'w`!<fv $;ù.!5_q 0mj׉Eu?"2=( +sAwFn;BykF%&$5 +RY.A +˸DVQhta%ZrfQ2IcuI9ؒX-A9Y;j xz/36&u߃H7nbߗюO7y/p-wMoLA\0}q8nϥ-?SK%9T#l5ֆcEg'^otvdd[د)$}dWr;1}.A϶ozru6T W7e&eO:JN+u]Lm FBPb ݌Tzʇ_a}S|@ҩaSӹl5ASwtS56vS Eg\[LvLڇOѮ`뺚ޖ]`dyO-Xn>AThwpDL2\ܲH}J3TMV*Ӎv?LLv9mEU =+ʬAE6Ơ0$_$D LD4 !~4'rd7'OM|PLp`Q3?m_c`eg74c]$B)=XLhH<"~Tg#0+K&P8dMͣ*5^,tqn/H;ޖ/7zQRD[bJC3&{eqe[Acg+!Q8vU,Fꆁ@x!u1t7c +TW7+J;rbXw{7}c>H|`b|%n2\ ^L_@ES؝iHҌW75n.&rE٥ ȭ?%_}m +  *X2a9 u1Vt$52$ݾT[" ԃ`ɯ)o3i¥ad#nbGJ|Fs%F}@\&mNلzݸ]'D\6yP9c ur_wut# ochWq.O]A+45vMf~G~o[)u]28/Wz 0H_nS @LuO;tP[zwݛ`>cALh*֦cMN׉f7ZvA]bŊwʬbruHR?UrRUb[J*Y,Z] Paf#t]/ZO"]* 9S`vӠ_TCjM˝å"x#AraEWy %ׄv'9 \(ȮN1i$;HپalӞ)13ي;;1 Llj]AQ|BZ%"--uVw6RGQ_eu#lWcn,HK=Q}Qo+o +OJp<71AIh4Y3h2"ClQA0bA' 'E݈o!+ANS \9`؋5˟scnl#LW=3mR3STBTRa/0_q'9@NAUJ1v`ғf 2lˢ"AXU4Qā1])1vVvFou.`"˝+p t9j7b:Lj'3vSXI.E\Z:DUǡbJCLϲf* y[Qʅ8Yp ')4uMyh?G0=pE_M]M\9@ȺQVr$\ރ k)q<Mi})(g!~MyܑUrzDF"ƫo8mW**8hƷyƅM{lŃHHiki}{[k%HLú(h et#QЭAr9:-vi N֘&d21R#Ƕ1+Y7{4dZnhr?GN/FސFȴ/PK}kN0 +ǏO&TXlRf6޿W&&+8.2;SY[4PMOA}J- xMUp+)?9#%,v%.37s:R(ek s +vO=Da[4/xwX$YLq:ɦnt 2ALbZoNBvTJl!e^ݐT4sϗOP9\i+sB^[|Axԅև>}ɬ'ҍ_dvD@- +/. L|XO^rs +ao^UXP7bW +R Wz7ց^dvdq.d?Xޤ0Q'Em+0[)$V_ 9G;"r/܉mp +kѮLs5KpMZ]މ"БheQ6{hBU.s!t83|DR'J32^PHntwSpd;7eaQh)<|k9L@  w:~Ce̝#E[ +±BnצYȼ2^uK|~evzڽKI:2/MBtW` +C^]..SuE ![\'iT\xitqh%)RiM sO^tw BGSSR}P;nVҌIl!dpP%XNݙ:?ld -UxI$1{\ ]kATZ?]w*Ȉ0?/LA^BEⷣiw^bW֛=iZeҮ" `F8&kKWnKN bGwҔuP'Dau +"~Ge%k_ɠ[6-j-"DE!f)(Wd qNA{oSޓp)lmEZ/6Z?Z%Ͱ?@A ċBvvLtB+0nRƀ7ȏo&5 &e;#DQzfeHZn>_g9]7& qBQtRxb:+ZoD3)*c ++еn:nV|0^e& yᇜJ>LK3Tj)'?#0_w6 CՌD:qkiȝ?ruVKDn@#V!B&+@ȋY/#ƛUi]X%w鮴]: ^G4qLJ_0~IXp`ҟi7 +v< j71Y~4,'cjwufj ȭM^u\5SJ:UͺHEu4q!̮|W$0)x %(n\bnn%@]_Lod5teRWj*K~0}5+ݠblI ̽LLߖP8 wA0 Ftqhx &T܋gu%̻zaKмnUy6^H2|DiuVP>(?v?USFwE%{ꦷ8uŨ{\;{ߞ=0.=|ќIݷđ.+cLh"ogtᔹMJuN&{ػ>UwE9ˀhi cݝh)ш8EZwc-gt E(λV-h°K-ÛLÆC.* Lq*2B֝4֤ߏ+w Zl-$*S¸*^61 +Yt}p#YlIoBxYT-WPȥ2. x,~u Fmg/\zRBk"]ZRI2rk/dnvC8S9nLH b=L@;M+8}JN5Ԍ-| SR6XŹ.= &?Yb_Qpk7we?^fM]Ts^*AqBZne\e%2 5)BU,$0b˳^RZ K%k@BObVGiTlsI0sǔ>8B/:AL 1AS=a77դrK,jRIA^ء5PbaW{sUؽzŰm3Moj:W('-0)8Ť;in6㊱/ljs<)?馚4@s9o<+cYZUu, ]ٻ`,,t/Mmo;&}ǎ_?[~ LJyĄ| +e҉ΫW(" '{5M'{g-jZ-aԾ#P4 +H XLk d0$Ma D和n 0"XKK~v5*~2;2'A/?F~dbuFzQ}8b77+iE yՇs,ZnrZbY kZzB[rS钔BSB8`.62O d#;O8rW*)&ۜ{1E tn6CZ><|zYZꚌܾMaCF{|N208D݊J[|U7 w':aÓB=SD܂iSաK2|K#7vM=Onzk?L +*%mj\faۖ-ϚÃmd7][ƖoB*Co xe{zAFa+(ҁf0I̡ +Xp5!ıQ~ כVS[s10ݫ;+?ڷ{]<~n D1혒k:-cYB`Y\w]+2c븆4 _3I%Ȍnީ(*4];"uUvLݳv)R]gaxh[w7>ǡ?A!W!4PRh +]JEțq|EDnK4Hi\]:}e<jfK"ѫ.AS6mrw(X$ ^Ow5.]kP&5=nO}[誓("p=;cFQX4nZu\wv=buW4F\Zz]8Dht};"/7j&mcl[ޜ By9s+;)<uvZgۡ:5Jmꥍ]tC2P"G=]rm/hTVHBjR=6m]Ҡ "]\ƫ#! ++9r!MPw]^^4 5 ?TROhѕs { t!g.,p gWR(ᳱL ˴Ys'~_0[Ϣ.^iꭒSj# 3pո:ӻ!8ʷCc[ #ꮊg- +=:߅7 Zlo7Ț +=t[Ω&W4vTZvΫ@:J(fu +*鮻r1!]g^d=,VNp.! +^wLhDN`EkQLm6ttbSKJdKgGJrו Tx$;'%\y|.4[g^[ƻK|?0ͼ`HE]؛p*1wɾqplI2+>M S`tד@sbu]5L_w[}UUV3rC@I[8=0B%f+ wtUxt + +EKDLeJFᾔLY% 'G?GX] +$ EWf%4,0Ќ>6x`50Dռ뙋. Tm)ьz:1FHy&?4f+`;OjO_|Daz1b)_öKꀐ@RW#r5x]usCm4x}!#ֽGnKIPfM!I_T*a`~) T +zҒȜ5Ou+?gIk +QC-KPܼ޵3f*-hY[jjڟh,>Jrn2-lo9=ҭ,,i72x>ȝsRaZQNeٝ[s {0A٥u&jZ40JL(N'&Y˗rbP7orp0KU[2^1Vb< ݟ\ƾ{ x/jA![A̪4⮕j($čLZMS(F_y]elyTIT{(=rb}.C34,@Q/|4=kfUPwFWLnmUS]O"6&1Q HwU^bL!2c @LnnדqԵPe}K + t#@->bX62m%QYEQ R] +\$nyLrIi2F%12(ƪ=:\La#QF}t&} aj(_}9-nse-\-;Br_2T)"+48lwXJX&:]Cˊ\,hU-뾇ډ樤#1 ļA*gzU;~쾄Jc^: =Ћ443o{=(TݝZhJi6fw>F_1W +h +ectwooB&P8*v]mqFp_{5֚vvWE[q~=EeSUALf/&ֵˀE"qyApa KֳU$y KԝJ(r]R7ppwMzmhKɂcGwopo{w~ڵ5K11ͤd )B!Pl5ǖR6i+zwo޼XP@ܶjM J:YpVJч==ĈvOVb@0`jnzWrd](dND}Xu]yi{#-cwFk"Pms@n7:t7eleLMr\:$C+Ů"D)fҭ_A|=]G7u }y ]M](]u+9 JzW|D^WR+p {E'D?[B- ui׹B;@ pm _/ΐW9{s'\*q +}tK#3s]FkcB9Zn; _wT+R{quly<`;7_g g?mI>1N8I|~2/psUސO5}^"-bXϙ{Q*.Xq=V .Su) +hndALՐS YOTjb-n17 +PFJ%Y/dc4Yo㽼A\vߵcKzOQPVK+#<$[ 2| cǪ59ǡ.ў\u^u!߸,Dv_~nRB<+lLꘐ\EI\m>+OXrP= ނD[5ĥfi7TҰm=@xAzՍ%,uDfS!ԧv9.b،K +nc|.[Ȗ覸&Ȕg6ˋNIxwn(K%bCKzu[xJ{hF-+;4e RUm&+gNV[ew" Qmo&;0{810žD#A)6}i#h+7iqD٩>Il}Ri" Ixʆk c+2/̉A7^͎wP"ɫ]nھh1+h\7-+J(0YLWs1wиZH%NqtKgMWH ĥ7httpն3vn#嚙]fM>{>ɠC|gʵ%ASi6g +t& `vzfA^bA:z彿=Rܭ;(ckYK *ZŮA 1)K\D~ L3h%4̚-(c{jeR=38n"IKw"F,vyezaEi"sA%+i`4mnr\yok.:+]JV'lx2L 4p_2LQoGB' \dVy^rA77^hEK,Yx?LyQ7ksn] nIZ`)W>ަÉn,+ "wsZ7S4q֝J K=ʣMpB-~^B 5{SV<ޘ̡k /N/>9$vvh5J!N9"*~kaeui0&j=hbZHqvTcK[ Aw0.&bv)DZ۲p;xK +΀*S9e#je/SL5o]-ͺS0߇!y W^ZVtfALؿx(vҵ #w1 Ug*حQukM#ZSNkP\.A6]MG[g{:8.|V6Zkor^3yn+3 o{AwBww_Կ%dH皱fŅ(K$hp ϐSrƾ΋Tx9EK+"% 6*C:Mq*Ȅ[D?|8a+;8,{Oݎs@{;~QO@i+|LxV9U&4K"Yk$dC^lK7׾ZH(gɬdJcA~^eV Z7z_1X®.BB2A:] ֮i{(Y^wQUUW0G)'d\% fg*[r *xh+hjZSUŵo#wrnTPY2E*캹rWޝ}@ؠķo2My,&o&ŮL;Reku0uUflM-+|i`,":j}Dn 'EJݢFZ>zKzn/:9XC(cW?{΅rKϞme6bkq-9#`6P3뾶Hu0*_K/{Y<COӛzjj[|;U?A<9}vI\vY +Żvv&E͚Ch5jfydpK9b3/#uHZdKy[}\D0: m[1m~ƜRy;I(8ZHi!<^nw qL Z6uq3:(B U!aG4"6 >\=;5Xǀu76g.92ꦈ }tR2a,ɠؽ4uryg*5hJu<+rl!F{М@D뗪@זpe#4Pio] +|]T'ܡ|7Wڭt[R]2+9Kl {LUA~+EASwT 奢!O,lqKn Fs_k]Ҽ[Uw ~w _:F_ݭ"6*j["ґ%OQ +&pړ:.AU`?V !IZ +Sw!| 1i7Óm\'KpI!S0E|"RuVs K*ԋ~]9[?BwFi T_(daڅ8n=cV ]En -8>l8*fbKsaQ\|FƲ1|o$*F-mT +l0kN޹sh2չ &tkԦ+ rtȚέȴӓ)WǑXrGgi0«],-Oh ] 4}ӠO1V&鲆\nXF؊l\tP*}W^)7]l\ft![键ӮT:&6mkx+Xf53CEd˱BXxQ.\1_L Xx#ǔ3{љkSu{+uXLuGĵbw? ,zL7DV _I Å]=wP€5 %p6o S_\I~iUVk.}~ng2{ut(B -+EP f=X TYN؟{=WjKWAzb(#Ai+R-Fy(UpU 0“㞿|XݝkTֶjܦvvjAeP:.Qϔc+Kv6; -;Ӑ{zq[;0^=@xDL9ak*ف:Yp89B9n^PG{v0~~m'Z1 RA(`W > naeܱ?[]J,K"e@{s3P+|0]@*Kρ CID/ +K''%2[ӕknԜC#a_J/ԗjcL;̚ C,"JwWY tyyT tw^BD^:: q4QobŃlLikSZp[0$ғM$t/sU."aX du>ϼɴ +BuC (JgJƈcgUQShr 6:ʾѷAN- Ftk$RPW*@@W'G],3tBz9Ŝ[(Hzɩ1p&{u<5u@UAImnh6+hZhi!$% _?oo50A(TE֋|\d%v)"r1}4Zy3a:ދ~]=!ؽWv]-[!Κv[u-ݤyi-5P)Ȱ/-[7ݒO썴c 2bEl!H.H#@]>BlR^',*Y ._JΒbv{Zۂ#ãJ@$P<ь@Od"6cQ ֎pHbJtN]94MrLgl)K> ,1A (Z AC TZ VL(vDT |L$k|IR9*AWDIHq3Z: )DMvS\xg{K>񐨅]sbyP1=`pƲ@ad*-䌸^)aY'D{,)R`7qT?ǿn{`uҶm% لRc$ɺ '8y@{af| vMa1.arE\r .V+ZǼsM?)CB*?wrMEU ܳD1Of.911nk+[Fl + +Tݩ(Q]"7Ru1"ucCvy#_7`s^Mp*E}zE*"@ukȥ x#9]-A@!ǯH8WED3;] )Xy/yֻĢnӹJS+  +ܞ{3l|Xޫ+l,90t0~6EH;s["L&KvaU^CiShſ;7USݿ+vbr5ВF|}8(nȰ@c?d9)֩IP&bA kX߿zAbgc('&ʋE +s;[_Y`ayTǷz: M|3Q}U6ma5C24G= +/e`^(Qui5ۖs&x1u)պ)~W*JubBfk[YLۄ޾<|-ĔJ7l%qu/ #.kr[}.]sNGWF+l"Ugɣz$Ft/Tz| f; c:10 +.'v/^q$BBH 1gmaBegZ؆SR7t W*laJ_-=0ߢaOלM"hbnnY +ktq|K=q_eH#]tw ^ +4ۡ]C6J7e`wklenh +Z yRiV5yeBW1 ̹ze9=DTE8BI +lā#kg.`z)P/1˖n uzWpD{ZLn< +-PgàjK*J&&ʱv&I8k4$䑞JV'5O;8FC^X φiU֡bWR]|*YW)Hw9G EArѰbA\Z+YDN]Af`wP7qqAy[2]ܘo#|hI|yj4z*G/NeU@2Xn@.'8(Bt{G=+weT'ę6@z֔Pvi1__WCRC=K{9o‹pj*RVe ]wWN,Oų[ďTv wc̛ar0 x4.k4F]WeC(Sn..FQroO}.wf +;E*nasΩȄ +[.2MujHM/Th-jDiQiAJ9ض63PP>SI=[ B$)eRpB{|) ٭&m2zoo_hU_7c;\裮jDۥқs Mah>VBY,˦)A+W#Ww ?ÌrspAr7gW3wcHń󈣑p0B}}͉BVoaδ1}>Nk Ga5Z*(zjE2EB@K)qm޳JvSj9w5~vDUcmU:Pn\;f:Ccy/Ji3bM;9 r'VӝPĝ6Qby0Lyub`c@lN+|,VNcE96ʹʲb@Vwu&T˚'AS՟ZwQsuBM?*rT]B{uόl:'U1E{~]L_۽9* >^S͘N; ^_ϖ!b2]A^^vp?2ET:j65SJQsRN]/O $v?- O) (23/Rv) g2,6}rCK}7Q]Rnd"qAR4;yv…D,_6(}~[gFիt9LIޑ*jY|&1˧&)&-tYֲX졥m#'@T~Y$Q|)8ȩ-KP +0\ }#!Iw BgRv< w~8HGg< 4XnLK̝*`b[5fؼZA+A +pʇDQ_+b4<]K!-z[hqҩ1Z_.ա[ۮNI>֘X$sD^D"~iōT)ӝ??א:@VBU[L(bZĵ0S01U-`8Vw + +4p(* :J-_^)Ro +!M,QqĴ +CƦ(;u$~㭚80B~pkfGPAbdpԗaޮ8J"RnyZq߯n ") cp CsfJMi7nKEvWG]f({}k-&O7\TKCKw`'V`ȎT q#) 4(bu1u0dh&|LvNurLW$*>y"tX?4Vdu 0]LD\W%)$'xLx_+OVcV͕aEQQdT'Ɓ&#ZƝ5d͋.ơՙ׆g@2O|H!nTpM³S4@\' ^ /7g9ԟ~Sg+ :ɘĂ:qaQX e9K^gB\i'63%AG±AW2aMxu3g>_>B.9fNE5K1h Uab8cJ5D嵌%a]Sbføl4X <f4]<\=1dG#g/-]~fBч̐J腓!ϘNct 4VN!M!H1h ׳Ũߋ(}t ? g*V #؄]~_,:pɨ#44`@8 A4u$XDA 3hb A,`Y@.&4A'L HTT +4 Tp@@6D x: ԃ ܃׋W`7M3,` @,@"8PA6 A @@@@@MC* J +:    ` @P@ \ +nBN՝DB$)J8.#!&Ժ ɪb=6W -8KBf,,I i@s{6J3,Ju1dF$胑1Wc4u.恎N%*M*e6*ݯDy "]CU&V :\MGI) +\3B>UʢS$#33vz\DM2&:dz6TQQ'tm־Iuұa!6x7SpJ51l¶_522c$_dI!%ŠsJW>2 mHNXdjA? IGBHە +YH(=IB۱,BP ʉH"A}sc"yPiLu ^22(; ESC}-BT1 Ty+sm³oe +\z&g'eG[!b쯣! D \ :4G~6 +OdM]Zf+􃞲lFzmEJx%uxu{i Wi,n;}[Oo̰ YO"tw}fkHHH~m58+ٕKBqѢYΕq#V۟jm|gDv1rvG(*&2>e44E^],dsqweS?ϘWAᑱdu5Ut#2fTlمR"+RSj~4$2ZeviUhfv1&Ț<<e2G9G25d g|V9u9NewJL2LHk5g\6>wZQicFESǴ7HMr糩shMMm#Ώ$'$g{db}.rKc%! X3;5*PlDu?E%^1ʫx zy#.Z>yE baE .N|4!9k/xwNE';IsQ5=B눜*5)!@jqÚ){IB{f:S7YCH|X[(l>9sQIa%hnֳv,~LʄS1{YPR'r-3+f-$B,{qILB'GE/QPC͝FX(uEu.ĊZQRRa=i{{.* ~,:N+dH VJHJ~'n +wPqWꆆ>}ѵ('3j؊%ʈ9UXm|rxI- Ny!UJVެ*Ẍ́ qzq|j1#W(ak{Z¬趝PTYW6hytw)]iƐF#9)O~NPXQP- +E-%נBnT}r/a/GeyR1e()1q{h͒DhI~]np)*ϩԨ +Y,,T Ri!#bA3Ȋ ./Tn]w''#.enyx;YB4&afT/ = SRث#2T(U.'~1r)+,@dgXh̸++WuY,B'"g KWnj8xIl\t5N:YXI4z.܈ +4x@d}n?m,;!RQG'6:S.]?";ZfQ'#kO\)9]] X2UESmCs?vPfLy7QUɷ9FLJ/rx쐌/27B Ies ɹocҘƈq;WQ~օ3aW#. _xէPujJ4FS ncƈYoBF1EKhXQIODo>g):vIg\kc~$"5?Yj(HX6?U? ]qzn>""Ҕ1qذ9Nt!|rJҰLx?B&,p5 +?n'XP̓#4TCșȔѐ'>͌rVʯ-PJ^ e'qn=uL><gf4Qo.;@O%F tmgC,H_ ePC%Ӓ5Avn-g1C6jm2BD"cI&#,ެ# ^uHGtUyQ[cG1QmDe|9֘b-CsЩB':IplYwas&u̪ +/x,2V1fF1&BqE|zYAGi52P/MR( (2(|2 .1FIgyG׋]+&FJUzg(ltMAS :C 5#5UϜ5FXSA4'$ziJj뮎ryRWkbU`+X4Z7Wf^R12 Ȃ8gRTb$DujwASƕi=[E}qIu9Rb" +'ҕ5%QW|QD`"sخNa&hþנOI9CҺk!nttL"s\<7qEbӺߛ|B0[$g!Dd.1/|AԐVWr V%3*n/6\fr(uHܓLuæ&Ue!al O=Q:zm |f>/Z*rNCQ̑k&%U6%K&-!FWEQgۅjgD쵤 4woQ+i򊮜aQZ(hb46 +$L.u/W]B1,89])'Ei&sQFJ]M-N4D0H){M- )BE4zq%L&!>XϦXhwg5hS7bͅQFs*70N;)I4]# +oKԑ'&\&ו$EReP݃(XKdwm19y5n K)pc^>5BvArI}A. +)Q&h8fT# N9KМ 2F17!8S#q9:s/ylzר~&<&F8r+--GaLfBrd4Ԭ*EL0Sydb< AdA , @΄h,ȯ+_GJwTr“[n R:A3˩bUJc4R|R AuT)N []`5L7BӚmEErw>.%QجKA4$YVkן$Aօ߹9t_Ӵ<{%SJgWc4^`jgl(B nHH!,'-[l>l%o` U`Yr#Ԭg$0WV!sa댛gۃP/W@K>'t:\'Zw-"ibsN O^ڤe8mw40ÿ4zk#tTzF[ |pO 6,M*Dj}8 +z'9t"S%;A<e%TGce'^s΃vЙ[g\VH=Kubn]$lQQ)e7rn tI$ |x`IjEYu0"Ϝ8.jX~8b9?9L,o$K"ӓ7?({`U=U-h̍ +lءNB#A^dj~;e-6Rcٶ $ߚ,2&奆Ic]M>+]-}ܬLwOs HH1&>A>aoO0ir,WD=a>3^d/6*Qρ6;_Cf8'=U1tj{p(T0(Y"TTXAKHcZ7")OG5#9;7fQyX$RiF{/-2ezrZ7*'ȳH +CCEE1 f(lc.t̂H2M'41zD]sBaB+ ڼh$E1QRA,_p [&|>7 R#nOj$!Ddܵ +}* =T{dcX|>A]}㤖 Z=1 EdaQxhm0Kcf~tc M9NW\qh @q$!cAΦP?Ӱ.4G>Sjٙ)IXax(fyQQiaގ=%y#-"UhQVvcm?mmK~**4OahQUM +\#KW +xcLD58*}Iug(EIKL=qٲ_AվSߣKDD!Z$q9cYpɱOejG #2' JT,ԤrB+m J22 h[/Hu@ A#.in?:̓j\vT΀!bU:VC!)/L*X MWh ȋd%m他 +!7*ȡo  +PɄGOj~{Gb粭I6\5|Bry&]WJ\eTm!v΢C:~H*!kט%rZ!7c hwg6f*ck'z"q$bE_u0ܶG`)?F 䧄BL% tu?:PQ(r[9b狒rܟ/!FHn,T&̐2 +#PV~5=ȶf7xqPTg3beMK[7L{}Ra"#]}RZ `'PCXA-u$M !y50T fϚJ$3aTӫdbyλgeH +.U\ +Q+]٣P fQR WA}XnL[i eRѲ7a-b]Lx&E@ dٖ_n@ٿqJ2Ahj\%br,pќ`qE- RT&3x-ez'ىrz[" 7 %<ıTt,b@ꕍPw* +|r:Vݠj$}=/:lQ'1Ri VN0)%nE >K`#JutCNXhttJ⨔Br9" jQ$|0^b \1{ A@\RχЍVCcOQ DzeRY +B`GsC- {e}v06XZy;-`)@E0) ؕV;%᝹wP1lsPX\)ܤ/q_ THD22cOS [nFj_T!`ϛdq !U&2V{W>Jmpsoxp8p`@9jGdi +Ǡ- +ÞNڬZ:l`c*(1ȥ~M$\PyT$z3f@boő.&"3Y'52 HsEt39eL%6zkTkΙEB?/K xu +dC +_9j[qiDጒJ KIzInhܿ}`(t/ySGQ-AS{_Gǩ5x:'qWw0k|r?-u{~fRu ¼: 5;jEՅi){@]'&bՏR#,s需rZSD )o hU^ЅhkVֵH@Xacq)5+l7;+ y|94 +&R䊀,V&䥅wUv,N74SW!hV iyPǪCXU&2fئ>mG3_Cc# }y൥^ej3!T9C&`ZlL]NTB)y*˻ qBdHm+`ys*'_^V>P o`jyp|U0WF4Ii#߫r5z4:4P݊Xc +_GӐ?a`>-`v12|Pe-N%G* >F @P Hb"J>TEO +c;ZL<+O`͆ i4I 7b3 };Cl;}r u(u6(Ve)/DV$k:NwE֌(*瀘87QRzyk6P@iS5rS*I]]wبd|ϾM*ۗ1_R,H|FNjf2WnSJz;7`:Ԏ1>BD:5#qKYp0@ɻ{}z +7A#N 0Z=r2hz 2Y0 /;GU*Ip*Z{=|Yt) L+' NE]Hj45)R8\0]K;y0!ih0bU8DŎ֤~>;r+Y֔8A`.Kʹn/Ϩ01<F'&IwF-j[Gkqc;}eH(8}:T(vT@#'J;5 !}q/vFjTG9X9EH3.\X\%~F0mnH1IfXӗX(_ l mڋp>%(Ak^[2$*.gUSt .!'ѷEF.I)OL& J٨ it&?IaU3 P"fxg WB|rigZMQXYY8Ez`m B~wj1La Q{B$8@TNНr*sWw89 i֐͸s3Lp! 1rpr}[Pp*Z^Uҏo~GPgj[ ^j(3#:53sd(/c[o8HDq]sg +_ +&ڑLjaWnO5"$Q }^~GU UvMa +%-ִs\LR&%q &O HMu;zӚ~HH=l :F+py!A +endstream endobj 49 0 obj <>stream +Q,@z,2F}t#ߪ }1&c1#2A`\w"b`¦;8>/Z'?WUK=.Ca.52 (u=߁KS_sqJG,7 +TT}޳~UM[ôCC6Iki2#>CD(2ma-YT%QTp֕q !ܨŋu2u 3m^=OTJ~.MTFYJ BB.J~f04 s;0J RiW5ߤfbF6f:7*O[]W}/p(6M5;%dZV;ڣ: *15rjli],ROK YRO1*G<.LM"(ǂWF3mL9#W֞cfP#NZ*pg`2Qa]FC(t@X?+Lleb5EuRi(#'4QI(aF~\pI&2}hmP#!H՝JH{27LF=j弩;Xd: *sA=|L`Fk2hBԳrZXv(6Ĕm e(n۾hPL aKNzuܘ5(z%K q>(%{ꌨb\B/<'gA"^䄭zIvD9L,fZ)HbQSDЯuJpǬ:J +pztiP={A4E*!ܯ.Vk|uײ*iv.GBZjޑGBUTScT˴JVYx2o OE*^JG&3͐B%.4h@(A\-+]N?2A~=Cf \g=D8M!ӗhPRO| a5~qדmTWXcdР*Hbfz"H f8Uʻ+ۢ$' D]+t)cFS#^s#iքg0kyoqR +6p=bB""/Uc4 +W"nAڴ1°[JQ՟X}'HAUf%Ci(HENX(=1JP +endstream endobj 50 0 obj <>stream +.]N868_A(WD7Q1Dr/ʦ ypNӮW|LwT5AD;R]۟i] L#2C߬$ +pNx(pOsrK4>WvW|G3ծ>ϐNi(0Hr#cj<1Gv0ّPVm;7bݒRnCdW0 o)@˳C +Q%kuu_sˋIQ0 sG*hXuefw&%$u+bӚ"G}hK\vUŎ>1H7wTPzBU*-ū1DA ]?0؞d嘪V0:J|{'ݼGz8f3sms4*`W"'΋wQ>IYgCD'-scw:NMSbPNbG'̓z@8?m{Ms_[VE3pPZB(]+2֨cos0 +p֋0:Z# p߻K5Y"]-1DQdHX.㮱 ?FdHG%44ɡAug$ K^@m=*VЪ[M!E:\AG{#Bf_?$Rqe 7q1إTl %;x+ /?DmTlBzaI搜KܤWu۶mmji BޛB9K^[ +&jk"$-P̭ wFPz[,3jT7w岈X2 +Ӛt%Sbֳb8831gU\A44*oQ>kȇU"/ ÜCFDdyJG0(o_GzN 2BXQ?ŹqnY2"/9*纊(x1r!:{[ULm4skGZaK&eL/|3t-f̢<+\m wz[\'A+Lv&B +u e__Vą=kmz~N~si6j VC.\LF3H`v?ik׹C]uhZzK;pl^9.3փⴖ?TWCݷљ%D&] ^ڕh3x Ox~+ϹgS(b/D:4_#~[IBGO)Җ\M峩pF4[* `vjl9IVkJeU.=0q:Sѓh6|5d;;vqElIOOP0ZGE"/4[k'},ޓ*m-K2TOO[a;tOl j](Y`` j%-`6D$+BFCJ1 -ރ:^0R%xtO-Kq7 -wϷ8vCY8 ?X`3._K{w.@3$y) ʣ[dވKbwa"5muUIq7 ObQ}ijQ<ڋ:)Rr/L}esXw7LnW.rM\Z^Rw!OA]NwLbtw1)u؍`@ kUo Ӡ7$"iibהWȮӮF!iѽ"83v ]|:ԽF} +50cClz3uyҤΨ3]5b"+aBh4ƽdT#ilwb©LAᛇm /:\Rjv_kTaxoMuW@7GTA]TU4_/7)hqf]uG}RU:ߕ0uW̮r-2o` %:Cp-[ϖ9 :` KbG-Ctz|Q| BB1+bh[$)T3ִPW&j;H9zfܹY+K7~ mYh&WpĮT~R %W\Yt4yo{tiP +bZd 2bX%it`ߚ=!S׉o\,}%ܨ#P~?ωvj[~gKﺹ&ycO uO._W[>?wm[W<;~͢2;2iOVWR<+d_ݗ"9"̨3^v KٲopCcLnbj0;](.$H7xi,)( ,"vP+ +&u | s! NuTHJsYoEظ˂v*ԃU캮opՓAȲ}M]fwiMλ!]zvsuE]PSTԭɶ-t!OdQH}Y. Ś{yvhz@lP ~~C75/sK4 >uKQ8 Hު):t֦꾭|N)da~ng; Z3-\[gΤOPn=m}bᙳU2*RH'SK)xOo(XqtbJ%G;~:$Zܨȭ9gUyw +%Ls#1@oÖr>.J^1bɤ +d> RRtٽ\9uA V7D,Qc˥0l7-H<[b /_9V1%yX<4k>:S-/BN+e|K>t+95!>BW#u+xor /" &;uѻӝoLWc7ysR+X81 \n) ) +j՚OˋkOا;vMLK7bʉI얂-OμP8oKLb";cM =%u]u{ '<,)ɅrgÓy?^/]+G;hT&wd[ +}'eWx1Zvɀ1ӻOb7K1 )@'6X(@Ww!` B *jC4L]l';rOy]x;9<0)`eaubBFvT%bzi|ZDͷ>`8ͬRF֞A:eWIբEr "0TVtꜽVAfNxJf|K* s"f81CXDcS K]-j]?UiSGhŸ +OA Wytc ]NJ' *3D[Y}{IL,( N;s0A5-XxBQTXlB0̈^Ǣ| `DXۓ+y‰}B:h5Q5s˽: +^d[u| +rg^>m)N?.3f+n}=Ta=V-Fuy]a%yJ[zwyJYS%2=uYwSjq0Ѿ0vn&kеS';2[NA(Ů2~6H5zJQqFMj8G$Lk dvk̋I'V:*#/S'|7Mi#^F t_Vt-0mbd,:dV) (S#AԵBi@BZ0SELr[UK_\i[(Dļ*>F+w=5`,WI=19SH%HL2HJz{s)GZ`|o@B|EEzYW@BPttNfq =8>D;Տ)rMR!4[ii*?P#%̷*?7 w~;Z-AC{Vo$7\LWq"cl4YжZ&)*1~u^13|Hߝ)+/gv r;[m`-26?`=ХKIbKՕ)PNhWMs)0cp )vѩމ ghw g;(19lJ}n]{nLXjɃ9H?ZLkQma7.'2ThrQۙ.sKI \#˵CȖk-Z]Y"z3k U˽orXlNdZAfR*L?9 ^}xXx +hfT +RB-ƋyUD%SL}%(z͢0}sS~2g P8#n*yW +LMyTԁn;7LyEZ8&|=Ou|m-DV:' !Y 0.auE<+lJq&"3Ň-U[{ivn:4/7.Ղ)$2OnW21){Qx +l=.+W7$ȔFh uHGo@)f\4{) d}S5P9_Puzu$,W%WEJi oba +蕒%X~ĔD£Zݜz8z`)+< XحܨrX[Elެ;R!ra"˂7 +2(H9BpD<] + Il?%÷ȅ3t2K9\;AcLEI~S?>8flCky {RkK~B /[ep8>hqn ̓`%#tǜV%=)ua*i./aWJ/8;uS]KVlS2]Qwp)JC$l5qzƞ:^ pSFNPh5<DވJц4_4stGLUnGumUM_i-P,<+o-]|.p#4?mH<`xlxeZ]V+Zw9> +&ʶ%)%Z14:hJPhq?зޤ uh/DN8Xq\}K=4n Ԓ +[3 +Rg4F" ZЇnn=$R'~ꂈ)B?7X^ #r>jo^voвD0ŖuFnwWRFS?bk­q@TA@I8'B.7]Ŵ;9gd[b$T輤2X>]޼0 |g>Uj6%t@~o)$)@x `zìkM9h\ =Aa,=[_"WA2qĊ'69GxϟTIJRE +ʁ3Yt5֥4uo<,cS'p< E+ /D"f d)vÊDդӵt[(Hnb5;xA33t7FGbs4UPK4G>ʗiqAx[DZG@iᗛ$-7UbAY Tq0iN>6>%ksѫs$F&Bg.i aRbbJLoQfA X=y# ثԃAYqlp"l\YEZ)$>0BwW_!W;k +9}? + `r:'~w^)M2˭N[g +xອ5VɬC]mݩ w;0;D͔⺖:{kAPrzyl{&y Pa۠+z(~92yNu ?vy +u}띃OLh1',FQ)EG#>YD->Ľ:4Q@="ÃiM1fQR}ᅟ M04w)@ӟurXoeE0jf5v%WSK;! ZO(vI P|ɼf~0t +尐j{ N|[ZNs=ډݟRnSUQ~s,9GYuDPf+%5>_A!GnV5V 5}gY^4]5^)n%dvp&YVVjI.wm}rnM4}O +^2yPfO^u@5 `k mk[L Y!f莭%??m10j(aJAyk<Safhvπ|3規|EOD +pskKjq)d]Lڡc^'mDCDPz~ p#KUw[ +tQϹm~k#Ru93S/(͸jLaќT`;]hgu@vCKԊS;ńz9&HoS{us k̓9V\ܣjAͼ5Zjr]elA}U nh:f=Ri-qo\JC#eIJ6@7e +ftlVʺVWP<'oLXr|4GX/6Zl$r$]AdR,҅NV(3օO.(F >l^΍*|4, L.R^>#-bJwU \yDBsTyR+$x'WHo&9Ő,'֐ރWLi')FNca_cbDi\^Jw*Qw|2 +G•9Z2#@RRⶱQpjݛup~>S#:AvR1?jӣ$ŵ+ZڵZ7:S}]}r:Em#Dv +#ڍ]VkMNS8bkw`>[jkW)9B¤b4ۙ7x vwQػD4kFŨS5uӽ1+Eq*NdUFwm²3: +RvI4ӂKAw[P5AD +X+a&{mlg5~*EtJBx6qk,OHST]WACn@qŷuX9Gŧ,^ +03 '⑬EQpD1mC֬N[ x|I68g2ut*U_#tDBd+Jb7T*ET$hʛo"v^F?@b5~[/bz{֮z_ҒưE:u][GG\pHpb'1{Ւ%e_PۺFuyr{ؙO/+;WHhx@ 7n[i)D *;7aJ0.ם Mؙ8-{YkE|3vU 5E(>Oʘ,wvS2ou4ݭ%?KFfu^ZD/$Fo49 HHݥ+yj׺R5- nTViIїb^I3f{J2ao͘n{]^j9H!1+^k>\űaʡg$9> VjE=eDzl"<؂I$ΥIJxKu]>G252mXTnCW~ⰍgBj@S"<ЁabY.g װB#;-e~Q HQE+h*K6T nq6Fq XN_Z̹~m?Ά}98_@zsZ@#T UVEJUk8ق\9Lij n߽нbq;{ܡ&yRD>`! &K.}\$e2@WBs=0+Ҵ >Zlynv})f-k%}.M5:S&pķV]h׾L^7BĊ*]߃BVn z +VvdW39=uDط()͵Lxf~0A,4NYp%Kp3lT#dbї7*%Q5ιew4}<Ղϯ@ZYttEM)CWy12/`UJ=TF6NDaw:Q|ZM=bɍ!3`bs: 4e?gA(wTl ~aEA=o2alg h #i2Ή; n +7| ŒR%0we;!peDU.<s&q4lD9.IR(%A0|PI+?.:@!B|[ԳR\+Ԯd^j5-}5yuYllX"=ݎ ;s1nӋ5(4A7k +1apշgßcE\}_ ''{\JlixI0Eש.y{2B#%19){sw̺Go滉6KJ.ǫ5uBMYc 9o1ec)ViGƒ nfv}C̨5Xt֣K+k{YW]Qe98Ah}vۼZŅP.!֥߂vS?.3]x*(MuZjDWa>ΦdBZԇN&k27Tlésn⟌m]T 16fe0i') J!'r5yIDN] +FcI-(VTyNaJE#3UWL]Y$_k ͭA wGJ[ +fp n7syfH_ͻOE̊}jB[塕}=˶!9+Pqۚ}N&;Y+8%,t\=Kꖝo[<9p 5{s =*%"-2Vl?  8 H,_RنP܈[SwA{bh̼KD:>EX! :\Œ(I6S:ٔ+~ᰰ?}k}pHyYwإ p>leV1P7)~ߩRJip9C\ӧD5\^S50 B[Eiu"~%gˑl"wFfQKMrIݒrL MEMUpI\-GͯCi*jbB +ӨY2jy2ֆ~~R]$.w +2~ʢA۽6<ݯ[zK1))Sh# &!^gȭyd"mtіJ:%K\WS~`?&j].V@/&D{kD;0׶X]U29xsU!2})x#I&1 z$:]1ee0pPQvベ`dHs2+W:Ѫ]H’A5&&z0 Ѐ vBX6/CCo_~PA=`֧wIR +0MWmn Y-zUW=C Apnl#Wfv)r]bƷz]W/T-G%he_BdʌW7+VZB"/`x$Kt)Keaߞ !໻&tZq D5!Z7r +jm{F2nAbݣ;q|BIķVĝ$i $;+YU^bn1GzA2ѰC&j ACVј7Ȟ$F%?y1·}_ܹ%-i=KS=3Cƞnb&K҃QkF"{ݼ E|XIzN)  < jfdq~4[z> +n#0&wiq:q}1Mۄy9Ba`vP>>t6/*>S:>!>+yڠ[Rj2X402Ď洝j?woaY*K!j^wp2Ficch|8V\oVt/ U,ӪR9 ^?IeN.a$>%{1"4^ZvˍҪ]Z5>%QQpM_(ĻΨ60]M7ɞDֆ׍vi#k6^12.{Sw\}ueROu- +N6IvjRoN]*N?iWU [k +Bo!;]]5<||QEEU,u}`ରcĦA"Avbۧd +y :w +7 +R}t~DMo"4dĦiG3> +9^: +5'XgRdn8e8 7XB-CMEtjm3a$:./{4p[-p[KDcߜOzy&cO|ˑ2l3'qȤIVle] \q0/`X#/+Z&1޹N<)Mō!T A= شX]6oQ3NvEcs.>+l~ @x h˕H]@D>px./%uHYu\Xn6 NוT|.5C,+A#]2NoLgUJ{ ֺ0W.IgOzFNBLB)hӥݙ|u…l'<Kr':{#nFϐ(9\uI]LQQ)-Pj4zPc+O>?HU3a^u3Ohf,h7&^~ODQ]/~wapm qI< xrޏ wa>Ɓ# Ϻ"J7{Shi(~lwS!TOqxf͓rNl@' FR^|MF^9W Z(3k;ہ@I[ǥRm^k +KJ FtYsZ?xJ1e;e SqCIi ;U[]:NK-Ok]js-]#jFCot qG9/t\~ґsvsZ\w#1ݭ`:ʯ uw<{.X3V^7LaNUW߹d/n횑F]eu@Ⱥhvf֢]v,J@M۝C稨-v[چn%SjuOzՄՔoN"wkwzRoTaFr錼=8H:_b5dA2%Ipj0!գ$rsu}hp +ݞZ.ʝ6N@cyHVEܭxK6N_Dz x\;\ƞڳ:@ lQWA8/w{RY)jeJY* !(Q.eM{{sdc֮j15 LB=3د9S$Y$vJITOT_i6;$Ot3A.ѲL_IW|:]%$<3Bno~l(._RLJ=xTl>)Gw&\Z.WwBuKu\rn_ XD)Y㿄U +?Mw]qJK֮O~Sf_PuU8=~zn҆+lY &eTuA>)ũP]zmֺow;T6hW +ƇiyŔ) +TTB8#XuCTm1 )4%kWU'b7vH`{dS>CW>wu$Z 1CoX)糦R"^l'M%(ԷMK8 Qp(]qD'(E5-عk.K׹t_j#m!ܵp]mh' e;+|-,qok:gB0gi\l)O3_#sz(˚}+0ĕBg5;:8'v+Vvi@ +몰g{Q ˲v +.$Brv݃V]0ʴ+kn_T"DI&Fh7sWK[u;[/:(AO3hb - =݃6!մafWd2YS71=⪋v_{&Ct.*W4ֲAr.Ao£%.!WmL D n6#ܸ[hq}RXE<<"cTtwJZw!X'.'H}/ע n[ F ֳRn<]8d򚃹-M-Rx_bߕi$|xwὶp\6@fjg"x:^bN-uc_㜘HҺnџ9y݌0@Lv k9_fO>jC~Z:<'_hл98L;'h!]Fvq]۔-GI? +Bx6B%Sh%_LsywWVZTn14xyɄCS ?zCQ^mK>;02QJQ MtWk l2Fv}2,h +HI^2ޔ:&<$7JV9}ӷkj.}uKoiߓh;0"x573ȥ7cB3s=N&xilXdwe'P/E9aHZ4P71 \OEI  Pٍ7@]zPZMjVG }=07}z ]g&|:nva>d +{}Vi?;inh,I\ƌ3/(oR*Bg\0{}B̀ZELa,8A}&E* ֭>_Yz$ q*Eֲ5Cb4>)/Pyշ]{m*$vyS%l1AewZwq$mHʥ]LԵNLClr|K?\'+EL]PJȖ'{%1MJ.K#& h +NHԡZ\ 5;  c>mF<)+p_N26Vrn!8N +#lr#;(EZ49/:|@5l%-Tmh8PQF',۪9I!gb8EjGk#n^i$ )^+rhwusv~UE̶s%Io6ݖnEnX&K`^(y+,ŎIXdu vT 0UQ ~d)>dZɹbs" +4$9ztS=nV/ EYFL>mޡWHEmҿT~ nލ<2tQĴk#ۭD LVV`Zl.@] JWݘJla +7^؍lAKf"hWmъɲ8*xINđg.zQEh +'ʭLmѾ$B@"12،vpT\"򢗈_j珂?_nScn??dt'?8ϧNe"saMnSd,8+qzZwql\ +U gXhk6BF?C6spN;k S[;m"z~ DWLSYX| +uum)ÓP}G&Zfy0qj /Ⴚ@1ٷRnub2إK+рȭ9^' KwMQYQÒG\ڔS As-EclPc7S&%PE0KU߳I &-=bD$3vKJm_\lB7%)H)J*V.i@\=.yPu\]dž<- 5gKӥSv}ʔV3_+魻d +i{!>(h0yDaJ'3|>LL淓ve<-:d&6!M1is je göA̞s +| J$e 2U^ Tֈt*8oDDv%R`zXWG.VDDnmX,Q%> +iŴdކBhRsϞ,`<6( -߀X5eꠤw f'`R[Bsw[n4kL{d2-Թ ASOJZHiW&ܧ~1^v7.&6[ +B`J9^Wץ"ȷ2^/L'ޝŠ|xQe7UFH!Lؕhc,:h?? 6%ɋ v/xpD\#vu3 +nN4 K)H +tU }bt)٭Jfؒ)5eKf[=AG}%ao0<.ZP)n:x~׹rnddvZ/]!QK6D>DkK3{"@$fF/3łr䈅lk.'{ƃL +%0w~L2P߸|5ӞvZYo lH%-Kc{\'PȮkҹen7M2R HZW!K^ٽ:U9V] eU\]7_cIG"P]K]t0ݭnf8j#$iit-* >K\>.Ltw,0q[MnRw"&k}$UJ][ŸI=_WoʯAh%HSq01"]~i"c=V߭md%bf.={(i(cBLH"86kE޽%" OM~ BwvKLN[b2Ow$1"!X7vGnLmnu4 +( cnc51PUmքrYj.L[ĸm@ 6%:Bc28RXǭOYdDE3QPJKAᓈZx +d>zT!Y\S1j^ 5MbN,$!2SO)|h~"ˉ"- +$I$Ij(RvawIP@ۋ3#"w^wwU;*[BRRJvS]k(0ZiUZ8I40ة|"DZ 4x'թ<0g-˲df!bP0$LThs +\0  FHXۗ/M?A5UdPcay5;sA#ef%8TYre òPyGJFň .߬!DP$<8WeW!mҮtۯ^)4e%.^OͰ}J!)Hm3m{׍E95)Bu%9jw@]U_(])޹Lu@}B|%0tdAs/#5zY0qjv)0 |F4 ҧ7+hĒ~8Nɯa Ѧ~as%`x;ٴZ)>B֩?c߮ZL Č2,hN7,klLd]wS/8-Ak*(FD,`3BHGnJ*K ^KyZU_H Tj3qClVϢ` LbioUZ<2)^G΢L.@~%Gkq'N n" X dMrnKowVfX'iE}iИvRxhToJ%y%}ggRRPT3*FKf&O.B -됉""6,Sy8<#GڵB8Y/f|tR-8܂m?aHgiwOeB7Rv7.4k +7B=ԉB\G/Tkq- Kn1'V0|gZp W7hKi0([KHk&mhs :7ѮDP+.A?;rLǣ%9u_.Z2D]=A'3+9HZPah֥lÄ)h 1Z+Fɫjw]?*'ڵ 2BD賞PeTqAY;<Ȉv#uJۋh w~׃Ыe@:6 ]u`,un镺`IwuOTj}yyC<.k. @@f@HIcR` Bx7^Fh&Ɖt%&s"N(^ů8і ~[ٗb5FSâҰX/"YL)s1׿ٕJ)3te9a0)`?UG'IL7nS"W[,vH#S";*d `jq ]ʪ..͔{"PuX[R +%g|~-ar4/\AeԹǨZ['hE-oB&<av^@r.([P@REyu`1n%3qAue]mԹ3n`dх)튲gSɈ FSʥ轧X4+yF[߯CTA/¥<>>ѩOڥڅ;pjx%ܽ:> NbI/ױmmv~CPOmTᬷADA~J0mth(qf4g+'K8}C[(kJrvc_Ⱥ;uM(y582 mE[Km)Y`Qguۮ{?=IV,zOWm#r38.w]?q] 62 +n/>3]*baVvZQ.&xK05qݤ!OLjL1!zz +3sRJup+6Ĺ|!u:HJl1R/E_.AVZ~mO혬M~?.Wni3 xO*!0Pd0pGֆL +IȒS;| A-=T~;ޏVɬRn'-B(#Nt tj|ٿtQI0+ * 'zBSİd.SiZ~X?B@Dw1HWqD'# P&= 6@d*N01DG!&ۃ,sȀL]C-Ă\|n`"DWo<\ +<ѽq }b(7Lsc[`YНu':ѝV6W<3i i۳Hǔ涺]|.PwY`ڸxݡLO%Y-^ɜPT춻ebx|Y;fSXo y+\k[wTTrShJ]ULML 2`|gF1vtNt纻YqplxAX +KURQh2x6E'pH !8A@\CP]4Pt{QDP9,m%hlvo-Twp$ԯBo%(m:kpve2?mc*` a*:#;!vU=.с0w6ЎgJd~ "'v[_~O9"i+-HJfҧNB@*OG<^*c3Y_y͒%oUj +0𠭪6dR cOL*u‹gsUڛVAl6 v,KqоOLDsKyЙϴE0-r<ɫBn"u3e.[k79$pRyrMp,[%/'"RP3#vr~D. =(Y/tZ]_ +O}-EjitZpV~R;M Jl++y +"0NL]10⒐̜dv]n85!8cfߣ)<[Oz_(]l]}ڮ*QբILa m~)ӫڮiԵJ?_^ J;Ym)qa;Mߕ4^|2vV< nL$iJz i5“+˸:iK6~@#"_4vIș]b/&2 qmtO4鈾t09@xKL^{{φ) +X!L>znE3䘅[&N sJdإI"{sC@/^h뎊J~s]-U]; +.mTJ;yiw:nkQRu[Jɉis|v]Rރ 0>튏tV5k{?8(BӴMە*Bluj3EP#vɨR>*X#ׅ|]t캮@Q,IL:.Rw1yX8ݜn +*k1YSR3][G^E0˗|ZRQ!wTw wAi}~,K$La<(Vd؁ uxx:/?̗" >`([+g + {O4z 695?Z!s(\Aka!2KH/ɧń0mLA_`$'~bQ́H "0"|'6zMP1srZD9*2lBGng7? +a 3&t^]/)NJOfh᧻UZZ;|7p(_ P]R 7g9qh;! +bu58- R~ud0קA)vO0ʳ#.|ӝnKLN|ETHG+.$]uY&5 N[ݺb:}Fb#G "Hc +c%.pu0)tקUv2yCݵҮi7* E=.RT +:F]4o +hrvZCH@+oxyxԽ2 V\պ*5Cz)NzJ2 q#YRQARVȑWlvT( +h*kTƕGf +͌jS*QIDg=EvzG(p Z?.7 JP+.ƥ'̝ļN>AͷVZ%2dDVPqF`@iab8m5 X0Ƶ{Z\XoIzc!YvZ פ.Qt0% (IQǒ,K7sO`H*vY7B0.x“RPᅋ'sR ӎ̺1oׄ%z).]>xFCBWwD`b%C95fYWK\w/ n]00P׷-[qȊ0jb='DIS&< Rm5X^r.&03 oV5&..QnѭʻkE>;VẠݨXv P?&D~!ӻ]tg҈OƩLj(pSH 0lL˛ySD̸l|B()r_(x}r!͂EqJ?lo^9Ӯ12&DēJrG63Q)귝Cb^c +"Weݮ;WuUʿ'fK8QFAcQ-iZ2D̿H+ +_KkcLdTbfkNgz%<<]jo/ӧQYl-.j~ l=%JNZ<ʤ+L7Ly~Cm,2B^#.]w]Yw]v,]գ;`]!rȴb0ouڭ/wxUhDݎ]K8@vH7EpLeĮi>ϥ$j#OD }E\& +{D!v 5?bzZOaSa0aL9zWDcSd;@L[SMrhL.3=w.D*~4"5-fp4 ^saᴈ~ 5$B)+]al]nsq[8#ބ\\~CWm ڣ~@Q6M싹:u`I9+}n KJ8Y{5% +Iұ2W0 'a]mKI9GAB}S[!ddן0 n>]V76Q[\.CH#'(0c(!7/+,Ih&H]NDҮ@ A&j7KcGvfww|ˮ-hG}y.nP(`⊎sS7NDAF7nmY-r{MA(О.Og]?|IiB֝\šaBbf&ץj19`Bv *@&ϡ]x1>:JM#5#x5Ŋ +}kf[L/y_D+$q& k[KG,v9iZ{{\/$MD|aֻ_/pzf;;ق O# Il'[=Y%烥"2:~wi ]$cD19L|PG'TiVa=i5euc0Rw1IgAkVdddu X2.5&c{LJ%aۥbkeJi? eyWjM̙b2\|xFZ?X%N%~]g:GUr=]V%5u.m GG1mޚKn$}Ua^G +7yI—b鵌[H2xJd +B+V*^& Cn—sGE#ۯP) +zFl8^V[0]b.E;b*8W|ޱ5?^J.VSź)Ds d<\BnއLu/DbͷEFJ  Pp”nZټ8v!tHeݥBp]>%hOd*@j[r{t{?SQ]3-z0cIKɢ:XwZy`J%p`s8"8T ++Ӟ r7i!p +f[ e6g`bJXX!Qj76W@F`^b 4LS?ĥ24w"2xOє0r(IM,FAGh* f#ַZ9V%Zs:8nM8Z(gy: +yD$;u<ԔąB6sۦ C ,TdX0!)8|2ࠤ{n}"l[]Ť4zUmW! b6x(rs. fviH.d-(H^b!(詙1xS^z +#TY6Q Yn kBd=&\bkjnI)v;A1H#7 &tUkTf M- nO򚘪iiwYEj.O 1a^ձHyJbJɄ Vk/>ښeX÷aG +3k53Qv]`݋1`ݏ{3&vuu ǻ51ZLͧHqe=HodEDV'myar'伊8vCYtgQj{yfoQ\ķWl1 L4=\Dz*vO`+[0m+@S]Frh5P6WMi}U sn$L'?^VԳP.npHS/dm\>F_!Xi*JRg)<TWLFkC>d +W7x]׃ -QOUh7/vG :]+dѮLT6YJ%z1֝#AcXYΒЂh.=\KoˊѕÑLc +tgNvCwn+/z&)25PuSWHζSCeJ|V6tחZ@?5s\o +S {1μ~ u]V]uCk@ZE?Cѱeg]ua +ʁ>j7.d_+ Mo㧳M6]k""fbO-z&sגVR4P7&Cf_BSmnc'puqԽjsnjM/eZir-X} h%I ٪qChxd(4<^Cn1IY#J#P ݣGf> 'UpDƂ @` Q"$}Z+At&[4|=@nNʜ#I{(1nS AWָ ~$]])*etŦH'ǜ5{ov2H#],e&k?bǠ\~S&˛)6U5x g9w0 jm-3~=mS1n+SLn|]K]#۽cEGaReY]ws*v1h!{Nhmbx)2E Zҕ =6n0)ӻOIw*2x68+o_.ԝD@^K6BzAX%}_¥ƴ" z/7fzs'XYb/ +ADo?yg0Z.vh'?٬Vg+X)Vxl;-"9¹Ffh.F ~TɈ?D۩o(YFmI*<%$ Ƨ8w5j4Ŝl퍫o c /bERrq}74X2CJ foI~3tQU +[im {}vĻ7FK0ysQnt2繓b/N X/&bdp=QD}vuF[ +If0pm0#!WVnӅRŁA.X+'ٽd]WNݙtwm* +y$2GL:v0PEFnW1H4ܮ~Be)mхմ΄H`b2rݹZA2(͵ }n )D>o( ]$!d|tӓLՍ#Z8op4ֵފ@]ݺb7f'.,68fB0^)HtX2 +?uT`9أXO#Zźaq\01 yܸG$\Ԅ[(>]o/oު1g\hḰ2Xj~+C]2O:jl:l8'B$L,iZ$Ts{4x]4?2֫"-7q%q#P>a\>l/|j?BM!_uZj4}tѡȵv?RQ-}I)8Akq)ўG+na*QBxuSȵ`zR`ZZ 2~5;fD +ްy c0ɱǿaR\cb>5x40NCYW:αt1Erpd| SgC:z/ySc*b1Bݺ95Ǯvپ05u:8w}w#U>V0WӸV]ܔꑫ^.A݉=ݿe^L7B$u+hMfGb6y)4du ,z C5(93'oz"ZGߟ @""8Y~iUf;Z +onוX aм^ +^谨}Zٸ^c?$h2(Ƙ5R\vhj(FT^]:9By5 @CEVtHya] ++tNC*^? i7(1oB-luZŹw +*DƋWŬ%[vq9;v@#0]hu][g/.SW|$]"҅!(]ퟷK> BI ]] +RĴl +:|<хܵPQD&R0~+u%mQj&/m p,iEuDȓ4ĮPUiSP-&7Q̤*s!D +5 ̻'aQ)"g`ň;Kz1%:B䕖 +LB7[Nr6OŹd3ۆ>oȳg<#iۍ TNIC蟼C!VtɅ S?>Y3,,".d"+qJ-@JV~N7=]&ԔCroV4G6i|J?]cqXYjNK.+׸0WF9͌ +Ӧ 3tYڕWXLiiL ^/HZ =L Xƒ,wZ?8~:oi$\2Љpb^46!LY\,H@itRt ;$yF'`v4[k`C_t^> X׌ %GG1Vg<-bEpM R#MuASd +Y KDE-mVDC#OP(9UP~◼XS\#0yĺ(@ÑEefD=_ #ފ/+YI Vf"L"?NJVt'SL%"Έ.CFFRd` +#\7`uK/4TTERnSr8f1`)$6*G^M8\w~[zIu+"Q߯vypVA['{,071 dLkM+K浴.dw͉ ό3h6?tv`FtDŽИ-#OrL.kօz..K&5T<рfLkU3ݎbRqܔvOQr_Z œԉ^&\=Xr +n@M|*PIg]ש.u^+VSRIo +>ȴsَʌbzqkw*x|:z[ݺQ!P.3aPU\dc8#>sCb[ E?rAܽ~VntK<-nD!BSdW˧lʹ5"(5W3=Av eU?Mjn*[ +.4{IAZ^B\RH8Kl GrH|T4P:ƹH*p@%liۊj;e[Qu &˕wRC7e-5'\k4ohne6zLLp#XSלu_sihbͻ[Qg /O!BtE "av>h𵟮n95 x}Ѯ#bjALs׍GtI7}3v~Y%}íI:qKʈ u[IG[qa[d3CGlOUjxk}(jm +~z +iHH X\}W,6v$>K@J@ܮ(""P.~rѫw0eMl ҵ'zY5)ёˏ!tQl8ٙ 4>fW'z ++OIz'Lj)2͈\&v}>9߂Y'-w]`wt'=g>OuW0:cH䄂VRwm̪1rFpK=4:PA}M"ێOh>-b׮ARzuvh!Kί]CdѿeY_ +.\ұVv;}#glCG7< +zw5 F@j1bg(oYS /6]P}|/&t[I`%RbZ#ƴ۾nK1AR( ')S$^M2mڭ]灘hy''5`7g˺j_I^TFݴ']rmht(M+/'e۸kڊh`y``fTEA'玉$ kQ*\2焧G +[0̮M'V6Яvpטn*NlJC]9I\&ZnȦ|i-N @MZ”ZCv׫jY +fR ɶ6bcE)d:i?$HCB$U""*|fL` wuB9X54HUO(l +s64K}teEӽDc`Y7^KE^o2'Na-oWUXtK~s[։P7.':BRι< Kr/ q݅-weML`2'ԣj*y/}6/`8t_D?$]lvuA6STHj]Ҹsģ1Jka٨6<<׿u;7ĂJhE*ܡD#t~$f쩬 +Ђ)ĻvtM 8Z +ՏHӳvfdW1ђŦ]%Y hX]Ղaby<#Q98m)G?vɘ؝bev%UMU1yH뾻Ka&Lػv^cyabe5 +q>ꑵʭkc^^(CS$=ט{Ku ӧ>\̄jJdSᄱ_M&;;kt@H 1 ׏5(U +ʲ,+zsih6VQk| IQh}I'U!ݵ8,ylVˊU(4% g)adɱΪ }-[}6>{kِlGs$RjŐ[[Z*)ĜiF /;Yb)~pN, v( +eMm7]欙>́7BpMVnd. l,ѶU')@+uѻ7v{Ir͋.L]\/飮G9TT7HgDSt]shD#F??c22/ +>EJl͡ 5n/LYd[xexip/ON ,dҾPS7BkGe߳)G)[Qrrt![ƪ.)А|!, <+]b'NM^O̞/vX \ ⺠j #j;C,?0ocn#}2^bJ8Ȯ ʭFYtJUQFoe2J3NRXFR']6|08sUO6K?Y7Z*@o^[t_;WS4p: 5L0Q[ +ɜ霅=crZUu`6bxTt\s0twv &QQQ':YnQ!0ox1OTa1x]TvoHغ"9>Qʓ0!3jNxlI>o `;!"RAI-z/=_v",_4B ".Z2T&`Ia&Ӟaӿ^)U +;elf*#堪a-ldCOYfsUU\yf"袠9CC:/=>b{~?/2,}^rk1uPMt ~R՜NNMK(jkD."18tr%GV} +J„VjwR%c/)7{^R,f0,i!>OB"Cݐ՝s"P7^ǩJU S"gD%iu31=bE݄ɣS~.ȕÓc7*Sy"tKGT]%;SwV 1/vnhu^X vWz¨v3)>]cXT\_[-Z}L"l%cYP4^ƒ6٭WL\SqP]\{Zkc:e G6=鞿 .vxnCCU} "7.C6T֮FaM0UNQK{-Rূa +ObgaLV9DWbach %lR9ZqL.h'n(6AHeWFN Zrw Udpu𜝱mEe<.Em{,L;jz[v#ՍJePDyi}-Rvmus aYڡ9,{~q\]J63tDn b"JdzSc:tIؕ`*p.YŨMq͒um>?w/E-׍I\i1})M :Lu*eOP3ptz'(Xh:gBɀ^HyERkNa׌2KV ˆib S.*_רp=a9 %0]6&$![WTr{ъ[m{p{;^a)*rN>\7W.H!ؑm&"=s#ګ`}k]>&E +nVz;iE-+ "SL=Ø$6ւ؎IL7f[CD~)}|{f,(ʣO8_%bCAic%C:-rj # +yKb9-J'ĉ+,*WZJYez暡OE'j.S޹R$LC bmEXG<=nn\_iVV! N/zN0piL"%{{& ҽ*ڝJ\ܦQ|.o%Jޠn"%ZcP-mkv1Բб4~a&Vj.~$fz}]kp:˥OtE$TKF"/ +.n`C`*S.__A^Q+1+Eea#MCWԷR>^~]8$}1.'du䮴) /QKIbsm^ox +^2?noK ]GULKMvE|Kpdr[]2 2X>.n~ +;3xcnti7oju>m/H17P>au"mgLK 4^LK^lhM4i,S<;5-u +Y뿥cY9\K>HWSG]>i2ޒja/.] zGch.wve3QlbLwI3f/_7'%.PMmk*_ [@_;Sɠ>\C^]T}uS4$7;IaG]GB[+SO8džgq:Hb?P~֑I|*\o&&I`qO_ +u3z{qW`똫|-~&t:c_n$K)b 񌨲ʑQ촺$K6Zո[B M:ե!ϹaREj[ d5ʪ X CH!7 +H,r+Z~En=i$QF)9W`@::bKj)LEĄtA].ڥ[[b㖶c@XK8,@B"p#.]] `=[%gĤa5ͤ$mY +5$q͑Į] N^~()'{C?pC[65rlOt8⃰fDH @ jTJB9sm=^Y.PinE qBYQ%Xk>;&j@`i+ͪ;*?dڡ@`flz}}7 שhE*%]LQ?,[l*mb8~*(89=͇ż\dQ*n%? 0pW\g q ͯ5;f(8<3Xp{IRq9)^nGCo\vG@ňGR]SԜҵ1') +zH xVD'){hק~.f ؝(yǙ,OJD3}]TchW0nD%[&)Q7bAʵKsݢ;m܍ڵFK(]HΈAIU +)~N$N5s"q7YNjt +A +4U9;$ +<{ nJ~gQSy5XOXF05tݦx +X[|M#qTk*E87z!PYX/;/l"wDIDit9Užǧٽ<-޵&10DP>Aw-7( WA) _*g/)\t`ӯkY<#ֶp,R{wЌ'9dZqdo+`={wUirK'3MVѤpd䢾>h0'lunP]g?+++˥y%+ŵƫ.vr +ٺwk=~c uM58jN{4wSӼR*x)9l(@T ^-$*!;%./ 'a)Xmˤဣ,]+ʓ]1ny\> >)1Y dY +(E. \5-oo}xy +Ȼ}SVL pF,"RAa]SڼϳNR1QB'bTФ\/3 bT(:n[kyqΥưբ[lQ{+x]5+`ޕʋ3zbP]uu#_f )92*`N ORxW+.RK$47x4vV"22uO"[h݂Z_wkqjY]m |+2 +`#X$ƻ >b7AdCXp=`mƛmmYyAx0_JC Ny{a]e1=IClξ&chP Xݒ{, E0KR #_ȕ##?u+zAnMjd+fSeڦVKʊ=iu@>_iebME|I7;8BHO0)99'_V"K!J>'vWaa3?Ĉ8,[kmYkmn e&cQA?ckUJUl '8~h "^ݡ"zicd "ݝR*hlM)!`miİ@&$$D$h訄ߐH, DTXk +!\4$ u3dkۇ!#d A06TK)yn"`"j ]oʖkdrNZ@DTb႕0 V1~JXig}>(i(KbH$̼KZ\}cX#!T<5Y` +Ks8&n фͲ ;A# Q`}u/\w-D>+/h&bЈ@rL1`2vG/>x6CLH>1 $hWaB{BvNQ֨ΥǮ8BNaOiWwۊq]׋3yuc7%CtK{[D~:re7ٙ-I+@QK onN&8u38z6yܫIܿVESGO).:7\syQrfW}GqR2S)5#fY†;^gkt ;-!ߤLP.*} ɥ(Su`QDזdK屄sѭ!PfXL'ILk]Sh]EbNkWo_G=㺐FLr]{7S X3[E0Uw{U*_"/&€ &Sb21e (f=N@-1)hA~-d\/|ɮRӣs/H3a.uyŽZSw9>`Q)v2Fvy{3uM-KLjDCv5)̽A0ьɌbn>,~86ح<)bpb2Y\r;3Zhۻ1|y2}i2i +S +CcG A]ТPzscg=KsaSaȊKZ+sQ_svyHDmn4$Cë'4yη`=,5 bsYF iC!kI*V~|r(iB7Ea@-s"^U<54 ?lQ\pk<XJ<4˭",( TF +hkXk^e`/Ff0ue t8̑)8SJ;K2lu[л.G+JVcYJ+eRJ{0Ztm^'KF_k`DXUor9` A2\*Q#SD+dCvkY9^~Lш)fa +f 0} +*ueZQ1VgJep>֯(p^aÔuubMiZ怦n /˼AQ18I6ݰtnRL']]IN֊H:m{HѫK`}aPC20FKFhhLݶaްʫ^Ml%V-DI%eF-RןDU ,?a)RCЖ|S^X}'96^+ѣ<^¬Z1mGnoY]fvqYh,"]V;*!#ꊧ +ظh[9ER2H<4$Plm ialD1ȔRjJZr=ނSp plK!F7﫛[,IPTIna,WQ0^]owv㹴s݅mu{]auT7'Udrꩲg` +=["?.N0c |ps=4iluM2Ĥ +bu=k/cwƁv6b7^+Ru7޸aD +N.I|gbbUB.FѤ$/lSx;<)ficSi6XMLD*0@eykHVPxDŽycIvWUxyUEZ#^)6^h^L[jyTZ +^O[$H|`HA Vz@Zuu[Rpu*۬Dk~x䕌7*\䯊VgtK9V,.,jnH(rx{eX$w<<_yA +B5J.u]vrc8pEr)䆽Swケ"x h(|vh6(ۮ%,Hq]ܞ%^<+GsqJݶEH# +D#I[2)KJn%*@LuIkobNS0`}a]S8tdʜUz/IKiY(=Rd8lТiv_W>.g1aȃ0C0W)Nv5|]"R9;yҤ=LbZ),A( +xx +^L~MIP."Tv+Q%U1%~| +Y k3QUZ9n&1N6aL󞊗[rog!ֶB Tk;AmgÉš zϐw*/^ߎ/Z2={lfnh+HBDD К;b,OeMUY07urQzH d|>&ԊQb13%1@+nN bwd'Q$'|vRc6A[l~ +XPSC+7Ckr^ME\h>Fnuw-l WU ?(}Nc^2TL螒ay͖ O#,gr XniyX#OIwnP K|}"Z| 4ӥ@?iʝh?UBZz5z=S:l(uی蠾+%U$uJ&}a՚S/(i7>!nK.XHy߮hWPUm c9|ztgwuYkt]~9xq]ӮۜS]]6(]ߺ!aHur>9)x=vkwmC`t[CgLܯ]S'͡a;ҟd‘9,SFQ)t^Y H]oʹF̗hK+u;QG? +:48VE*i;huAnVMmVb>ҾVH*iqۑ•v͆=Qrªo.g;1kYo6t/Q 9Т65;9-tsjPp +/\8k-dAn 8mS5׬.T; <mz^8>K-8grG(NWV/! +¨%IϠLDFtsPeDXEK$vǟ +I=r ܳ3vqa"lntPDw}.8-i)s]MAV%o]T!u`S$-<Kȉk}`䇭ك -u"#r1~ +*/1l@Oʛ~QK]v y +'v 66ø .awA AYTx-X$w` _$x:cWCi*\f ٮL.3ᮍpqb ˇ oOmVذEqpПޡPɮ_TX;&rR<Ʀ BN)n]Iя +i) ЯnS15e]5ra溙SP1ݔŤP~6ZeuMlg[쪴˻1xbnOjLtm7F.&C]oYdze{VFVCֿHa@82s|D:wv]U? +V7B![Pe6xfi՛Q +G9>Ǡ +il05a@8[k^] V,1Y0ΉU[t̄9`sCl]}T6܃'<8;v?)S49}U/kVc𪏝ӯ|u_9qLq=wAgW$GPqŸj.\sXM;("|q`)G8|IS\_r\>7c<] *#AnSX +y%.>v?K)bRkĶuYf-:Ƃ5v-DGm*IwWh@֚@sJiM +!"bt]V?:*֐[?,;96N+S!vF&n'jtnB3[Js̀6-UoLo.!&A;${ Jt!nm,ݜ6`!IMRwzd7A_xsRndlooDMr:.5C-LfEDv^Du͍Q)ĦP)Z.ױk)Қd/AzkҮQviWkf/An +94߉ݥ@h4Kͣ98cɗa`8nqݍl1 x-Ek1=>o 'M|F&%1.O +xmPF{;4ء*%w*[Ws\ +Tl/kwuPX+0겤&o=Dd\ +DY 0OPZlC F~u+z}i~5HI.G0-F PK<Ֆd }SZ;ewwnpmrdrR]٪X9{a;"c{༺9P b˹w/7޴0{+I!4Եa^X?]>l`RoYDp|b+erܠp s]_7MASutlGLud)jE(ĘSZv}(.x UB|P|&F01vbSU)nj*мw/p:m].[mn <,Q AۻuоѤ~]Ӛt*F-sT&;e]tCz{wˎ`:.-JEacr}\1 |{ +Z6aى:f!~gtN26޻Rݪ0 )Oc-kṤ$>R6[Kp0h`ne5D`z6(hjꇗY"L +ɛgQWrU)ݳ!F!W|qJԾ:iڜ!u}E^>cTplvau΃Zw#ƴy*ߐnov wfU2'$ +%`'q&1u]"@i(^)6S Em8a XGkKE\Uנ[}&C0 X w'Uڏ FC& iw&FSdklSӘv("lMD^L-ད{n,S|3;rY!{4(bLKOSR@{%}kYܵ[HxXϬ 6@ҭ:ǴK- A -R +pv(jn A&Ԯ` 'N@NtRm}p0;BU5ح~gc{@f !C{zgVQّvaXv\T LR  X<,:&DrK9GحOXo37(C/晖UJ1W-8Ez/Y&vJ8loEʑBb6J^jEE˱6G$ d1 r_%8F^mE#:nJ^ր(+So۩pNnrMn^ ݞK L Hl4֌Iz:eǏۤhW펡I{BtUwa7ޠjrf=vc`H]Xj{vkwicsj Exϧ*;eDc$"sWSۭ1K&{鞃K]B]wWbjELA xו~Kݖn;qK%''S9CrYgK5i1WgߊeEȸCQpFU>AC* BaODM ř3T-cϻGH;׳>PmFsGe=:}j]y`o(k߽Ra KBdur {)q )eZnę.@> +*3g/1ye0wAIwɴ"l.Zɷ;M ɒ)´+^[{q ]H<6r+M6 ƀBɃ ڢk-DeFK2@[:!1]qsU8SHL7OVP4+]iCEyAMBrPIqr=UhTAbzݼ3ai4?M(x]1S0FBA”MNsO`lWKV0nؗ$Q5 Gt/mWj$eЀoSi:mb + QOTB|*jЊ?r+6^l[gl 0: ihhF6h<'b(h$v_q 2UUF8})X=BMXsx2Wi8XTmci4r5Nq46)E><\F9hGJޗ% ?%NoM ++),wKN2'w0])u{QZ08(GQɊmIm ˹o~jp%8~A ǵW ,AprE/ eGL &S5]ETNۭB_^hAxxQa}#U&x Ego FﺺiĵH`W' hxyŇZ=w:q׫3~B MpU0&!Jb@Nwpd^a=&Wl&F6TEzI$,XdU ិ]A_&}kngϲP*64sCQt=՞͢%}vvCLDiNI>>WL.Mh9WiY+v +02V0/dƛ[D%`m|V +u.ѩy䴢8RڏfBQa8Rnm S]$6@nsQF7EAXjg.{LG')DenD2Bw0=Ӟ́Ut?T^hu mk<|K՝Kםe]Φ'g.YТS Sn}ݻ4L+v4EnӁp }0Z΋ *a/?3in)XTСZv( huEF:h&м] +OW pcˣX]7}O~n{.+e}7 +[~uZ +/<]Atq;M{b1QխƗU D~GJ펜E/ +-x0OQ'F;:vC؂۞.F)hԃ'gDfl.i5^T=i>HNE6xIPE,4tCη7-ZH4Pڀ,RV(NoLK0i,E#BqÅe6Υlrۧ=i ;dUJ%8eECYXQ,Vmpoiɲ( +䶗-^yX~%C[9ɄX 96(Υl]tonƯ30 Ǥ9.o .vVռӮ#^vqDpp0MLޜ[ֽ{]3@I&/h&j-45 IZ]^S l5캘{ү]kFUidOsEwmmxx9@:/nhղO8Lf mӥp;R UkDgPBYuZa[a&'uk/{| kC`OK1kjɂ D{*qC>Jܠy )eJq7.A0GO٥Gwf>O]?rЁܨOô&T,]gl.VڜY7 JYeS8 $Dg޲]?Q4$*i҅dόe!9btaUNoˠKrM #l+N vL)&xۋNuZ)m(IR*%Vah)6(1!(hkb}!9'EtJ9x ON H AP)jsWER@bySO;ɻ޴L e r3-[bFq s!{~r +d Vsti_⤇gN P^,7àd X`Dzˊ?I{R?13GiۼwKv'q_ B7=$ e몈{E\'[XD%,ΒcE뛔ȹSoYnu*{c0iubmYV3lBOeWAj0I` d@I7=dm}՜]:h2Aoel˴.`f.ns=Yc$&E؝g}ϪtE섑R^ynͬ.=C]. Fwc`NdrS +2`u3bs>LI}gj%$X)p%l˭O ,-R'gL~f5t4ȃτ T S{3ٻ0Cl!veą !"43FYׅr@LLSRyZ+jWs^8d-j-5ԛ8W{Z8 h9!NsAQV|aMLI3۠W&",0>ϒ ~}hq}D-ʵ`֨oH%E\MAcY]țy/Y9Hw_}]{6΍Sѓ>e gyfEMI:I[nib`[/A';^P0f k\J&"4e6\[Ftuo_ĽD;KWϜK\1uKWȹJ7yy)|utdx{:j CL\L/ݜPدˏLӉ(>vp݁>Ӊz}bwZ/Ƚ8*rb]]s0)V>bN/ݚwNςR>I݅]jh*1}N8Pڝ^U#uإ57Չ_f,x1z@*"?Rob9RWn? +4R>'庻aݮzjk3ۅ}2UJ)d)Ék I7 iTǏL~o>]\Z|µ-j*3Y +y]- hI|{2I1jՠ ^z>EQ30f?9 +&귺@Q ] h0pE +{>.ȴ$jOP;q2ᕪ*s#NvKdrfr 6pdS p >I*njl@Y$fbA-:n L6'v:n 5.\-ojf-3S=]p|ALJqv)P:'AT$+ GqMl¤촓½l<{]i7_9%*bۭCcv)$;@XENrr/o`C Z]|[nXxL"-f{"^NС| ʆvURbə L4kDYU +C3 +hεޕ28[N<ש՗WH_ؘ tzGpa}J@lEW?/s^d'G[=B5R=X%zlW$7tt탆`?䌶YEЧhJ|JF.-  +QP8F!>p'1+x&BJu%~=:]U1uO'6˦˅\`遴 +,+wH -Ev+r]]kH _F,Eϭ+bu%$mƹ3RO +7k`񋑧d߱ǽ=Z:粖 4 lv7""lx^o$!1eqJʝ&gE܆hx5uwt7k+ܑeu(sKSg"W/%q4-zYZ)ٖy} k}T+dϓAÔpd9חC~ 5.cǬ0]Jy'b6od/{!CIݭwn4y8rΦDof(u洹MxvC.p3%J tDH3>r_)nGnV)+Yݨ:x蹮2b %}KEezH*nn#Tl\)-y]H|)L7ؕu]]y }l&0}F9\Fӳk`wZLNٵY$LySrwafb=AJ"?kXgh +1k?O茘6dW b^cVwRnZO bw37ŸmZq|op.ooZVKoAĜ\zѵW +AZ4_ We0G(h5iϑ~8K2R۶|z#l%Rn=ڂ;l|{-TfxRݷ] lN;=!APM+(Ƶ+ + I+ujf]hr*v!S;~cY +%ӇqX -s7 +hh&5%F#*DrF+:K+ĒBWi`|n"Ͼ*oԮlU]{FP}պH~[t% Cݽ /1?jy^J5D9ݬkP DmKIU!וڭASC=+W0R0l-pVwG59({tct,)a_l^QXXLb]H/LFw{@h-qV_>]P _{{WLpLݿ؎!d2kҙ _PE)Ԝ[Rxtd!{D`Q\-jdYwu<^Ps[v/V[I_-MצN:)&#2C5s'5ku(F`ú$L<*]-asih;yB&N=/5qazRؗYdWXA^ɏ,q΄yt'6>'ZL_ʔ,[gw.ôj1aAv + +1BAL3:.S/vu֬uŏEk BvO guU|D\2&bN$";ȫȿY@g4G#KnQx0)JByX?ޱiWocl% 2, }g&_j_,;}ep5}Kp4&P\Ȋ[}KPJ]QٍDn;}}K{PY.~`iȽD4&ogD-˵㔁dfdB-NU~ gaDFKkfkQ`Tﹴ:7sX$v~w]mŭm s딘4 D$f[A.Ƚn$e7sͅli9R.Jx8]KK(vfՠ1!Bj]A&˼µA)һ*KumCLzfݵkp̧Iů"pKaz.ڕ b䏩 )1]-IuIBaR.' <Ž)/5pC  + *h@.x/ROQ8a3! U@®9XD-" ْS27fydEH5hψ1at)('[7wǁ@;a)u)QVYd?&+Yu˖y Xa C #sQ +%dzZQETܥd$ur-n~yO&byF)-HRJN,3QCAX+wV'o/Bi^|RLByEqJWR坄ݝQu.ִ?A$PyAxhPtЃSjZƻqmIUAZy>9y=81SaJrݺ潹=TR-B =-iu r'2 t!H`8Dj,dKh9 Artmi$Y//{t*p"tfi(ȮyC. gNȯݻ.5D^-k_ڭ._jϒ%DWSș1uX&&,oPupL];k[I{qhylN2 )fB3#bEך_ T^lj)I~;ks|+kD_kIѩ1>1ՃoH.`AZs*^4 1?~?ĀT`K-w▦^m*rhzԐ$w+L +ڑ C:f +jIIx8'TCТI 5|UٓjnR6дz.ۆ# ~ݒ+%,6!mbHҦUb)ޅ)L#ʸ*rSrby`P5p1hiACPtPd9X;Ԕg_-ZX`?MO^e:TLѽm5.C"Wl(yQƠ{JSm&xLF,Z +f·{JR\Mg0 :M×Rh[.JV)|D)HƨYpQ\_|FdnwLųF1U'QߓdAgE (b 0(k:mAjJ&D N͒SsG& .74\8%05 <4/(3Kv{!LlRL2=iM&u?uEk Y~6l69j> 쀻Yf9-ʓmLY7-Bm"ovB:P/" ;j4Poq3Gye]D ٭D}t{o` +oYmI;yjkǦ]]jY`n]S,*с*hS`*bpݬHуynR;)vE7iڕDfu24nzmJį+g?ݬ%S>Сs_aye6k5 I<1Ndi׿_.+dNl?t[݌=dt-UBH% )P0y DU$|=0Zsv'."[My\LX!D9ܤi/2MEfH ﶰe1]:z!;΢F]eb >pۧ!ۘ.pܒyMp|0Y\hpZW"z果AXDnZHF˅>^`A: GJW- ۹42((s{-%ON'$!Zhdɵ(b@x' >~% 8zDeY!dlȪi濪*PE$"VUJ=$R IiMI 4R!CH$,aPThs j,@ IUz +d]A0L[g%k%uRbW]Bc*] #rv pQOYmcxܘs)'֕x4gS B.xt[Lj@|ɰa/jIav]]F (\m& +:-1ӑ{&]_Yߣ1m!=:P1 8oy_}90bY!xQ}J:7_; Jaw)s۽&b2}iw?~rŮBHN It"dJ)-2 hh/݇+W?uP=Α)̮.a7<{1|iBBE1kW;O؃R|㨮hbK'ōIQ6NtQF[ 7|mɳS5@dp ]>"wCG0dib 1n9$O[?&,@-\xX$ +/3SNjRWٟLX8 }wwKt&ו{f5A2isgMe(L)!nK0 1 ٣t-[pxbʣXҕF@sEn5M_Iꕿ@9+×M}$v_ +^As6Z a'~"oK\*T+\]* QH-$Pg׌ys/9P)m" Ѯ DgT@Sl>Z0ktSB;kl$.> {UNYGz9ԮlvXbͰ/B^9[lJ]1Y)"Į/lbW_1){buW(uқ+1x@ "$n-[oX) 4] 2 xZÝhf縑 +3 -.!la@r$M?APW.$,ަGJ2tr94{ adCI@\h3"?* +f3i'%eE5jahR?QY)U9%4D!vHN/䮼w)Զ!y\ڕ]jA:Rl=C90O٪V֝[N.t,ȐI7[:Ch``nx4܊:R@ J*F ](;B-JQ5Co+ ݰXvCҥ[NLkY ϰC=cS-m<5asޞr롣ֶ{1ka1u#`0E²S`{+ȱx!3)Lg+5'.,LI6.`)[LApuO| a&"Q0'aj r]NUY_w=u{ S@-C X;*d,F҄tW3oT|0.6cnMZ_D&I +3^[:FK*1B;S+`dQ)`=nYCSÌWiM(2|[ESPI6 + +q=Vw2e5y .K+tr$eyFQ]ydnmGn)ieD" +ZxeYo(B2mI?hޭz +c\4Fm.` WVR74rU7JKfslɰV[`[DR^)=>5\9e|ˉl^FHAq+uCHa[A {:AoQXB1 JCp;1uO5"t +endstream endobj 51 0 obj <>stream +H.)UO.3ħxOoYWw|XVrP\K1u@hxho%@:/m%u{bޗ^oBj;)M]9)Ĥp_yWu'[|LL3cKM,pv3ROY>аx +K_ ؊kv.X{"d_.yK7)Z EY g0%PS=W,EP2ZM5vRiyG pr+(؁U??xUFrO[}e*fbm# ӜsBÈP,9WP ŭ%}GpYPIq{+VX$<*R/(<@W\YLό؎Vq/[PTyrwU7tfu8YkBYSWp" df,$s(4,v,@͖%u`*h"Ö_ +4=|Sعܶ&7f;&t[ 3K-Pnm\ q+Jpu+I@]_R&x7جaQ\:PⲠT_zR)N~ _ ul[@uF|/^sY꾻hB6,WXF8EpVeEC)]Rls]k7]8DS)=0m&aJ"Ɍ n|u_9ň+Iيi*^Y߽5ger-]䢦ݽ{tLSi~' + +ѸְeZݖvesIb21*% M)Z~BY0o X htV6ӕ5~%nW26"R6 >-翬7NiD̙ߙ!>GGM 쨠G!CGbHoP,ple9vlo6<mB-'R tArd+ +k7c½XM(A \.b &}K8!-r6!,PZ{ޭo2I.ú)6.CK;!N_RT[z0-E-EivQ,)BLmTGK Ѻ)GDֹܴUe@v_>ڃ_Ą&´%#L3umޔ;=1)`]`Z`zf^cI'a6d,;)٪{O]~QjwU#54Mwm9dԗnB@!M|zЅ\R!+1)0-QZm ӧݶuSJl{µOcgWMi=G8cE u~cv5J1tD-O] ݯQey )0ѰmkO +:s8ļߡeWR<@#oz35 í5ʁ1/xaFhpƛ־DBUT^ Rk(ְ>B +N%%#.$>:=EL8j~(1N=@:rkֵ7*cË5Anu[ +B +dɟfu\G='΋pvwP]v;B'9zj +q _r*BZ)`JtKp ^CvOu"h09il% ڕPmpJܨ$5q]al]ᵋ϶f;ލE#00Rcy7)H]=Ⱥ+Ϙ@|]<ڔguk]~^饌]H?ͻ[95kWg:12eJ.纹Fu×yU"pES/2{32 DbaoaV{͈wR@A.BCGT`\$M%T%X!p'Q o٣tx7Y eGƤ/Q/,qAlLR2iOcp `ue1nX&G& #,cQpب$ $1b=-y@'1؂@,V¿kH!xz/[j~n\ghCrӮSTܦD C :xwCn+)njwᣙb>WWYץp1-]dl -O +f˚q00miwzh]AMuJs6ڇ,?݊$8VA6m +t/Խ^x\o3ȳC7ro0O߂:'kX+dL!EuŶO'TAj79Y1č1‚ﯯYT+JAZ +"9+ ۶;Z~`foi\yMD!3 5rvcCW jDSyow}2܂'rIQϚ$b# 9LLJmJS(-T7:9a֝:((oq~I R^ϪRКtQrw;X~c2m5˥oYDձ=xݬ4]Ee8$8JK]'[YrLAq к͕|_H ڎԓ>>Ւ|v,"O\׃$鱂|ut qC#;dpQkZ1qr4*O3JM5qmK,(eϪe_O W|`* _ v"z*΃茫6*T%SgG6@F[.oWݥX+KSC\Bjx & +n$v5G>4KZ<o KUA.{-Z뀠K|_m|ĄN;UHy`jc>_bZmax?r/o ..̻TJjȇdHJv_UV u4E} \E3rFiצb ++{ó~fFˍ0peu1SLaH7F&uZ.v)C +Ҏ**zh>8 e,1D-< 4<mQ8=J^vRML8Eg)6~9 N5]0NA2 +<&/ +gxZωp0ъkVr*<>ZzMwAlDô'*rI%Y"+?x9 <[ȍ'|!%` {@riL̵.Og|RŮ0sn*| +LXL0_D=1q+ J]-CLhIo8 : SLwaIYy)eˌf\|3J=P]a"d>"Hg xִԐW?OIiݶ',MSL.}+n]/oy2s3R%feo,Qmq# UhՠԶ-<3JlHլg="fP)i40pF\"`䵭dora>>NsdonK0VG=Ql彉3,>c^s(Zx`lkB9!t̛ َpPC'U(]% U: +.ὧIObW\gi~uXdk 5o(FRN7Yh6!?Eίm]PiJnJh8͙kyt/E H pݨO"L" &1rqM^\[ +1?aMS" +6T +6ct%YoC4] {5|v3]>ך_s@ќv.QR[cЂ1+,1AZxC,6ZU6t]F$BnrLi8]B-z}/],o[_K$cb +1D)kdE3ldL o MוЏuA .gT1Wx&-2SCLO)K=!qe+Q.T-.R!UKT38 \kMD6vw7{^Nu"ē nhI!bEׇ*$]rBMt1۟2ztkoˡ$v!L}I;(2,Xꪆ.ˋGTu`YCncHu/Y bXbTt`DZ +%>  f +mAܐQebxϰkBLi>9vr15+9$aHIEL6ƪE" ]{ifc:hGf:]VWrwSP뤘%6J4.na]}v5 ۬kywL&X՛+kMIt?!.pDR!P;C.9Vf+br`U%t.rkdHJjO 2WKWPW8msfv7B IɼpMDr\m[=#ԝ."cu0bٲx+1S46 o9| OrҲj*ͬEl.@ %ސYvVnɥ*w՝1z*#pఠsfGnsgJ̿0q=zm$zQf̾%VfMB+ZT{\I=^{eKWtJ3yԮ69Ie>j.k\ࠦ$PI>.=.$UĊs1zL4Bo +"MwTDBྮ;1?x؞o*K\6ѿBNwyQh +JJ)ܑf8κʫ:`7NдC?IKZya/& @kOj~ʼRpdCQ W%tXq~ZCI~c5$_@ǰb[ ﺃ4H+"%ڝ1V{&4 {LPLu`K6C0wŔҜ(ZM[hwla[&k 2*VoV-5+Re*V2/I)%}<2Iy!X`M$ c&2]8q1e,hDw; X VFwS18j\%n cu%TtBУŝ?fh`9C"e#/L"5lqsEK vg^6.Yr{n[> ܼy!WWv=6 ˩ TbdL۲)dK׍`xTlMY^m\QOdQq!Z#Ⱥ5#_;nP:8qo"<ނI-`,1GMSp1 ~g9kF<.ϚAEeщrk _t5r닮+)KֽMzPr{n va4ݯ1d.{=m@Y!}`p|Զ":{IiuϿ-,&)>_7o:'ೢG)M伎4L6bqwvuw=L bRɳ]4+Gäa:77~@$RE?삜sGLD<ؽ5v$9RFm  t ԵR}Xjʎ`-C|G] o+n ^ޠsQtivcQ?1ae#j"K7DW.bj̼nb؛V>5-qJ8B+1%q& ]AsrK-HPlA +< ~G;\DۀT籲7f^=_[(H>G(.0aMY$4+ls;u<fOѷb86ӕ0bT +,\6 + i:zϩ!=JER%Z +>0EAI h :rswL4)7u z]n)~Q5LHI\v)]*┘"i>kVp]-4SLSô}_Wvp!v+S.>Siӟ5#']Ȋ2ݛq?>|:A u}h.5ol5'v[Cvl O];:BSo^CD#m$#Ѭʷw^G ւ.[2 +e&kX \[0#|ݨD36,α-BJ@DW+e5; LܳBH4JQC&'dw pعkrsK^,oXF-G-x2]o/agCac"/1LRvbG`ՄjFpwv/2ف/vͲ8[|RdiSei{9vz :^Ғ%uQ5:G.xCp6YAoUWlL8.Ṭ{qK.tinܙ-#vh.3lܖvDJ u.(bF#BӞT,mu?;<)p*L1#v1Ӂ#k_kWW8En-& \E& M.Vvo1ҡS>̯OZws As@%4s$lȎVyP wCx"$o)AKk57bX +M)W tysl *|H\dj~ȧ"*NI]\G_%T!CHN 'ͤI;JQؑ5ª2 翍[֩4}d6O@=PEp K*lo쵞VWK=?r +DDcSk7k;Ԟ* v6^A}FVKpq]]J-B~)L" _|uҬK!q]D0ѮY 2YVC[.XT pAߥnĦp)dE5ve1um'"3WS)(.on +OT| gQEdvhW)ZAjqK-vSi2QLa7x%k.Ry#Yx˰LT܇ֈo#cN;+݀Wp.:LU|"hL #kuPz2WoX=}֭|ƫ^(E}RU݉y_RNZNJe&yZ2oYXP){v;>a?ǐyG% rB0߰#hl` 1;*U`~+-%U tۨaL ++Z7oh IC֝4Ή+K bȍn66E&bқQ:mr˽8\2ImJu#J+aCHsk,V !> );~֕ ΁O!`I`BkQ/LԮ.Vz.ѯW>| ev! ᢉH=<˦V^&&tTҿO@:cԭZnQ^EhSJyLft05 _d}Z$bǡ݌%GBA+̡QV9ugS0Tdz!ϵ+) QBnO+~ߵ;!=X`;sCR-(CZ%IbAp̯PʄU!Nl>6gv1zhgl2T㸫SEN!# +7g"'I_хBsYo'(??i6 O6q]cq Bb 'ӵac[=?5p 'mC\m51Z};U*m|w Cg|Knlm.YLݹR{+A;#.g:]&]$b|6)DZxɷޮd^L2Axwů+cF]ë!vy =yX7T)vU]:>| LgPuo)cW $C#}z]5oˠJfS8d?6azYnt^ASutTz3o DV  nubye_aRCuص0_jH't̐7o 5LX!uzAbВWp[ +%yn= +]&V^#_g#d5O,e -iDbm ZvB cmn#sI.)uG[LLE.C7vՙ" <ž5c׳i7rQrp~EC\L.I`Z#J$Lt&kpr +B_ku +ho.uuamy[3.[x1i\&|;<gqՉ@7:<+M.|L]xnJG97&}F| Ka<]4nJkg؃V%Y'G:Th5=r-|>>5΀mx`!wSدaq<7^)G?>\#T%Ui{W5^g<JxmmNWkqCN? ""A}k2mƫHN]oeokiY;*ɬਵ-2FG#.B4KĩPLǒ\5]pʓW;=ItX("X$}K:wol3b/B3%H w2n8* +G}Xב\5l9o^7K{(l&"ezuXb?N- GURڇX0]jGjAMt͖.ܢ F]ctl7,!5p)> ?ɭzP ~AՂܵiJ,w$< /1^܆WžXjܲ +{$? ٌ۴n2[L ɮs~bǭ,ZoPB wqMiYbe9>wA[SԶo bE+ol9u'.ו֠Fޛv"u/ X`<|hRsw65_ I0sĞK[S0A0f~G[4E^'ح:4$}4"vo>8FmV".(mKԹI9a^F<3M' ."~{]B5NJbbծ/$oL_B +Mx$^z3qVg:-G|]"N<" UOLiCY¦}#]1ѯ4*ZoO} +q;iJ@WT6r5#RB!21dN"A{pHW9?ZrلRZ;b-֙-'z\xNDfec9biKMh,t^ 5j$cӄIiZ쾫` _֔X=;OQF8HGK2 -\j] K.-{'Rh(2ݰw2Uk)ti7OAJDu9Ү: &Ծvq`]톿A׭\ILKuluHE=Hy &NIjZqnwGx7V% .j)neY^2;{eQ66MBJ6Q1Q2 s4'e6+a=A~Pu#NijH̍LrWZB.b}qe[mD%{E$K۞Eqai_EsxћÊv@f\:1kܐ y@IN|!Ix~>ȃf 4?h>ΦF.c^CQo9iZ-r +/;E+%Ou]i_E,B@V#gtf0KkFSO蹉 L.|8]QxukfݍLē v {FjH>^Ҷ>ctSƮ va[c&j6])s)-R + Ѯ2VcҾgol+ +tQ>v\/0Aw}yUL0ntXbvؽqƻb"ʮ,2]{iآ8ovs^Vq)YbµjIUY pC\ҤV:{> ѬB:|sv5A´CtHWXT["HD*Vjc.ݮy%*፷7c1j#IBIX82.`;+<0tBIT ^+c&9`ުX2Um~,MۜM. CtyqAS.?1z(rO/Cj\OTℑoZNE;hRg(m۵ۿ`%7ZI^|XGߚj7+kK,-0v?@LZh㲠7#M6 bWmЭ! t5gyݢ1uuOf,Vw A.ݸ]EgsLDCXi3z.B@Үd]"n<"MIoK^Xg?9y}}E3E)++H ״[BFP p0,n.x;"O//]~\D ~sDx{m*i(ԺCN8 !0ʕ`IY<{-=!Մh>j|71:%jEI"m֎F c\EGQc=]uf0WF*0axu^3rF*=X8H j!/˲*ƨ}%ӟ%%vUnZ1nRkW亲lzhdSfr rn`Ť jVl^o3)SAkpoD^syA[Ll``uo`ҾKq]p`R_X> F̦hUy@4su11́0d70BnBF= mv?Ӯ i{UO,YD,NvQeb^*#vݥkv"+uRˏ]ufЯM.<jnTE$x}^MҙsEBeK(^2Dӈ3UK4#L/*>lz\ 7"/c*4 ɪ,rM1cӈcA,$ hNBo@l9^ ށP|B#uy<]]>*ћ"#ع5I6 mJst/؃ZZ}'0iЙ/[A[qE`xT }XKt!b% +$P[ Px z2ϦR|)(]Џv=OJ)Jffvɴ*3xbtStۼIw>&I?S+Ul=_ڠ2.LQ)1d.\7'qCl%X)N֍b2Rk%Sv(Zsi2S۔ @A~ץWQ BXZ|!}*e*]ʅ& +`:ɟ cno)huopLy=6Pw +sep0;xX, ȓb-|yi#5X'νGbRnQĥ5~;W Ia^xZVw "?_T +phTInvdc%)uxd=pV׍M/uз_9pE#)bZI6e():TE<SWw!JsI>U0Zc'r[fKQ<XZ-׈mZB@p(PVg9a/ a,#.\s!MZ +\@)  ]=Y?z NCZ)cOT~)%EfVg]M֭K`!TЈ/?e)ɦ"&蘏8HM[p]~>:puΘ^SPV1+( 0(% +<Cᯖr߃u1 ejvӔ8A,>;CQh]H=ny,^a:- +XR˵4`xYa'@:ӵ;̟DZ͙W)K5EhUPQr,:Zv*248P: rYp*FIw4WCz(wfLNi v9G=$g{̉_UsT _đE0SGY\@akܓuo1pjQVU2ۚ씬_ +8e&̬T[2W漮#k큄!㹤'IГVbMf +[>+ +SK+J;ZRkK^0\BDS+ƈ,BiwL& +wn uUC5mŤ2%mP!u5I#Tw50 ]13Q.O]=zn0\0Zw۽ 1eyOw6+yuYZo)jeݘN";e6L*݅> xhww45SL: ~:avwndLEt[an@Q˻SXNY/9oPM\{Anc.9r<ž'%qJov +pF̭/fEU5^hx3['Βy I +]Ad :e +|p|ׁ酰kM%>TO4^ \jX>w\k/g#"I$\I'\J6Ip&]~)<*;p SBw(Eq;y݅UdӺIh52#JUN, 0~R|C`9U\3*hh)(/\ɶk\>% nU&a#!V2QGU!?zEŋOXath9M>I\LǑ@wݧç2Dŧ\lV[C7-Na@(B`״sK!%vSBaKx+v]qoXB0hboa2ruލE Fs5ZhwFn| [ L)؍_7E 3-^GLo.=zmvC,nFD'N #*g]Ҵ{WfE|- =7_ +wa"&~{ +@ຸ^vup +9FFsvZR˗@'JȣyZ#Y&ns]2H'B⏧?O2Ϛm@aLrhi땗,{J:M\ 7"pP1` LmPQmF#R݌H-HlԾX8 I / \mk2zm{眗 [493oιkjͪ{Z\=;SGC*Q4 6>"RIh>ޏf߶?촘f,N2 +Ii`xJѪ2!:9Ka"NnH`d&[U]U;ZkٽcմԸd ,tdQD%)#L[b0UF-^XX=8(z:ӡ\ #T * ѡCEd@I%Kfff|I fR" ZkVEw9JԄ#Q$dp%$݌T h/\NUPN7g1]6FF`Hw/y|C70KiDө|5}N  H(AaLXd{ i,@0FI((EQ9u*3KugJڬ`(HNRw@d NlBs^kVva'8k>+X8]US3gĔ,-\gډֿ\30ª7kf +1):nl9%2ZУ8zZ4 ~|knC'G]V"U "V3ȓ1<7[9n}}D{?)tei[5wbWC>1UppLu1@??h. +G^r~}>\u)s|ijP!0 S`j#ow]'v5`m +ͻ{5]|^|P&`y Z[ ˈY +yMo(Ό"$DE{+ey0.-݇qPS~RWXtwR,ʖRsl0<*ҐM>U/tӚܪ{9+=RFYP\a4Zjr{t&sٴh.騅eXӍBn}hr tݪUa1dI2KUZ6h-['X%~sk5VLtݹ數  +\ [83])U7 tݴ˵K]R0ىU*.mv+0L;-⺘ Q6.1£;A5^L۵r&O)ׅ`S?@Mp(<&MEaYBNU/]ln>]=a)5U0G5M3q;65 &uCmaPn:vYGO&5X`KTgPnXj"RNL3jI#N"!G'6"B5b7Ŧ\ ѹR}hM,H2ͰB~ +Ce7, H 5aj-C.6m~n袔K57Y~k; EJ-;RHtcP9s`_.=1gD v `k`5`_9ٵ;Um@>SQ]ܳsO,bȺa}ׯdu't}Pm9BL\L5.r?uuJ|ݒ%BEMʃ[]C`Mm +E#$x(?761>vCO|u ][C_ Kjj + }#oCf^ɺm޼>4 c}یO1pP*jnHC`$ +Wwxrv;GKndkz +j?PU5G|n~$)gL^tez{Rd1"VCrzA4_u8(>p/b0a(B]e옂YY&ŕ.v|J`)6B1B)y +rFtRr)ZXDI'_-SIfULTDV 3ׄ-y¼pS%fd +V+b(Ӗt/W:H/$\BM)`6}gIke{`7aM(Md9xh`u݀G` MhsVи%չwf0$NI˪c^?SɡI*[r<7az,GO_%.IP&.!c!xrZmD N}OU/!4yLjuhCA%irg4]a1y*v2M_2)xiG"',fTUHS,>wȏ]ERZ*gfUv.Z{_f mʺqV-ڷ#I10L[ c_W,ڽhf>sq_~;.ΪܖKa|R #ħw_q"tȪn+tE- +nQn2}ZksQ':7}J[ O%f^^'4)CQucz[J7㵮xgP 3 ]J1+6SPn<[_m+/0M "4[> g15oIjS y#S(L5E*>\2>;B?SGs뭿&^>a- {ݝD@LR:6.u |g)-< ܄1F*3-U'uPH1ЮR4 +vhD k$7d-=;G"+-ݻ^Û%EV;^M= x ݯp7ʴny Dfk  +P;?gsK`G]HmgIy58YkLJ.q/v85QFTh_V G ـr'FAfhr]1w~b&d: +*-J/0 :8mXo [еzVj_Jk.^ i7&ԭViw^cynY +O96ID5=Q Fd{O}كԵOr8Q\] Ψ\bk0~uuWf[kegͺvTfwLf\nt/cMi Jܤӣ5B/R.o/5Ĵ.ʵZtW 1br9D,-E{} (fgK0ePMAMME RiSN AT -vAe`0y]6ް(-&n9Qm˚:Y%C[M˖LȱŐ#LfnO4"*݄vژYd&rqd/w@K߼xy/b4aƁN^y0EdlyFQT2_7ɳk6wjn?w}&cr]S +OS{ +㘪[L' +L.霃S1)~roë[n<`Ey]j{ N)R5z|-eM@W% eos9Ed"_H͑C((B ƃ 9 2}ŽWv7n&v"1L!X=Wjh!)9 .L7t?LCK?C ԨO\0frqIYQD ;Zp1'y]Юx?׹Cɀ(5vkEӾ:e栛 ^R5i_Q- TV0 ܵy!9G%, 2FvqNPeAfpu& :w"8pcpT,0;iGƗ +,DeݔVc;BO6潻cM|k0W^X^ 4]xѳ.SS)OݍI 8@ڍpdAQv-$Og:3b ݸ2Ohl~}Lkq񧠖b.2,&Tv=a#tr ;bEkP=@j&v#<2i40 n{`tǠ]?)Xڕo_H2% +FXusC]蘱Vk'P#J/_@XcJ"Ō |=@xl퍏Π2O*)T䒗eY\mҟSorQFbufany>2œ Oz(|ڌPmWZ i#t~;p:;P.P@Q+ˉ{=:F3!V6>>E!ݶ`M[y.f&{~riJ7?0KasׅNbZp,rI"Z]nfqSb"]77O!km\ _!WPw _b+"GeuzFCKLOQ @痉ҥx2y-۾*UY)]>Y.pv;Kaz"!LWPfu)Ni!rKDE^ÒpZKUJ@yJ=vWߊGh%Ĩ?/i琁M9QUks&∓와|',N#hPp>ln70D8n9ڂ5$ƍ{G2RR@Ĕ]C)"0&l>/@,b˺I ufϼZJֽ3lo'g0⭏wzN-ŧLaŠ=\A9S<7^W vD +H뺱_S4nn-au#>Ne+5|}z1%ں%v)F iו\3v';n u=?cr][G|KS&DrPJBl?}ANuK1)B\]~Þ7̗b'\8ZuB{p6EG ck8ڀP۵bw %P\*,d :Ԯ@iFzƾ6 y$#Vu9ՠ7RAzAnV,fCiœA9Cy}"b拈a|Bޘaœtek]R1w%v(U)[?_k:vqlsΈWOH7e WE +aijcX2:e\7 Lv=d]{A)^D75 $n P;o'C,} ;fЕԃ,vG } S@g$U.÷0M8N( m|.k\]wR"G(H'C-8 S Zv0)6 88cPMr讪_5rKe=rR(ޮ 9Wnuݩ)(`11Lm)@y P-ĪT sғ74n"0-&ߘun|,WR8^m^2mԙjl&`[M]Բgsݪd +X:Wv%C­m5bU5Xyp} x ^umk{9#vn=Լ_)7sk{!!cngܕ@iwMv_!]Σ!H#t&T!!b3΢ {ͻ kۅrFkbz#|cL +Q|@v:Q^tVZ'1a,f +_ol #2!AY̼+az]eAOi\Gc` + xhU*M24!HFjmBt7sN<ɾ ʍ:kH}eon_$$59nh%hrrJ"n΢$꬛xkh3qwB8::^`<;6oMLE wit߱єhMAC0;i0¢s%x]2ܫ-%OXߦHݭP0 +R5(+L@a욕D9+'Ԩ.6z^s6g.I|Ƀ:7J +ӬH܈iV%>>@}Z% Sv7e5WHNxNb7ɥqc xCZZîڕbiKǵu4՛%#qB¢YW +]oc~=3Y`:7:Nva]R7>-] !B0#NS6H;km\ۦ*:O~Z*pbZ8UZktYk&vJ.|x9hT@:4,YA!r|`|qx'/[IW r2r]"'Z-bXQ- ';K`X-3#JsDi7ԖҌ0l(E3tɊx0]V$ƘN#+Sl=ٗ9&pַ:He.ץc1.8sęCE5$?+.yVcrNUf_0A+>v La<խSn1rhח]& ө%x +888lн)Ӵ[0nbNAZ[L%]vAY]ھP>)bnc)XlH)Jtx]B3l-|i߸݋͞Cq6_: bkqJn8Szeq]Ђd 'RInN:WbI)?Υ.p*M ɔ6n`vdB6 *d7XHeYHUi_v, P)bSVw0n(!cS̱vj 0zGb,3Kޅ™hCP#iJO~H?3nu[,՛Yjln\,.CXk%TO_>I#cY]uLCn9|u0}JAKn`zf ڜb%W"\ݹnG0Qd$AUW3׽{7\ |KAL}Y-? +SYÉ6ڭK/päRˍv"ݺbh"&ɻ6[^W7vuhR{vE9H |'&ucr +0g +Y@T*C䳢oORStLB`kr)n4!vDŽ/gʝ АEx+*ۜ嘼F$da^PCjfՋ7ԓxP,3,%Wro)YY2q׏ TȪXJ#osΖzO1:M-Qf. 8(lKqɖ%vHF}BF$6Z!H["@SS붦&bY>>EWPKsEb,hLS6;Eid0Vj 8Wv}J[GT.u%߬ڮgg56R,F®v9"$jEv+y}@,0!) =/ 1D>z@ԓt1_tE' +=9ZYB^?3zb0"5L[پ*XfL{8bw*$?!lS9A@K.$} =H~F%y}7Ƞ5Pd,}N^5_vO\Le]Tp?93mЈ|iob9y>RO켭x`+CA1wj\vu՗)m >dF[Uh4*"kR$KdB:ogp%t;]ݼlDf/NMU{o4~lRavHj 8(9f4ٴ$RD)c/r# 5[q#P]Yŗ ٝ8ƆD{Ara:> +˘U=*Ew[oQKIi ,OξY!Iݏk+WQ}iW;Wܖw=7|uB gN fK/f<HU }z?p@"\.nx^(H]Hw-@5qoAHݻ'^:]1e_W[J)R}\W0jGݵ7Lq:6 06T^Ϻ:uoaJd(י)vW5b@&\IE ;dLbanyf ⮫h7֟rcw +;=SA[.Ȑ_F˳ȂVwIl5/틩fLCҸ ܃np8&FF.CMS=y!3'tzK%_21˔ F;bt$/b_m7M4%ICFePDTMTu1~r[ZA׮zzmޏ_b & `'C dkٲ g=H'_nPv]MW Rcw@Q _c`Y֓cL[Ufݰ1;;_hiiD&;i0Mݺ |uZL>%Eu hz|A}ҫ\+33,}F)Ia`} 鵽(WjznGD8Ha + ,.-r]I\A3Юº|1M +#U@?^y½pE]ׁso!, Y$ +onCgo'Bc_) ˂?8pqH^ p/]EۘK[,T +Z$MIg:LvH7L6E.n@BndJLJp]h$iW'u\SU|9ppn].k,M]qW AnB|a)H&| L#/5֙E[͂|tm>n5b6|ZC]sL ~(&ꮾk2cT +앺/~іq;'! F0"A{:\?IX#yD7Ə/4[uvP3Ǻ=9@Hz7IHqp5C~"-;Kڒ=u2\KrU+/td;Pݞ;y\gc<*]E q(e0C^}NRvW\*jxtnM%--?.{xʿ;& }\$.i +R=߫(L }{Y tx dծDR|.0W5[YQ(K Lq^]'@ p9|F~d-q@uc4.@IV&׍I&}uut51 &p;RQ\7݄2d jA50F*L hH)Mu[vks>Uu *7 +"cmuc4h-}6 +pǻH ZQ^PDCڻ|i xChKjR%<\SWF:b]F_u X]x6meAwL--G]W ȍP7X`{؍T%i-s緔[@Άb0ęwPM,\[r};DŽay¦HB@e)A3?fxme b +@fgs _:Ot.;Щ۫rBXZ35dROH*b|-L,:I6 r')njZ} \I.b*0z/ͽˇbKa6;Jv[D̺U`FLݠ8D= TF)ڼr"17$2k.ІM"t$bOwuF@L lUչv]/dkUHoF[a1NA z冉+.&.(y.өq J\څxt +&(W `Uv95\`YU LUƨ +v.!?-&Pq3H4k*$;݋у Ĵ7X!mV|Vh7\ء"{/+`@U3^ߓɌ.G_Z<.t$N^Fk0AU+LxkwEL 1k,:/2 Q!Fa9%5t&CЪnh\EC'_MQ!bٝZl}Fx],ECq:>{❉iҫA^Tx6AtMዞzJل5S3d.LѠn5egݝ#ʤp+@jw.ߠ\0 fb9`ř"jc]ܦ@|fgcON5S37HvyS`]t78&v#3]$48*=i75a._ B v LuA)ޅzy +F'vuѩp2]<-?P\-pKoH]}cFߤ޲ǔ7@C>P1t}Hv\tI4b\49QreY!*!iup`񗂾jy#@-̚n r@* 6Fa|)UHo1nQ|a?,bηo!`CX w\<]L]K@;d:NUi-ljnuKHwEDٝi> lz NijgV+m{Yt;1#:<9$`G"oX_R]ȵpLy>T޶^s`Z, ȹ.=c5S %9U suEjKK]yEAEh\Gz. S+ѽj{U}Rpuwu)fpfh8A(0ɐ_n@ga ϧž7t]z|rpFg&LkWXcSD6waw=r{l:āv)\w]`]xT_G:׿3qp(Tv-[PIa!Hpvx処L%di_LwNp721.um C`Yno.ٖl-D +} +b +xu]o"R CӾnT*:*$ZNIUd"μ| ԘJIQ9>.EqnnH/Q'n̄7Ri|OaI^:L?l>DhP>F/wܧ.B_'1#+Eæoh YPH238݌UiS _\MAWXM^<| ۺ$i3=q>;)]"jQa/LIc7UEZ0)O +N񠮬F˺L=3deG!ÉM uuw_$w0|ٷs/.E~y3k'*dwuS`R %ƴ[L Cڍp7:3m +Δ%y~Xe#+babnBw w2{պ?IMD,&&' `Rsr`=+L亂f19g캪RMvN2]p*Xe@~u/uW5dOl:8(˾tͺԛHT¤ݜ g)f 3S}DB#[:JiWƌ;͕0d8IGLgc/DA"5aMkLsꞒ祚Xv7eο9>-3mXW0=bV&U]&e`n kB"J"Q YCU +$+K HX["x |t.D@N-BKV`BGAm Ws!x +"] E;KB9q#KQ#CgA +~t\verL|:3ħ3_!?zuP1aŃ0C2 Ao8y$bJ]l +$2X@7D vܧ#z(AQF0\RA֮-V +n{-t dݧϾ|i#‰mɍɭbG`-==3MEY nx<&^w j[*zYIrZE'ҖmN>< +pV܊eT3hƣYXz>+;  "A0 =GfJj|J;(O?˩*6ZN>ҪhUJ^YZ#hg^?Ng3 FUi1fNխlU ;zU]]Q_\O- jʅ +iz4Rf1Q^|m9U]R(:R-.˻ła+uk _NᅵzFg/jt1y,CAAaV(E6./sz!2&d Mak8Ӿ5`/X Vch iX}zr7sNǔ$6P%a쇧vVJPzRZX,b1 frI<]}zӿ}68747t A4߯KY9ݿiOQn~%\0va2MpOXӴb fj_PյN۷RE&_$= ѻN?oF' +ģnl/8jm92>y >4HZbmUzud(oV7}ytȏzT^5WoW +)&C,gଦ3!6,̠H+zU)V bE`Ng30Xg `j nBJ >0#R?(G,RbKΟ3 n3(sbh懤c\iN!h=ye1a^,Y\NVJ:K+ w q#w,=K# 9&ņB."N>*4Ӭ/XUZz=FO=Ә}b"uj 9":}@@'0'0b5MQ1f4EZFSՠg6#ّ;);h4eM4A`Fj~H;?*R-hxUH6;oXY۫TTK (sA RF A0l>ۑǛ#s8X9eā8FH6>' (UvnP|ٗr%Un1y崓HmT߻뇻a{7\]~{wn~_brQ*&("F4= +HBRÏx8G$OnN"ӄύfJV^XSb_nD'}9i_>9APrbmAdXXy,W(Q %1dir7v#o6>+X:ݝT2GXI OS3BZNY귫[Q1C_-ϗ{>g7EWQN-K͎ Bخ`5#ex<.XjaŴĢ1UlP6Mrcg#qw#o6Kx\,ux1A(8 K !L,+&iQ >xL&X,\"wA Ӭb^1]W,˽~Xv}iAeA ==}`H$:=lh'﻽?(\0kUI+** )hŨ90#+%28ܝ7g#q6Ipwp= 4C0` Wa8F=̛OJU VǿJ =YڧlFhv2'QƢQ hMݠMÎ{Nӿ|+2y\k554"&  f8{ZF64IhX~sIs2Jet쳛iCN*T @7a&h"qX78 . wz`~pz^)}ֱ𓐋Kb],v܎x.b.e$w;.CCBE!2d.bHWbr"FXLŒ;KNA.#^R)nv*c1y{]iC i<z2'i>Ƽk`rkXj~ g(BZHiQ;^. l g S +  5p8^ѩ'bOk!8p 7}Fmm4;\`J8a-\W`VfjiE=L?P z#iBX4qFEP(ЂO$QIR%L`r\&尰0l4B9rS` aцߊh7aqv^0fEnXDO)BRc7ާ⁆TJu{brO1Ӽ4bd'"q@Vs'*$67'!'vwd| J~ZD#4mhDox,3`a!ˉ 5D K[ǫivzN^c2f(UQSiEIҳ3? +XN4aA!!R{d4ೲjRஊ~u}٤QϿWn5GafгF *KݰJ=oP@6㶍[G ?2 ++%I@#Urh1căbRbF-/X5 wV.k ++* *e-`b)r0TL  eXq^S) pDcjR]s(3{̫A\P\m&x0}:MiBF}R7h}]h)A_!iQъ"j|AX]TEE3=(vam7J]찍6h븏vy;nxH.$ lP6k- @*B&fJlzF4' +!A.!?, 6htyQ=*d`c`r@ + mRl,{!@H{ݧb.LY3u4wC`>B'̽/6?yOUF^ ΥDWO +\u$q-7nx`&+w'=(*#TBu$EU~HlD:Hj\7#Hw>w>#=ݥT9+)xHV$ۤ> @ +$ $hW</#łx5Wm\'0労EG B\׸T ܧ{iWխU끠^]IOkK))V%*T6δE&^]э9K.$r;@miX४UlQE2G%: +R;{]1Ҟ1QМw_[/%y㏐_ rKK~봤F1F͓: lWmF6OɌES#v83=bnXĉ +|um⟗ p0`泆Į}F  v] +njŠ0u%v\'F+ a|=IRL 7pnǬ5iF=56.ޑSDϋP< +ZF]'Ⱥm!ڛp-{h݊k7LDŽ9rvu7ԗ ”)sw1cvJXLQ| H9=%.=D9K „ @I]Fv1eH$"iHGWf.r2;.0/0٥rDW'>s Nr)@nlB4_}0Jy%p]t5 FCO%6&g]C"= +ݕd4o@|=g/\)WK$KnqfqYB5Aх͇`Fc'K/Az.9}OoauNd|)]+:ԫ2Yt ά!Ew={ai|1mh]߻FXLs.#9֟@m4%Td'aoA*J~v43Hw~]o/*L9(.8K*L1Jla`>׍2R:0nFwn/>10K6 +*o6E~Zuq>]Tn$C#9cVҘ%~;#K]xU(nӘ4ìrMbʐ`rKTg|ep{랛36{zWOƉөsW+NBS4SؾH~(;W :^JEo1PYDnG.W p(FC<\rzy"wMtM^A)JXӊ8}D@Xw.>-Sm0 +8uuaHj]: L3ة[cÆǃ?hSzu`.yl^kx=Mѹ. 06DQ}]iş &&Sˠx,:839%:_WzJY:OW):& Sܹ֕brhXǨcW*()}?ӛtL3ޤӘc!41D(Va(t W2|.-T$}]-(8̫eahgwx"U}笟?pIw󭁧n*N]N]Gχ"\"~:)AX,Ez), AKaHnE}{\2dQp"z3Ɗ{@L$)H]z8wپ%!ΊNs_ q+.A"h}*^4,hj2ߴi8[wJ>}[s&ߤjlTxKxtv$JwUDl~z~G-Yg:fHs""{ AAnk+gtr\pu%ur _zO-݃Y-dp;pG*_'E +1 ZqXk. g#Vt1[kcV@U qyX|Ukk-v]z0/;pI+ꋝ_0-h"$&3.R>0ۀ_>`w ,& +]v&”]L.=1#*Ps;ݳ37\䣃{K9UV]x@s vuo:vMq(KލSGU'ݷ\崆1ֶLUJě1ޅ +*b΅JtvrrZ e z7$yidU j7])v% +:o.7暆|޸+c'w|V_gǶ&v@I;ؓF`0ۭ~ٴ^@veöjl,(m6"b:t2]o/V :%1xPyRG~R7% ꑠ23-KDA1DCڿ [I&3ohq; n_M1nF?M;eZ/ֻbu$= &>ݩRP(څ/:\ʁCɔn|J`3 v&%fIYDJHmaMӈXLͮ+mT' )[R8ݜ>#P c.]ҮNSZK%yj0eu܋>-ve aFbZ>dѡrMpU,F]Fq0iF*;"[%Jnu]ʎ gA^rzSXyCēE܅vL ~Vq´ԔAnzl2Poe^$\JȆ8JA[XR59{~v)~E3β|_n'!d.aܖ,uǀ Ϳ.MRŵ冻˴ъu[.4uDnCՙy?|æ\w d1LJWKtJBH.uK\<v7rD\ڍM&7?+1Ⱦ.}xZ^:^>\rVDٝ.|($Mv/ku'  +5A2dѥn#0dڧF=.$l`g)s94Eɽ\+$BHF5kgnؕ,i } wFTŧAQ@XPڝ 6Cڼ8[TѨ +fڅ$]>2jn2W_̶\"cWi\3p>kJ1/nM.ж*/Y~h&Wd3y5/}ˮBӶRǣ5Q$L]k(ekI銩-M t.v\.a+b깮8ЮK n0ie(lSbB cBhS6>od6cu6xo)퀅L./ŲnR8MKQݸ9GSE?> +S ZWTiZ +SM> %U)gmYwJdLխ @D +qVm IA}=O*̇pPɿnЬÏ뎻*meC>>-$voO]v]cy7/I|( +ݨRJ{JTu`=r%FheX@Fh Be(\{'/!an4R!eZ/-" s98= u_鱼bSp2n@XlW=fvWv;9L]6fK*u-jͪO2J,)z;ׄ +ҕ:LMK)4<+U"'|RؗU:m%E'sMX4w)RfSs3k)r;{%{R(RЩ+MW]QV"ƺF)M2[rK)6rԩ;Ч]f2  c$h[ʳ~|FBEv{0ͪv|gn"v?v%Ԇ-۪))rۈҵ֦"&pp\AU<0);NwbU|b;] ;cE+ui.I ]O{cj]7p1S`(SdaE">"`8qcpN0kN:Sռs8]Dq- rq"$!8G@ kBJ;\qX.LWH+oI]GB1)w] om]YJwVv=ɽנ`DžAEf HާtZt`JZ6ddjWw-sl4ַf&|z&g dyl@]{Jn޲7NtӝHf٫*ɞ2D4:I]Sd)ٸhEp{ ؠ\OtXƥj`^ݳjyiu* + h)B#&;!)ք)\OLmVY=+{2sED^;}-Juo;xkHRk{rhҝRVY @uk?ޠu_oPӮ{p{ Zz]Saz1P8.Hg)zfu +cu'Sa&tt#%S$n("5tzVؼ0CRFY)s>D8!Z1ӥHQOEAXubF/5׶+['c[ ++h\8Ur"h*X%]_Leݺ2]U5,UR'. i4]*` +7\!klk12i)pc[7` +D S(v٫HY+ӣfuLAlBcS;9(uK =ҤPrP+Ҳa׮3UT xe+LS0n;`p—F?{1M-]; 1Qѐ+ߩȒ^Yǒ755d8y' `Rn-ybpX!$I}9D9#N#-7KAU0L`5Lq +lo9);}i^t=ɘe݅nmM(*"]Y6^K1ΠV'o+%Q8[&x# 3ܐ ,";B> kX6[Fݔ"g_Qz-{fk ƫؠ.ouOxEd gvѰGG3EP| #W/&d0so t]KZɕ\ RIиe\Z6,`g~[ )[1&V ~Ƀ=K\^J V+}KPO.s=%]BنI1c&k]1,vï?CLǬB;EK|BR"i_kE.uQeù{XE7nu*v; |]?3W6$g@JI}ٛzS\_ڝ)yZ鼩p`C9E*|}nH53W@N)1p])y /q8ŋ^V|Vs%(>^eblPW;7FHJ]BGBIq=m +0D0ZUn[H˭iw ' iOnV^'im`YUěm~n%{;Q42/ovKNL3 c׌ћ0ܵ <3]b +k;EneuokJW%7N'g~xM.κIf(պm ? umr)İ*K57vPVZU-G5="twK]Ĕn<)qﺕ<DkUAh^w[L]e*Sb^agI<K{0s3; +bw"ۇs>0 _Y)|P E}]0^\.ā1Yw>aU6{7U;,x{Ys"gY3^ Ɂ]. 캏+mk_4("cEx$d_7DˬI + +>H R' +.s*GkOG*;ڦX1pZ͙YɖQOR9.+ %з`->$"]?rAߐ>v\{b؁^*h!RHӥ~u+ ptJw88嫩 *Lnpdִs ^JUbR}%t/.H0@PYxȝRCC +Jח{ +iJ)aM)5g-#o"gRwl2uԫ&q).AL lg`zIZ}k Pɥ2mvK0L:_&`™;-{V܀L oj|'_ bWPۇy8Jas1AjFQq݌_T70?q2VCK;CLẠ]37 Rž.n|JGZna”h&Kꮆky@FLJw}k]nb)%aGgKuK4"Sg:x]Z6RGb9-6J s<-3;T =2 +<$߹GSLw^qߎ[c.Fߢ$+ApEp|\C`y.Me/6Nғy8IA~ָuFLi?D$~w$|&E @9/^͵{nGhi#bw*NJ;+eZҥ58t,O.&)9=53Czuk+*ɂRЎtW ;[5nJ`K*;v&(";noxY(JЫW 4IVŻiQ?>$}q}7"6 GyQlܲn'n  Q ” Sa)؎0S,>1u-wLQ +_=҆PL9xbPl)1yຒL@svmAXw좽IWM뮻׃"8"R%Ib#!AŮz|,4Nv-fFGjڼxk't7߫3}ѕ:S=[[$>;SoɣN*Ob/DK<{r.[mRGsR] },žv2O-.!3Aʫ-ۉL0CY&K}A?pa} +䈭)'~9ù-0ntkIM ]4[]dJi]g.]5{2{yWW^ ta~011ELAw;+CTAZL- ut{BP<=hN:9XWa_@OlgAN`=řyݗI_\mu;:ʹy[e2O0ZB!u6Uɴ϶X +h4dpL30w)9.l +H,6 b30p zMOܟ`g5 $6L7'N?x yduy; W5Ոbއ5"ۚ^Auwv{,̵{hNAQK{ +5?!ŗ>7JMlV0jj?"#eU7ph/Npsy;C뎙\k-ǍjգtXe?[ q ߳뜮cӌ ?Fʒ&r@ج +LnoҤ{ 7<3{n|_%ws)dߪ$fb,QoZ;ڬ// د8<ZDŽʢN+ +C ]ďuow5-wF& 4]Sa:\rDcֽ N !xbwu$6uu%.ʺt%~ѹnntA~VUU„1 ]bn>Gla2QvLuxbS0 +vu~+#]Scmgњ),S=|-8K͐hvluMfrB0="_ZKrTH}] ev ]6qn,1*E׻K`LPAMӪXH&ZLXdr-&\7D] Oʌ2̒ 9 ١ཽ@FAryiǸ%) O,iw]4Zi2K +iv9ҫHwvt&8HE昨ݳ`R@AڬVE.b<%`aNpz=kA.9(ιUhޥ޳c "Nqg#HaPϙK+rcah|';v= XFD={Ewcc+亢P..&%P0;H@/㻴{-cd_PCQYJqѺJLoWL7FE){68A]R>br<?I:yhq0a`?w鮃ŒSdIJ[d䵑}ё[Y떤rܵ) ! +"Ru)uvҪ"0~dvo]Lx!=Z +Ʀ(RL+.LÛ.q:֤$вKO,@8jbW*L%&1S(+L0asc1 d 6ȰnFb 4ϊ.+`4^ ōnQ햿R.6ꥶa 9wT/p*UDU? `ہo>n2J [m0nڕD-d4G:&MaqSާwu(0n&CR1Rhڹd  +DPl, {HBt >C$6kKlamfx&Kq`\jt +RΒkw<>jyR-j_!%_"|{]cm1tӨT` ֣ +iKE"\i^؇XB_C(yu|\)>\7gM[C2녇"c < g]}sZ o^"nrQD5*'ϖwMGC0AWQO.c%.AVNww0 VnۿdIZם}&0Ǩ]B%]č0^bVhD\[&cKDYN֯ :iڲ&k/ם3T|R ITٶU!zZۉES0 gbPA(GuSC)>$Mތ0Ӻ@=…U}l ~'8Ty aaں]:=9*K.º-`1w]-0'=٥#4q'Qh೒^txdlfFy)gݪiל +Z&.]'p0"tn +-`1u͙¦c+FZ,.X,f<`W"8376K=KFr"J5#S<0@薍A{xik,?o6۫XHiXoޠ(X {וB.xFl3\g9>`y^ٻuR dmb ?J߈>须MguIE: ][g]Kys<^])"_wb>#G)^.{i^(O_I% lwUܼ.͔֪p-( SpK(:o8uwm\r:/siCWAܶJ"O ! DLc:ȇYv}vyef-CfDuGPִkI/mior8%KW +4!g)\l:o钧nhg b!MݚS`H"F/hQHL &Sl0VoMz&1fߠrSЬï ;q]Q-&`>Z[k'O߀!|`ٺQQxp`dwYFs4t15K.jJmsoZ3u)ŭBVdzTjR@%=8#8GU_: + 5n[Zr,P"[;o0`LeI +\fRY$kw\QY9+niKkx3u5-#͓\''u˜Ml.U$D +45sU |+(@ |!w:V|[jlQX~.Vו.`)vIgZutO*bn%BEJ jRi&Z_EUز*"Ȕf>y<'ÑL1xLL:sf)UXQ0EJkG fW6y6yKuj_d?awh}3@Q^Lg6`9uFpdK6 +P:vbS{bg +G7UkdJͰ[:dIW)u+g#հ*Wveg[ \}$qb I?&O3<~{?q݈ ھarOiNZB=[U?.Y+}>A.a_ ./)j&[``S(tCd:b 5 5(L;qo&a}n80f'm=ҙB+L8[>Lʥ v u]} [\ ,ZBzσ$ֆB |h-{Xl&Uh\&b8g^ LYFDi I +TZsV&:贳:x &~!1ܹ7eoE 0sYv]JskㆩhGB>\du0 wɔv(BևOqr]_?E`[ZXP^)qJ❦Gv6]jNNsi8Hf'̓(w(W'9Cr:XlT KSVTjyPS}-`21$iJp)#;Qs4}#;&9XN-!i u@iQ;Fy%fLs3 B"b,p>uPZ㔐]ˋ+4B`_&1#Χ%J3Z+Ue᫛e ELHa{;-_mT&4)Xl?j+q :K.Q@I,H3WH(-1叨K@Pvuu W_J_3}J(y)w{̉xw6(Bt9أ_oI+;rNIbك/XrHwM]' 9'a ԂGU6>)0{o&_`Q}w)s)d.TysjЙB?}zy=$+t1%r>i` 3x<9@:ޗks?-EvϜVcu b F+]]Wz`~"l.<n~]K6kŋ{)4E6LD8+qv8<MW\kA%J QQQTiSԼH%h^Zwmlz|!aB 4qTٕRP-yn.7 +nHh ?_7[>=vm4u[9C2S,~wh^KJsOLn 󢱴J ;;B[ +•"N(2ԧS6u[n~ڽcb#p(YK@sik;h;R"T_%~WoN(m:)tH,h8s y'N!4B蓉2<: /IR8JZ( S@8MrWYm\t5xQLV"mS4mQy8m0!A}p4 z3h*NdJq?jH\.R&^1S`0In,aـ+弊I  , 1ǦrA)TPE0[S`R&!& S4˅&v!5O4D.jW39Ą\_ڧ 7u4uq?@mKZVo2XB.xE%+Aw}FʽP1!xՌX@nBLt `p- +|͹!lJ-.`te:\".vŅ%~O?{OekQO(9O[za,I1NN_mtKQ{̥1}ۙoȴxZyvH[4 +gvM yrtl]WwAKEbՐ_1,0syc;[3]HE3s v$o]w:.Vòb`GɏSi]npXn9EdqE1eiΧ)(t/zF7v[eoTa-ӨDLtTg+,`4Z+4V1VOrk~\5e.~ǐn-"m^DFTb͝L^MF@mȡԵ<wB>:n\C\ɝ}! 5<T;T!)7I奄佋Nݯ,IKΞdq3lEFE·zȗ5k|U6]0\WmPWW{ФoR#a>[D@.aj([l̦j|`u `l{%vkQ)F,X,c*Τ϶Pˑ/]ݙ]aĄt SZN$av"uuYwow\t}kJ.F;̒.ݑ}J ۭ?>>stream + gMO^򃙽A̺jytwVs,xJsVʱ-s`f83t Oe -%:jO{xxmHlw7tE}g5騘@pu5]Qvz +v)aI el(;='w6ee̦OovBQᅧHf+gX X S ϟ ԟ?Gzjy!@TxR5 ќc~VfbVXJ["- rƍ:؇7I ~a/.sEj|m Q\䶝R$w7OŌ"WK}~CP!VL8zE1(!= +])_vhK"--$7Mre/[> ͐Ib"lkNaPݧZ faaqҒʖs>Р3ʚ8̏(6R)wzNW&1NO:Fdl߮"" *#;m?ꈆzTI`sX;T_U[-se%i-i%m-i1ydZ5uZy:T  ժfՠ%_VAv!PC/Ӑh|./hnzM"D~qadҷO;0lQ2)Zn7[mւP}ROwy_@v + +xԤ` PͰ:ުýZnXhI "Z9zɄ$ \͘|>4sԊAm JڱkʝdzA"f Ų4;mBT=,XUE.YM&ȺNdu&3aYL1VFE 燩ixL~,1/jsXAH 4q;^ؐ(I\>ݞBؑ=ٍ'Xl6mTsT9Y!>fL~\)JA%2tVVfb,$R VU jƍJQ͸U8LTC*b/ZvTX幱h ¡e^ӷMG*0*hEL<&k~}@?!Ae8ODZ)W w氷DkP{:ܯVUaU@ؙ椀_ڼ]^k|H+raU~Y 6Y65Ʋ[.}:gs(!8sF4K6e`U{'۝P'pשXLIjXQb-шm-˼尻i8LvD ϴH+B1F"nU,"r~^&Ȉ,uɸ M?@3 +)^ywp9^Ո +Žm1gmv:4$/Nn ?}B?ڒ!Dg bf?˥dsop| 2J2(֌J<Ww>j@.?^Pxɞ/B!ً³8؋ܘˑ:WB.i2\:T#CBtBWJJV +bϾ,J+xwpnM +,%<@go}g-14ի$fbJ +xibˍ:]qRrtTڙ*qH8N4P_D(= cVYL$5B2R@S(Aۓ|[.͞molƙjA\.򙪌 &>kU(pρ⺢|gqߧ_'l4 vQ\ݾ'n +)ՠs  +/)$"'PwvOhy~jzX9,vt7 NA"R՗dcn6zKJ{pc۵䁣 UR (Q3^ԎJ:P7[mFaraFZDfL=2NוI^ْK922+.*٠C0$mO˞v Q%BtӫWkɄѶD[|j^DnfcY I.a)±j/lH :DfXOTVH[Gk!R@ Z(y{RWlI|x{OgB^.'5ǴlП TD88AH a̾vA͠\0V`m7_fa'XӋBcw!Bo1f>GbF܉qAq m) +hH]xQ3u9夂T~i؋՝2YqdR +R@eDՐ@3*,}7eOOln,#()]>}2z9q۟ПnݨУdBLVXJ[愁C}{ [}Y %7N^L:X7 PjWTC*g/w]2ijd xà|Z~l]a'4dYS)0g1x,&;pX qW +ng.31,0X uESu2<Ȏux b#gyKh0 Ք&}vɴr,":<@ӧcA2iK¬7bB0"-wje^oJH%$  +ԣ@`i1ٴg7XJ3&*5A' JvID=:AhE#]ԜL,q߿3ˊHH[bńf& A k醝&zfibE84}ow6zCNCunWkۡ@'F͈ Z@+":Lw9o uhRrRMQð#\LVhH\YO<9q9j4qTЊ:M`0& *%x%,y6咗'yW?4ɐaj8?_L;L͟J5$hҁA +ԡi!?+,%uMG> ަُ ?aה\ɲpPd|TfJL}ua|89r4d,^B14C_b97&9+#󙷃c/ +]E4(7Z}B0$J8),d{H4h(@%DLU @Q]Q>})@Ns}?˾=HjFwz5FYx,py\Wq9"G; w.0+"'5%I`PlæLrӗ]D! Shh0L;Loה9,^_AB:Q 1q5Ѥd ޤ@MۥRp:AV`e>yEc$3ep`jv>;1( hD9ZNNp4"/.rc.i6t9 :b $R0rg˕J/gB)vebV:S^;6iF+$훝njЫL&rY?d≻rTw4âA rQ!*o~XŰh6eT3,,`F@xbk6{ ! AԈZn]WR;0|tMfMB|5տe`T9 ( Rld1٬埪hF!;E.#!2 c`iMQH˘RX,Kh2ledô,%-}h2kH%C{UxV3(\H4Ɉ ZM=G+jE\-'j:H Nq)i5:L%S)azlHbؔL'6ŃTJL{ost$Ò2& ֍ +\ȏ>ŰXJ,&׋', 鬬fbJ5 + +ja}߳f`]T>G4%dFlv3<./t4bsu5^G+^x]Xrpr{_m_U^VERAY0}K۲q +I;"TO"ÔY Bx"b]6*zA*3Zd3t9ra&s>Wk<_wx^ $gVy߽_{tv琂2,&8HInQ':M_)0ƴ`S>zq @RLSn9R`uFonvVNj21^'†UDA:𰌈i5`WG;X%oO&XӍV҃Ҍ EpX,[IΟnk@tا݉ǙVvE!(B +j-'L_-q*$(X/FِԑUE5BgBJRg:wIͤhZ<}{ӧ7ثxs{i, qx<G_-T9*HzӫTov^ln\;$Pӌ5iTO{&XN<9V "F<@ +4N&,,n_'DrU=0e`U;rqh>>i3 2/ 8}i RVﶘ,+(QXLNlL*(İv P{v|T_JOw U*GtvWFYL5A.7L(=lDabVr؉یbE0i%/!U +A,^/{wej|Ɵj4QFVx߿2MQDӕ|JeB%.(g:ѝӷ7{ٜ 1Vc-Ͱ =-JndZH5XvA0,$ IRA%J>#!^=.<}ӷ;}of<*jia1,R [mfŽRjƃA4xu S5 pwKLK (;~LШ`!u^۝^fTN,(j<GpNg~ 5aQp.<N .W.[N*r!|ߏp#Cӧ?}g{6ris@-O znШ^UAQH/CoM + ނ7WI۶lIYM0=\;$PVF/fYn{xh)J@1$yGAH?3 u`|V>$PeOI5*Hw^T?e&t'PrPz9M=Q,09:pP&Ńt! +ிX)'y{sLHIFEuaGBq貔i(湱DoL" h r5EaM@1 znk($ iG[x ٠?}zӧ=ٌ*#J,!d+ed$ @ah|R D K#@00IV47!s˷>bB}-֯*wMnhwj=^Žs⋋AG+?1qQvM%Kbvj /DE6Eik&%u;T&$*pV-So^ɬ/i Ej[ ǕO_%VF1]Wu%7vK ԫfYw %Xk% *[fI"2vMZLw +P)ծ&,z8":<.I`Age.՝R 9E +&Fݺ+vs3J]sb=kf#dP$E<^I~fI OrQa!V&% HG>p{Cy20$B溺 ?Z".L`C]/3]Eo|ƒٸJzȱ6 |jhxu) )f\Un+/{~*96HJf]cf-,oA?*hR좃 +xu E,BA] ví>tK-KxY8 +a1L^g*MP3n'~Eb=8NIitIB]P 0/8u' %'?CZW~H SdR9yi rD5Ӑ8kW.38N-[+DI!>.*G.|ȋ{`kǒ@XHU ($lH98ҖgSz I&a5kKT1X+[],S*txy83޼cҍn=`""vS f5z])9=vb깮 [EV!AЇ*7Ѐb]Muހ|]p3O>9 _|̘ɿd[ EtPw#"MM + yAKbE!k̴ P78&: AQZg"!$th) + `_RQ~/bYzsu3P׍&oo-n]cUy VkI~phLl nx]KXFJr]cdM|j62?ΐjt ᬘ{oIץޅx^DG0}yq4fHػhu ]7`+MQS#hwEϺ(kss.=D.&\KYNq5kMn&3SAhˡkC_t]IZ )gH鞸ix?Q/0\lɖ5@&K[/`M$-BX'?(EƥM2q+s)xMʒj _d")*ѐ|C\* T" +jg0^ /ڏ^'vxd+ە1iky71+L;&i7I|>eb1nuJ=u- 9EC q+ЮWurݚē¤A{RĊ*2@zn auc5cajb\@L$_7i /` +p&Ĵڥ)5=_sݓ>Pw]2xn[HF`:/Bv +W}S O T$nk5ĕc61x}8žRⲮt?4Pi +|5Ӭ_ 5S[W J/sMe]R$ +QG<䑗4m|մ+̛g͈2ЅۊŐѹrհanҜJA-ROuƥ/V|rn ߠ.v{R.H"uM !U3 a G.MsfÇ|* X;8EuE!0&{ X>m +~Q="8_Pm 8K?+AC碲FA=Ugʹ̷0һc+{xZ%JCJH$8pg +&m^/uՅe㐋v .]/k +SZGv$nS2LuӪ.|}~⇤UdS&g-TY3J3L_g +0w)uϴ´rzN@ k障J,u۹h(dɺUA[s`]. t12|tKVW6yA/We?k\Gl}]$dn/8c_z% Y."L mbܠ4]vk<,NJ I)!r?o?X˦)cSȹ&\[ܛg-R R構Oe-!請Kޒ*q{o),uϡeV33mL 7 Lҕ>a8?;_כbQ7 G}ݿ&F7LgS:#`vnѠ\3J;7-v28&`4?8x[8GY!J 4~]Y$ۂT.e}rXJt&;t3=zy@tܧ- g!\9-.6p_`B,Aᶉ*|7QI>ED9rkJղSAWG(m +_H^VdOzZpliA՜ٴ)gz=%βh꺈}XU$^:dwf[09gJHע'ҖN DKeMJj|L-U +wm[,s$Tqz֧BY Wq$\Xovi5sСs$Ev5Q22u{wo;3݈q~ޗ٥V7ĿX o\!`@W_A/bk%]yP܂DU݂C./]N@Ti7icj%ąKёt° v-B YJ!QvѴbLzYL6"O.SfeUF  P f( +@+uF*Ҵ%)[L?,+"XqMMDE< 0hICmecM_x'gn伔RWar$(S@w46u_^KQPĮD@EWCI.6ObzT]n}mNIQ 'nPR0\޻)`p\-0/-*VD{ .LsppԼH,vmIT1Id)Z", +5K ~rnc%X1of\ LIO1 LC|DKs[e|b19gԥ&]'fѵ/36W t)F3wjpnko6?m+d>၎/d}bgCň:["8Il(b`4RDإ1(HY]j9|NPhw +tb\Fε +;jn>%N.FAx(\}y|tCj +!٭^]!QOd:m5gt㕴 W6Xo]Ldm}M^]h; .Ӻ& X/A4lAJTg ~8Os͢BT\&W)ceJhzٰ[l# g/D~Nh+"kjZpgLx,jL7p?7XQb痂sW,K!OVpdv]GLiwL>nKdhzF~]%R6.chs|x-x<tStsy6e`UKF2({IM#ȪY 5Q)$vU0H6DW,Rd;A00HhACV`jPT~݀ Laͻ&42tq ;ҘDjHK#S:1I,]{%[6#FO +$O +CHw]7#NgHe$ݞ,.=`sx]<.}0eqw%{nmqvB+ ෗|ℿ׈@x^kf sIv&/*)п0ufb +U.!l.^arrI^Nd0#}3{,y$חD9"U +kR\kVWTċP~7LUᇽv?RwK7.oM#*M:HW[=@:ˉ:l_ +DW=& ͪA?W`=tA9$*dN} kS +½anj" +]2T.x8LacԲ&VWlQdb9}S`ei(XEVQtU jgm;!tipiUKrZ]O4cU7m\ڥ$Ve.[st+r0A Aݻ-j׺I MT]x泄2聇%vu4=hLR *_"q%y.])ExVa PN>lceL E֌60- .Fo0 E}Pr +ʧc] - ~LÄ˽~V!o4LRark͵&b뺟̻{ S]T0q(i`DhڅvxeN4݌n*+:6s'yi_t4-h0VrcW»]ZZk7Mve|"ϒxnCb@(IqAא! ̓+7Yn +;Lm(JY|.zk Z-—nJ+F+4\Ģg{-.㚆^-y'*+ndzSb[F@q52/dLUtHtr,Hv"\ΥÄp9aud:yLj-Y`L5/h O Rծt%G(to"hWCNmv7 +{S)1ܳ-Ev!r9$Lns,%"&8]G~|ɐIHZz,)™KnZ(|V XO:]>ޱ VP0|uJht0josug g]7hibG ѹq]B1Օo3LI %Z?iLŔF YWEe'h u5R%vZńHI *Q^ Hkka:J:(! Z*LyQsp\ne,!UG}c[cshЮԝV5k&::v .ޝI^\$ pNS =AN._̕5>8 ѹvU#޷-~“l3).. r|-1/ SXeN[0nDFg"RحRjTUʼΎ\D R!߯{8*ПAF6q']=O2PAE9dhg2/pP:ڑ}hWu/[ YndB[1t6QYt[RS:]C|Fd%O| +ӺQ f ϑx1Luy6j Z]n[7I +D-+g:vI͡/Mwj krjs s15fh*jwmGw[eb.L_n7RE ?[݅p:2^ա(vs=kiaؼm/ժ(UxY=bkR~ySX*JuR=WW-m3ų_~]7sM&&]δXn|\w7H?i$H +f(y@SV@ծM>/X,F`Rcq9suAfDvsJ#]{ ,Y8ٽ[gm]%D̫st< Ɯ5[ٕ&o\!Z>{gaKᒞ:(0tFEAz\ $Q,ዡ f{_Ybz{ NlNֶ_Dk(3zw3+Էx0$#Ö8!juIo喿Fإm:Z CG#Hu9W+qV|.~&rŠAfa")6+!@6)kbrof:BʑTa۽aIe^|`\5`k=ZueXEܐ4-.D›0N1^w>?VאQ*uI%_"pW4Hۆ @dupvg4ݒCeLdpO`\BdmxOr!׏pO!DoV1^)MV=eZ"33 >VYUeh +ieU2TBܡ-o y(IRtN+H*㳺 Kݢz9wqtc -K_`m3\29ۆl 4Q3{Djr + *]2b㐺[ْ\_5vcDj\vb]݄[t7[{:oYw"L=O횣 +DVHwﳠȆڕ~p \Da _Tc Ț}p<<$ +MF"`:]rȈE=c0Vvҝ{?r*GRSj+!׆1.R +>~=>@~_uj.-5ےUL,5*RlH0͉US  i|F lx^$ؼff-PIo9 jD4[ݤbc%f؟;vEIT7cU['.kbo%;vP?8Mt'i[%ـ7r%LSLQ\W/>w$Uq/56O逫eZ+˗V+88OdB`|ZMݐqm{~/hZ"bVR;uU8ȟu )ac7|A>/%&f:sLaXaS<)kn1]YvrTj3$Z>aSs_3 |ݘ\=Ɋ>ؽ$JB{TuI&7~MZ*"x,k(!]ҩ]]e! 6!}m=,rɟU */nZԦLw7VI^6i  _: *M;viXXw)e Kq3pB4|~._R~}v+$oS8X^z'b4ki7)s+إJ]{K +6p_RGEbV:7#IFE' e4m=TLhg%<`9캮Cydz#KPT(1/K=w/|bs +uk7F]@ \(Ds]țp=~2DbW-UtYaN^1hʊRl0o-:!'~Tan/䍏ER.آ#+!&v#]tG荫G8bjw.MFH4McskeYvv13S84.v8ٵ|ޱ˧VPԂ S'A%–.;𖈯;&/5#˘Pw1`9K]nqLvf #!?EKMr1W6+@E2?w)DX qoly[\BV%':R^rLrRadaSr=; X[yکO3dPі0[} % }6R\;? + 'IUaVcDy4Dz +B6~\v.kOкOl4cYpG].%EFFW$UwhguUAK HAӃ"%!mB;fHA^ *^=ʼnd˝Q'p9tsE(^tU`V)3m"`+%\jL0ȓy ~${[|d<#Fml/<C+ EKt &X`05_\k Q3-$Ԯ˴uB0)ЁK.0v(i$:BOXt;|(d[=+M1C~]ui"#q&M7]`bgߐub3}Ѯw],)z0MLIhq)uS6Y0.=Nʦ\a 1 ivw:M*\`o}2~]ڈR['iYXInO% t2ko;cf:"oE~)m:L6 >'"=q!VuKbO$T6_o6afr[FCR.}nW0ҭp1E^閠+ţ.$} +DIZ l| W&">* Jڙh7z 4) +] +e2:jx= +<׊*@z ju]N,Qe? 3/]_]ldʬ/09#_8Q $-3Ké67 {!+>\9 +чSbgU1^U +IIgL*-㓰 ! ʻCwnct 5g +!fݦ]ˣvX!(. \+M񀭳h)r07]}ӺauK}T权) )CawA5/5alq}1v{5t-[ ycC9 %@ǮqS"D/ECeu]?xIثnfWt)Do * +KzlQB)\F/_ϩ"%yEyfkWc丮(2meOQQ/[Zrb]Nem0V4Bg.2Cp + =%R cR +jPVß a*8Kdx$eL.7TMҵGFGq##军F+pK !EpFˁ2>֒Ո.uܮus1 F} +l9-;sK^[mvuNx5Wv`aYYT,6BXzj1t Goaz B_.19k}_[ob2B\հiLB '3&[Y|iDzenc:)bHjy!EwzCݷaS@+F8!Qy]jKΧuiǜvK1aW'4n!o`!&Zҩ|o.Q@7#X6!~Jne Zt 38%†J!l\4StCW7P}eD G݊斂Wc }ي<{2L(u{IL9jBT7ΤVKl{P |o-Au(7xv{»sϥ8Ǐs8>3rk3 9t+͢2Plzuػ5"”k΍z=C ,@-56Kڷ!0"-F!>dM.ڭ}ew,QFVAY|Y >*X ڥ*t08]# :WCz;@GS̨NSD1x:YE +mIбb9yI[Ssnyg ik:L3.t-~*-t)Ai &ȪXFA(g-L,pRrV+@ZވvOKi7mv)fS fK. T~G~UTsE6\hŬtw*MD"˽h.9vy 8#2j0нfWZ r׽ƂcL%)CڈK١)Zh./7$Csvfyc›7aE2)$ܤBWL"ka2H z;C粑hM=b) @{2+rPDڔ\7+iT  Fg+SbȪHp"V +>/sdגg)qrY>ențsD28G3&ttquA'(id!+~?2% 28ѥ4IT>&Io-n4kEƒ7@Z1\w%d^g`gjqڼgORwn€aa4lP@A.XAxu@-`u0Ϳutݩ]{YkF0n_h-xĄ5?! 1%Wo;q$0FieGܽxOA.ՒmR}v۰SK{%LZrEᕣNIN,]J+-ɥ,q˨%/gl'^~^4ڵ ׺% +؄6_rhDP +j~1>o9UVBlb:WP*$o[1a ,рƆ<֛,ٟE_HLN:Ȫ6 3BUl 勈nйtw.qy4Kȕ`ڻK^"EUkڙDƫ3(u-)^TGU_!JD oSwNƅs1JstUN)8O!(9bL)ocjeaYwhMqWe%<3 }2]f~M[vP%Z}1OUV򶳚G1Nq"LtU!oM>}ikxoI+7KZv sݯQĤ]]ңL][.3QBuv/-86bQ$|BN`>mVCU8qu>rU H>l"`o]t xh@y[H/ +VNյ-GLQW5cDž D%.5t30g|tx}P&0oHV,iuSy5 L|=1PҮI`1Oww[hMHY6/B8\ⷢjm/9~]/k + +ɠE;]"%'52 snXy2|0:,mT1h(Eq|3hۄk\Gڕ@( +68Ɗ ,!ws"E0[wvQ2%1y1-`SDy1iߒNػ 8.(7xvw|MB^~>: p+*cfA":𫔆!?5ob$lgNqga j+epVHG}}#:! /%SsK +v)Dhp'Dz]ܼTPw T<4lZ)mj]ҞGAw)(6ǹ{>&HW((Z|w%饲``T0)PFrs?Sh(2N# ߽s&2U?uQFE޶ZZ-Q0 - +%** H@巜'Do<^Jx +pwb_;R?u@ 9NZon3'o\')}:I +;, C] \yV@GpM̄n~mrb m)3J3̥kNE3(PWaPMNkwSWIjڵmRxVtO\H3c7WONRH _ &(QCqa(]s ++Νg0 Z ݥ.6PT(n0vnj6]/*IsDOHD!$`\` .M\kT\Đp٤Ȭtv!˓|]m$<-vA=:L.Fi[I2&̰p]ަ/]!ʫ0 ݂w̮Ӻh\Mkma +,1SjE!N5mL0!P +$s;Wgu)LЮ{N9Rbvb +rz[]yq* 3ɓsPA5.ĤbmSD0+vn'STNUow +rpzb2(@oKc~`ypP {kud#]?olf^Ky+%(Gys? +4ȴ:I!TH;~[jB': 7fd[n"a~bv憬ev0D֜(KsV5{Eju6XvCW(885xeW8?'ĖV'> +-Q<.Q7p2(}zqFHlT0\roi*, wI(Jcؑݽ:xru9D-3k^%?]uܦp9J%s]H\9EAuV#&8хIpCbj* +Mvs؂J|Ϯ[4ulG< bsg1Q F$|,C%2B.B8^dSbqF)ܖ8H1p񷮣swo5}T:jcĞoz3;W!h۩5E`B7K[ݓa3wU*?ҤQߗ(Avx >垹xꞣ`A&]"^sJH0~S-WG3T:ܯŮbĴp]W"+dEtqJtM9ٸwùJCV]a|("`ru߹kϻG4[UI͚u隹^|e8lnȌORݲ\جujw7 +i{%lJs&)m!8 6ۤ5Υ[LߤSy7,_R1 z%{Nm|HkW\Lnm7buM5+n:M%,&?FLGXYQ+*hwy| _fZN1ęwWn-dևKEvYôWswzNaClSukSb"9]~nt`z΃ څ|N@ '8wז~S`\iunw3pXMiċ;#eA0PWޖTwn]t@]9Yoq5W^]K\7ɦJwE\~>:4+$;R`Y K*zZ)Ix!%X;-JEߦ7ZUNqs&,ǹM15*"m/҆HdHt/!^Vv55X jX0PF3%2%X{ -&-V*tݴݛ+,`zr"{ژԗMlK)L̫Ik~_.wk4P rdM +RA)d2hZWa^ȓ"WrUe&m<(ϝ C$cP%JϐSƇa)YŨj$Ɔ U)wjTl5jYjT'uE]liov(TЎDq8&/8brQ,U4 M&-Xi녚aܘ>yq {S^I-}4+$rE~jӍ΋@*[rַ41*'!#k +Oиiy Wpla¦ +''bN5oz=9?Ly#=HFdoUGǜi5BƮ4 |)!&Xj\l8?l!8. ̮k`O<2-H]^o^lB*^ϪQ0ʉhTv*h\$@|M2i 68Sn@ ǔ3-4a0R@9cZKj4s3#DM]<gkT`wCӫR9m$sk`QdQBCQYё̃ h)ndvxI"O.# L;.֨YN; +RVw߶7# #r7#HQdG4(>hB痓BbnNƅA1Y,~`A +Y8 s K:3ֶ>CԴlf'63yu48?r됿\DDŽruoZfDb>xH I:V?TNMˇ+cԳWЍ∔$ , Vq$H#{uMƂ'#L*#gu) u̙H'[VUHˈiM甚/0Fx0mӲ92/׷W3%$.'Vg2:2$JD"O#LI5-Q+:7FL߮϶ +">1Y9Ysy=:!/ȋnXR5pUPMvdn`0lK6uHx{gYK674DԴ q {Ģ~s;owè|b*8s:$sF'fL+bɒ@qd&bK&<`l_WFtl5tj\O8<0#r`nNؼ8@)[onn}sW,$[M22iDžv뎛 4cׯoj^aR>cWEj nXI38. $K@rus28ߴpBʭSaVH33. -28R]{jQ,t\|eJۗgoQ*"QhdqgHͫ ~SQ +<!TѭV}{3/& 8aXbOV#hNŮ`HM6ˉqcBò%ǠsMlxm +sAd Cx+UpuFQz{'=_m'и@ 4,hVA% 3,LP= rMUev˒jL(@9 O>/XXBy&`Dp6iXZBxVP$"2M QQgw;WJٹI1;jbRVh#ʸ 6[Zٳx}$7v\׷<[u۸8`ņ1,V+Ճ Rۖrd wrqs`* :꧊nW˳MF`H8Jp]2ͱ) +s9,e+l>}Ծ/ xȋLl +}r2](䘖}D5T|~5yyAˬƬzhs^Du5}{+TPN EB umeW:p?"/ΰtzٹW(1Eݓ⚎odX:ICnh7A` +an}#۸o- ;nyFέ#Ht_vˡ|Xu HJ[opف0z.PD.-ދ'9(DrK-ٙyz0ޮYiuVHI*w]SJM;#8W<<;3$SU(CYcGݐdP=ElHiac/*unVUY.@sI|FA+*\ ?.OTZ}7.b E(.)(#?˝˻Y,vKl .M1d jBr+K ǒkG{GnE%ҴK9q:`ѢH0+$EW]ʨ#?l$ ŕ뜩x;MHh|4Hn[n6֘\chviY Dd}bNz.ݎr68Iyu+bC0Ju@<·_{~ZilSiհ&_J.anv'OZgSV} kz^| mBa*Y]\4\^a)Z]t +S*g['7pPtв؍Ӣ)T$yS"8ԂzaJ`;xA+ t +SnUx]UڼOUFʦ0`ֿǶa#vUN7Tց+쮬6b*"e0XRkn$;Ls4Cm_G{%1u 'f+Oݼiz_e@-|H-]_3Jф + +b;/I\ފ<3U>K +(;Dv=="sOA Ejj=8BQLzPV_wecݗ3 G[)QOoTC7pS?J7D#`  ޼ۣ[\ѬES t!E`]3I t-R,LyT:;AaRݓnuFC\΍ȡ()/8ⲄveF5ś&V*H4AR77ȑ $!?Rҥ`׎Lp[k&v/.:´䮮܍랚).`>ubDSڍ:1)n"2V7nZ t=:Nzm&ls+Lim%[ SGk]SE`6l}w1=v-)fts`:@I]),@5V~|*EE,Ktн2Gܒ`o*V8asHEbBG+D 7Otk;,B@/m=ٳq A1YT+OVByxѪnn ~+{x ۺƿF[0ʤM@V!=*r;ҍ}.Iݤ +[ FSTڷHK{ZB/𢅌7.M!¹v:QF~uUЧUla8hy!`W`;vq(rtro`](f8Q @J-S`%N,`p+mp'oY쾎aķ:1s +}]R?8ٰcSGtv i 8RkūT$$SHKBPA. t"'_+;L(%:&]gpuW  .LzvQ*.%|~lWkmeVJ{%{vF"ץhcr!yVuy_vjNQ2t)q@dvS#ЮӠ35ln1u6N\ {0V-b=Ȣ_ڹ*C҈?NEbTDbI c[m_ +r7wmOMjFȗ?0X(ʎƟta|DCm~qfޮ~ dF)UѿBUp [ ό|>^X!~xj +]J ֮#d[ݶGM1u#C +LkWJ# R>|~5Ik<~AG7L:b^ke7U"SĖKA!R1O#]Ea#â5%P "1.J **8`ܝ2&E%/$$|IU ڦsL̘տP\`^R|.}]frdnKBH`!)^p 멶s*t>>""?*p]aeb_ Xۢѫ wl26 ++sYhta'6W%4X|&fg]0$#+4K:x:Y1c+(&aR*"RK6]/w9/t.u=-.Īnr[Uqs)>{`v] J]g&2\tcFRA`ޥ\m ҈wjNPD0ŕrDLQ,Qoȥm"`1e +)0kd >!sx?E.4˯.)81 ]S)&Z]fYNQ]EkSx/vsb0yn3gC]+#A}:0z)P>?Ny ծ vAT]hB̪8]*2Lѿ)VǤu] h h + ˡTimIw6"0m D uIs!ZA&4yuA]d2+Υ~ֆm9`6*;`~J$:mor]"4D焄SB 76eS)pӋ- +*]9}G17;،/bW~>/ п-4J{-QP 욒jF PW*h| cHŒ6CVM xLs}E7q魥6Y˻tE-]Wʺ.6$~Nb՜8iTЙ${>nWNNW xh)ZNT;;V}>k d`u  gwE2EΥ/q<L~cuf|ԺRm6!yil$x&;]v µ +xzS]Qw9v)rRH2 \7&z}(W*I>[(NݛGEɱf4Lej0i5s +S_W!)ҹV=h(W(X]<,BxCUY԰ 6"(S7pYA̝i ֈ{ v0di?B%*~QPՠ+8hel"CN[;A7eAJUWu\-;plVy`)UչDs[]O=)v.l3T*lǹgs7{ KdS>7M$R,Ŷ0 M wz Puؒ#/4[<ܾ%GA7D._[q'd]wI2p-kǤ+X"a"OAfӃw.#QK{kԎ`C>>x"13ZxGEmlSv+豝R0յy&6]`_pyp:{yK.Lׅ:Ժ=LV\1fuWd.v+Tz1h׭`70%3`,HRuE9g >vW S?i1dt f!.]4a&0r!p.B4fBx̅y^n +vQ_L]E`*\!vKR1.Kd ˺J,X墍-\g:vTz~;B1 \< D2+8F霠`y!kF)_NlsC3Լ32*WlUXywSmޣvIkbG0֧ +Toyoe a\)}N8P 8F@bɭn1 ![Lpn huÇ |a{Cw^wٻvRB@YMZl"N@L{`m/W}݀)j#"# Fu/QͿwLTE?d}OI} 0EgI4WI|hu^K/VdTH]]`քO-4.FE_߄X?>`Bre+I{ v6>69PJm%^q& +qb̵[Ff\u kQc-ЈUNnKBKޮa"%8]1&Mu-ε4U^fVnCD(ΌtuYc@4L`A6_>Gٕʿ3ĔO,6E~09zf4 ı ݦ0sͰa%wp<X>e@YwnlK{9&#@r#K瘢#yreʫ$[2:U1f~g%(kZص' &~qǗu];^KW dVĔpɄMmb؅̧(Ӎ0S= Wg^J*EJB.No;f!h:ۏhxa+V_Ro>Fm +`*~b1Zsrs\+PXB?KCm\PA@ao`/wL8l⣳N)E-0 ~yST`iƻ,TLy]U݇U +,+)ɓs^x +]ݼL% :HIPuh /L䕵A[x&!.U? Cn^Fjzn0]ޅinL M_%LuS6 b,O1PSPʮ4t ++|B k^vݴ\Ma }C"iQFSJxmn2zc@Rrou,}8zwy$wl +]@Am$F o.5H>69'Sj/sCP6,u5%*{oh |E JmO*%KvU~#yjq_ODx/tVqi*ZḍL)$'0.}xEY8DC &w8uJ!|6֙J 4JNBdt0ljUwu/5}I +;2~7VnRk ,X4XnT]@kt['ɫvks5d"W9HZwBLv݅HLȿ5M98p#)s3bGɦ5Jsjpv׽Qy~S{*+SN1Y.roJEu_$Y >ۼĦ`0 kdEqʴvm3QXL@5o*)bZjPL._G5 ϩpAC+ ViQЅBrk؅_߱o,> Bih=T/kபˋekl%*+8 ZF; '8|~2`|/IdY\҃%2V`%WwL:a[d D0 +r*H_R\~3 .{NldT?qa Y,9)7lj.3.&̥9H) H?kA` o8q+ѽcՠ[0?H52q!Ly#n8S7>F59zb-(1_B0b0LJ$L]LqPՖb Hiך)0(TuW ) "_i]JsΜu Ʊ.+:"ACLoL]eYׇWwFb[Wel[k bq1IUE8sHA~7Za*䳎-g]x.7s%Vo/W['ljȘ) +b{nbD65L^^E3F=y ڍ(q3F9?)ႌq]gnU4K/Q ѥGiUyq%/oY EXdU!m +BD, +_ZmAkswv[xLIڭjLE!rY%Y{a]!}اrbُF Lpaz]yMWYہ֪Shkc&v o +#+t=piX,|c7SS +e5<eHB s:0pBagk1VJlSk/]w~ᶑ 7=U$zU7<8+A~Va*MׅLSW'[ԝ5g'vZ&\ҝa湰8-XVB$뢊vaJAF6 ȅ U S S4f릿 v_Z jZ5;kMǍv/VI׍3 Csms]ia.H ѼrY +S-}Ү.P N!@UڬDq5g L*ɐAkqLalngv12eS0]\hcC]@UsLj@0)>B9aYM%IV! .{ +1_q NNR#qHr{iXx*Km +&͜uC +ow 9ߒ"m[3 +puf*!XvB6nfVQ9brS[ +d<4|WLp[muP/RsA + +0٤XxSGVZT'nq3H=F˫·\඗\p0L`wyh `kAbb资rw(_&_]J_=ktMY;==\gJyK{LʣKhqKK.a|d݇Z}"]>5ŃG,sbwUBZK/B:viv>L5)k)t]0ApR?LEnh"uf.T(Gz;vD @LIQ0]pd$HZk.Z)N@1Q]0Gys 1Qw 4Zyߪ΅rs}IZr(>*XgԩIOqٛݜƒvgTXhR䘬}sE +R,xnk|1|z] Uz4~vg,NRdkPsPGL7fd4@`Jx=;ܴ]opq]SjioSXD_v>?Ѯ 1IOL5CljH7FmE.2&]ugNk|bњo]|6~uc;oSc'p&{H-?SP<ݡAKR=_%xtmW[˜\Pucjuq 2% \q.Be*"& IA{v;VQw<).@Au]r *€DN/X3ş[u)_ e@0%[Rd4 =",a~Jk)`AFHuMP D([uKѮ!&>gဈ>iJ;#)ebrY*qac\GY.vIt2rhkE0\:Dž%QtBLp] ׍>b_TqIǯ]xȭ. yS GvTR//Q)Co'{EBp4mSȱ؝|hxn|ԉ+ijˮ* K^mK4` jreVg+XEE YΩW}9APd>tم(] Rp`p0 +>E>, лaM +X<ӬZq2([I%Ѱ +?F]{,WK?DN@K +,]TXaZu)svpQ +uu`}0WbRM9bc^=7XX#M .9M<>[ uË@LUtlҪ"oC@LOxg :}A%+1`&X g^^H^S~_X]kuQA`2"v6)8"F;Nv|]dڅP*S,͂[r8Ct.WY80xw>7t r*|P*uD#oCPn<}gjHA  0sSqp΅G`bL/jB?T0/?a]7Ňsl8v[I0ai9d%8hr@g!{Xے>a*zc4 q7M҄a`^2S_d/}Ĕ  )M#|;);whd42 wF +@߶F["yy)v'Gi +uW}&~W'fh:]0P^5̞bݝ>]WB6EdWqYw+@(ÄD/Ow𲮁7c,2w˜uc30V=fMGWZ +G2|H)w 0=9&_0LMQQwg^ t]$bJo dM e]8-*rYݓSmgaS@{5Kk?DrUX])*-XZYGtR1z OQEv}ڴvzUZ,|58'j#%̂;:w]Z3=3xm5aLE*e#QID[HK-IۙtT8z<ݫ rW&{Y)ʩ]BQhCE<$A6BmVzPvԾ>Uљ Lf S%SuOGU9ifZ}x:eX\: tA~m`x>OQlɴvbIT1#7T[OE=' 7{*J`t%^.LDEZM0x]^zw^cbˍG|J8xO]ޠY^L?o$돁(/Nt?.]Èu{qμ`jqD.c<ꔒ8_PLa/rk]bM%ZP$eP h4\5^uZdUgazQw)2 LJ_Ⱥ6u+|,E1EqLX)Ehq0uyo1-&1|2!tg-YWK_6)-q7[Ůmr J>F^WGe]^`vx\1u=ޜ"env*OѝkWv~ŔS7E[b(S#eX#E a6YǪJ7vBOsS) OU0tp̈nhmnFYޒ2o25|o;H+ Mcu XS LZG^u0U}P' +;et66EYτ0m \"Wq,Fyro% >F= /ѱ")A C9 MO [F{{ֵ)l% nNQwF +PЦ ?Csqopǿ{khuw)"V;BgY5bt-3?K`@)&r +Cݑtiare0}QfS]u2܈׸]'Pk[F_sĖkR&ubk`a]S-S)Wn,'ǔy$ )ZnI1y:ûӞmHL4X\lR6Ħ;$[O!\dM6 Aù g]be +.B<פ`;22.S媩(^'N{3 ʳtcJ\*K=%]yŷ&gg%kX~\0outqDWVZݘbB.˨ +(W$oa?o!a!.Rʶ@k%!Wyfҽѥ6аdwUq@ɔuieh˹^,`O 8>{NJZ=r1fN߼ < %mCHYpPz1Y=.Lըp0I]oN)J_u)0#(,J!yCUvO73~"Ϣͬ t*⹘" 1%nNIwf"ࣟb:TX0nM^EZY +75F}S$i5$b'*vޠ0,ewF]n:&2 S:gRtVbY X+u )2.dH5~, ) +ĄƦs&M!&-Lݴۧ+bw.pä$1Z\ÔҮI}&4\3Y5]nSUƊ- 䏁[ zc߆κ^P_ + +w _hfSy  8#i~7, dPV/Dϻ@/ `nGF)[h٦ n*p +< w[N[n5RPE<]%O/E^!W 7cb4OJ+Vc hyẄZPq?^)lUGQ:dR !ߩ\M 5A/r6#/dҧvFt +)hdIb`CU5v()\P)Ȗ +xa.%r/ .ZvKtW5v+idav*k]J- WѝM}K!Ƅ6o\MՅ#i e5w'S}I2Wvi@NO/Xڽ,&bS :!RfܲG8xK`jli)"g(ݠLÓ6e3us铃)äԺFs^9E"_y7u,ɑݵ?hWaTdm(O4 B'3^Xrp6 AsΦ-Lk/|O1{\?WjpάmQixEIs?Q+ +k'?fHU,]!tbP nB0[׼w'p7ovR߁+Ƭ&*kY>vx:hL'f_Q +~}9F2pc7TxQ90IAjFutӰ[)w^('.]BzQ\'r Ұ'0a*$N{S[XS/% +'g!\+ip]=ԞjbQ%~;DWj>:3N6]PTэ/TܺrUڐv5LA.M=(۱CA7okLc &KTc)XmM]3c+J IՋMz>=%- sȆm fi+cS +LFE[a +Sp bڽuCh7yi}.æh?[b}a`S0!S$/6uQ"OhH%uxKpiW6@윣v;#F+k싿Fbyڤ]ޛ|쩘H$'{dT8]2ʺvcE`>hUL:p: woUřTūf7=d^E-1r7]e/~ ^?| +p4u'פ9\WyGydx1Mu~ݏ;XOLؐHuCSi!GUCF!PKJ?Un`z2W|c)qkW6ZhlISHP6R$Zh}'rE 9zN2 ;$DY80J\:n)kXa;n;F^ +tv- t]'۠Eu,Ȓtv)ֺ 6O?XLw]\^?voSjnbWh.sҬKur0Լ;Apm37iwE?ݕI-1$&wҤdkw&i)zcW؈X,&0I}j7+ I~A]Ƶ՚<&VDm`@NХxAK +L =kCx1E䯵cguڍBw*SAvxMowMTfk,e($o_L8bEOdZ/zTC-ikڋ.|M`|1i bY7a>`ތz +ՂrCQ٘6 p?C[{ټc\ȺT2'yɥ0uuE_%||9jṷ6tG7^2[|4Jɛ$^_1]03PuMuVV!ϧחXhT /FܬƆnLnu姣+n*":\DL"Hr3!mk{iq;z.vd1`Xyĉ yPṕlO2fUv + + g)k%:6G9__{"O.|kr3Rt 2Jm)0vsZ7$t0Dtx/E:Ma_ϣℚIJ~nigY$Sd +B0pe;ԝhWr]e`ƠfcXm)o"E%uw5)2Ҍ)fDJ3fba#TCJg`kWA+" +M u)5Q7E&pAͩ\- Drn>/bk +`Ve_ȹ,Ca(FR<:S*%-W: w!d;~:n?E8r#v\˄ć"RY_pRn&&ѝ[um-vfC8&ͷcKjsd47*Sꆁ ip12.N75mL 7K F[DC?!r0CS"tZѽRJR}Pa &D#N=Ȣ:r\~D0-5GKoyvWsEndJjWZ [ǷĬ߄85IVgS*+FvO]E]h! vn*5K#Tp|~8Eo/{PcH +OWةyU@݀)N+5WKSJw +f駧`ܳo0G)ުD  + 6:^a>l*$^sD\ 3G*gMt "dr=$n)Lew-zlq9O\u\FX58d.Jx$g(UhE3o+RjYKjlTσ͍Wފ)p;u{N(;UR)t+VhV{>a#4?/LJpv'fd4 ? ڭtwκnu]`"A`ӽ"`z#/`Z Z9Ln$,DS0׃19Po[ `YjغE 3.b~>a^G,&?K&WGpBۨ2i"9”MHE~|O#{',ӖUZ܈/r7a3h⥻\2:*M>ӞГZ%^{yt ^TM4!;gM>XBJ+ez,NͦIO 9}{ |3`V2e_Y"n4Z$%^57Q_NUGخ^dae֊c% +8zpT]OLꬳ8?.bFgPwN-̅BG gRji=OѰOIS-LtFXi q +pC=ڦIFj +s0@YEߋ"<N0ٯX(H˛oޙ| c[W)p +U0D't=tuj{r`$)^[\dR)9Ck;ݫq! Xn9`/!-|iJ1J,97EQ&ؽpLXŎ7I+#S-vVS@׵Fj鯻sP(KK݇ʡƗ׵7(nd}0z )8*I^2 fvSSտj˄>QWm„f\k90@2&^'iӴ# i J4 XYב'sZNt;5*Z "̺L31#i%(ߐj$/j+`u)IlXx$j oOzvp p벸qo,X/}oɗ/nQBۖh.F($!Z6D+ ䷠ ]׶hnR# r Hj^vOs! S@ԫ/;oE _BѰ(g2s!qn$SKÁK": A{i!E0^lGxl% +IAc"=|-J,vyu T`&Ҵ\K +'7͕YKu+.R,J_&0 +o qnj`x6nI LQkּKqK(2]5@i[@;6~)G󬆳 7;DV`Nd]Pw]AkT¦$L{"ۃjBFsYD3ů޽=I&s99%ɵ녦lԶ]sLM$*@}0g]}Anf)2kTC`;0T+! d.q`UO(C+*1eCA?Ṯĭby;~up¢3L>Y\|ZaveKRh['u ^G +k1\3nޤigʒ\j;Vv8Y\چYbD\²{L4.Uw#,b*vf1Vi[VB D'K65HO8Ԥlϫ4}|P`|Px\g"!ǽuC}Th!/Mnձ宔b`hEg5)$ާXZN4]^,1=N>*nkhhpV6||n뇹qD`eLE +uuya+Rk|͙nTF.,"Ud $rκ(c%{Wy2[AG?<q}~Cs='G)03p"qc `+ S^ԥF}:,K v$R&/D@!(Yf1Ո;y*[`&]eӈ2NJJ +l<F`Np-~_B(U j6(j:,6\PM). h5DZ;trja pa% \vb_'76/*SP 9y-H6%=/>8˩7N}tDjQ߯GQAXLGGWu4Sn{3%Dyɭsss1-+Cە?rg}!ť}XBlq1'w/y}Oa% +T⹂hcfrY\޴UNzr%C_pd\Ng2[ MT*Je K854tzM+ɈLTCdO~Bϟ>a'qqˉohb 750 ؤi7-R>;=}~@0eNʺrêvJzO;/ +f}edJ&};P>S}}}!lS:*w_h0Ah\.4< jY:JZˊd,rzP0 9:Hq4bEöJj2Eifb8gn6 ~0)p]V7P!82$ļK9 0Z; UPcg{Zvl1 _;[p[6mWJ22l6+))UYYBnBGu셢ċa* %]fzkj򙛛SUG/>Qsm/Dc;hnr"_K@ٍ1xD6~c)^ }>?<.DVv% 5+=j'!.ZʶhN(ukGOgESؕQbH ?Z\S?8pXV·l?nM xU Ida]:[fIA o"T8\?ݣpEa^sssF4jcFV+ YMLP@ӲCmY? E!pnt: օb"yf0oogw:ϡ9RZ}#-y6 s.<@]lbp?"d{VOn}ݏ8(0"1vK#zT`t[.wV @T&a=8 }!MV^XR'!-nnWڱ[=*ըczTc\OC!0ɟo."pR*0az+i|>; H?"sQ=qaZM5(PaU5]Jz콞T 7n+Y)`AKH䏻&>򂫼h0Ba%)Tj:jtکD\6.)q|oSp (g-NͱR؀0-Z;~RBZ/!5bNm~qA`9RjH1A`G'ij5ᜩbK"it 5&% Da4% kUG]VH^WIHH]VH]VI]VI^V^`$X+ K RRDuU9aZWH?,2n3ٸ;ը_c|z巹1 nqwEޠLki^L:&.";R nXLB2'E +" ĝ'ZL߫r|&~lM:H0ʑۊ"qMNrT:2 c&\HDjԩ՝J}dJ=Ylƃجf`>K~O>r ::hqgfrxeA2ٗ''z> ++V T)",TԪ: Zn +8ةXXN#QŸ>"E:}F{qu; wDCԐL.P4Uc:ۏ75Zb +$cZMwò.)5t30Z^K:&rka0`;6݊"V`7Pݲ|@TL=OvEE:Գ1rm- ʨKr?pC)̙~rri)"-i6D0-*EӏDN=,`6[Ka&z |>uީ/9w}!X!DJRP Yط\.hbPF68tO3lU)Ս}hP,X{?\ژV TcX%tM٤P=lkm2gKL~ PlՆpV8ⶆvFj&Ex7ww6sc7+'20o,L6cĸT^*#"'B5M܆֓-V;~SjV)lEfƥ!^U%ƴ~d;Çź`I'z6ɩB-]vG41s\.L :h -T dtB6vI'~LJ;^)4۔,@ E"64.*qv\5ξؒf٬4b2uP5_@iɤ%(R XS4w ĝ@Dg^qAqA @3Ȼ{{xtÃZXlHAAZW8hL(q.e (lfTCZ,=Y!dX,Kg&5K*}FȾ 7tv{Vq=D)NL )Nqt+\*Xw,Eʐ\[JtY/oN0tU 0*p;`T`]XjibA4)# ޼?#9LWIz]]]9Qx @JqTݛl愂iqakZfD/ΤeK +l05L MfPB ;#xbFTäA+*.݅oE] Q@j6Bt +TXdc?s>pkE0z \TA5d/`jn +)'..|Z8;â$Â$#'M4HՉ;9RbEvLcjg{cB,оc3!aBPFu>Klf0nVN8? }s(tc7aa3؝hL6v zN`ˡSD,+zE]aMGG=qEP5z`PZ^fߞke||Hl7M-lLfa_2lF0o?! 1'G0$LjlvWX)٠om +KR\%9H}VZvjĔ"wjMlv>HPC088 t:@)VP^9QA"q(Jĉ%hnZ=WG׎k +AZIy=-'1/3Ӫ^==kZsc&p>`"wR%`/n L&~IXSC3@o +%؍s!P">BG0HJ2;  i[ܺnw pV=Xkg\VH0ԢNj^z /%WlR^h}&}>׌\6SYUP"[ tptT0"m[jU$ΠpA3thF{f >ɆdÎeKaO'6DZe_ +^oEAAE +5[nF6BQ;FP[P;_m,b924]"E֏:h*SHd88rl.Dy'ξ%TFSDީ!-)"-*-*#TwKUtEuhhhŷꈫ+Ի3d 3R#"s0`N$ !!MU-+&M6D\-܋_[?a׍G|,W j­"_;h7n[6iwp.ʲ}8$lL\a{T]a +Ev2ֳB$") ȗhn!oQ,&]ې,cnA#LD)u{tK%3d4t%|C}m7ܸMF*dGa7N?O~:p 0PSP!USb`7]]jaRݺ`avu)bQo^Ȣ]-LKV"[5=SNq=ڝ0\$? KXvn7ov"^: 21_pX 'A)U>Ol-uT<b*%lnYgm.K:i~T6FE um.q!vK-\pc+R"[o+*>.ʶ^r?$.p23T>?8]OX;o@!XU{itvk)4亊◩)u:^J]IBħ#1?e<~2unYǹ#ԵgcmNPyZVUnNR$6 !r˶O +ݻPDh.e7=!/+DD$\DY?b -&T6bihk.`p% ?}VVWQk`cDp.3`O}Ch7[vS%LךӗE^s]`JΧ\9bWٝOP֯H`֤hwuueCpzLxXzlj;E]ب&aSD.ǧil 7KW +QmFwRX2-IK9)+% £nAr\?tP*ڄјo|p&ȢV*n@uul_rϙ PlA53,;Li[ &֐o!tecjyJ;ag{+Tݼza^9[D70OX[Ğk2LP!0^ސYńF]${$CJZYڌ@?]׬B6 ̭4.?)\7L w!]r;l)̩뛚^jLfCY[KMdXGWzWwݵ8=\>̥BB{wQ%L)*Ԡnw1u˦HVZ]8(u+B +Ʉw8|瘲siܟ^^SйnOV]d2jߛyc5g%#ڪS gM]47Lۡk8,ԡ2NHpi0S( J*X؅uAr*\5޲u8 w%BN"8行9yGZOlIU9v ׂnu.^sMj=Zk7d:$69 \'*܄vA_PBasgg^f% + " îlp$KiAeHQJ]LDP} +]QsQMs' +ui#آnjW(wAA49a3Ȓn.Hh%UOXRt9a w*ޗ%*f,0|_:KW/H)tKg>uNv$;# H9a_\ 286P;!;VADL |f_ nQ7p>"9Yi%Dd>w3R)c̔-~fuE͠"0Zu]9/G绮uNw]7&0~])Λ"l|0t4i`69:S8OK̤ލXFM/凈"vkvC+5jeb +_x߳B#2Vsn/*)毤x!RCt2}P +]ϝ'YDlڷJ;8@rsAw_ ixCwILxuknqt$*\mFL!_WbP%Y^ﱋ*j6@TG} *`z7K +~=VCvl + !t|俤k,8+}g,^NGA,ͫ6sKT9Je_ac|6ߋ@Xn*xȒ3 b.ELR0 \:*E0a`7d?5ipeFx0C {Sd묶ebvv>|c + ~&$o>/yQUG,RPEp9&x @עP +؀[mJ~THB*c*.m8"&W|ڍ#*UNZ5n ȑnFuc@1|I(QΚwu:71ZB `eEh9fxM!3ƹ Jh6*_ :i99r<\l7`%|#HW ESՆ P%:S$M(GojLRt. Ҭr\oUe榿uNSq]bwBuyU?ZF|;{ZD9meF^(gWg7rKPp!fj9.Fv2kywkieO +6.(0.dC7M5ȞuHeo W;Yg>]l0)0ɀ.c/}z8*^F@+HkY6pAv;ݣl4IAvieІ,2UaQ1 a;Oݪ1Sډnc**ƒAPan#cCpJoʏT嘊.MmSȵQxԠ"5ÿ-$A3&`vֲ[uZp^?~*b\-Q[᝭F.k~MBu$Y>-QQ YuK}Q4;+wj:!"vʒOqe Ƀgȇʤ.|nԻ_Tp`h e$ +B޶n\?rw;A.+ &'L2Xz!31R-y{ΊjB]_W/2#02\H!kՕXB PR?7y]Ef'Yc 5`{R<N^F eS[.7_xѮ[1문H̅7m\w[].&mJڵ'R`X ֍珊xTdH%`KEʃ^tMal +.5$|L׭zj%VE +bda&"2i5S W]M14_knF3Œ +hݻ|3B i+\CU*T) 2o7jǬ%&4u BHKF}BJ@ +A;bNQQtA~mV5Z?YwW~aڇPVVb $2|pwWD~  }RKX +endstream endobj 53 0 obj <>stream +WQx^BLCmftךvuSogƖt)b3  Y7a<9_݂KT5uٝyEEX}5|Vm‘GY.:E4Vns.nJaVtL܆]G>͵ApLG-zRnzP'cTe]9$-yAb>x +K#ӓ| ~cຓޫ'tEeAfsAeen%{7::&B~,#sjpgi+0Bf,fywA+Ҋt=&_ɰqW!-瘧;bGdM20tBwƻلf'A5 ڮ.ۑ:u]1٬;YF3&;cOصFQ&4Y`\3Ejwc7Jkxj LyԮ):rPII^'nE.uJqSnđ Ąn_wGGLf*\B6Ј7^0S l\|TW@)T +VI9` +àΊXL S>=j[.Nj+uGniszːLNȬr/E6[Ӫy i$/<(-RBNwE6H0KzqnIqXཐwYF%lw 1Â#~ F)=k=&/"bY͸(bG6 +/dt66" >Iq%͸!颉t6IPI\.[尝LY+蝬D'9r܌o' Ij"uȦq]FRth7n-@| }Dט $KWo]6;j{;i}'Cޟ|vQ$YYG**QBaZq'%?Kuݜ)}{i>ם 83ݵ>ڧmL(4lҁ61LlTv=gP:Ŵi?+z t:LS9XJ7ݤ:`SXIBtįMqî ׅ HgUj2싰\φ$iM o˨ z2Mp@6bFx≢v_irm]JػaQ`b/jr*"8xS˯T-C >vi2Rbmrqeu\oizuRob2b3]%_2OKU9\tK#+Aw{\Խnr7zI +蚱ap- 48z=Ak:]498V^Wq?b&0ӳ7!vr]HC-MS{u_r6GwB0QS=3-(bSJЛ2gِ׊Hv;8EP}'))L!62ډ0mi}C >c0K!赮>꺻XnٻzqbBn#|SE?&Q9eוʳnhW 㚖廸)񉱳. N:l} ]m䙚ۅy+*GPOu;̯ΧK.`*3DEW~F^Qa#OLˆgQMLO`צSuG%.7$G@ś"PjS@微G')FL>R@&sY"beh{S<sEw6:Y%b[u~SN>GWzvEQBJ)mkú_i:('Zu)$ y%.׮ u8- 9jqk?kW@1E4hWAziY7b)sxUpJguvcx0-NQC50\nV,LePw; TT"2vҚ3`-9cLv)A鋱D/La%=㫤4;"sQЮke]NDO€\8· D&n)bwexv˚aҙ)3g.#R[ p7Wj_Sl$>nUc޵+r%YX-r/ZJ!\L*-ljBF=H A݄̤"L)Pj ˆ nWYn% D&~NMl+v2o-La,uI}0u6dF~B[wnk$7 J3"1A>+Kp};-JSZy&"DH,eMѢS̷?03jJ00E71iZ4=Ng~bgvwj\ZajVMZ]L,8c*o(~鞂+mn0ѮE=, ),kV L@ |1A=kR;D +OۈT%!JGb<;1+zh}+gk( xW(ۡ+Jł'僧4Т.sO.Mk DN!`RMZμ]z'#nC&ѱ,6֨'20.'Kt8vڌ[\>6y^'qKXn;ڵQhze@QP.\.z:KE(~E1bAzg0aj^S{Ɣ70fOWfxCƳ\]iA~k䟺ӯ +]޼AHÚi*о nbEgԋ.JR º.Hbg[ u<R)r"SX0v]՚+O}F-.3$xF0Ek^מ7&+#[𪁘nG["s4vXLIL^(]N]IRgƭy7w.db[wmJ"V+h) ҥMAxKKZ"(-5LʴEz=Ȫ@d.F$ |S +Eڀ_?o6Dz)s'Z눞 & +EN^7tx)Qr~4^c@QZW5dn2kꎿ + *B9 U\,T"\M +Wq1V >u<#pyYZ9wSe];Ú\܆<͍Rlez-,S{3F`!y!܎?YI=qjJ@m-ۑvd.LĽ{(u[ 9) +"S[ݎ_J&Ü(M|F-wkQ{i`Mmzb +]u׭5^泤D(Ђ+ew8n+S {09o`)b &?>s ՏesVj Ƶupk +&{׌#jhg6tjRyLnu1o/ :vI0ugG K]d;Pl.@!2eJXP<<+ Bx‚)iXgDFղMSԭEt}kE(NL"{%Tr6QM YÃʏ HeRk<ӫа.늡`s)К]<'vL:^~YrMlk%%s{v-\͖48Ea"kkYTn 190 i")LM |iDAk0'*`PLcœ-atv+-?Ko8קB*TecAn+WvϴkXLun8b`{Jds]@Fڀsnݨ `tc2>/Qπwݕ2`vrvbھ$2eVWUw˔v@ZͺUSAj.bZIߺOV1hڛXaB$.yG*ld7؛?"vi>=s./1^fu[ϥ,]ihQSqJ/AZ@ +2{~?{)ԿPq4g8ܹ>YAI Үj`{ƄOr9cX*"z  7 \\(ڶ,:*\utz6H`"H:y1md$hfOQT<̲ 5Q1v?QȮBu 0chqW,*4rs[>uP&L])ݘ쑘%X -bobnsAK?~?]Θj! g[kM2K.7TER +~YQ]0uBG)ڞz)ep/qSޠޗi.,E@vKPu]@f}Γ" $?]$Tk`FϞu9)+ZNeR#\aWLn'd̵nRT%9E IP9BΜ[DVtŠʽW +# +')iu!Uo z:Τ.q9f Obؐ1.odkkN5l~KOW qK_>t mR~Vpq r\XȎ_[Ř'`=mKϞ 6ѵh5 )bL=waV6~"'m7"rm'8m۸dnB́[Mm:\u/Y}LC셚ۃl^%9@$6^&KwCӺGr.-{@`lv%!7> jjn;q8 _W&.3ZVti׍څQx,]({ +o`6^7Y-Sbu+i&NǒڭH]oL+-j۽+.MM} s vi۝Sǻ6aBrs0eSu%9xޛ$$ps mK2*t(ZVвx">a m-\@©"T;/\ +5 E, M3 +tbhpɹn08Gl^kЩ2>>!CݕQIX4X2H?GEu-q) +k%!U9K3p"ME㗪TIʖ/JNim5GCP괁~Vvk"B%uodO\d*]?:um}3 [9+w-hEXSpv_ +=dR?0J1PT v +6\>b``:=CIxQB܂u]._L' [Xp[cj7η_X?[l}{0ۯ¤dVSzb{ۖ4nzW\&Z5a7jۆqXE6s ҍ^bJw1Z"y~9r{Mψo%VuK` +2|;`7B/'^-Km)AMl^͝~}C-9#%Wx% tktI>GϢງttVW̖Lum>X\kZ}SqEv"bا\D{0% s>^U^H:֖ȥB Dphu^>w]RMW1umOmDŽWD,蠚c &rEV}ڽE&Ѻ4%,uobeb4{KS\W$ M$%4f *R$簻ӪIB]IǕWhoCP>GtH|"ƫR,9fQ ѽYv('B &iU8ikRyu@<^N\N],`}]QcR:F hu}L|W +T텅,.y|or]=l1S*ZIg +q/grhe6~LVIu lKXǤ7ۼ`BY +*LR!ٔ~f_יbbZd:o"ًTeX$ a 1mF٧݃b*t_0Ӑ4c|V1z _M1gqޖv@RxG`tQ,u閨tAZ2تE` +:(oz3/4ɼ.Tj3+BӾ j74q>ե]ݥZ]),!Zr +)"Gww]/"]BQ ŴcZpP!"neGN$lLubeu^)`֮]ssöpf*C{ K-s]\=sęFB9.q:_}nFLgЎF0rCWWgJ +u KW>-A#u/8Kft_ǭ["_wĉM#& s)[[~Gw}#8yuboj GjFfg(KjhNTl:ERyƦ ྴ*[MKq4!0ͱk>KBI -gG5tzEd uM]a + }U)M:0\ɘ+,JnLu0 j<" AL|vO&Lani6Ŵ )dT@{jWbFL "+"B?.S7XK?e-<5U7[Ä +ib3-n "lffN + `n@Li6nsp:.mUKy +5FR=0YkDu{/2~ .XVh&X%*.#uK0E)'V{[8ztp"KՖg҇K֢c(*]ee,pa TYAhY|7X钣Cތ#wb %}R"ҊåX>uIT(Y +${.Z.5u9y V74=vx) n2#FRV6;ȫpL.'rA<[UT ]h~L菺13 v)Eh-G ]r0^}Nt-Z` h#Ϙº bג:qZ vCZM s}O|h.w3s:([]ac#G좇BqSl+ Z:*Kt,xUnulpQxI.\b]k᚞)E^z(qNLٯkxha9iJxS\1?k>uLV8Q&)`QnnAeqlu^3r"ۣP%C)shKv?6<Agj-r +xĆiv -!#Ph7IŢD->uRxR\tƠEM=du*9l /xt)=LL85p/&Qs6jKl#thEf$!&CӼLt#]̵u!Kbf@;|nZAvX\qn%U<Z<aiجs*K݈.cv]@}Bnj!Vunk<@-E`QKP*/l˅,f[藖!5PV!aRwwؕ.eK]G5BԵvJ߉JT[ O+v']2ki\ {/QgqP7)caw`P8[`]nDdQޒx,7z{\ـx {y;DeXuSӊ=  +!vU`LwUK7Za%QuewV$_ek0/"Z;.LMD y|`ugp`%EXibG٠/t. AL" S`Y.6 &s6Epj &gMKy:ܒ/%ސY* viy*vU9D'.&[$w3+Dr +t]9{{v-Rt󾁜v#(z;Em,GNfd G9_N9E}_W2!2)4>\`yqVCXC.wAr[Pr:my7fS~OL38t;?c./邛ɭkpywcJ. 1\YCRv[`e]$< ιn+"ULoRm|`^`΄¢*`CG,+=ө %XEYsٻFNJ+J0+\E` >z0ShkQ9nE.noJ\`ku,jX=l +g +撻n)fN1^Y7*`@aw]/cLꘜD4^צ * + il]pb:.0\70ڕ+S~0 (d򆆤L)mEU2 K)8bw.yHAkκU>pЦq x?Rxu빈r)؍x.{qzߚYے@ +Q3 ;Rv9Ѯ~͵pD4 1>1(X729#޶)s%e1ab]cZ0,:W;Pڤ*71*纷03-맢X8u9Tbr(8q{ϭ b{Wt.'Zk/"w}\ՀA]7( OD(ř) 'Ԇ{K!inBt-w\OgW2l -.߃rޕ֗ne{vZ7G7仮C]r#IV|ւtSe@Ԯjc]]Zwvj^cZ 8eHZh|֭aτ0t䀞#[^b<ڵD-h[*ocJC4EGBnw <;2Įo4GTh|T, +NXgzKe:` v`(C4KP_g1 Kf@4 ^艎+!XV/l B] +KJЕ\\WQcgF~O;\ҷ$)875Q.쑨"QO@p4$X&h.P<[AQ_`B8q&р Yo5Ĵ ף%*(`Kg')?eӻϥp\S.z Fw rJOHE 313&r{Pk5SVj.z062}O_"Yv"sKY/Ĕ&ˆj-v!P뚡Z[)a"lyoPsikgV-Ei*"Ϻ5E >XQ0$LAwX_a`!?uۗs_ZS `$kgϺѺIBZd7m4K]w/EϹ3z݀iq ,OmULdRу†i(7W.sKvc\ +ke? b`_/YPؔZ Q 5ÎWGӃ8)dhX6^+ 7.&ˍNc>"Oc9 <}J8(G;S 5*t\&vwiyFf]Me*uU/)Ec|e&F>Zц/Q+ ӂ$ +%ΨL?vc>[A༮4<;U-;~f:W0S|I\9u)*څEѦ8_xLܯ+ ]lSŎL~ gNA[Hk$wL`%ȪnrLNrF6E^rn)LHKKD٣]_]FD|p%kes;GRQҧn*F޳puTGq@.b 苑>ZRxo#"{bG} SI]FKi`e3 mdBpk!4c>_|y/膻ZfoU+p]ZeGP8"" 7)<t酸.)<+]]8!KR`d sW*g:3Ly!>ˋ3;Ik~Z0%sԅ)6 KS&K:3ħ3HEڏ&vfFyeba$f|w]|bNKC:c<:ar9՘BL9?y.ê5HXlh_`.8M-c[OYYYZ^fЕ@~3y!¨tE¡ptXzݳ~ dV0tU L%Ѵv /wÃ+6'H}k3[vgLMm6"> MqaF$Cׁ( liI bC=Cu M?ozLCBP9ldryY [3M6"Iڠ0]NmZ%nN(N0:s)aR59t^C\ %虜6mP P%,r|~YFfe $섏sg_=XeCy0ƥ +xM}A{P#%/ہ6v^ Q4՟e_+ZC@-_8-$ݠ9q0&M0UDEnv{^D?aw?Ӌ.Wqtx+N۹{*QwɆܺH Y@haJ^LzxFsIyU3AU?]wX8Kʒz~R)):Iܹ@<Nz,`Mr N&r1Y-HZ".y XzEddf0'İƸ^TEYN=X`[SBh`*[e3&\n0 Q+wC]?D# jXdtՀ@Jnص}^ZyAڑaXqry\\\W#=`XE*h_ɧŊ\(*'Nr([y`%^< +f4XyRӎ='waLعu)PH8OG7OG7)PIHݤG]($H8)H8QI9PP9PQI88PI(89Q$prHDHȑ*3##EgJ)G̶YEOܽ{oХě|.c#.5R$qVMUEJNlAGӶj]_ +c +s$aLhұ{59t"@̈Ff$#:!ɈhČdDI2bF"DI2%Ѩ4Z!F34 iI$$$̘&#LҒiR41MfHS I$CQUfT UFUUa*5JU)ԸHb5 +D54}FM_ak^/t UdzNCz?HAr9;&K? J%c r\ _+HxL1RB携xN3yכ9]ǮEvȃw2Zh_%:f4hqD w/"zAmuzIHu>UbhM>,licAAA{-a:/0$NٜlW)8Rv:^.=RJ9o͞@r9D rjkkqmu9th b-^+=0cQkS5) KRu:J_f3 0<0"q$>.3ztpB*:StJUL q-)*a؞iVR$&g̾lv*!{E[ +=*vdE]fTS|@t,d-"Ґ+P5eUʌU9XqA}x^&1`Z^CK3ў,-`ґFv$'L,D5b287-2&4d[< SEZZo'eM7& l\GDl;s1:?ԛ2} 8_}^+ŝZAwB3I'=q'A,$44DD4B[zH,aȠ뚻ﺮr{ѲyahaXpppnq y|UY1TYVɠh,LN okjl +DKaB]u^d"l`$,)%eaEy,&^YlY5I- 8~79t9tM{bU9YA4/;ۛ u%i/f5%j0ygvfuxKwxanŔL`2f- mxHMo]ZP:mǽ]MZi0gv7`K @aòzBȯzYE~W`VӒr8hnnoiN?.N/"mڸpX,Ua,3v@':%YfdI`G~Wy5@D()L^2"}B]wRt73\WB @ q!R0o+чɊ@MxHAy"᜘⠠hI(L A(IfcA q{ ,Du[(pu4cqIߛR8T`D~,P:+d$:+ L!mq+ G愹 9FeC\L˪x֢B2'q{E&y9x & S>Db˕AjBmǑnXh nٖCmOe-R:% =<}T N{{/xBG+Fr!x6bWLiu/|y qgUBo)0=#ޅ+Z\3Q.4֊I1pʓFrn ^o礠j]U^74E +%12Z]l +b-Z)^IbM + BY:uJw"J~KisFi3uo}0ҩKhK8O"`e{vI`rS +=PZ}M7\Idvkl݉oߠ۸)|!}mT"]0+ӫ˹DϤτ(t\7}>k"0wL@ E|= /w6؂|ǥ$u5l+JcewwsMRd]Y[B&)f$aIA^5E+xm5S%ЩLyi?XUܤuFnϑ+$߳JsXFt2AL_sc D|챔 hE{!"@uQwLԽ=m+Fݵb2zɨr4dy<5]8xbW}F!&}wnG0 A:9qUQU!, + +85nc*=_n g\L xP j+Lk6w7,(Wd躤k亭.$cܠ~;TJYxJ5t~94\{BZq1 !Ok6LíD9M"WAw]Ƀ*)}@2n3iz`|QEZ +4Rmbx<^QtjsO햂d,6cNSET2=Kb}cɕnU7f-dMɘV?sݝiFTߞI*b +0k\Ek^mqۭݏknpvV^61уkue*rn7a8#YMM-& + vڥ}E%*!b i, :*R/k4s]|m9H)8>wX0fC$&CLl eb710IgCF "oPܪ!}<ǔ^U4}wmph3Gn +E 7dhumnv֦C"nt\Pqg7K抺L8fM˝(y.WSJ`ѭTUAM5r]C( G@.~&^<[BB߆ln/.F1Hspr% )KH_nVV Ր\i7 N}^BFu݊٥mSthua`7TD&)ρc\Zʉե15k7&R!kSφ\LpLmKEkVKID]qb)_u` +.FEJVw hVƈY7uϸ= n ] ~6yUp'M3Őt,>O8;b7+U$|-X UhBJVe bj|t*P׺Ud1GyIδ|`eW_z`w#p(py)ϰaJkKo#ϥ aY+&? }p2>8YOKDqQæ ӳ{CF,S8\Z9]iUwޓ~W[w $X.(>df2PŪ_'IDH>]mi&o}9~RS֪s-l"U :۫]ݦP7xF3uf-+dfnR\ 1s5$kxX0 gl`7kotg܎'ߖBƶ'q!DZZׅ”XJO0{uNkvI87|~_0.0Qh&M?8wyn]N=t3\ .V\dzQKE5U:Z+K*@-aAHM|T|cRwG*6(|(K j'#A{ +ܠx˧Z[\u1x)w Q"yrXj]yi])Zaod^BVYC13C&Gii˅fAws.iѝUtK/ksz;b4 ^f;mo`-ڭmlgB|>󩘪]17[ ݻ@F+Ც#05C1҈-_w֖*$g0}`io`oʔɨ~n_caIX/Vm-.p]EU WAsJX/t +)]sh¶!|M݇rBfj馵K/ 7YHJj:R]U%ʋۚu(_[s\Q:_(P۔0O kĄ0`k(M4@L C\}BYU(nT (u!qE;\z;6>K[tj ϏP<6m'v=]ڽ +e :|K!y`nL,|&8nt0*'_,=x (ï]XxSg"C޸~EF]Z0Vi蚽`kjr8EH:S@ޑ0.sd[z$ZGvR ^ 3i]uEƅ$.=XםS.]mSUB}҄|T6=nNU$]69n%=LQGT%\ ٖ ,s6p>N}\/APV630۶R$^zo5!yʪ9xCax;!yiݵ5#~ I$I[j]d:&,/}gKU Sޕ ñ󷥞^bL=vtep[fraS~yn%ٽ[7.vw3nl0Q3 4=>{ßm$kI:LXR&fP dG,]P} "z(MnmU~IםH|`OVWdBn̰ECa%UDPץyMZ&LtI&Y@|ܿ6o4}mbf.2YZn[`}K3ۖv.F~f8nLs"1{V.x0#2MݳqG {+9b05cޅyV׃WwdhoCbh_j풖ɓ)_0c#/n]ReaOȗ|:QIs6X3$$RZ{q~[DprL) +Y߀*o;{trx9 =]A]_gy?[t +vz&ܴJ _1MV#2tp)hHdpuIC񖳙SzQ/م ^$՗u|.":M2%^f+6\l7iMnUR^76+֩-jn)4Sڰ琢.$tKu4jzX(8Y>'|$,f +ڤݰ}e0\x VbB8&0F+ĝ.6q>t [:ujtי Iav>0ET:ꉉrLUi1.9Rb̕]=X6z72׽kw W*gp"-#}ڳ2ui +BX9ŵ:V4Sjrb7tbj!QFֲhQb|YӘC&sLAv P-:xYta u0reb2]\7aC~,7p\Nti=d$ LLf_Y0趣|D Cޓ+k&/tŹk-".nDzITQTl5EeY .u[u0aV=^CY@ +-׏|dT?RNȩҭUvDA" +PCM^'yQvD"Ȧ&Tշd܊M{H{1>u%ΓK6nځqhGAݢ?qci]ʃmꯥg*[_tKL_8 9M-h]"a2mQ +[W)6 iID _.'r[0iEz*VV7Y|2U9#ϳI)V֥|*Vb[:j]U6s|+]YS@F"hqSDv}k+&0/ + uom9SKI򈪃9HѺUӫF}~*ar%.slX Ӯ֝D +n<@.+'T%Ӓ`9MK!Xtz +v]Nv+ Z;SiF~K+ӱ7}Sgz:/ +([(鷤S9m|C+Xj*5%7t6r+Ok>mAW60i?%ϽHJ)͢nS}I +y1ZpkZn(YЍNхcXGLi#UQk[ܮ0DTG8zpϝCtسݕtѵ;9[!D},SKO$^}{L^/fon扯zdΩܵo @vaa_v_۩U# nq:H +``\m +: Љ"G{0-NMMP/u,>AklS`d6SO-4g``i<xSPO-{s#vwVȃQ9u%mYNihYL;6Wrc ຅xPRm@yu_Z>ݳgKt.으b|kFcʋ +DH?}k#Z=m[;-#{/28A:[LvQE [%jqմKVpWd>1Q %kՒ± +J ,w![%lĤR_5ϢOް)|{Ϩ.Jb$ҭE4EgZR Σ/hX=ɐQDZGqaOt`(ݥrVءe6-;[ Ɔ$j7.Ui)ͽ_,3 +asͥ +Z8v?l^^(Lu{u͔1 Sʂie3άr J5ĔD}'$L蚸Z >0;Mj;l8uKt39 n/pJZthGL1l&VsGKpTk*%%@<3 c :kP*mYP贲Eļ%=X Ig5lAK}|6vTt{C +g3rX$dJ]]H1u39@gSEջݩpgzWe_`}+vgbA{ = 18^L1Wa)~]$Ѯ`}%t堂}?Pf]s ?+`vYL#,M)yva̻]QO];1gKALO&5)L`9PL>qbw\N!0-π$yV뺙?%/^aBRwo Km +LwnW# +ӯK;BKΫWctlZ;R Mc1=L^-RsjJxTR \>xtqC{VU^vm#+ )Tп0+4Х7 AvesOuh֮l$s-e +WtıMV%i\%r!3x% +廓 L:툱H؋iΊ`5`,Hv%q)gN.BC@aSP`洟RtQbiy{$oW;\vU[jc#%o}>R7]xtDaJѮ)ZˋA7_uRd/sXuuZc' (^NT]VL^>.ZK7:)%N.$ aefTuI<^y]vƋ=jw?hc^h'*>@ WW$5FHٯn\2A@cZ|,gfdɺ:pQ8z V[ +oX]7YROVL E9P" hxs9d er >Ы_{j#Ћs{u~A{P[̭aMsVيEiCkD]t"VnjUT 6jm֖.UK/&qW>l,FϺk= D>y֭ݝ0T@ &(j)L(ZmW t0]N8x0ZEYiaj n4 ]{TnݑQ9y[SCv]sv)fbPiؔ/h8 Z(<ȗb-Yux +=SY笵+&3+L3C4s޲VE$tD] ?u2&o"p-1& +fc_rY1]n[OnV'ovM,X18|xa潸I yKU*U!ǶE6#R汭}[#~6!"V̐3x_6iSgB*uOְ=5Mt:cG%nbJw{ TuTpp^صڙ⹞0 <`ř/rJsh_'*-<]e@UG=Au^9nHCgY '֮7$kwve]ɷvIVlZk?{;φ>Vz!jJd8{ 7P6ܱ^a:3QTM +,f +Lg.t^Moӱّbm> +zԤx=޺~4N"7:M@}D]-@HT1[TNe ߈|8 ; _UKWF+J቟ sIB1_)LI(;fbQ'}lˎ\w +gpqE7-]W$PFjo SK c)D<BC# 6bC9Bn ;d.w=PUjmf,KXkg~ƃCzi csܮwmՓzwAD=qc?J>7<Ejֻj^enVb[OHӃ[Y.qx(*lNEnHm 34>e&OQMLn@HO#+KBa1  mhY]1ʬdZkɋPlNڹ:MQ_14t-E˒ptr0!&C&AV:]?pQ-&웂=6"5k)47i;߂t/D~}D; +D{\ca93 uy ]:,%_|Ip^/]_ ?fBBݼnXSs(%Nw^9$.$-Xbg9Qum~u$Z U:hݖt:1ݿ`%~/h O}4г$ Mh#zd}?`zS7NoEFi ooQLovqGn۩G8JEt).e0f R?WtTn{V>+ +ܠsxLn| 73`+LB̭JŰH3 kh)J҈k/]6h<嘪Zʣnf`\W(L;>C({iSeq݉)iQY~` +`/-o,4,VL#6eu׵Huw{F\Ml iGƄ!#G>4Z$u6CHnB* ;߽WB Ӌ* +SG3]mH̱+'uP1MxqKm[Lzij2Z݀i؁H*@&Ȑ.t&7,]=6s3ݑ4"C$UB{LNuyb̹Jqw`9.-IvM*w.mf.GMe/gxp;:Od;&n_'C+lf;+Sg1,h^[&Ku:W g{'*/"Г +FPR3@Ozrl9=XtPvGg\/yVOڦQϰ6G+z-@.ܰJ!viDzv6X%—`fwHMX%cVsӥMtq ()̛Sln+SQ*%وC33bZ>Ȣ6p *zq)@_y\ {1e!TH=Z[G XFRg^ ܎[/Zu.csn V/"CwAy!aj6p{ꗢgZ|ӳGd04}iEѭFV3#L09'񜺧Ǵ+-/'~a:0 8rpq)brM) 0]V)Lڕ׺g8߼Aݐ~(L87L F.&h^0*uqSĤ)"H=n^Iքb(&GRP9 G ڢCcBB3!XyKV +i:w:û3,qiPu\qD0)6]8ʢ\&7vSD!o}v &=vծ@s붡@u{ "4EBhdsKvu,vksZҬ"]}΅It. bMw0ZeWQx g2XM6GqOe8DZuۅ]xek2ΝG$xi{G5(& ^r)O>L^vYN۸[(R(R9a1v:Sj~I7.MW@i$hA*Pa +ˈD4}Ew~c"Ø5ԩTވXquKqWC,zH%L'CŶyiݞGx(N҃n]rLm[3$uES`Շ 2r7]=8A/wt>qii[ Ki Z?rٯ-)sqߎ +A:?WGhLY1LG;Ӏ:xӮ,U|u#7m8:HaY"ׅ\[W(鞦"Y Tqӻ4IvT$SnBD]ZvLbljIiXc'5n85H &G]+9yH]Z{tVk\ I>[eLP#A=-)5 }24xessidJd+oKAn_xC_ V]Wn'+L +ѫx)CdUvہxA^8]@ί{-Nسpk\*üW!a =hCaG4jU9enΉ9=uO巘J7O]utLt(@T\w _Rߴ^eu \=w2`ˡBfYwYf9HWc' Oq$ i zuya[Ӯ+"iw.I9SGv- a`}IJ` QGdTŀDz:ʉT u+Hj;׮RyƱgxJ'\Fv?,W%eXLD$BYv%HN1?d~qFICr0>dH -_?%J[ev>lm;M3I])bvGoJB,dɛ(1fzabEb瑅)r>q1k{,%6Z:F[B\v^xY AfW4\2G߇Yg.l8suoāݪEvY`}y +gޱܭL\vεra ŀ.FSS)0I,v”&x:/g IuaDO݇[$&b$5ZgM;bY״[FΠ[T&\j0TZi:PW ᴃEE.`7q }u[+t|J|pЍhST] S* +v"0-JgJ.pXv'BeZt 5d-"+vusdn/ѮJfF) ĎScWn/͛A ]d.c#f[E~Myl~ r USOQ +(XPw6?uKYv9-#($6Rike.m7J t(^Bv#<֧eI~棰Xt*ViSQ *2?ilE"!; 3~ O+͵¿l-܅>(H^IJ1RE_ްz= !)F靋nhXr^@|}V H7kw;:lwRjƐL7jΗ@0>%UG2[&L+J\<וed=].{WՊ +Scx3=y]bWo 0uQFk rp< +@0gF +$IƩ2S`_]SU%]LSʫn3+YDL>ccJ/kNwhi2| +Fw BƯP7]_~Bu w("hȃՅi]+o"P?pۯm^Wh!S8H>NChn5)2ՕәI؋MUL@i|ԠDw\_PmfRw9PxqjyWY Kð.=kxw],VǢYҸ/U_K -n׹pݞa~TQ=O]!rq0A^p>1ߢzZZ7J=-,sPk]/[Ju٣ۋ+Ѐ/ UmG k눺邿vcZ|݆f+v5LtyFӴj7Kݝ Exx S[ʟJە2s+y#> _"phKCABd wWg~7xAe]&ξO캘-mIvnp"գsUqR'8`JYz?˝%^"g  NnRb7|8i;X*MO8iDL54Х>b@ ԴCP%LI:uc8̮ 9 Ӧ*7imu/PM5Z]߼6GvL}];B^X 0|ۤ5LkMIo?Ħ DnAչx:aΜh]iOQ5w +Q0'9[vhX}(2sV K'l +3I/n"U>apFVw0B{|l Ķ'i28U=󎂠;sOi1~ qg"8*^q$0^2>J V+(ϲD!!ϞG鵞&5x. \V6+)`ZN%Qw W&e(bokDcoQkMC3~_D&;\ ݺu7]Tn)rrt?uJ}PA0u .#FD }o"{Un鲥c>$vIYr!6`u9n,N+4ו}GFO[$af Zah ֘fS$bb%ɓ +w_' #$|n´)wLurg= ).Q(mp)0-u ݍ0['\NwT@_t3ڍ}.+M!T+/v_npc=!LX$J<"s̃oL>}F`)Dz\~z 8s>Y P}+7IK~@:+ʩi5JT +Pj/?3R$,U ROLGO ;U:5Z9O`J 6T3I;/;KQnHW )][ȥC   75\#uK꽖6Ei_ :pla:4V].h0 i<ϙrjgd]/HxKH+8Q_a ZJJ&W&XjR|hU-pmeޞ9 ^)Ἐn6~<0THħFEÚ׻>{ D" 3YLnJQa+}?ؕRmV+R tU1Yrmii(U:A/DK8D +0  /$~h |%JA~ՒxM5n@s5lZnw~AzIƛ p]"?F.Jx˩nMG>kE m]0g-([NX &F&"3Ҿ;)r-a-XC/|]=jjb^svdmJajԋiSCd6z!'JA9΍fY)4##?^;2 xBԤ*|Fès5qf FbAVZ>":he}泜Mor=k{P#Ou6z_=ITLЀulKEM[֛]m }B->I]mkf[[RBFlX*X5"ʼnqUu}֕^>-8p\X`@0_WPf8Z=W#Hv` {$6V?R4߾b]ؕX5=ҧA@ڰidVd[,ݙ'>wK6GXJ5,_H'V!\.`X> |8tn&ھ-"U*;Pdokc1GYC~-qs.NJ 19r[Uu-9)*E#nI 쥁TSchכ=>M F5 ->y|gqIZc{[#P"n̥F)/g/ámVFUu9#Oԃ%bTp}= II8%apUjXl^4D+X*!‹ʈ&^mgbRFמXkVCkCSA"=yH$x9֊jR#jԣ= `M^t?1VG_NJ$D`E sl4+oN +O~בR&=>)P`Z ҧl\(T6bibqKL5{ajgdlieonjr䷶XM˳T洙LSMǶe.JKz:E+D-(t:O20e{=^I24bX]SFuthK8X?S'`\1ѡV* aSFFzcml> T#NQIO +^$թjO?RMa' +jOٰ`d@`PN74v[JufôZ=9O|ưXߢߚ̕٬V &Ncm-p +Iyw<%JigY-lL|q=Y蹖tXV_ثMi9円Z_Zv o߁:q+>]-mj̑&tUٵH7"8I%?_Ӊf:Ɇفx`ߝ=7yBED(Q$OH:ém_8PxW{_8!2cξv^VkΈb0zn׭ad=σx< yN!pߛa eB"Pq⴬K6f}!ZnNoiv #'U% dD*O%qy WLl6۽6 E4UyQ6f0+%]ZFs 3`SS"_ G֗'滰%HH?' :Ҿo4b6·;s5Uӄ+rRzNNl+%5-!y3jX2bM˾¦`TWN't"= OEpgAJsY-ѩ@>)INA\|c!MJ=!SxOOz"=Ȏ)u*=#z-ONSpֻMFe"Fww[e! ECh~[CiQq)Q>!%ѡZQA3*c P*u˅w%pzC(kR Qbi'D4l6;崳3+o^23@@CCCm1>D_AvFa +S'9:/mg`1` p鴜 ' +@ބBN1թmnG]#VnusD`§ʄxHFiVbnAdWGnu+'ZAEonzͬ ܃:*'ݸYAIi:ŧG|j}SUZG:'>O;^,eE̸fJF[#=^(|q'R +O1-Rӭ&qSG2DmgaD6-P=݊{_MnL8UZĥG}Z +0 *(MfűmG%gd& !='YP@fd#CFF@ 0AXdyL xȢ@ b A 0dh|*l U C\_ieR1D!CBfdڒ3fmR3UD}u*Far.T[2 $-'KRc.1S v-9>SB%8iw@MQvdʋl GDtuv.1 +f7u[KR/!ZrjJ즳)xze]Vp0q蒺AfR}s +CHTٴtI)8@luCMaRϿkorKX(T>ͳufHyoZFZY]|i:V8%PH'3X#Cc~Rn(0]|Lg\昼U[W\x{q#MgEqy3Eh @Q\`E\Ef3ݥ[WE +ݵ tٓxVih0JraLS&#'H!)uצnRDT,Aɑ"eHKHm +ۋG5oַs^u lq̐rv׬XйD) +[@\A+{˂S!C,xߧd6rZ_LPn|L x:i7y r`t8xS:הZ 4eA7(1Fx0I2IL@dk1qR}nr +59KkhW"q]>CCڥP03" +OÄ(L3puS<]H+RL |b-hmX4=`mRyHq w,/.PRYITOTNVR N -q6t2soSȳU F+35M_;m K%-])ZEݼraY徦ZK[ +%r`<# 0&TOJH^wTqk_?sUUi{={@ޠpr")1rD7oa +u7:[YyEwM>7a2XE +w}nmuE"F6JP>gALt <2n5ޒg>~WO>?Ms`&/L +OV8{yqGMN +k,r:.dTX1:!]BU\2E!BpuȺ5ԗ8`r +fz˟@0^Wvizk!0'i?8bo5v5q.y"N\) wU4 +y $AJ+ bvGtuKK=Ψ۽%%|5_=dIGLLE5!렡9 Nzt=Qh`kwURX8u ?Q怳b$_AJO5~:LQ7`|jp=bV^ O 3Lx | /ur .6\S!\6b5S{0]x8n5]庍..uwr{U+̞λTxBb{W]緌sY`뢸nU[7]y%Sr䱻E{t#u.L}ml=Hqܦu f/cRýJ!_,Umi44GQW* +9vPj-/uP' ?3D&P 0Q@IZdNH\D@ q.|^:uӊRE]@ҮTyB 0;{uV7GSUGZdARDk!!Z-x}#H0 ۜPZ#{DdY胄S)L%E + )a\[ݰ떩 X."4{daB,&u`i )5cAq Wޡ,dajo9b8^i#!Ykq?K]a2ӡݜ0EhY@E[FRZܐ3e"0 ےֵ`jQF+pa4S# Q[7,2q0\URD#97JpKM`mӗW"P?GRv_V{}AeKK=9n W"W0E*q.⋅O%0.S)ض㇂ُ5R?s]`QM+oLdn #~A$^T(\ ?tCai!K/'~ຢz2k5xFLJh#̶,[H}i%յ皅tw/\_[ 5_;É@uZ)*̡mMRo,͵azb0pԬf79!8_]\Qv]G,I%r0ٝ|Ia u}ڵN큨bމف2(tpP tNR"Z{cIa3t ݿqW+}/K}vv5T1RJw`u.[0O1B0yi-&ɛ[nܣd*g~eɐQ))s "Lxa0 Ɗ&&I,V.]^}k>?iAawb׍`GKҮ:gc6E{L*e#`hPOh)4GuĄ-J^iE.J +ɒH*s=ݺ]vOV&SekUwKƗ2ƳE*AN{AiZ_w!vpooK.*MAU U).9߬Ω+*r|ba>~>mw>k)0 [䥐v2'ބVopnno4ܙO䂻eQVxdjYZþ$r3qw{q RZ.A G5( s)Խ8RQAjj{X.zVBJEq񏬴JdUwCRۊxczGYŖޘ'/O>37A>@J3{0SVױB''-ne\|f +ԡ푟nR`Si)P|Sk`)fp|b'/0MkmdEbuq6py3U2#[Ź>pe=mU* Wp7R~XmҺK +t?ݹ|9$btqRB:; av[pS񔈢CrsUfs FeE-]mt<\I޹-^vdJT$2yMta9 B$H܁"oGPΆȁn[mD.v1ssL&ېZ҃qТ.oFwݾoǿ0Q]af3@1!ם5 S 2^Ri[tIOH)c@Kt V7`J0m${ Kl%EpnKW´ec$?Mq Կ$ R#J;SêKWM.u Kn0 H70bG׭I+腹{-Wӱ#m[Ft@iMmd@sIt;g/wk ^Z yXd@D>\QAג)#E8Splj|crF)vIOW"3 њ.\]x8bR AI^0J6x8S&bXLh̷Jq{nnAQ +TZ6D˱1L .zOZtf\$́G5ftp>n[Pཊ݅BHo]?֮]buS`"&saN%-ڵOUqN8" i`S6((s;uqLrLtmPx$'M(^r߳Ue+!/h^mtɢ4ȒǺr?aN~y4DZXɟI;MSxI1 UhbObmx<$Vbh%=㬯eڒMX\k9E ɯ.]"-)!9)v_61lfΐatyV#UN٥6'U!I +N>kZ] + +óa-zܥhG[+]DI|LqD cX<BRWĄ='O~|F`IV\7]*jjY q`u2k6!fXo^ȋ)ko}QYݣ{ev#2/# [MzOϋR_6G$$te tF4JؙFyG.gmȡCԶ^32j3 AhgEzE pÝKNRS lp2YMt]1@h[GDpK_+e{{ oJK8LK-ݸͩ]RJA4;$o=.GZ>n2] V^W`&AL\nK͕r De`]7gc,>7L Юzb[ۀuQ ]aĸZG&sQ:dp)L9!c+_$7=^0D敎D+vv~~[ݠ:z +cʛh(u݌"Rס-v,0xI~*:XR2{9Q-j{NŪ)ڗltWGO׬tO}LeIKL4N,\jY)-` r{}̤qo5rI,TFh1>Tᦃv{[W|nbgۖs=%i?vSdj,eV$}]BKd;F0ݚu z7`^10᠋EvLh0ո7`L$4^ߡe+:E;|?Ȁ1u# _<.51Eە|yXڝvur)Ħj Z]q>%3c x]Vܓv+omw-F>{+LHz@~) +|h2F\I +{tvBA"h=,0&Mu\F1I%b-s\a?X<uEW4]t`Y&G]LgYoiw5p>ˁ3.v|B+d +x0ʴ;ߪs]u0.uK\ZMvsT +XiBn??ڍ XN`EeE&?K`:D5]NRK!((r')X,75-vO#' 0kMq)/ٶ!+skCeUNʯU6XF6&^zrGn!1~x+ނP"lP/X"VH[tx bI/Өk!ѵ%A>ltݔɮYOӲ+bl +_j" (Aj3l$};o[±)Q%.r] B jkՒ;Tٞ'VEWWvALcZW …n)Qa7Qg + D#s}ϐ3Aqu=lBAێ`k]=h^6 YyIR/jNq uuU$i +d`tQW) g +/!=&`ﱼ6M#ӌɳw](Lv_1}v.~vAZ4P%bN\n/j4$]A&EW4 +fŠU&áE1O7qK JO!U f puFޙ7V +xڼㄓ3X +)u?r/Gyf/7+No GhwװQ m(Fk?\stDU3Q]WbgTv{$|@Ho1#znI$+ j>Vx9FT'D(Ⲯf[OV éH+(:0Z[۟wLUgwd˴ 9|һwn# )Ґ93v”ȕYvdU<*R"ɐOռHP # .u$]КFk"otaU!Ʈ)d Sb]-YMv9]>cKR7xԅ^mo7ckYhWjBc1v<|.Y /!Wqj&S|xg2lE(L0Mq +`&]YL .脺ә˳Msh-Ŋ݉q J6̟H$\0jnXG|pIjJ׵A_z$vH(AL;s=/0x-ݶR6^k +tɞe;5^6D%..m9i9."vJ=e~Us1.duI^PƃQb XNٹR?z^rUQh70TH Oz~LF.ap"^QLXb7yg[72*!r}+>o3Zb`ZȺ3CѮP⇋g݊-&KڥnhKiu]puu ̓VF.5%m2K;>cUPELZ\&L9I 5vU%o ^qE/&V0Z] M|47S2wHZwER`Z7U±f!ڭaU}c^{(3*c7oQ/\u !Ott 4gjn `곞^ ?ucR?!z_]d^uzt1R"j",|WݸoL "`Y2|}]]20gunv7 uTqa@>TuZh*_ E5~"TD]S'ww?s.Kߒ_:Ma'v!;{\۝JN>xyQL +yn>gRnڅlGMOƋ:;"NN̷KkTu12nvs[CtL.PE=ƈYf}ՔEm_&-*Q 7fLHU9/qh-]"sk4O+UBO3I24/ ˞J-C臁33"exn n=D%Ct9 ާu K91:k%"&q95-Loc[:(}-V'˵j7JG1=]kbMS`r0 [GvM&7UZAOݬe"2u:|0砊n 4 + B_/x3G-]+rؤon@ё)^|6h* 1r)elJ;o/a7[8Wix/)0iybZV3ڟ$KÄ0ܿd瘈!z;/[SOM7,z']ob'U@n{~Ye}墋 +\զ tn]y;" 7]p!l +B7k;ՄCf9xVgMˮLŅ646^sD QԁZ]JEqm.٠d,&.[NhQpI r &v_]*;<^.Yw3)3EJ4i$c +H]3]} +Ȗ6ފvߺn݁y;MѢK0)ވZ:#M}1bJ!.bNѮ|0Asڅmic.+S]43eGn S 1Lva:ҿ&#O&"SuymV,QcۺbbWvY\p*A9)+aC:?Q,LED;bs!іԮ =l=D8VHv4ɥ $a͛W<{vgA)3p>D{}儗4`YRz|Q'78= ;uNL 9KCuL.}sP/q}ј0c:4IN2r2VL$"\_ݸ,ZF*7vDJx}6I#?TXx϶ԽGחڞ^x/k䴲 Y !AkKcmС]b +mrr[WCq)QQQ kS1(uK/T,9+@ +,i;&=hJbmhkAk0o`#^F,n1mnv _E:i3+L3ogFe ЛT'p]սv)LPuuaծwYdخG.]S\-0-Z)VkӏISD+|.\&4xiyg Q0YV| VՀTI%_@2[ +("-lЖ^Īj:*Y#^_=Mo깔v]{\*GjgłۖO+9C k*BBv )%{,ƅi5+=RD>/,=TӠ)%]%Bnj"\RSywnsڦ' M%r +,lShi Pppd[0xIcumpKwi\,PVc;g ԺUي_jLH ,391MhSܘ]ls]c +te*SPի]9s]uMm8vJ G]+Ur.Er];7q/p;@Ԟp/~-&C0fu;y0LG +;m7}h2}$Z|+7Wi"RM(:IH۽u1)1% Kϐ7n-NX\Gt*5wSkdpzԄFLt>k$yGQ=~Ci{sk/'w4G7b)SRm#>D%UTldfƑ t{;<'Z0I` %aϢˇn"߅D'0dэAp*4WkB3N(H2l1Rx1ˀ NavڝjNS6ȫntݯlnE64:Xt9elY^KIYHw88m +,v_^w)`Z^uU{NRek`bV}.(AOЂo 1IUva0mp{U )JyuǘK QnGY)r8';=L';4ď,e &PcWYK֠$@5&O͘$5ueU^g` xg% +LV)8t8>CKvҺ'mweڤTAf!>Iq(OsfP [@}TP3-4 +2+zA|ʒ.nxζs4)<6haiQw+Rr,ɺ+2;=b13怜kNg]fdҗ&s\"|hK0et0 fd|iQB{vйn #BKIhWsݢ$ppP@Շ֠.p "MSe}(Lܭg̼XhLg9c܁Y0m|hqK>KUd$S@**~,74e oQDWhll}"wIRmW݇s&bh\7jq/W YUT /a6( /PA$ӫڑ;1 +[J0>ÅtDNC:3:?Q$)}R2^yçU&97j8r]YѝVaݥPW +/7 -]ԦFnP_@; a=)Q(/D0m!>!IMa եhRΠ"/1[9fn^#M@ RG Lkl wq{NNA@ ;Š>Hn@=Q֣N~]:$ +.0˸. &lqL9vǵV1aHݔx6tx\OaՕL Ko0bZ gla)ltpjWPz"OCLm!꾫Ϡ { o-Lwadz"vBlFS t:9D):[#}?d5vmhx[K ME>.gdL\@t^U`k;N,ZߝkJ SĨJmEƹ,\CkPᘝPHl +a҃JSnxl\^) kÝbtX^*M4(ϙ¤Ю'_,;6r Ą8u8MD 5klkVr_mT΅7:'})7W,AܹLABA>ƥV-#H^l[1Yy!q Y˰=뺞WQ|Kk]!yV.z.xu'x|SQ.PֺEϒD #H +9͘Ҫ]L_`wl &]w,S8K(OunqH B  ƬSmzwTN/_ˮ9cw|'M)R%^}Lb_(2AuU`rrb7ЮSL_F]yK{u0)4A9X SZ'Q]ے +Awjxm H.n7]ԍDaj˝݈Qw{V܌Ki@0ײJ$9*@_XVA-:ı{w i `v[0^DXPj?d{lK֏J  tiހc3871[NorGXp~6t@(HC+{V_h@Z[rJntumR',ld{F+r.Zãg5\HJEL l(|~Qjk)Iom9r,s|cG_RHg#Lr;*LiPsHQ)^׉)k׸bB>Mns0 +!DM쎂m*ظ)wvC$F$Lqѭn1vg֫DP)̓i\T0|x)U{(j{L6,uWLt͈)ʄ0W䴲3drAң_-Z_1PޛVZFvі"p g (m݁Ϋ+%-=U<7].)I4D߻gz;~ƤfXრcuelUS_B/%-RUC}|\=ks)LG9G!ܺ%6722uC|n]PԣjC] P2 +19GCл֝H&(u=I@%yo0J#vMd -*Ἄ5:¶`9 /}t*uh &b5| t*Mµθ`F5rݪ^Jk.~Nh,햅IYU\0`߄םFz4u5)y-LLK`aq]O!b;[`fLDB +SЦW 7SouIKϹ%g"=piÁ +t\X71vT/qw]%qkIZ DPwSTT:]5ɛq(+-F]e'6h"Nvk9) v:w]_d2'LV ). nEX;4E}&iF/n&pEmU"]99&u&˦@lSv`Bt"eNo>(Dæ`+6n 0uC(LR:BVXG{פ)o0]tQ8޺[jjgvE*f">ח(t4p.,/y[5]PS(ӟ9ɥVzMF?"^e4)wdk \lT!)vH +ДAl(jfçF(gqơ3t\ڍOur+]\eR/ btgRI*{ S)>~uvSƶB}^Q4{e 7k[;z ϧ7b2M~K7h,|%K +rd`ڍ͜(̛u`*krb #oeum˲ 䓫O-vuZ%G g}TuYoMb w;D:%9HAV PفړZ*Uו㎺KCx0D4`"7t[]6P_W_F\N+'].?/M/]/'RCqK1r.fB ,@9C`v z{% qQW0`[!Z!slRvz'B۸lqw@3+3&m|}H;ޚ<-Xׅf8=,Ez݅&ū0ި[K2{q1L¢wa~ :vGyV^Rq{(^U)ywuիk= MedA/ +v_jī`Y[(jWKiL `h 4: sKEOo5Sk˖Š-.\w<.1m0_w֞::W{r'Xg*?n>5>ﳄ)"}."qXuj”Qy2rX:_]ezI.Θ3=iެX>.Rq٥_E`Dtkt$ڹN0푃h&b%0 o cnnaSY==əhm)f)5ku]xgܝys>ᶺ\b=|bӜ K FLfCt~)]+Jɍ&7wU|It"\@Ɏ;#idG9{VKܖwS71tv̮KmL +-ꌋve"'ˡ1LQ;h#10:D j/I6J<'@\Fo߃/IblI@7NPb'uDn^-Z +=g +`X\wf  U+z lt31wH4 z.NN(Q?k3 Jϯ2NaoiX~HaF'Jġ:Gq xMlI%d&fNX x&oX; +rL})6ێ4TMMAІ"F~R{a%%C)

L[Ќ #I>O97 _Ӊ~ d[NluY jb^*58+繲̆ f٠Ry0X< } [_k:gՇkvVVPDYbz[f/Z2D gKJA㴤R(@uя,PK '2Z݆c+d&9mfX)Ǟ2(B4)#@b<е܎FBQt"L)®V/ +0Ւ +\`#;:;n)s +{MhqÄ5n.SUReE&{L`Fsτ` &%;xD.-̋R}yr0 `OōK 17ψPį)`qST=n]{d] @r( A`Lh8 &b@@cm6_mD`Σ!^>?HY=R+s@XBAvLI54<#`l >rtkln:=2z!Eڞ~"Z;f=Du8u^}/=x6Eݺ:Tx|gpƤۍ[::AVhȄ$_Q3!~/L@^ +Sv3fz;DnSAL M[>qspfLf0m\,H +h,[>D *ڂg&k h)jt~֢C{gvfP u})v^uII"n6ln PRD`D|K"'ϬGA^_N76rnyJ5 +_wU!Z.>stream +!&h€%ɥaTޱH5 A]"jzPjJmLqPT;ljq/D$ e¯4|:EUYmFܘeX 3MX_Kߐo|mXΪKR1 Vv {+G)PM$ 7O4y5XLEL-˄ #[˓<( rRsU7@1BDCmR-h%G@Z=S&IBFU謶w&4iH Q)U(MCڏVńO O `b;LW8Y _p. +L#fSmsY.LkM<{SƇXwk/IgSTwKwd[k)>;0fw MQ~>`(AT>Ӿ4n=yE06IqϏIG,(|`c9 !:uvV/_G[ixxoɌ\/[wfn0G71 Q0PX0` =z%rG!~ !zS,5ӛʨ~.lȹpKs![Rs,\ fRcH-yREu >l/\&{(h&F%Yib\7s˔j|.qWj௻P&; y?wƽYu \7]i1 GŘ)v뺴0Ǟbbǔͺ} ݨ_ )P7Pw ~3ڕfkhS1.)Pr5;0ѻ JP:e&C\[AVu֕ tnv5SWϊ_X[%aڕ2| +5tG7z %{u%t ȗY ̇2TD^ 9 )'w sa-0s] I# f Qw5{3l%zwϵa.2e;.(r탱8ۀU:f%]_ѧ Ko/br.*[Q6m}tV_wK,{halvUK>#Aԅva)Xiu3XD1]V󲎋i}غ.ᄩPbs&]Xɷ)6n\"DlI -a!5"{1u}zu(M(Tiv*of1|5xu )Ѹ{=g l|]\ ,LX.Fr(ubv9ynt4~Ť -nD0U׿_y"qw9a˶2ޥ0P%m6B$@]t9z+AR2hbq׷Vs5QOx\ӌ)=AXn/NΤ]cc\Z'lWWQVcp&h09xr4EۨW0.Ȃ{.XS.s?cZ:h9ם.!]Kܗ~CbS6E`jy\Vi5L>DQBh $TauInFg]1}18jWcɼ|] `CH} 3Hk\xy: Lu'$N\8vlvwCWڝޠꎻJ #<=KZt:f1ڕ2oX)luyw?KK~T-^]S'A񺭗fQՓ viLwYU1 =r>m=S`"Q ^R0 j`5|zb!1huib:}u5~.VdRցvӹDn UG4po| v]F-Ͻ"=# ȘhQ%3(/aq˥1uy%X<&llGlTf&xfQ~3:Ԑ/c Jȩsn8u uZ& LNf0PˆJR'ҵo%ja3S&U&ZY 6a+$zǛϠ]t+=VL zJlsIY&9Mԥ@ZL`TLc"{)t£֝}@ֆ9]t99&Tמ{^BdB BDzSNQNt.`>Pyv.~ bVm|VmFp/R -׾=k?";ujY)2C%hmIcܪvFbh K1gT W|4Ur;jNjg+/P@@?BCz.0 {r+ؒ4.\JyX<ʄڍ +kW)i;if +ad[0G&ya^)b̌*צ6}F0jwE0!I>{ % \FjɃ0*Bl]'nZa+)Ê g"hA>t\v!趙%q7UQb]e G>udHrn3j[wPDv~TȀI)2jWF7:iwPpм xg}yp.b"1ޝrDm9 מ+ H_FgaWJ.qؖ! }Qx]ctJ7H1>&1h>>TbeYƋ 2uZ}F=r+7 1S|2OԸk1 ?p[:8 }S9<7=6i(YP*(ع߿v[ 0ŽN>^& {jh:ORG*Yd9,@ةU arM)sLA2iwNadud4ۡk稒 Ra|,-4&.*֎:"vc' $]LGAd +T.$/uWnB6;uӼBbLVw v.LM#Ȏ*yI]-.bB[_g£RfQ? A] Ƞ (CLp+h&," m胉*uLIIQ#,vY"A?/+&t*VJ7aA[*קNijn'Y>Q _3dw|[v~4 5U5>m ~:qzo/(`8KHi{*6+n`yHHწڝLXߥDҠ<k jqƀIf| pkXLT*Y#4yJ8| &RJ7i71L}\WР)iO؄Ld<5寛Q b}|B}>1n;&3E/LW'2?c.jA/N՛NM <٧lxMۭ!ٓLG9 z''KQ>q>>E;2T@tZCH~sunWݏeF~YNvsPr{ww vRBʊb5`+)ZM"X;ٍ=_s!0{tO0گpvڮtCtNf@0z2SpB+ߒ{ ˕Ftlej` ~ nJQyl2(,UA1qiZ6iȄ$Ĥ" V(YdcݔxuiLw&BL&Vڥu9%X>-R^Dfؕ).xSLK)J}Cb*K}I_8\|v(LvwIM+\>^vobRuŦT-D[!J|BFںIzv\W:U]7g,7WJI0(ˇRՈ.tW1JXr㣒6Y0C`[_RPW'>4\KzlAQapI&Ris )蓿1OlbmOZu>W}D,ithĥ*yIϹ;M@'^r!Bb7eW֎ƉW#EdVrПT70=O8ap +4Ř'a1mWT]!v0\W܁n +SjյEdbf`,|*#v .b1LEnZDò.1v$/%[IIS"r`pt]ÜpikG7)fÏKQV0TGu(n+zĐvJ#@iDSyb$DോqLgEEnF|&i"KS|xIZC_Kݽy]=b . F+ _!At@ +Oj&J.9xEiߞܣvۢ{+/|4NL@TY{깟ށ1Gm++TA`yt꺉%#&Kk ִ~Am=KuISǴɲ$_?a^ä(LN´v*r]EZu9-Hkv׹p]U7]HSq -Lqn4%6bTYĪ 2 I1ъ{}]*VDEov +G]m@[_&ug톼9$M5)3r'M@20؈WCwѫO#!yKɒkU/T5dIpwTʒWbS[6n"W7#a"-lr.^uBnT]K՗$[gvJݛG } Ez'Mʃlą_0xd$/yf1..\ޥ{ꢪ @9Fu0E9`:z#&n056qRFk]uI2 v -v5NgT8L-]v1iԺ@/$;(Lɼm! uصlvG֮tk5nu` 'Z&aȯOB% }ݻf +uKk[v{6O&muuU nΨR S+Lgݧ`nz"ނ:*pCS#%LMdafi[*(ak6vnJu + q {vx4W%л +#$u;BIG[Q9.]Ƣ.2cSd݋ cN beRjۓc?wa|>.["6 +u`˷N|]5E3g:G/}?zp0,[\s n+:p Ҙ7a + u;ub x̑À]ᛷk:s~d3|ɺu0{Dϩ](k$Z_G$C`mʹ\qY .[uեr`:mݵv)$hG1 /2$Xn!BX:5\Ffa0tLNUBY1]$xشaUγt+׵eAˠ}zckv!!vN8mG8W]i=X{^n;7{$4M袮!՜ O-%ό8C?>;Kĵ%F" 5]bJJ`F7f\iLXpga]S!j6xtvHajɺo!`]Ne5Ln]2_ ׭)mԕ3&xl,OC7yם$~F]xݤ0EwiWSSNo*imS3\Zq0cD"!~Ԉv_KV9:Qx.$tW[κׅ3 +h +u1nLnC& a_wպg)$S)n-#]vG+ I1 +PaLrwA("uv]"ݥ0*h U찉>1ijEWL .vL|b:1bycu~q1 +.hsmik\j3Q "LyBsUYzӚuyn=$muڢ&A,>^Qs8`Re""C(Pk.|1RK 8(iL&TP8wUH9I0eAƫ{SHܪ~] Q*^&[(9o ӧMq(LpK" +S޺v r݆eLu$bO{O#̦cM<zua`J\ݳEum"-_Ю׮WNnc4n +u ܦ]F9Z9|P0DFkF2ZVLM6|Cn,DSIEӺ]kedM0o"@lѽOd j^:m(n3Dpp. *vt%vs7*MgPlnmX%nKEߵfvN0ZmvIwqCrJ@+D܁Z1zJ90s7uGpr]UPX[GnQGJ ^&S4=iqGrʨ k>?-05҅%R%Kgn+=`SWCf.nN1/lؓ{:Jمɋ`S>S5ޮi׋Af#aV|$s¾e@].bHm2uaqL0D&o(Sj0ג&_ U½vhRFK^(5φ$:GMp gN"G؎lP83h]JJ{?pnQ3%ǩ1ʯ$[mpe꡽| 5nfJΈ'rt;8? {Zi1hWE~ cu m5]`6)+?;/i,F^WRuw.Z^70BUA Lc.!.]b7x0yv^p|UMBERg@bal1SlJP0S~q"(]8FKM-bUQ^3tZm%)bNHRg>.Y=fUԉ#ŵ[MQ]28Qjb": &f}{82ȚCByt?@A|%3N $J*@-+껻Ӯ,{,+CˌvqXu'hώsE[z j=ߎHJHϥ\Ё; +_sCP\id,86r +OtT u;=]Ƿ5y4L7`g:,!Y7eWY[`S%d* <_r]] y׬:Պ|-{b5-뢋'5٩ b~}\EmdwSIMWv[y,Y0+LE#h .uwhwY0a1'" _k`(FUFP5W4 +}>s [᩻fPwS iuH\9As&x9 0!Xܚ0צ6[v&^L|i`!G5kFFQl#̈p}X}k+\_!jxy2\ [y-71bsݨ;pu8~ +Fݸqh=: %/OB:ˆ24:J%2;[I]~SH<ѥ%?EL1'hw,I]acʐ `.E@K.L=IFEd`D?|Rukv_0v_|馡H`7bAT d` +#.`k4!xyM(ZrׅsS/`\#;MH_WR E&y ź%7n\^[URLά_4çJ@m%BNy֨ ?Ks ?8Ǽ%aBL|?2؂I/n~[Q&É㡙DVHA `&;<Еw.0/: "dXoK~#[x.؍oav:骣r(?#WR>_.D$y4]Iuق_̫oK(FaR\L&u GkLR1P .9pb"ci]$E=3 +]04LpÔu/D*̂OsG~UusIGE08,$xnzrӄ uEKu}d,Pw:&pav5%Aў]WjMA&]cS1?h'()]&UPsS +n]Mت s֋+WPo~wh:>J,݆D!%W\q`/B~lܸ7ipqH*ڍ97$0䁯"uq52<>kP (|--[#֔&B> .1C*M4 RXz᧴µK>ˌ/xCI^Aօulia$gC.yb1κܞ`E.CYW3garf=W)Wp~9خ.REA[8oݙ¤:u:H[`en0aug]Caʎ ɯ+7'j-oWPNc4bB +QˣKr(19am®Kgn7u݉uu)+Y)6|1 ]HZ“{֢DL Ao1"(VyKls͆7 LǦHɨ46ŋ\,-*ܮR%f]m"\"Xn ~MX^\4)|#:]j|&Q<0_hA(*̇N;yjXNK`6cΔLV~} Ӗlx:1t5-eY ߾TD;<򤈐l (K)JbRKE?t yH_Fۇ;eAL45QC.u]M%bShc֥(;GppRLs=MƕEbT_ +b.$Ү+50)).1L=_OS F6Fe{ZٵԚ,U|C+uKqZz &$mVL8LUu ulDiTPuCQ|r FwQ'D$Aa^X` .#0LS>"92u%jݍ(&8 $ApeBtl6ЮZ }hzl ,fa3O҄v8).xޓV}}zż`8_%r#v',(k7 W.~˔ԛ/l,A[IKQUĢKnNME R$L#&| +{yֽ8Ĕ{ʪ-Dj5EveL;Z7Qxz´सPݙjXwTsv%zkuȺ4+]pmػZ'鸥0t_d!{& 7nZU~ fWv{S(O"yT,,z2a^ vQ|C5㭆^# sM׀/RO>"[\`* +-|CSt#wo}nniFI ソcZc,TZ*y%;0 M0R@R v ?_rpЮ0~)z5A c:D.0q]i&<Oa&OrܧCN-lEU3HB6κ|#ՊlanJkgPR)AY.&ٙu.[=OdB@2\%kxB[۵;?^9uXKa|\׵ܫ!(/sm23g1,m [QFqqs{V\2 >l5q&cq&1OGv–UD ;BOh?/K<Jk2Dͩ`|*6Tec Ej<,^{n3ڥ+=L au~G|O=))ظvuE]-3n_-{*P`@EƮvu*H6,KeS@-i0iӭ%yHιn#ih7r0.]9g +.(ܷPhK1]iM5kvKjq +g}n-Jj{(onvC( m,ŤN ,ۺ6/L28bO9.|* p]+b88lLqԕBL1![>\ifu(ubR`rv-,\BmukbZŔZ]1ycWa=V׮:'t`7iA%&4\4-Q&߈Δ +ѠHc@sO"'EEWC mJp +K hs˽LѮ ^qqV~F)q;ÉgdͰQ4=xqjϹz;[y8pW3qQ:En~kwq!ַ_xbЮ': oq ;$vh9%UV;_t+bqN W6 DA7eЮa Ru_)Pbt2ߠobLF-w}5¸ 2).`hu+88KvL֘4ML?Hj$ D~/61IRi׭0O<^h$?d]|QMqx|t=wWa d;x)r;E tוaN\Ү]k)@s.irކ~6)wT/; E&hT0xmK,Ģ7l?*=rZB'jFXҗi,xFm1u==֔Wgܹjt  [uAiT͂rސu>ruKb.qt e KJ35D9z,?jD~SJ ^ +R"`͞}uLȄRif].&zwO)Ba>!x,Otquh 0_W԰b7Au+لW>?x؅f|x7KEŸ" dJ1%?)V0i u m[w#R)SGdBH 56Y:F]P8xS4 SU&}:/ZAmyb.xKǧ!&"sTh="ӺB\3]x/ְ|$ݗ|&*4yU[h }hӨ"V/LHy@AHݲKw}/(572btwlB.o6bnI3.AkS82aWoHxK_H˴7_{aZ퉖6Ix7T-u2#fؚy$=p5wI9=S +L% +81v7Av%9HU)WNbI[* +ǭ.biK:PX"L:N26LK݇L^i]#ig4JO ]AY6rˆ~p + *̸sH$tk);׀aS䷫gY`24n10lnls]ĀW 2`&5%P&WY) ^DADSc Rv) f Aj&0ё6jwkwcyc L.G63h۶ 9L6m"VIPMq1u&c7Gr! Loۜ:AR/zpB^:)){␑/[.ty.l#+6^怹5y< {͕bB^Nօ@wu|2]%>1Sd} + 䣁vI +Zcwc$_` !&bzsҮu#3Z 2Ʈ)h5L[L^`X ]19Ŏ׌ݷMG7s0Ͱi| LᙑVO0͏vu'h,vVw-SI+p`v悺”zIDPv"v-'CLa`AAHu"=m_xP( e4] vg6m(qL725Z,eňa,]ԅp} T 9OPJ1ǝ%lhqƣ#g T! w`To7b I)(x*ƑҤF wyaLPk;;9V4JC|0@Zr5"'%ƴEr5Lަnl6-zY N!//%rx7;|N=tq/Ւŀ/!X\Y D#&Nqjf^UH67Yt/Lɡ_u]UEs1xgWT2-(1 +!k&B\HI]|Ey +HnhaZI'a-P#ձvTÜ/'qRF2+b ;|SZ}1,RL 3嬄aS` cIpDΒ,WVSγ'kb@I9ę?ę>qkbW 0kC݂jKCvQGuo +ۑb‹^8;`5X54*0]W4vf*DTɃ-Lwfn!f ,Ȑ*F %;0 W!HSwy0%ӽ兣>`]X8vF(eV||=<<λtwvro8N _818.|l%WI';V.kYWAu*G rQCѴt5"?B)!:}b*E-1t^rPLRiTG[\3sbJ[2\DטjgYY 4<(:I|JMzϕe$xetXhsxki T ˨\&éŔL⯫Bjɦnmfpjc 5 Ԓh?l9snfم9olwŴs5f~c@;;a>=$ 3X +- KG{~Q(*Q>&n`Pi`1{{{o0Ğ4J +#p "@ ^UDpZ{,zq7{FӪ$"k^`&ri OXAB5W }xh_-Y @:\.smNDZ)~fוY}OSC"n6Խ \E|*`͌óB%rO2)J9'pk,\.SlPoLyXJgٮMh+"-D=b%%p<rPDAāefZE +\401w)L'k4+ i_2V`jtAUn"ltO4x HnuB\=/q}faAPnN|Zԡ.ХE<*5ʱoVwY 4}*#ZtTEmIؖ2(V@BL*{/yqfoCip"j(\9Ui:Ai'>.[tlUE.[d[4w3=J<|sϙKKm#M*[KqZE>伻8V.qۓTfeB=A` +Rx'LK#^%Ĵtoyw߲8/<ׁƺ~t{qYTmV+aB-9duSSN]SB5 +Ym$s +.d*Z;JaR3ZfxQJ±cŴ#uTSѦ(z!Sۙx^W"*94zE`N, Uжk +yEZpŭi6;4{FRPy>39~Mg'$$xW.J{6-D#Pg4s; +5)!tY(=P'Jb#;1%^Bꖔ96]d: +&}vVC*oDO3NM5i[$7I`eĵ#?NʛY-jZ&ȟNݦ ?TґN MET1n0H8'y0- A/T~;};ayZA(x<\YTrj En®rZZ/Krн릒p"y|9\^?-ZRs +|FǍ%7jN *Bz㱭$?- PfYesy/;{|{ +(6&A{~H"RPP<-'M?PwrʱIR )4-lB*׍~+w\yxԑ~0YGnӌLկ:ܡZ s ӵ-$cR$lA/5ҬH`Qtd2rRs~/w_ẕͦ2 {z3'uoi2I UcbԞ T=!W:}^yXBuۜ'VQvQx!! $#f{>ڶJ ,B<#)Y4d$w2iZ@%u'TSE!SkA=ܙwY.a߂Q1NCBB|^C|G7)xvrf=weqۙ|`511t:s-wR)Sտ +* +=/Fx)hjxJ@* pZuDc +WN4ÛXVS`NYo 6F5HQ 1^1], -d~6 .˦(vx⺢$U$³wށȸȍ.VTHA(GE:}vf2_Ǭ_TrY œN +fal kkl527I936m-O)![Q^j=k5<8p%ƦBM"K qeO +g(١)H@C7cPLuMP`rzgQf7noi"rO$'dVw,V[fv1=GӧTP8n ,F]CM1>b]>iޣ{1o'Gf1ĝ"h{&'"HIϥO}ݺbX:\tAcSഛSM,-BVr%ӣ0Bݜ~K bZٮao0vrnԷ>V\gD]aȿ;P&3? +Sbw(?PEw.O)n3UeiJj#r@>P *4 c]J$]ב.Ldcw3 闔uk PyrTw%r `|%3pn?4u4LvnVq^L^S\Wt֖/ěD3"KaYm 22z2 ZEq{s%;԰<ų׋¯5mod \wyFQfiȾK:Ks]ܬ62Wrv{K(B=vxҽc*p]_7mkW,"_]:Gf9F7mP\^P8XLѮcwۙb}J(\7"Iݒ;_w.#Dv Th]_쎏kQu,)"yID_cn:㍱LvSn(Ws + |ĘQ̺#^UDR0Kf`FNxotUUIUO! I&xNfw`tcjXKbti;Wԑ!ˀ4vOz eԩcju pihMsG%'(=%p[OLXY-) +х0iEB~o5}D7.ņ5t({ ̜R͗J79n k῵ufG X]тtFQ6gdM<2$E^;fK-/?峁jb:Q:k*"$v/u>hU!lڞm+J -sL?ҙ$LӉnS>gq9n+L#;L3MEnA,'&)njsP;W@&AL\;` P榦@^Y ).wUq&2lbvi)эB_ݱ*lFL6(%ًsM0{ϥ&gȣu/dK-A-F7>Sr5 l_x/4S3'^5]:uYʣ.S2x$4c9:-7+*# [yIP"M/k*,h!0 fX@AMt96Vq'I9ET#Uc!f~yrn T$*Nj|]<&/p11M?m .3st#`܈eV/ +\:=|w0_ /ҲnR  +ӕ\9J*_τug㯹DqbT_X` +4LfFIޏNߎ]EWrKMnGq=p]SmON@*nieJ+J]Dbw%7$xcˤfbN(|-<ܬtPA$l-yYn* +Ut=so=E.馼(4)V 1Į@!nBOa,u#0Ã?}n&YIxH +څjp.i~^#R@"^>G &.v`Sh=.66Y#m߀AL s,[lbng߉ڥQ`,;u?)LݭD.iWF+` agn΃T'@I5r7< +_,L5nO~u"t^JVCqZHݙe0lntz +tY~xunK i~F֊g>,K-8W +N[&t8qv2:=MQX `eU֍TQ]m-5jge㨫;1gd:&n$xkI[7`9ΔPP33 k/.A}a*mwdgGK`uS~+:\ |vJN4ʧ;r&/c]MZ|dZv枣X%TYFL&}[+[OnEhw)4KSk +֍H] .TKa\vsT= ozbBH0w]aSdp]L@ aP[ЮRZKj=Azԧy. Ю]y/bɇA$X*P˪AuUF8s,~n7SN Hzr݅jɫAzF者FkAqhN4Hyd v) L7b,BG7zLdzFrWsAdBVm4n{)t i%㜋30˞ b[nvXcY jCJ] zO + Rjۣ*}`h9(ХQs"Ur`*|n"_(]{gdzx+I!"X0uRoe1Y#uR[R06S1]9}'.;3ўѺ  ޕt0& ŒzLs3]$W}LaPyຈp7Ќ-0?PkIS8[)ŴR`e9Ⱥ#?_ilzӡ0m*!wݣ['=hwur|U0Z^;jpgga-+bRJTMk:=0vׅSTd{GJSH)S^gˈ3jRB`.G))v>fMoxCqa) +!z0rsGRg U iW.y7O^Ԓ] +;KWm^CC4X%Ԛ&n5Lu3abc,> +Ch֠f/,84Ţ^MVȮUT_fku~}m,_(.Zk?cv RRs%  q[2"ʫۋ]2mA2M ib2='k'矻4Q#n W)}ݧ-]ڶhT4uibEEooPDk˾"L]=zZ+}DE c|bv7tF}\K ickI쮹9 :V2:ˡ.R#.y4Kg Ie2MSC Bx}e+5'𯪜~]veGBիjo'՝ wJ^s%\q.o=Jws #HE[qi`)9uw]EO-t)bTic%VLL11,&vmx'm[}cr=Լt궵,nE` +"3Lbt_Z9@1<h}2ƻ>0-;8{7HX 6_a}/# ^҅7H`VN2N.mL./ bUJguE`:a*_jSm 1'~*9W cR?_vkМZI]}mQ) ub|VJV$~v;:. ZejB]@Sb1ɰ]-&݌}XnB}q >S>y +w)ȏ+j +SFF<0-#.z7S76[ Fc]-V^j 6VI2 ϠtKO~]vvb@^ +̜䘦]vB]mvP325T]NĨ#Uyl)"Wͭs`ZȥyY7P+iA+K(S%zJ+%~9>u RܒYLKC`N^ڹ¥fvd:%""%чP/8aG$LNe[%ʲ+8 [FԉsҬw+*i 8=\]6J +Y uw:Ő KAܾhM9L!/?.bԝnq.A[]y]nTԬ-ݛzsp1S-81qH캺.֋$nskϐge0h|ަN;Fs]⺅V0k M7()`x0E yF?n%uOEkӈ4M?Qx`Pc u)Wȁ\KEP9+Ds3 ر}P$. +}%X*o-úa+!DNJ,}:}!&fX.1r pP1Eib7;Ø:Њ_w5[.vչnM>o‘ aӑɬKO}]o;Ig @Ϝ +;e7d\3:d%h%n,Q>}-p4J垯kW4)Ă@ϦPD&GRPwW1iuvXpHg:.ɋQ  -\4mr.$6$丙}N50:> ׂl6vmli0vz&>kKTah O2/*麃fD,$VVw) "8Rd.!PCkn@oD|gtC{:H*3 2nvoD&YꃱԺۑ@.\p%׽]<:u[TmS7@k|kSZZ^zj$;p|1nuuuLzgEbF_0)Tu|qpNG[aĦpG16>V. ${\JS1C+B Eulehm#K6LKI_=F0 [i*8'bjzvWB≩C{p5w M7w,_PŴa +ZXK>,*c:^ój~Jm)flDSJ#W-]cG (LsInz`2L0q1+b˷!e:TAanP {U?^=\ڇZJ+RdnrS)Dv-gL[ ~qeDj@@;/J/g-WtY/D>xGX# Ew ufLQt.w?]JGįt L`I]׶|܌OOQ!'YŮg(#?qmVI>V 0Q&:vծ:;YwuW+w"G_T$i_kfBͤ;N%_eLlh~G ALV$P $<.Ð])@xql2wϬ3+cזV:T\W ᢈ\,OJ/-DsxU>ەȿz%O]1+mH۠aG vg.u6N˹U䋱uMG32X7gLqFj&DDu{4 5rabi_0xuڿq;Y_uZҟ)%R!)_0œxS.a(An2 :3 +SHj/gv„br/骔ҥQ|\wG ]#A糘f{) + TuCb#`۵;B II.&.ivE9!ULL1XR7ڕʻƖ w3j׭~P)wg˩7QcӇd p]Yڼsi} ++/|ݥGnךfc2#<]bL+FXraԽI%_w](Ss+ؤ=~s|hH=D\WfsKU>xuO3$ؙPwwt¨>PϼIEnjAcz#x M^CdۿueyFs@p@=c|+-%,֮7L!%+@* 5um]jݾRs)p5%Qӥ0Uwۑ*Ŧ`|ڍS5~L:SMg_wv]?k6v0GG~]'`ϜdAϫ]7Hiw:AUSZE5"AzP6^4YLO30\|]CXO qm(LK}"Ls?l6 .e(FwU[C^i ֹ$mޡx*TT觵Nt7n:kmSYDl01-O1x\M-<{G)1.YGzBP$v? + +k,0b *䲌2?yW\mTөki5={ɗ_QiI]7yw蚂gC0%Ai,w)MJ֕;op,vx> < v-p5ĸrbwm +6<SUBuWapغH>٤ar<{.30v *b%`wW)r;fPH~8*iΉQ#u̺%kF6Zr + F;7D :ȳAl7I5[4F uN-U9NG&H/6 V5N0G~0%dp=zE"KKKOl8xs bls]"fG : yL{y]M:n@XxAw' yǹչ 碮Q#.)dc=m>D#?:YE)6<7~ι[nje(Ԥ 1sLNZŷ{ yKtn;vM:up3.!v?A6o{%OY$_7ۀEFv:ÂnM8w%{xl. +L8hw]v]b]z+y^D+q7(8AE0.h9THDNOFYsr𠙾,‹:ݶd[uݩe=)4 rw X afׅ|Hϐ +#aD;]MZtcW8IF +~K&^qE}b7hu&wN.xfC^A.P~ǀ + sO sf0!G_ +f}yqiw콴D& l;3$b7랅Ykr81r纞/Lmu0WLA3 h`Wv_Xݯnn1%/7\J~YEvs-w؅&R]9&MacWZDNw2.0нpuu;U"\v%wdnF9ܞ$+OhZ &soaE +usJ^q{)?;{Knu3Z!t]ݴi,A?+vDŽRה9{gߞv?.eLGmw7{6i$?skIC%N)qCnLQ}ҿu>=*fA]j6,X';P!-w_w3thl} Ͻna>v.x?WƵ2ۊcjeDGɯS0Ĵ?ƕYE/{/En84LS>-v)pmheLW"~6XaB^ƺ Or/:泻.x0>ۍntc=XhwFRs3G첷"muiSԫ+ݜ ,W]7ZuYvTi5,L^Iq)9$@Â4_A#H݃y4R0K BRLnjmP5~;.TD@eѢuñj mgP7]PZq`.qRURe 1$j/wy䑪V*"c~%Vt7QӺʊ +T!gBğ'l4,03U|TFWBGuPK?p}?N0Du<ŵqMDiW# uPPJ2!p)1+ׅ hRϵ4kL߃lXn=$cQSTb\w߅u7]?ڭE=vH\[um b0I)LP[nx<0x׸nFc a vэÈ]v/v+3zFtɶÄQ_KK.hW)Hq$ke.W^%MVMS@"6.wsG +fo#wm+7&llAlA+hbgJ*b>Aڸn6߂±(Vi* yb.ljHBBe@P'K!鿦 .de]&Lw،nH:a6o "՛Yht.UۧWr +46y u0_Cƻ<]Ť/ړuYL])ᠵySX$w-tai1k247m)VN&U,@],&:M# iE +$ n ; (ׅ/msݜCaI&;yL55'm]B«ݟn McT\k`*T(&H,lĔ`bTU pSH"Fx~RhHwtEt u%͆琼5@>&tjWRx{0Dt~_ h(BGNQLluoKPJ {v] +KO5,ͮCMm's >tvTsI#4TYẖ 1[{>:qaaXi'*YvF)]V֟T|JbPwЕv5{95;qAn7뗿-oc&b\+3085 S"IhGs5 bQrPSqzH6eeP  l +BQ̛tb" 1J,J 4gE"vLjDs8Yg g2lнϝǭyw R^y4iPS0u aK %eu2NqxnB$ =';%S-/\vڀ{%j@S2G{Yv<,aJѭM&Eh%3{4དh7ue Z +`3a{cwoR r#&רX Y)daR-Ճ9Lr֭uCS<-Χ٥p@1SL>1S@n;΂kW+y6a)}83␫GT9ݟ*ZiX7 +S8ݝ4KFX,ԥ>&zLSaZ]iJ%..& &z"G]$@UTXd!Юf\oȽ)dӁ-%y^$Gr&=*^ll⧴vΧiq0`F|68Ud.ۈU1=P.B['3 L4A|cf}6Sh-hWG=1J4o%7k7r%qJ˞M$_@P,=a歨e%uKA[uA~*س:h%Rf垼C_:ٴDH oG-]#}juq:o؇5ҺtA4J˲]6uN@]w.Wc;໡qh# D)݅ɂ;ʗn5֗^p6u7xFv5u鑢B~1 :UFC0b3b5e!plS0FDx]!ȳCB|%v;]qLS:&ahZ &k  &A[T!,PcZ6亲j2I Uj] +kب +=.#XڭmHvc.Ӟ ^Wweeb.۹Th0 "W,>/Rp'x8p10r6H 53bi f/狘c HMV 䴺hQN$piaiy ԩO C\e(07p\Sb|w!^@9dR)E|ACfv9X%Tѣ {gץ、]NyJ2Fa6xjt0Bɺ+A]Աs$jl65n.ydrXSdStZ\E,҅yK)sV{YLfc)NDn^I(vV,H"V ;yn4B]z )Krb'%p{JUir81su"֡P݆ +?&Dh|֟P?X +"Ss#-H tm{<; '(E"l0˲WPw^ٮ{HB T7VpDL-[C(ݚG7v/}S(r 4VKtu瑇뺒7-)$a9e>EKr ++3ShSL慩0-{@b@qtTv B>:YﻋtĪإ Mb߄P3h0i.)v \wfuqiV=$py%ˠ`jF6⽭ /uYk +B-ݨ,f>x>j jf^ME k/-F\@Ct;%yF Y6:qs, =4ḀCSO:~ \ٛW8 A`hmg.B(o"ESe2dp_mʁT"Ҭݑ P⠈/¢+nT%3$}2;oIKHyC9U3VlMP`O~mub~6"߈Ib8([J; (֔GiN8砍l=ٮ ֺkM+ ].'WLьvx%t S%+a)CkJu[u1Cd oNa@L(9L^4,%ӰigF'2S=vӺ1Nq6H^&&Ck ~XuLĂV "&"nӀEbw|w%dpHlZ+,(^ [/91*ш[L' A &ܪfj֮<BgPK7o-/#OQ}dd\*ENM;@(T3AgudrDn9߱u+"Qjawpe]đ$*'ܺuyr0ڴ0u kjBڭ v/t08NBok}uM{L~ݫp1yԺɡ +9nuuIv1m&DZ) }_”_w2uO⃌lzU)Ou@LK5 ) So^6=ص 9(fnvϦ7Yb d  \ostWa)4\N +;H~^8Gx6^< myJkz1uvRڵ&^Wq-hyCYU2=Ƃ]E%vKs'b@LS cI`:<)@ +fuknI9uK´O~ja0Uw +,&` + +^+AM%RSЉ"lJ4m%_U+ ynrungdhgfpqPiNt +-KdЮM^>3TRHmGʘJ*o?7tPnFp3?vX$xl +w]Ti&vZw;5dk+麒)buaan` L+8"p]"$$= yM:}2l +]n]q݅u{FEt^ }5B] %x(Ma"huAƊOgL.wr:v t+12=\ ~pDd3Vk)wcuE >n݄y|1 4S#uQmRw퉰t/m"-(m.ԕ/z"_D3^#H/H&9`&w( +.Zp:tN|Z.KLׄ0*82'`aH$D!jdB6*REڂv qyq^.xח=ȼ$Fdmv\wU[Hdp\dKmIQqul6õȪPA^yb'`(0Fc@G-wݓ0Ts~C{nO$Xxe鴙b ǻpU1Ln|>d\&Dž< #!!jZ.~; WZ Xu*-B*2W3שi1Z}84fƵ_QL:2]12svk"AkQ6v9 ," ͪ5}|e_S`[&GdF'x/~0]Ga4z hZPH{"i_Unk2[xӯ,!(񘒡 kfZXP!2-M1"s+{Zg$ŚmX,|sքhPPM%%ț= +Ԡ ٠ ٤ఒ{"}|9 \*0ay̱! +]:]&U$m sgz#rFظ\.uUm5P?j n'FDF[v֥wG'݅r0/,فw<;<;XN.n<kDcb.0] X3~dD{NDܚ_`"lH:+rn2{{{b[R1( +8utzwԃpQ4z'-`jCRiP:mqZ .fZfdΊ^^:ь J\"&70=?Ͼ:<-nKfULz^ykܽ,`VY1 +Bu R63t<2I!WBϡReS'~ѳqӆVh5`dnKn\ysI>1$^NbAX?Jt ԀfNź6)$~}4\ڇ+Oț|>>W4^NvbP#ML&ŹȘL1lzwGr"A7R Vz2?O Pս= ̜m2 P{cZ^?m;q{ؾ$# #rmgL ;#j?RX/Nv WD +^\ R<i2puEf'z׃2!"gZ'G#-Q0Z(J 2"j"mayW' ,xȋ'oX#ƙ_PWDj[f~O(zf.Ȏ'arxtA6*4$ľ6!\16DyLFWP>~9TZqDuz!۬IqHKVv&M qzzJ| B fJKH!ɱ3r\*Đl\SG^> -has{WFFH.2Y4锥EhըhdXYy}*m̾؜f  pkdYP>lC.SEUW!6{mmNZ*p&Pc FSaK|Q6?uI|RFYORդ\?JWGp# f^S<>1$?f]Qa9$pTdP h@퉕N^]ڴ\h"v]1mш!ƣ#zxyv:96Y)BEIIy(1"1(F5ĴPa`1y`فZ՟5bZy +.~֊jJh|9s7$\wttWXktz:Pk z|b`S5Śg,-!6{i7)Yfb"ŵu +6-qIJXpSkW`|P==^Nu=YkoiE6>yWo%$V`c6ibfMLM'KMBX /W  +^Dl`Ѵ[Q8[*%R׬ @u䝚JL+@'N+3WYP@/z|"n2@OW)#R$K|}zz23 pzWzzO sC{C ZAŚD8AEQMI<:[ږd<Pdr qS%!ϳe@x9/"H%kg6"QsC ?2ıvP&f6}`:-Nt@Xszl5eg&QhQ&Tq !l]lAanUH=F{0.9$y̱Í X08¡&!8ڞyJpv\ zoQP+izh+VAbI!CuaV}jg]6.8y O$*`bE !wuoe-+VYUҏHenhî^^`e<:@Ԉ4P։Id5y`մCΫqe#6 "bWM}fa-`x{Q׋bțbWZA%UE2*zQyQ}Q}Q};ƸRl3Ĭn`UaSՏo!"seJxa֤roۡ U%jfsݔ[Z45,"./䃖71h{dHR%$ǧ!,S 9K 8d x\4YGazT#)h tpjvFp9,*nh{er,55N :wc CVLqtX8hIqAbĢ,#dBC r( AᐪdTHК$P1Lİ (@̌6 1&ІB]63VJB ?|.:GUfʚBΎ]`j oBKjk B2.Y> "cr Ow@YAGOn<."wTL?H8`\ȫv˺݆YMDDؽp]?j +3.ƺtja6S "S|Є`$#M1`p]) &BLJ]zanS SU{.s! +̙Ǻ_L ~T.reGu83aZm 7T";?<_;d +Q_]uA1w]bePp|v +F0kwЮ;n,WIu-OںE\6X#JjOi m=Sy$2rۀ`_Pbx$_^"v 2;n=5)%jqf(ji_6.*pu2!ŷ\w`&:5%i<@WbWЏٱ"gaZPdL>u!dĂ]teB@nJB%GovWw# <1]is? ,pXL^*Iv bsXRKڽ>3hF krhƔ'̦0[VM]rr#l@:O|]3&I,ř3vk\JasߓoBrЈYmmKww.(w;8m?px8ԈE0! 4bn9>yuLaKq`Ħ?fkLS]7tɮɞUޫ(P74mJ|miI +};.$ +W-+;?ilX(a&W/`P7&ΞK~=4Pi%mUWE%CR=Hn7HJX`ԩXmnOt݄*LGuSK97Z,S73=u,M18E[ʹBX䩎>*BcԵ)bXwݼ]ogDX|X)0(_%75[RԤAj)hp> jVD2!)aJ5` 6)%ALֵTs`˗s#&|#%qL3٤L*&:!Y%_Dus;`j֩m>u㲰?v2wVF>3S\-u0dn u\`Q0#9MوJJK2zޟ t#zwJ 5w-2o_T &م+4L"t{ԙ> gpxĢ)%Q;t]Kً]Ԅk/bڧbH]/>v5Ѷơ &w)\]8NCC५|i-p["s4Fmy[p(q xӪbȔTp݉/k5LGdj׵ +,̠St0xJMhՙ05{u*U"NS[{{8]ωF+xK׾vvLlw9Z5-"{^~`+ٴ$T.tE/CŽOv`pxoek`6) L[C] <*X2F{.}0 ɞI0@PfI>YnxYCyE2^Ժ.4uG+A/y_'tVZaz/zJwyIkBuCtʌ +am&st:w/_[0IPc7^r-ئdϵ{۶C@z+oN;{q&V=J0I +b{u aXbM[ +#8״&JBLq$v2MQu0s}&0v1Q +SḓA&g`8k$_jb:t0? :~u$ϱ/ZdbSH.OAC ӺĎ G[OB,MH~ėDއR8l;$^)Zqbj]䎡̈dvD7˅MX5KnNvY=%j/H'#1<ļu]7s5%#> ȁm[ﱱ gB/m^ؘ(9tc]HSīU\{JkQrnJJݙҽTf?lxBbB@*#qLݵLL?xj lQ:n[uT +8^N`]W\n CIDIAPa%.[W= a 2”/9FSvg 6 pݿvfD^]Ǯx>]1bjp]]]+|{o캥v[&u䧎IuQab*&_z/n^+SX_W\L"?3'Gp\߻Rbřs`p1 6nm'%e+aȯDve;&[Ww bʤ+ As~Mm=={" !܇hyTn~(FaH=2Vh/cw5jk%V}g]xf3LUz)wA z)\w"J\A)٥"^CS|,Yd{ +t˕G-wES^o̎EM&ú'.48QI߉+.*и*icuv7DhbAAl#U7+vᢛ# X 9wE, iwgû|_WD.tMvoZzuKL/&OIЮtb8jȔVZ0o+)f̦X]ǨH>A=1i7pdKb ĄĹ4 1׭Ժ }Mw]<Ԗę rGbcx@tE~'fH}O-!e; +AՍ!nf gKV֧]j^trB.@ݢ!~9IV|[JQN{;3ń{-^ȵ`iOZ%%<^Yݥ^{ ╱圥c=r)EVo3눭 *Iu޲aٻ gu[2hd yiW] _0O\-YUɹUJ2\\]ZJ v2PJ^r_YREw1@8|1K.Ɇ NF"w!K_O7R l]o ^STX [qD < 5hMW~ME +MEx k8(,v?[/&D:Eum{I1eeHzcKu~bl1ItU&v6tCY\{*ґQk82g + ۻm~ +8- SK7sxG3=oŪmqRtjd7 +zU$WjWab塗ZpQ]&W4bP;rhʷS .QtѝÃn29y3v7ŭz"^M?#BQ-zg_&TٱUOq!1Mx1x[ȱ|8l%F`dN]Ma!aJR~L,qKZN#jr=$䖱0|K%\j  ;ivC4]3?n|ged*}DI=`.j >Gm6& 8/ LIx]8yR)(~$&0}["O}0-mbnjc !Н|.І)ZbƙbY$" X?0+6(.:tvٴmFB[;#%t-wH 4Us#޴|\]/'ֹi S )XK\"agJuB@]_tVr{ݵʖFtY89VP级RxInrQЇLlXbUL^)Oqc-JP~xtP-U,gn7s+ ~2iI+G[;E̽%O'IDd(vr9!eVB}1 z 6Yo ;u[ؚŕP; ڛ$; |Q0lC+.M3E|]wT];YWy5> #S(qc,7oWϸLgB(h .% ~^0Mq"9[:\((1 E2$ {i;#2"}lRS_=tPQ#(|i*e8U:?sc31]ݵ0韂QoHaƛuDyhn}pt[V -#[*;E.…Rs1em05U]DZTafmiϒv=Oth\"pdsz8T^bZ>).ne=sDWM=ǬDC|{(XKP[lVЍ5h^ 9)h/.k+&u? %8|.nh閮뛓X+Cg^]A\"VYэtm_fAVsZ1n6IJ^L'dҴ`-L}&]һbc Ț ++c@@@5{bBML[c/8MLh}T970Oģ&hpvjn:!@_ %b%&v׭/;s ޜ׵ ]WsnMfẊdK0߃Q)(OIa\{޺1mylg%bɇm¨`/ ~]7XD@zhRdNsBu W2o +a`_}X)n?T`W<ϯ(>`7-a⳵ T 3 +lAĉ"+M"⡔qu, -*ҝ3Q$i`[,{T8@>"7KёfO]j]FyЉbP9geN@2gcQSZSbL@TYiӸ$=5H_8b׸ {K˝}1_d}BR9>)vŔ*[}brx8\PFViBGEj!LP7KrbWb:`]"%չ/Al$.Y]Uii>Nf ]{|.I"k7*^SG;tRn#uȺqRЅ9I&{E?T﯉TZ]LAR')8`.}Ao gs^W/FW'nV)hS8}o] +|nA[`bf!\h|%>Vڤv!˗Kʃʵlzʙv*4;KcqTpq tnِZhunVJǕӁPv1=[ҙT:`-e떂a2>A(LUEKN~(s u+ u\ƴ26S`&fpuzW+8U]1) G{hf &Jqaz|n' OSߴ+wٻuX0n1u &/lz0i1cw ߀0rYq~|0wdʢ+OCRS # )d"hiĤ{jWYSWbAVo`g=Umg{`ٳRLḧ́ya=8l5EMpHAVD^kv$Umudw{h\Ts'e}DA恛Ƅ*/\.)~/Ԟ2 Ê Ե[i-pK޹U|73CqQWVWx@{nDGH㌨rd^p t},ܡRPTMQwrhql +-g|bwȸ?kSLV[({f@4!g|ZHg&;v3br_':r`*L`:*Ki0}uO&|['>H㝩{NF2+|]Ģ3H3)Hn\0کa}b@G4RG`2D@ԭ `HGk]nLE)`]൛'PKny[`K.Z1S u>ɴyHE9k2.ZNtL(n\ELy‡+5x뽉ѐkv<%_]yXdqN?$A +9c—[a>4Ll؂.['njqi@fozv85bgEi9ѽ|u^=j_h!u]mo$5Eϼ{UJn7Ï!@AsrJ9&dTm|V7XxQ]M/&5Lř꺊$H±)dAՕÆ`l]]t e]`L4d\abLv܏.- I S~^wIn0hp0A\"d2M)+%bwo 4aj <]kڵ Oxax۱%qnkYڽx9eծ:Av) V)v2.aMʮV@\B1]<߹BJW!cԢ.&&F\|ʡ1[0nN^Kb ᠩ^αQƅg7 :w5Y:v +>URCxnE{}˽OTY@|D=;alx~o.> +5N  (q =' &-Θ]o``zdAV@V"&eQ"+ɶc\My4۸Khs/}9y%[U@έ?R Dwˑav׳sg6š{_}Pʧ+P++Lg8>9Êur1]~(IF,0fc6y/s]Ynϱ{O +S uӎk8yu^)Z„NOJ]uuֳo&0)gf`Vf2ŗ +56&6Nnŧe [>ALdu~z\ܹF.zxԝ r&#̦h0!J$'<]WѰZ:5ED\y R&ġD؍iW/L> XFŤAt)fY-֭MAuXz0_7WL|]jTwC̻+MAp{.SRPEhW"y R0GvO]-UqPW4VW0Dv<]FL6(C2h%v]I(Mwmh[`6E@ {0`kNTw;pm\@-˖g - +{5D`|,B[K|uP~ݍW#& * &>乥 F%EMĹ"v/jXQ2{"JF"W3ـ_t3w?vۃ$@]crGX1h^9wPCtnALk2<g.sIle*r] lުGVdQ;B!;Gq UԙN JR{_~“#K4`ʻn;r(Fi)إP,2#r +Gkv)+>]Z7-)$B5 Tg;&M3bV-Q]>CLIi$cDR8r +k\Lk} %O:˜$j#QCR01 ap Wӏ1kBaRmb:)zƫ+@}07!z]VN+]po=P{cy_ ԵU)FBGLQ A*@g + +m(x0e^v] BMnR}W)N_vɮ Gƚb4wye.K%]7?Y%y8V-L҈]amn4v1k d?~C.>kuC_|gk'ߨ҈h4vqI ,Kg_|6HQLaC?Z2شBwST"КڥO:s. g&N3׽yM&E]>[ j :eLUj4n./LeIt8aZ_3X *da];ڱ>#cv#:e봞$',^hT;)ʹPUJݾf-ql۶(ECts:TX8${/%W! +7%*/m66oW/:D{/=x{y/=>:e:m +/oT=$@ C΀(#*hq.NR|x-)xo;swytXYU5ԽbiSTPI>j!::6d\5+*mK)h,XnP@HeNc{8탑&;&ͼA)-$fz+ـ4vA܍)>I%[=xƪarJa$%,aJ iYe*b_ƪvoaWͱS˦2LrQv2&]cqY]Hp6daog;$#l5]UCnhKH%!e\zaꉏ<Z¹1k>(L.RoP: +AL+.c#v-!{gDu5Ү=?yjIEuG(vQ,~$zWm03pQ\HrlY-S0~^ҽvMQw|tuz$= Czts3i,FUӖhӍ_){mn72 <4T]1ڍ9c4'ͅvV+ޥ@p`])uc/`[h9J*ٖ3'>b! U$u!mJw+q(&~Ύ's,=-C3B̓{1*!CecIDxPJLgni^.z?[gU^E~XHa+^x 9k8v[W!&\HB_LCZu~1A4b1¨c2}]1ȍY +qr%ە)%J̃yWgk Fn rVVrhapAicnbBMnpSv]&o`_r0`q7*]:txPrKq]b +p`׍,?EwD!ڼ2DmUJ`E+#(Lu-ƛ\7Ox ZOy$]w ^w8OCcsjl"Y]:7+hY,isٮ_P4`˛mL`|b33[EbRIl|ݱKslY0N!p͂TQ2N=^l–!@:i'[M7#c^UHSt}/?XЗI#F4TjA˵ČTE&CeOrF+%\$iΒ s 1<,fVlu5[WYޡvp]uo!Wo]o9n[ES0uk,rUN' zQ4˹YI w$*:#]纃ȥ@]MB"Ag#buEZw3 L:z0$y@DI8k:ݽZh7֋}FşD+ +0tXtfl9u{) +\ <3?VR. 1> VNF]Z\!)kml1N\Uk59bwzn26eNL &-n*VX鼺7g^f|[d _>*kfkvHwYռ$[#;/g:TkYKG5~oWµV5+\:)$\JXgҬSuś7QEw ų4X/b+\,rmͦ [hcn 5dζsHx 2u? !uEU<~¤vk5ף)QVey:{02d&F!qҌ7 &-~'m"юvXv)._c\w/~0kL& 1RkHÔNvݚ +rl1"[kv5L)h_ch] "pA^Q1.ж#_$0tk'aPY݊3Dwd?G^"p]$-"vb6D~KTݎ1PS.UP?P]ifP[Bm:uOЇ d͖ pRD@[^AqRv[$DE5_߉ | :C$ۙixvhA/`C!V8GV6 >%eQWs5hKמщn=H =eN؉'4F4|n6 +£bޔ %Arfd Gݢk)\ h`=8?ؐyeziK{h`r>uylo?rB~w ) +[%URSF,=Z7 /LS!&*vj-Ąò>Y]|ߠnP@L]WUt1Qs1'J)@{ tiM+„#V}7z|M.Uk¢lnA ǃN;8S*uo &NSCLu׽nlv19<"/fPq׶L~g#YIS-îRnzD'$?vꦟE ET{S)@`&]bz7:*ѕgRT D|[Hgqv?ν^ajl +GhffKg*lLj {*ْkQ嚗{%#2Gm݈>ǣAp; _t.洲r +z]?@¹:x-WXc +W0k7S4{gq&V15So ).꺞 i),*Xm#ZҐ#Xws]}8twaYY/o`g#d|mu(+0 }.v +sRйv $Vswj n(|U ~,#?$h1d@صqsl!ҋ\\ 6@-()]*U[ Pǫ`*xrS۲@mp.k1Cj0)kkm5^ +װx= IT^6b]t$\"ɸun>2IDKݓzz7uRSP%? u99ISI{0 V@,5*ם#J{-]R9.Ol(.)Ժ:u9#Lɇ0'M>AuPwo[i98A)gDd"Qu)Ne4ST.\'0GFJHSxk@cLB2 ALv30d'1gܞ)4f]k?,(G&P}w4+TG֘r7H qؿ yjud{x]֢n.)}u&ucäIr]]QH:`i0XKݾ+v4/yFw>6ZY#_)ǥ$fվ/A1Ͼ|@yCh. #&i :'BXM>/`^C._;*.|+]7nFd]+O6d GC~dv|-4LO ev +Fw[tGjxun/UgRWa5\IRf^$*9=knw&1kѥ.`}ɿMQ۬ hG^6pP1: j\5%w0L:ں} X +v3yP&6h߹1y$9%ݗ&P{.FVpnJ]֦>6E.u+ @Gqusy@\77DJc˴]lCķryz/Y/ v?{)}kDZa@̽Pӂ:.,^w@xTkIzs.:\W878=}!=Ctw;K̅۔C +ׯKLFMon +ˋt"U,A~nT ԍK:B4]Wh%5بxsKe1E-Rb9MiQ(T׀Z :n)@u;0SHL k\w @o`)6!&|-U +b` yxЮ9I[Tqm('Q-2"Rdt5Nι&z5 + d"I5 u(C#Ahd$-H`B +Ըja(p6ƕ{` _ckܛ|9ǘ| о;,D,Ӿ/LJYIܛLB/vrmNF[ڊ=ۉ'q:.Д{TSd+ +_hyVY|īnyޗ d?AU^QϝeA@OC8̝D[ӳ{㚰Gpu7X\55y`0]Uu6Tо}A@kH)F̺n*A͛k#pMb 5IԑGYq8"iINwupk?٫VI#jdqPɏqxǙ]|wr%F|)!':5:o {w%y ȩdHVs& 瓁Q\șy\,T1a@!Ě֠@_ jh"B=l2kJ_ +j5qd}'|iUw2 _O&ZQ'rX5*Ĵ\5uT4IiFUE$*k>*kd[~}x\T+tbʛ$|y}W޳b2?\=F>+s޳.z[,s3"!Iܝ4QH5p +ID$odrh#i$|ث&ǃ +-?$ip1r1M5* Ts[EI- K}YJj %Cbɚ6Q m7},V6t3HbF d8RKl:RTVqG*AmLF^QOJά +4>̵EWˁCŎJUɀA8-Yi ]D}VMy=:xŮ;=hZ?2-r +y>`ڃGAxD#{,n&] h}܎ZBjI ]Y%uWxljUrcL|.H2!I jpG +C= a njsj^`l&qԒN8X8q#t+ӣD.s0uE ŝI7&Ĭ-ⅵ&$qjLg&-u=Z9,VtͺR4fYl޷64쾡$*)nqb!'1QH7_@>;9r04@b( A`H̊H! +b#P 0`ff8 L"`p]v + !OeV\t sS q`f%m] +@0*֌.+=pZzm7*FR9xLdc"ccuQn1%r~uJڭc&]kTI1M.0 +.L(^}Lq;_vo ɏ a0n7i&}uX/Fa&%Sr_;1Wm, /-XZDݸ@`:ْ &֣$ a,OFO{%p/*BI]*y kx֓2`1JLaulۍ .@A\7]H[3P;֦E:S'?k['lyM1Mnݫu%U>V?mȹD0 hYg-ŁwI U`hܐ[F ,&^7۵#{nd+EOᨏ/&ZGIm ݝktKqGAhZ_䴭Q[*i5gxZKH+JIf: Z<5ߩt2Wz +H4/1v7xk6B>kdf$׹}7 +=>nZ zU`" :g`DS"K4#'{VF_ + S&\.1g|63Bu: me8>oxݩ#>̈W躗^O!=E$T8E&,&N/;ݳsJ(&^iv.hw z + ߓ|7eHG0 +w1QnL$OIn.ĄLb~PZ? 3ĩ)❝b:7 SHer:+Tld@ZF4K^dB"M:LZU,wyKkLɼ=I(fvo-ѿ~ n&,dcAK@ͫh+%-zTNeA +ak^6ш#ZSގ޽ %_)L${{nȐ~ːqFS_bΓ^AnrY "gD4ǧa*޲_Z u-K:ڃ;TD!h)%`Kq[7C[2)לrC! h7/ ĉ\%6tc]Bbؗ.4UFFRt ):Nr]>K\uGDYw0KB,wARb׉붪u9q[td&d +_`rс"|J}9w>]KT?-+~)5޼tT>8iu/y!vN\wb- s9Sz8h8[Q\nMaW[bTtrJq}=uS#\$ &a%Ouwyy*AD%/9/i/g +PgBڍUKp4Lt#|x^ZώTb +1Eԕ须 O"_)ו4X)$PPϝ`qG~fG]LVu">9I]ԏͥ=íui7-\"bсJ/Z mȼbI:۴n+&31 V*Ltz(ܭ0Kan7"[9}2h ј_xr5$f ,8VsTWi<;ؼR +׵&`hl{K \bE,D^%,͍rvdsѭ3XAbP"MQ+y]:1;Sä~ +a\]hJZ@ C6 B R>Q3,o`]w +endstream endobj 55 0 obj <>stream +.FjPW[)?op`ʺr +)}5)ŷ ) S^焐vbSH 3ES`ĔDSnS3v|%1haMhx0?'#]spm#3fsH0HRd庈v +Th#Ԍdjak06` v7q`GwMմV M v|ab%xPD33 D쾛_Ů6F_.vMbE1"P{t`Jٺ8_id! &+,n3EELxK+tBwSz&T(cPX`Zu/n&rt8{jإ;I(1uiU즿l(LA]Tw8G N6U0)txctFԼt;O]ʈf Zc凖oW̋&W-NU׾ٳN1(oնLDa^(hL[{&Qm{@M%w^@>$.Y4KCtW]r})iĹd.*b };ghpF+- 0LΘZZ1-vovS+!m[=t]4?W$tou}T :Ҽ{;xSc^1>~lu]zL]u?v1~J*j$"Mw3Lvi 尤uu0A.`\0 wM]1`r]{SÄ7 =u=09;nظ?eq>)n,i`֮Td]#S('uW VVOMr![s.RxT"U>7IJYa]%E%O(ҁ YѯhCvEauouW)06[lEG+t_sts=)eM'+0 qa)J{rQST JD䟫S kͮ +(>t#vYƳYISPE<f\B +;>]56LVgt6]3;|%0x.. 7kR_^0o2b"ڕ?Ɔv۠H 3_zٵK Ή/Y*;)Y{uk\7#돳mhlJ*xcU`#ap5]=WdU2/R~l=hS!*n?u@ITC?q\F#,~νQ~>e.a0K[rIDu~ $Dq0OaqmYA'2,ə$ +7RuO vh5bnTu 40)L A8Pt ǻ]uT#[napB+ (\s.brlE °2. Q>ӽ0#M0vFא L~H}&h7MmWz/l +^^`">h*ԻnNZ䩫91m ֍2\Ou¤uYT`}̝@*: x §kNķQn}]D'LK:crG냻^=G) zX޶ Pzł.!,\5—%7G"7pSUh«!2'#:]gB%MM*$ ]ԟIRm?Rbq-d}Ӌ5 [Lm7T&`*zop|SS'/ ^nRVW6sl #󃌲-7:uBI-WFO^]x{`JtX;#ڥ,$yBq'6P-]8R?{+]Tv/{iJ"`arw.by +L.ݥ RaXoemMAЍ$h׸jEgS@.tC\SU +GhL$`Z+CaptSvWR`)/uarꆯ$Lzz,3o A:a<+YwwJH"z8m $)!x*0.n K0J/tw7o!JHJNᣞծҺy_\iȁj ZW(e0Q/8 .1QڠD@?.d5H"h_܅'M ;0]J?:NL=a<@yI6r>o \&Qs_uh~{ZF *^QRqKEϦ| W^O,Kr#ǑlDTݘ y.s]S [X@ϺV[V_?os7-Luu8(\%˴ALqHYfA׭ 8hc +@$YL fuql!A& SjeZel;@pu4i]a +Мb+jPuǓ+(nNQ[˘|PqQr4ZCޥSWʺ@Ɗmݙa%`&ǽH>tqs)çugk`d>1бH3(#qη>+=/4u;\6.4($? '!"Vx ]+.JF!e`B& KMB['\{ Z£eK;dlQWREh-=d|9.3؛)v?n)V)|\wwNc|87 fW&jA]rEԠ)H`S_" PMuSa"<}S]ޠr>-b%n__e]=v;٩{eA% )fi[) F=;>,_lPP[/Dt)!yR&Xђ1LfD.eyP38rgC˕|B4,p4 ORUŏj:| WXBK"-u7Y= RS0@.+λ_T5ڶB`2f@ /z0/qayHep0ELFf,A%/H[WSb8Ǯ0%9ϔuɍQi0h^K]>YM$ )WlݿZ1l +cX Do9&eD->X{Q14f]5jR5%oݠdiw Mpqrf- +(/Mq/J Y}7m6E%TQAeo/l(#1 +POݝ܍K'I`i5m /ۖn[%M%EV{bytMRc z 1~n^;鮻'/f ܿjo)|ZlFkPSׯW&|V.ulilT̈́|zp& +!bR% aZͱ05 &9XwݽQ݈Uvw] +!$:})otϴcP_]^|y` -A=Z䠉wS)y# v(KA?@iW_ STfL>Xl{쮻(YL ^bhWKXEtO7r;VlȀ!E(n7*YCwY{)G /(rIy١b~GK Ϲ>Bt顷F >hX{l + .FݮnxeQSE 㔽Wq#̂u4dUAނ O)݄vaB%K_b*8m򦄘-l8їJ.'U $p;i%농d3I r a*LK?&hbGgsN5躥OHSnЊ4Eѻ`OU"L]XLRn%V\a@GKZ;)aͷkWֻhW]YB> }oc# +Χ]¸bσ4B˒q$f3L*3t=~@n[R1;uwREG%a/[ {~c#fvXJl}NaR+Ͷ{Bu Œ6(ҹDƿx_ʴH]Sl`x}*Sù|ȪM_]!-#]YL'1\b=$ X'/ 9Ҕy.&$iD EE=&[dm6eǃ&Vti9LiwLo@i(M {ǺCu>Wk0;#tPb9 +&'iѼnN>XiN>SĀ0vM fcYki]q? ׻ yu@LiD]y^7Ì.Ԧ'v94NfL.vٸʆbΫ\+GlGq]XnQ0L&?bzA hUݽ2T_uLcށH܈%i!&F=튁f^lMԥ :~@^Xʢ FDk+IY<5=1t_S-F +ȼDgRZY!Nv^L}׍;htm.a^ Zenèu[}}s/Q6#hX&]'] Ũ  +«Km[HJw}&]:iuc٤$vC~ +[LHYBn5u2zW7wdWwCx)MDY0%Ugp&XovcB݊,ȥuUUTj@Aotpt.)JbuaQRϩUԻ)p]!}3)tyo*n#tݭ$+zEэs2A=Bwy3 )q61B _ +2VHdkXnؑ-+}zQThwQpo!݆Whw:p&u䫸Ҽ{&DXE]+&T qy;R:1O[@!7Q.F>ޡ^7vÇx}}hse(%BxYz. hf&v^tb3Yej|A%OެpVjOknT,vbn&*(i +K^,l^,&&&'J$iP>`xYBLcQP?J0_סݹt11Z7vc.Ƀw +vd]Y` <.j]$SXnnnmji}b XI4D#ٝjg )\4Հk]v=kbn $]ʺq}bH3ilnuݽ~Y r^ +4#Ѷ +=s+gY-á s\鵥Y=9'tUBMk``68WٿutvV/(Hͣ!fu2aA9D|-|meZ#(]} +xл.F f*jR1@~LAĘZ$0aŴgtuqf]וH(NٝAiѹ0x`WcS4)t:| +]0$8mm,k7+L[;&LGLGv|Pڭ1^mb@6y0LfR+,M)=l+ȡ$V7mެ)" 2vdZPt1اZވyzmbLrU7ݜ>E#-ʵi^[ݏmYFINssV&}Zr D۬fVJ}13WжDGukrc Q~D|!;qi/[3Q>;uyΝȚ };=b'ͷCRIoNo%ucU>[sq* }npp_8wr,@J@Vn\T.u^׭+D8= {P9 ?vu /A+ڭt72GaW i2~ _w]WXHI]boDX]ȜbAz'a~+K+9RM7"tdw'tÊW$GNtY>L-z(5+rh$Ni)pU "JkD'O+kk4 /wZ:SZ"v-slBL]teV'\NK+ ~KM^'|춦棓k(rYMS=Hpea[~q45gi7sDp#@L(T*UVZw)v2{١:ׄc^3!/=DkItUtԌpwzrct:N& K *ϝV4j^ xk;.ϥvi` EJ+" >lRvXLxB !9sh((]s3ta h<M)N.]g=#@Ln`o7Z\, oE$L +bwU#(2>Kۨ^NڭSf dҍD7hDbHE Ԩ,J~g&}; V/ LEei43G7\B%6ŮPˆ%cY.읺Iu ΙAy1n_R:mXp + ]fH:%X0A5nh.:1ʍ˷ EN"$ogQ5EA"p%Ťr[؛ҮFD(i?β Ҭw鑃Iꬡb<}݋)ݣ($HVt; v7"LY.̅r +/i7uW'y1C:Fl/4_T:) +^lEbw05L6|>.]4Eh]k_ RcSDI>i5ʦ,!. u9CȤC1>ٟgvY&lu_.`3%rmن&YĊEWaEh7ud L]P7J0٭˩JwR탃mZ 0pbJ +@ _6]\$eq7+Ow,^/1KDA4.EPa잾yv**0y#)Ѯoyl2=}se^<\b Ͷ_ҫ:"©ѻA`W]kR^P,(UgIK!eZ-s-X]|1 +h)>TN$] o"Si5Gg֮.~| ]qHݿnhxvE.t7c +#SGIa"bw+վuE3AeX$?Eu r86y]{'ziK!`hՀ "#պ+YEQ\+b,Ң޷`i #LC\Jq{6WJ^S- +PO!.0=<:1qx"Lc7 GBaOyϟb ҧh3)EJV3abq]CHwR(]^gv-TvVDf4Tl}^4sKjm1+ȃEmҿ6$ܶ͞vC^L +mB4(?9 +`^K6 %Q@ f\b?@HS9:TꊊJB~4v 'nj)LtV㦱K\tTYc7iLuU(oHˇ 6N &]7 :*b +89D,fsLq\9\%& /=ӫK)TłA}y[G^`bAfî*D&N|}gֽ*i;S,L_`~H˪'v eiHY c3*'o/jv[̡vKn"nu;*ܺ_} |.CoK fv߉_*cmds b!ë!N #{ۭ򫄘溣Z=A2m,1^Zn3K~QBڧp3^Rn3Pı7'rwW9yxb +I̵Vo,RY\[++{ nΎ]'} M⟚ 1cɗJgL9odq]IN;b 9[Z_t1]&MSU&a<1q:gRlbqdh !wu0κP\ͧhNzˮqΈyɫQ7">„g?.ui7Zn_7kNi~Ӭi&tIޯvK aj"nڀ0Hu96g +YTRpn<0rC+*]] <4Qwx8:m(ү "bi!+sWBBM7lJ^C辩d[ekҺ> 2-C7IBJ3vHq͛n;nAt]*k(jWU7^So?A]lS$:vL=aHƍ6!Q8qKˍ~?Pٞ "4mV7gIĵVIVoB>.%hs꾖r=엵`\i(@#kcqn{sjW?3@#<( ;C!˱'vR Z)`vWqY/spƅjvC.P 3q:;ِ = uk2i*,ΘԮSk +XLidU Sp 9 RboBIu\τcJzf +|[)Ŵ°q' e-A5L3*|\E{Gw!Ή T[C{]V:?w̽;A2`;>O4̣|%Z$gL1̂@鲼TQ;A:]vf2CLI(_ysq Xsq>|LZfiqs1 ffQ\pZn;ӂ-s3e!7@._fJlP׏;^ޅbNkL9[pAW\E Nj)B[7BKHn)ujw/}!ܲi|En`uupMAoPp>;EWȔqN(uC=fwbWH%?O7(jkڽl +6׿]v]+E-y5W,łvSYD؅ix¨+\&nj^2Zӷf;3Lw a*G;\ü@G`%visxH7]]SЏ-`_%-iۑL:t\ۨSԌpɫY]$GDH%@4+.NYb9W~Xv>p%WҺv+^FiI:b:-Ro䞫QNq0VvԈн ӼD4gc +ιoM*{gU?YR.I5ҌŚdѝ@wnL rDW 9C&KξVn˨buM)Em㺚 /LՕG-AFC:Aj1U) JA8 >;څ=Zd˓9Ws$oPzh["iMKvFґLV5vIYܗ`U0B>luIp3 $o~6Bk+=*BgaZj1it=nokBMc!sHpu깡"p]!:l] +֮ϙ \\Z f +{ |]^;d\EkeL"O܅5͘KTFYSC]HK{um.? Pi< h&kƺ.FOZI?&f4 kKT4J +ڕҽn)`>#hQ%2iOG#~C;W|PYW(l[ ` {JV%B`Vשˈhmh+DW]"@0vNJ"bQ%a + ʠ~vS-&AFaEJS xl +nˡ]Sbb2 $HnS)rΧSOѦGnMv>ݍR1qK!;7;bWCt̼YaYό͖[yIuрw+ +-uyܮz,cA5HZ":3f_ miϨ*c0T8JvWNG#C*C]|%gki|c$FT,>o{|^PmplU#:_n :v`f1%Y Qܻ' h5f=DX#]e嗋Џބ)v]\ouM3՘ R &)l;E#0crp?P Ēm|* 'r0\Zfȯѿ0@ƹهV,;wQd)$@hJ"&9AL]22ŏfV/&SXZK;XC*i7C;L_?)0y_7t<1 t-EuBHp[BkN[D(ιvk]vAڅ-ܜO85^)kA|YH2YRAiFWJ&zSW&,$kC4.Fr;r55@CBݏĥaw]g*RiD;QBpf8_nxƇm 6kD(ɼ ×ucv%trfo1%j &1- +wbuggKŧ+--򪖈Ȋ8h]힆ŗ97߻9U7™)m`Rs#D8uK}222i7-EEc. "YŒ lNeZAvNIt"Zv˩)▿4EfdF>)@vu|S̉v֍<q|Ovt`@]vmbB Z!ONӭʑ7L-hwnI +N3P@J7u뜈L%usiTOSY +sڏ1b֑mm;m-3(nEBn]Qmcb6s$> RnGԣiux>MwM{,nu~).@fWwd6.=pm{ pyEwN2 īX0 5MPq  UcƏ&LЎ`X0t(i$KRbXfQOL? <8aEA: r}VzB`5ncY6 sww 4`Yt0ETO9ir>sf k-]\; a,ЌrV:9+&,Ns=, ȦZF9EˉM 䨱X/|Y}v|{S3J=vI.wcR*:Q"ZQ4Jג +`9GQcp-Mb.)x,6lߞ(*Kcb_RKn}EUT^@4,e1~3ʶt &G"hp2`ȫşrl멏NE +?1(i5Zq@4t3m9WLe2ɸk w㑹@Cf-q0Lrj2 .Τ䓦ԃIA,!mʾokaQ$`&Mglۊ +{wPec=+DΕF[}d84Lsm>a75=I1 3 +ejgC L5\ҀtAPSmO}΂ +@@l$q3E8'&B16azT%f?@@@)"p7ynL"Q +ڜ(7}Q!3r|UζnNCbjC3%'cJ-B  +%g><=<aˡg0 + 1#M_/R! +gS;AC8&1PnU tB5)U#פLe]Z<c+‚ayvXbVd.[&!7{l셿t~s~i:Px֗g7ٖ`cq6(fV>ﵠB +RTdPդ'7}Rh6pY1}4$ ^iĊ,=[PŴg7g*P#poUUEy/o.F7ӖQdm, p햓c3A%f>)쑺N=Ǡ5)D>[df^:d2ʱ6ﹷ*&$vo헤A׎ƚ\.O8xM,:;>8A7'О@k8 yXA0`Xb0 Ő7\G +?s0 +97x<oN?Gph偀l\X׉H9DJvt" +Cz<h%x:_,}: ±U.%nӣ~r1=Vn%7 ;Y|"zdJpdQ bAYȎ]#p3G6.y̝wШq,&g[ZZRAL?ttIT 5,u2)|Fq8.a ⌡դFLfkuUǠ \زRj|ǣ{ۂBʖjsA6Ն &xT_|>z*{5(@Ƀm|{2:=SjPVJP!6ӵ}e5!/)hŬȾ!.>ԥV6G{wPh+{SS(` Q~QuG?G=Z)? V hE:[U\5Ud)&uKr>#L䐃Ι"n +e벬0arÊ+ WPN׵mUݙk!b(bX`vRZ [ܙqUBy _F[cgWkӰZZt29OVu).SI`" luYE[qm"u$B ?u3{۱?h|.[K 6K#@cT qͰYV 'wcMd)ά^;F.ŠTmy*^k}lڠp?v,e~-NЙy*}5i lF[0e]O)Ѐra?`2Egs#l"k)0%!4]wz> b9ϣ [2`[L,[0HfQg*rDaʟWc=mں0u!So>L݃3E*6b,&ey0e +ӺIh +0`EbtLX>vgj #N$vqʷg9떎)IM"2Q$kSaBt 流3#8/) FU2\&89Tep "||#)}ZZoRRܱ ږQ)B=c!Xz]T#[Lۭ +}ΓOUJEJUţYTl +o$a@#WmXEm +mI0.9+UY]rs#PŖI[)1J +al4aѢɈY2ԠduҺ=v +]pǺ 4Ty]]] +t3;)Hggy2vD"ޠDئ*'(q0jK)9D&cR 뺍Hhw3;U5_ӔZFnɮ\7;L!1!#5V2MѝH: +/ /k ҍY6_,&ە%9N /V?i׭IDֺT.uD>)r)`mIT3-mûҏKtk֐ +D +έ|tt'f^6Nt` m2:7طap鯙@J^~P|]mSLS,6!{@ӴuQ6!|@RhbFLp*A{KZxiz0Ŝߏ0&1\pݮHIa2<E^"Bq@d0]TȺ&2I)+2׵we$<5D]zx7:8_צ5G%cVU"(ʇ}Ϻ?v=i1J^͔$=w>5s+ "d pvqo{$jz^ݭp\ +5Rw}*2By׊"LFu+Q>^),83{*6ԅ>"X*{[ qɍe*tƢyRh9)"X})CˤsR2ݺޅ4*Շ7@rO).# cADkV DDEDpaKy,zh׶)kݹ`=H_2oOdo`G&{X]ji9H0%]knEO:4YTLERݢ] +ktܣ\źnRl +r2k~U.nja>^ fת]ڋfD7H ]!28?>h.;*yl+mw ) +:x +SW_޵Q,u nnV & C,VqSO>n!`ދ zܪl.W2}GߓMA}(0dbvWi5zwq֪V(damf7T,z҅~ z%f4Kp,s݅e*.E&{:\[ݞ)iҥx jA\nH5Z&8n b zZ:)sA]dѥH)Vo]:}]"фik CC_Lvx'Cu'uJgLhe=rWuBe"LBQ.fRBLzBZŁFRn~[v3 +VV6-}\`JbZZj[(Yxg5.¿8Xݎ T$T{ND0TK/ĈSk6љ_׭ ߉wKp+mWΥ(vv\T<< ^~Od%brlKFZ]mZߺ/rg>0OLor%sɻ,ic#^{,fy!I5DB]$#zNg& 1u/#1,'Zh:vi^ӒojLXQ #gR\8n"{нzd9uVNz1ռU&׌?`S/ogyw#&%B9b ˦HY#.XjݍLLruCn THgįUG6L_! Qmu պ=즁PB+ J^a,o /d$V8]t&kEʞ>$>)HUJm uݢ3$P([av SjnoP6L,]xkacE*nlW9xAmsjۓu'%e,& r]! 8>D7Ю-5d/5p;׿q Rl;cXV3VZ;yD*C=. |/uqِd.XTdQGv}J=gLkT \]iʒ$Ha-rr'o +{ +gѕ^)9(nwkVl2|,疎y i,{kdt{CN+|fQI-S#ݏygd.l#LD:;˦ o1g39WMTHST`cXr{Vo2vZvp]_.^]G_w~.7ӗj,ו!iwƵX úKa˫.#iR[ON8pH?Q{]Uvk[K&8IKc oX+}.?d2*m<2;2=h9c‚R).(E~(8.PպG~2qn za ѧJ@o4%M7 /tM|n$s[KϪq4ba0^Rs|>u;O\WT2 aSڅ_2qS6A-O*C0,.Fje$ *ลN Ś"BHK nLvE#veTeE7w""0N!@jWStKq&ᘐ@G%pw@P&ؼ–.G{Kn ǵN` яv! op`N:-@N.D8T$O_e5׋cS[e~#E@7rn::X Ͻ)0̯>$J7)T+%=eK[fB5vL]-'/jKa)^!AD["<,!VgՒ!+gR\$2r<斉kwp>*Ow&w(ĩUԭzS+U)6S@<S6)V-WȼuX-3Q 8YDg؅S%Қ;8ue{],Q[ڗdؑo +@nwFg,AvHBExr9,i!znLuW86-{YWE;718X$"Ĵ{WɯY.ruOgu'ggc +iW" +"l)82G(`r1͖y{3w0.9S3 kS=jY${v}.,E)! Ie}]u/cS_DF[%=Mt*e +YQF* Z2)Hˀ,fLW&7WRᕿv/{N@Ro\)׵߄v}5AK7Y`^&Ŧ[n|L=Ww + ٹ"A8q2(*heo%]:f"CbUt3n2wÃo\„{9 p߀ S!]mXl +ӦݨB0=gHЦ]L>`ԋ=^մ۩3En1vCQgx2E(@d؝3Eqv)GSD|GY$(0֣q]Sl [_(<w}.4ӎmٻ;23ii؅K5ĥ/%p4M`nDNUgt7] K-Lzkd(k1MVĿmOK*% kK5#kX˫/5 Npt_O+CtMsP Y:]ifٶaő~wrB +s׿.Mb'L+;ZCL;ߍ\{v>겅MQQ,I?AuQAAbh<(L5%^w8]nok/.ۼ.M+n]t7λLi9X'Uh E6K+0]Rs՝]-ɿ$):l ;ÃVK|Ν{,.T[y"nb0&J:uϒ\Bt7;G*\k䵝ڱ"\)DByj\@"J{r~u\tdŀ o&XC`}2Ƈsm8Iid5gxJs/ߎnl|_j&]WxeL<ڣn +E,#ZGw8Cbvo& $ٷM5ZLW +<||ּn`3m +V /n {`9wFXN!Y]뺥ch +SKae^SQv Ag7/rYƮ€]|]U\7´&/ARV9oW}] CZy +#O-[1ނFN z]ô*仑@R*x ھg!M+{T0 7 Ac&T{0MH3{ƒ{veqGP ̴t.__x{Uo/pȩ&i"ǰF/m料ftP{Gs ^UJ[ 0-G_MQll:5^{9Qwj oѵ2r4j(]lbދ ^N42URCdOڿ@s妷PK,'x>j +E5#jܰWEJuEJMaBb^r,Xb=iW}ڌWK Ɲ s/EeR6\f +KYަ Ǭi>Sa]n4`%&Qѡ4|њ]ju&)vnasEu][JE*MQ˱KɎ[L 0L|aL(@$u.\o" D.LSI). +FHY]Ʒ9k5h%PJ1!"ݽN>ϗӋ=s<ڏ7ͺ!bټIoo>d "-Óv?0s4Fq~,kw3 +~VY@lVln~ty) +)hO  \; QJӚVwwIRBD/ /;H>)h^ps]W4Cv;I{gRIt+.1] .܊xJ% $)9Q`Wc(v|-3FwZ%JivUuX_YnZ0֏%V;j UƁu{(v vkYv Z\P=bJs݆ {vn?v" h:hPVP]o0)vcj]ϧMc>8l`Pw +5)\A\lZ7V;K m%o/-ѪG.x˾¤5N][LLV!v1mH{TJջ f*ZWGA<Ta*݌% 2/㼀d2 $ }kZY./Uq@ +c.:hKQ obekĺ`ܮ u2mW2FB~}H)ĥD YV X@YjXٻү럎}FEE.Y,,*(֩8%bO^O(IL K3e g]2o∛Sב(x3QFHk݃Fk|O)ѽÅǓoIPk',IkPvJ!!F}]-+&CpVXdW'&´~U*V0|n839~w>޻y!8\]mM'DΜ?"=$g] _yԗk'Z^'d./,Of +#Im-u%llA7@[ݎW"I@m^E|*̾Df&R#늌g{X0Yץ[}7p>998;sK +M]LLdXĿ=wN&/$ u1Eį"S>radփ9Nn_r +ug ˧H/ Ʀj+C %ֽإrDŽ1*cs3u-^7J 4oSL)Cभ߮ŮGwkֆJC5ݷ{ +SYمIڍ gU83&U=Mp >엃лOyN>.&\u"ӞP*A1ɹ~6]\xE2|.]œ['NEW1PX[sWӳ +Ҷ +R)sw+.寡H{Y%H;A\?\l\" ;uc2[g$ۋ"y/ы,̓?Gia騃b`;x ꢈGbr{1 *(ލVژ:$΅ o7dNڐvdW uW:;-fS]/4t_:Loօq Gv.]̙ _%\wCsr +E+C#r˒-u0[/:[vd|#)iϚ*QH_ xף`Mn\HPGE*jpzn#&9i‡_e 3$`}¾Kmbe՛4VwukOg٫Q7Bվ"wygZ)ͭ4-fu$|p'd kC9|.`:P =f=lTrtjO(3^>M%k*mNzR@jZw3hI;O.)__\nN%-Ue#|Giz%d.hו]q]Wh8)LZ.[;8TsVZo˱u Sj}!A' εS|s$N"׾`rO3<$wnop h +]N6L . }egi &=15n)iiVR 93E]ri[ ͛O0X%mneg)Xz9 xZF^Dj|IunrwЍYKE+KиuuX;XvO}EY3^ @0 Zza"uYRn*0\ ;[ 50pض\Z&%THZ!Dn*.,ld~̥N /%d&\UcBBJāqZxR)2F7^~=Ku>3h* Q ;CVI}̨8{ZL'YGJ@(B)ޕ>N^DkXv{曌]  *LÖlg bW>`E>ʝgQDu%< _u쳄 aЦXIQ%hV,%B-L||Eaꥵ]FL "fǮVuߠzL#ery9n*uuĮ9GPgݞƢ[SՕJ#Ji.?"Bl-2Yݕ9C]־ +y^Kdx)ti +R;*/W亲j@Esv.d( >M>?xÕҰ,cp#n/ȺDk:@W5naG[NhѦ]WW!Ӭ:"l0jnVzJ 0 s3۴{$  +o +&TtYjrzLͱr7{$;L]~uˋo]刻inRDZ|{RGհuo 3Mv^ef۳i^66:o??uٲbwv)I ҧ=U$f+\i u3XBծkuoS$u(Loh>Vp0Mަ:v#Y;h3op]X 1?`j +x@R*uc ㋥0x珑>PD]wEEx +gCTFϹ`j~_8YsB0zx^i ^>큼v >ϕ-kRepu_n +tmnwFWSHCZ}[,J uzBxv=~˦*8DŽ:3uv jv!˳_*ۛ+0@%:PWu3_I[хtȍى&Eeb?YV2/Hڥ9"weKUiÛ{iZb.<}PeW[ժD SA x,bU.엺=7];|uVI?.W*6|EKŔ_ +D 5t?Yk2M6h>"c6v_7%$7Ӗ!ҋ:R. J}?H}ML"TEu>ѤrH(n G+}lu33D +4E&KD,+D^tX@@Lttbv"ިCI,ajMZ$hev͎9GpNXnLn0kJnunQϹv=]"S~)lzJ[wTہu-0k 3յJ+C\2RcSR1~㭲)9v"~Fyopq Vx[͚ҽu%}=E|Si73/u8Zkx?1m ]ʟٺ98Z("|0!||]zWQ>sWHf.Z)35hv8PruvS\`"L#x'$^Y19jyљ d5u |׏iBz[5MNDIƇV^AI`8cZJf#)rS}).RWn/ZWbIl +)N)dLMu?fv9et"fe\/er[*Lp 0!Χ{+ ²;`ZծhlqE1g 14LEpGxZ'꠶ ^Q.':]08(цvqͥ S**rf kǮkc]FӮU5Mm#gK†&c<)dp^$rDt㬸פVzK\H6 +VS@,S nUk\#TO91l1gKvl-vKm$"tYxb-\TPXIl-$oMJڭRPky+%ro7.|ƒx]uk%bGZ'0u`^&EQ.vGHW{; ;\\MDOJ 0נ͵w]`Z[b, wLugwS6g0yvi +Q5Gװd" MExOV3E3~fELlgf`|N]0[-X> z0w]`,baFAe +v {}$v-()?'0b: i7:eBLM^ݍ[% ]#8]n*v;Թn ah H88C>׫aqMtp[cflΚ#?XK6u0_7(I4.V!BcFud} ]WL9<P|v$/[w^P}5ѮݒdP6u5=SG\,T u'ƅ~keU!>GER\}G|ɋѭ7Fԍ_WOLzލ(7Uv hzK.ʷ>:m&_麹Ztn\$̫l-P lb2fQbS#L#<)R,T)Jˮ\wc0e\"lPak3\޷ĔY<I:evFaP]7]8|/hG2uΩzOR !K]Q(.u5/>k&!FuuBԃn@9%.Z!j)g@3K% J2[z{S(Y/ÜkI]F=aV| szLrJhWIېPpvSO<{6Ҁ>ןŴ"z`NR{zq!2r bn,w)Ĕ,Sޣ1ڗN&'b"h=4sOB4mX'Ʈ{뫀"ȕp#GQ_\q-5ܻ3(1 v^zN)͙µq , Q]uyE`ܴv_v 5qV]/P7u"g+"ve4>I2o7"Cj1=+u6o7Y<)]ke DLa3.L#vg0ȇO0.`:f' ) vN-Qf|M([nw]q߼<]A?b/Z ٫4/"8s D߻Mr̦-.i(+A}| ecI'=% /lᢸzlbcEGLkYPWCKm'3io M$Ln_ nTFm6þ2!X4ej;u!))1VdLJq ZŬ0+" 2A׏3Tc˼w{]v[D$w605{u )vjK?'#&*u()0͖8&* )u=2t^ex$ +GKYj::FAtMd^^b[suh/fi̢$./*"hQUT6C]}=\>_]-Bnᔮh'K=u}u݊m)4YU hU..J`p]D ÞJ'b0ku/LqJaz&HW7d f v)z}fkܓ\w,'AI~D֧Qh_. c=Xk]ݖ+{[tMY*guqǃHI˩h^bWTBAkK8gmYn>WZ%c\]+ eLnpF](ޜC#WO:΋wckx Ү,o<[nhΌFy\0IPP` " +H.[&I\lFcHؤ6)ɳRmTLV&WDlJIv$m!hPѱi.?b'?=@ +i 3@@>>VKϫM_ZPl˓ˣcAV"PSPLJ n-36l6s-S6Էy3 cdYZ{3Q-It2UF óYV\PDy+^$Sz'@ɩj>YPz(U5[; f0{Ee4ab2SK6V;kvDwvG$eqInVxp%./? e&ecfePS\[a\gq$U$Q}(M/JAb&r +752?>@<;85rY +.KCbD7j]'6ˁq3^lya1Q-YXfyLܝNkNC-b*Fɵ@*98_"^03=zVe? TH+Z W jh~H|r0NJ`enLA~:s3Ûq&ŔP'~U +M$r&ؗn ŸFŐ,(beo}ӳ Ӆ2@I\$FDiKT>Вxhڧv*R&S%q*?J"(ׇmṐPp + hku[}w%Z|8-1[6Pl/ۙB5RĥJb&q*No vsmjG&F2%ӭ+P\ͷ F"8`2҉#,:K t]V,6ݭ4]]h'wN%^QD)йJJAV` qQ)4r:;€& +"95>I!XJ/Y/,7gs9-BkJ\D`K#(YĪ5euz^"h#73zvo2 nBM<%',09Bsg;#$@* ,0ժյy%1H8ҩj0c++4i.x]$Nƪ,fӂ} +#o>y(ZUJ-+(q*~j-#opÝD[YmkJo7Z^"tl?,`VL Ax[I@.zx{wLC0Q- Y͵Mgkw'٠~ͤ88t'f"f%pxCa `0˄/H"2"N#@zf7e 0a`*F[86%_f_%ٽ~2ЌIV 33z͞aæ+#5z#=xTyfِC/U*AYlVmܑ]] a#`^a`=%/ICᔓ1'=;a52ܚ'R +B[$`jd85575225n,.nV#̋K Շ PFcx傸V ⶙kvdD2m3nm[mZ)j75b^ױ"yVp!0:AdRrLVN?_Y `{C+$Tեqp9ҙR/+$ƜtzO`bB#5'DґxwT bֻK V&{| +B%Vx՗y]Y2+32앙' jĜlي@A!eb\[@?:M(7fb ʉ&h&ESzw3I?3Q`Sjĸփ|Z# V&%5GURECt +$zű"yձ<PvUL<`)D{Cӣ3Y\x2ʙH^$ٽ$KoKˆ^KD/>[*UƼió2 +(xoh;[5{o.USl 1 $+^9 MX̫kc3"JAue4&Z6N:?|&Eq5.CrP`PHr;ˣc+h.'^5T&UD,{yttڏO*.;wpZsa9/MWYQDO@0&3Xt;7w}??5)@ʀ JËV63rl&, 6Ǜ-M|.d ʊt}-P46ƼLӥ#aV +x|>IIt߿E +# +wrkgm>#i9!5zxEJO$ZqEk:&LlЋV +L4[\Wɵɸk۳#lۇA3 &8dq%Ƨ`8EW%m.JbEYFU+{H ZTI9>(u \eXm}hYi`EL+ Ԇ\Snha{wp~y}A^ ^lY-Y8ʑЎȾ{YL7 +N=1Leڙؘ0hlѤ2 +Bs2un]ۦT=! 6ۣ C71´ev}ȗ7GnaJIHgj% שswG鐉@a@CM% +1LT_fBB \+aNY!Ӣ$\,dDF  r0 Aq\p=L|Ċ PQP C2A"nz rֺ &wkP`.{-j8|~cށښw>O.'-ŵ>YkW!fn+Fo-.=#XtžWr{%`V >Ĥ ?G<_ɓv~K=;ЮQUdNZ{q}삹~SΨHkw&_SzsF|o[Bڝ9[Ǔ5U(L Q¨L>\AkLބ&nS8ם3l(UM>%LHy^LU⃉dhHJ! BmRW`(h+-[,HB~Q +r*NuCo? gPnB$]h|.2T(+F\Vl*G{wo\w)P+%{%{ypL ƗrS9x_7@sНMt"""$u۪1NrŤ9X5H;ڪ׵jTEhOԻn.n3S[t_{}zArUMKx[[9`0ߤD43){]~EZZ-n:0t|%,&¶Ӂ (5@-bn^X}0tmK?8&^%5P,{R\s5|oγm,ibù2ܙQr+<ѥk/ʪAI!E"W +F-&{6Ɓr`1t)V,tL6wbIw9 +5";-N-&5Tڕi}mx6Oqh-p뎃)o>Ɩg 8HFOZ7g?b3AB?@ SfDŽG~.,%p x#. z]}VLaXCy.s$ &!f-#' u|'o)Lm=6 .a(]qj%M؎=iEXޔO݆@9KH]9K\ZbI:#\9Msb og*9C'e55MF +^G"ok rȝذ& RC+&ގnw;)r0PvQ#QmFݖBBkU]._ *g2"-ҋһp]cH#7JLW^;F‘EtwN)@\fA22!euhn;& S=-hm Wze6P.knܻK|M;(-m +Lnԕ*r]Ց1J2!挻]Cݛ+w=[ҕ|s #[{4c*OrC%5ܷ'K/iww S)j څBHZ-¬eBQ-ݖkz ~v- + h5JgΨ- #]c]u#MZ)uޅZufo6ŊwSv]ps]Q\Jaw0[W~`& ´4-01 a%5Y#i7D@3AyXTlh&( tN .nuqk)Vbȭ_?0E]E)/#횜K$@j{1ZٙBԚ)+2~P0)Ss])VmZvuy^wjS%=Sab):rݤJ +e֌CsA +vu /M1+8=Gh$^hE~!f{ +Tusjg]=]A]g LS6ZRt7JzOO M*޷ᜳceR>ZY/qT&EX.% j}e9D7C!ֺEhry #PK[8A7)65\-Y,>-Zhh$DN&~!]Ł$29 r)!&(̮޴{HQF-~ne+|}8Y66vc2A0yH]TT5ER0?\r q@yPnSHuqWZtUYiE//b[wfIOqL=a*~1&vkuzv$;pFjDB:"7mEvs?7an{;v7,^ɷ0]RzcʰA'k!"I#P8I%Iٖ +%YSXD>k]a)L/Я{w]o{mQ3yX#gS +m [P0ń +vuLL:^sIu@c.VN1^-y u) vak?yuW])2-ő[aފ,b21uSYWz;[QSDi1B9˛bCxFYo39Qz/m1gwAAΚH{v { y9&^8ߍdr%J'gCՖJG~gh֬Rj{Rz{@QJzăp()rGR/WwM7n&GC]rd"۔!},Ł<ĉVcjԯS X>^=!_~v7u)22.] 3eEu}4Ƽz1uw*Eowy8^bR/?׃g?aVEClQl6Z±\fJW\_7%'|Z߀mtl7$Zv|&M,Ma֍R))u+i7'|Z5 yu`#(]Ja~HKunh + Я͘(I AyzRw"9(p1-\=m޺W]0sL_Ik:brg]|4rSr|лeHnd34ESGժbY*[=PEuR#\B| +4WRiWBDF|a6\ ηPܶ)̥fmp pʇwO_r޹KY;p y 5fF#ڍ]D]LɕK[VcU sLb2 YI{-n)W冗NݼJ !-Нǥ޶iWAMsVie?F|jD|w%_>qEݢ"$"TC+`´|Ɲd@*hE~ugF +Կ&U}6Nw׮Y⵮}+׽S0r)ShETk]ȗ2-MiyNKgOL xLcMa3p݊9Z|_(Lcw&vwv SV5!mliӁt.xu{;Ԅ]rrݐ,ѯБ-յ7vyBER%@@ρrU՟. \!)v[2ƾHo 928M9]E7qqt t} +LN/uw\R7 e.ewdpP%r֊8:cVaȵPEA1VȺOS̢\7S4!G`J‰M<\ + ˔~U|rtLFXő02YN F q+2RSEܡk LE`PS&ܻzqD2&/7u_wbv*\S̯ڼ0YL2[d2W>bĚgʘ\&` +" a\Zv6 ]LO`q25׍6̦^>tRyӊ,|8]%Sd)ZE&'4L1p{{hw&s]~T+GDow̳Mu0śGSh]] +SviBO&]M@q\KV&zj^WvnvKp5JW+ m.2nXٖݿn.ZN%Oi|xaI" ;G{DC$g.阋>WMΣRV`m4^QQAX㭛QTB+y&m0珞6 +W[T4Z/hQ yGRG]m]q qB`7IˆwdL;lA:979z0)s)q2q]v 2wh<>_0]",9bO]{.UJ&#Lh4iׅծ#`)b AݙgJCLx6E-~vxg$P؝-TLqC#du%AVGD41vL@r$Vi5wAD"xo6A\ܶ1:}cR3nmpw~lDl.k(92Dkwri;6`gbmDЌQƧ2')z˻­b4E%pҿ 9AxU,{Ö鏕OuA|s͗6϶C/]vS7(twK/nֶiRX M[#?^NT M +7߈DsR'OuصL9?@Y:ۚvDU* "vSycRNLa(4ޗc7*buwg׭@ajX>u12Ef=Twt3SD׍ m3i |(Q-ŹbE]#UPoiصTrp!#m5yiKbA7aFr]Lõ¤u*)6/nsӗ93K6I {ա, +xBHsuz+E]9Q(68kN]n۲M_V/y)9Ǥu.+:d"ԤE]d6ʌʷ%r)c9Xݒeti9s\Zw9j RuDҧR? +/)I{5ZS]y{ʸ߶큺/_U_bڅvt8!"Ĺբa:3 _m[=vͮ$RA۝j뾠 OLԡ6#;=dD gnu,n{׽;LArph|CAۍfוkqW3E^fcۍhd|-d6lxnq9=z3ݺ1vy9r]`袘aH~1S.^wD!\x S/BR])N$ڸդ5 + +.XRt'fK+KgAaJ/LmTv=/uD7rv +$}AM vx܍JWzB !>Xrtu;<- י$҅*_`aӥ0 + +$;J6,WRWztM?.IJK5v]׊.xD}(:yLVݥuww$hw=K/P6-#d"c럦D-wNi+<8e8RQygZm xGj\!ַ<) ,;غ¤SxQ b;&B防Ai*OJvz` +z"9M:fϮe>2nak] f1M6[+-歰)Ln"s!.#ghx(TXhS|];׍Ab7,k/urf$nkѸnQsџR:`2;]*%0P,9.GݖM>/ⶵ'U2SH E@n[Дu)=s+ ޿if8M% ݹѣmzrʯ s=pXdS{/kB[*n>j/<x-t 9`VTk-i-1B4>=By6I{Q# b;S0} xGxR.2Ep5ypnUܞ5A+P3aչQpe' {LUejX僬G 27PI7/wYfdMLZrp%u"S͔g{ +8N9uď.L81bS@HünA=6S\`IHSLbjf +4E{PT# j.ogi7FFѾ)LL_ia]cVh\{8;I85xؕoQ pp\uLعcB_Ӯ.)˓h]4N΃vm|[01Ȃ|S*Hj\iR w%'r#gC蟾Z%waDBT r|x[IlU^et,( uXSk'㮕li +{CXK,]0ZN}]%=8Iܥ똶'Zq3I6ZW[r3E278i!MB}]nw cxrIγ v" kZNv]ofºʼn&uc)݀mj?w`F+Lč)tڵZWL+bڍS9HYn3]vEOz2SN몮ɯ{k[ga9^HM(۝.u t>ғo5Mﻣ*g`yEXLJbH3y4K[]%[ ݥ _]+보cr)k(Ʈ]nwovX \D`2VM2THݹrb# QYBQHdIKRG)) +Ei:t-.Kn7!B7IzRK,KI4*vr}4.^ /@C#7.tP2IյQܻܯmp֫;DqnvQ`V {g$4u?xsӺh= Pvb7&:I#"mEu|dF赺U+Fqwt1^-cw`S5Lۯi9=ҭ)qw>Z5)INJk'AôuݯuAHchR\ƺ@&seӫﺽ.}kmb1ό: ;L24Z۔nX/[vsVBg:2wI0)@ +wI{tx$SӠxh- "e%ԍnȹ2n]&fkA+*_4t;s,ϥ= ǬԩKTZkzI亮}/BMtXnyĜ%#B;tT"Z+O3g2)Ҩ>ZZ\SKѾ}U/5L | $փ=΂7 +WJ,_1xRΝ&w +O@(hv{r4;Yܱ6E^1[LiE80uD)u "i"Z! 3 ⺁{KI;f'Bs0OLSg- X|3c{̤ZVv/!͹5+ZBm$>NX6' |97Y8iNs]:Zm*\KZyAFt##_gɬ?!n(H4d3(;Nbu$ ]mT[C6e1XCnQ-FHLM 'xƌZ[4 v0\125j ێ6jjPclV,l<- `?n1?5Tfߗ̒ cnń6U < $EWv¤{~bbsLXcɰ< Ѯ6Sb05kn)\YLS)g"UehMʨ\g놑rF~ ~Mtq{گ'bT)!{^ĦR!)n7SEY-8 A]rZv-gE va2k8( m$8w ;esIkc{fvq9"HtbԆH +Mx&" w5TE 1kBA-k\ũȭkg_ "qp2L7q7 2\z_0 *~vsy2xso.L e gbԂ."2C^c zUKy4ja撬kuٴk+,U\MGK󧺜hX"S-3'CRռ(Im& vuuXU> pvoAև`2}Zv +AI筻WoM3$YG׍]D;)KʴEouc0.r|\w&&1Vg\|0)dQI`g亐7j +ح 9pPwSE6ә+ . +cł,ⴥFd0h_Poab0M\}H\OKBZtߙFn +RZniEmre]VwRW%\/`\ ?99%K(c6tkZ:W+*(.?Ǥ#unV P;;<_Հft &V+>,7[Hx)VLS57",miBSd*u L+}%t_f˚q-স%4].M&TsEE˻JJt KVfGc;rj܌FُBST1.cGB.׵պ ;\WWe]!tϗ,8Ы׵;vbRboEĴ"u0 )Lù6?P4SHb w}8 zX*R\u;XڕjNSRI+GzvIuDYrt m$ Nhwc?N`exjnHUݙb:hj : +)(4 +ҹ7ot;3rB ؑބgS_=[L \de]a e-6htX-+E[Hd%Pі޿ Rդ̖wC65SEr+^-W٩)..KL= ݃vʮҶRAtLAS*׮,s]Ch,\\W>ed= +hI0 ZG񠼳Z:v|@]`&m6Js3TU.i~5DEf ȸYnPv#KnsӔ +w#>'IP2c +D*dis K}$5U.vM^ӮbfCE05Ot Ejg4}6S]6_:<"ͦcA7hjMn &r+_73ݑ3к4Pn3 +S 1E8#@P>KNqJ7]=^tUb5캠ux]w)S7?Jƺn0#tP_S.]+Vwk -rtņT5 $A.>r4G:.=YOX3>%u>;G9D}\2i?ZZܭme>8_uMu&YwUC8nԨ^Xy( ]0EX۪떇*'S%p^BdGkߋο=_'|e;.54g<S@I;)em_FoN-N B/,k_e}g`sY1Ktϥ"R -؊ v!vӇ(VcfSaZ.; +-#.qbnk @1%U5]hݻ 2Kws]4l؍]3I7 TJa6ӱrޥz θn-2oœAt]auuB˵bSSgq +Sr(v5H@'YLQSy,uI^hwS 1E]lI"M!kSi 1@ gpSsMnx )*>bjYJkA 738xԔ~`q$?o]gKL0Au v#R 0>q8m ]r!H?we bꮯ]`դjqMN3M_ +X##b, lPғ6}}R.<.YV2&sIv3~*)? ;;4m]a Z6^P,bkV,̇ʒe+//`v+Xjk_mt^ VnI"Bw]_Р(2X +Y:G*!ڝfOfsό^=ma2tr̙݉eP'IK8{ʌ +TZi(}?!E`4fqRIc +=yk٭T7wS-wa.c5+}fq> C{Bhvtu=6nTn%ރve'e2K[(1/CR\1iI`|G'uXE(4"0Ϻ)>`?5dL:]aJٷI{nalsvg* CC6fZW8x)s=~RpZ;sSlZLqt 2y7 2$z``Qw(dhc xK*]YWfޫrkwVk[;He໼;1wG 睫%guvCCRpFf(Slԕ?%JD>&``QbޯO0mKzxO´}< !)z^KWŵXv!_rhF07Rw(5z@;˿nC_Xux I΋XN!_,.쥠%L$A OdMfҬn+Z>rs,!娹?,&fI]|&mE~[BwCVLaQup$g/Liմ"uRW~+ODBv21_LsQw^G +-u9&Yv+oE!r;jRH]۠RX&b o+rwWۥjCܡ]6Qfb5QN ؠ0jmC@/5_SoG^Bb^N.}$&8 +@ +I{#tՌⒻQgQz2Lv;ID""*A^Rⴚl +Owh}j ^q +XX"x[a|)L*Ʊ{t SThX<@m U +tr⻄sЇ+\X0E^F]+c(sn~#Xu #B3E9F>HNK"8N>;jz6װg(~כ0nqݭR]2/nO@;҃M.QN#vAIgڵ }&x@sj.73j³D u悟g㘝Be`nI@i}^IbhiC0DGt~9˿4`CjcuGW-E)d*"눩t!~vLQ2F0ki`vژ]WL uC΋xͮk4yͥZkW;cSPbun襙-<´9|ȗvi}vi +USvwu>SD iveF8}Pqs.7hLI/wjq.A b B0{FuyzLg >*So^.j!T g2Hu;>3pL+VHF J$3΢˃wbl2vӐŔ 0/䔕w{KTf۸o7D8)?VtcB6nA9-^>+! +ܣtELn|L*l6E y0GWŨ>^R+ziHPT3]v:. p; +CRcPLŽ1F40Q,Io36U#: i=uz,0 >_-Mɑ10*j + b0)u LRPL2&E,JY hgF5cJ{juf}ɂ[ ãCֻ3gso^ɹ-{~u~zoAtN!u!}N=h6-cCx +Y0O;wnM,m +f҂AWΠJ;ƕ%QEYВ"t@踢t3aI hUUͯ3MlU ұ&_3yܵw?gd>c׬4l̋{8~[:~z!CKƞXffTyJ(Ngfv-.w%\=Yjnh(혼!%?z)AIZfkb_R]x8Ā(2ٗ_b7z^O}Ǎ.e d1C'a#?^> `r0ᑺdX\ Fh0P)B `(FfhwfAE+ce5e\2cᯨP"`o 7me|!vwB.]Xf.c7ivd`W)h^gW˥_S[A!cgtx&5A먋./7ԳrABғcuGڽ&F9e7-t"f8h"Q\;ZLQZ&]kxak7Ikb,LNweZsC@KH峕e̝PkT BD2SOpu>\77tu6Ai!rj K1)"e,v9M^Aq4*uXpMK);Ň>xzotlbS}h20hg%v_ w]  St2F?1v" N>i0]4Lzz +־ ď-bW8E#vb&<'"h65KvBf[y +BIPGv9q"f,%m*Ru{8(DU@; u}`v AwxaY *Ϣ0v3EF4EB'泫Xd.n2z:@L/@0ײ6p]度;b/]±䶘Al|ۋpA,V\$I";v,C2Kܙڬ V{shb/2Nj;ɫ@,uX>_ۄ$kN*NaN«$D~kqj-խkSU[>+̗B *?ºh`tMg:ϱy9زhGͺᙷdS@]w{ۛv%ZL6Szq{oׅA t +$-aOq ^b. +]A%!`n:S/v$_>G^Jdk2Eiuk]ydC[O & ,R{:m$M[DbϢ:ȯ+40:ʙvS3S(UW}g>1yc2yq Tw16#xa׮0KA8Lm]?ǟbkot9&%i,n}V@g.\fw? )@WΑ(4ٵTOޗtzJn;(u]{8X8e~QD[~i_߃N$ P<~L#sl<* ےpv Ш m67+a +k/ h7VK=Xzuץzxtx[Nj#W]wݦĊa583^'ѕ+pӿ+ &5.6y {hE;)LV|m]nկLKq0Z)9-]CM풝)GC*#5cҚ!b<xt-0 Kj&<޼e7}wՅ30:;Q}F8򊁸24\]45LoP3E_u݋WIP.{Q}1 o) >Hæ¡j:cI DaDvVvmtR\! r^1*L. 0o:$Ϙ,[B"[`@\]ݕ{ ݼg]ӷr݅J7 jeNT]0 7+pDmR)^7]I>! A&h38040B kr bt]ɕR.yA7q2|RJ_3=KjXV fOMz/€ܻR$mݕ7^X]J>s)|Lތ+|ݰhxW̩$9G g"HQ><= [Z3k􋽺v8hI (0nF"LQlG02EAn on 7&Z&\yCAz70?vQ"UU]M~jpz{@ڰ*'HTv( btNA0ދcY87SeSP)]u~JTg +ᾑtCx=v7}yuV.Tw@ 1hvK@{\(VB_G0G#orDbwԇ.dvwmu.(V؝ Z񆉽_7.0J.n݅$w^BLsS4>stream +c l tF_8}8j'5 u)^A{.|!Xa*ݝv5}@7H|;E7W.$gɥwG?M]Ҵ[GeMQ's +vR!M~̃6妅I&a1}?SL{8&ZU*:Ti|[^xe:8u7u.GL /U;&(\nJ jլK۶%1@[&WkKU +2:K&e +ǡf:bO9>? =JPβZz}n.){gjbԨlfoXzӭ;R.H|e-q96E;Q:':Ai٬=֖jL3|i^vD.:Ral@ [+hkW!n)$'Q&d5Y$y5\ ׃&uG UzuLg1)u9_ @"&P ”Rb &(M}j77ij!yGLb7x AH2U.]Z"^_ħhwE?3HdZn=`6v*LuşuOٷ,Fͬ݁2ٰˊ텒8HMxsNZI o՛1<1w*w }է϶W +eLOF XX+P[%!m&az1.U]gh{!^ lI>"Hnaab(|vy+ƞT }};qX3,×.Q5bjG;;$m$" T dhlMR-:tTΫs].kݵH +_n~Ձ?ÇvK^Lbfj\wte" aZ'MA6ͺ஛z0ުyw)t}/וڝIIg]>Duun)ؕ`'eOnUwݞU})&&7ȼ\)HUn5cЮeNRQzwkUw @ه-ɿ{^*PM4DPX*b[DQQ'} + 0je0КYzTh.H[ nތ6ɺTLғ!]%rnT5#Ɓ0_w&aj]0kk)V]ȳI)vp]VH/n bLt]=}]QIEPO9"78jn)PaŮ2(vDr@C X)d.E7P/v৳$kɟzM2,vUz㟈*v8"`~=u e>o]~zZ+i%g*$lջm~uF`:n\g51Iw,-tNc ԐJ$]$!a5@NYیՎ_ >c)Hyz u1?Buv#ټLPTrl ^>VXMQQ.yMX(S]@ lP\ (ŋI{Bp`:tc־0#pU +?;v@feKbP +aI2Aט*;@ĮD©I3r|NگK3JteӇ46eZImB9~nb-z1af + uk"/M +zծ]wX$/L3NAaiSkY-L@6Ň;@ͮ~N..%$co +Ia)z܁xYk +ϥB42/.RP[ȊNsHT Suv +Ur(W7국RWTBU-\gY ί(o -\Jtܡuw+>dv۲$`U]p,J;~"k;EUYq7F4 +Fk4ݟy ({t]wa6ŀ4˞ub/DRۅp%O3FcQ7\uM!D`jqR0ˍ""1ưp m5L.uN%N0ViR6.$ Y$U| GOT4`T(_KZ.Iv~ ["\-r0.zաu.vMtA)9ՖίKU!Ƕ.UfLcWb0QW,E MwO ݡ%*\ǛKm> ?@qXˍ98ҷSIR˭µ SL@p#D.4nЂ6-?q{ &pIclx5RO߃yr#2K]$X&BӥA=~db`LC?p͆2a2 +}p9*34zҼ6&yS&cTHevQNuͺ+QDV!] +f*L}e7Fi`"\v5)\WejuC~.f)˗$ ڕ!\C* aOhWa "'v? !\3]B=pݘs0u?z}`rNn'}3D>|6m3kivm!6t&_Q\VW-kMFUR.1D%VV!Mn$" u +l[5-h.8 P(5 +)tW]ď{C|O8xNݐM1_/M B>υd]ec췔veD"چJJQQr*ٜ EЬ+Z/1Bnwrhԍ?2܍;|-=neUs3PtSd%-<}OMGꙓD@Yuy +nG-zsu뇥s9vEd9d]ui.90Pxf k nL!,6bY 駼u}]0h7 _wM17@%f q]?vnL4YZbb▗-f:L[H͗HY >0t;Sa:w2xn&'Q k&|Ig+Jr Tܰ0Av~%pK6tN6nGؗoemZK{j/dbSEe7 +_A ~9ryX?yX%eVf!*N|WyCN &آmMۻj"uVO( :d [.ƈęc~I'zם;c#pIӗCWyLJKd!9EŚqvɩMV'JShbEz S4 bEnfˁb[0UםKA-*' awe>1c"v>wLLivShuF%ޘf%nTU_7EL '5`wOٜ1`I5q]C[/COvL]tW<[7 k-Ow^vfnYJ:wgHas -Gf \%md),9PDtnƕݎ v{(ȒyW<̋pD&j9Uw!I]J>} S>tnV_|B%Y Dp]Fv, 6Lƍ^CݭA/Sik3 Ų()Գ)v*|mt7̄vwu}I.!H^]ם~0B$s5"So+vW\\w@yLn0 ,.4]V* 0X02 ݝI81дLt8k%8ޖZc0.f[G/"WOkZ oRP8wνiL x=G vY22ˁ5l++]栕E zwwhjDaX75V^xPyExR #Ԙ`C[%y* ݌FneޡyFvuK]K ꥠn'kY8ˢ.2cקݯ +h#2 `dLi.(NK E8i֭]z4"C1ےnr vOaELG>/ݍca]Nx,<$f +9ͺc`LYL vm_WRԺ[@#5HVx`7T>j+n*rns7ll5% uqPyFUVN +b{YP +<˔giK5~u?ut_3-ju >Z+~CRͳbf+ȪdbJ-4}tuoH]x]| 6xm틐s?Gڅ^qkzY|1 &Ĵ;o9@"GiT”tɦ6V;TS6`*1'gܛgvsﮗw,p6~]R8QfLb;#QT[^ +6;iZ-?٢5/AfOq ¥WjCu&V:IHw \7ss=@f ^tMTXgE(Z-.JK{ʼnv=o]E:XL D'"wə@iWvKA_g4Le)ra:.ɇtH˹aAwkkV^1ab 3SXd..|r˾b84=I)6 3 ٙ/,-Vi +-vדNІ=;Bn%w[}l:8&m~[\ #PG" ̓0Nn;ͮ|ü}OXD̖81j7ӠJ949ziNe83v +&[/L8*q8~](d(v(%B\F>cpN`%/{08TхnD!@ +9,`l]6N@72O$va݈X ~pbK,L d8Xx:YuG{ZdcqR#) +8 vcBju@~zիz)Iġ zpi 3I z]>=;Ã'L$g%S5Cb {Խoɇu.QJp=]0;7}@~x.4HDLVjP;Nqn+oqj7T ׽-\ jaYqm\Ŗ8ƾ䋿"8O킵Q%vqp}}]u5ɞ#O)lY0e. +˄]*}`V/5P,8xmAE"yg7hbzA;)򂴢 +SΝ`¸y-n@TGWbAwLh-4R({ r KvrR>\tr +uTbGwZ)i}caVvxEMGtj[uڭT[?IeѨӡ\ƻE^>SxǮ!iZ#Xgu13S_ޮ]YW>'ɂKѠ axn)HAP63pF]ڕE9_khbTV_7E8HZrP_2u9uQ)A\bOS<@즮9hTJuDuuZ8&v17- +*M@K-UƦx-4W@a8*?FM #hwqp]1yCi0? K \yU@_YCxu[&ש>qM)v1uuΦi/ +ƛnnOnwN-RT!v-5ΕT[aK-pc8\c:(nfv uQmw;P7K8W:ʹP8u$fqxu2LА/ĤasYptls]XL|cZ/W8x᢫5J'P-sn?$ڞh7OqcXAֵ\P")ZLxQJ+m{̽ 砘݋)b-W[ݍj3MpB4}-c\_Wh9"* l7t]1"7 +E w_dzjg(~. 5 +Aum` 1MjP$dHr(j(o GQ8g\$Do s4R6X%8p/WL`) +K઄!Zi/{w eNMn<G3*#*W4r9M!y]^#96@R[.*q;RH]^ugUB5o.ںHǀDFmU4!l +`"-j ro[k1|GEL>sY]Y +(V]'3u.L=%y<ޫz04@ICLiIq$)ʣnDgjs +}ME }7]E!  M8v;2YV٦ u>g=3Xa)R] vK"cayKV&صkAAs]WW>W:/`efùxUo f/7VSϑ͵{pvCS.[nJɉ0`M]SZ7X1wwj)Lf\Gv (P|'M]!葯F880ו> ( ^u]iX)b]@kܮ ݦcڭ3Pir]AUH8"ԛt]7%俪ˢPb*ƗTuhwM8~n^r҉*j8KF͓j"$7h7IS!. dŢzAZ:FjԼ | fpHԠgT4fQB['%>v2ʄ;'u+ql:Ku=Ԭ^شL@nZv&bzީ1spTM02.gd4b7w@L39hW Ss^nEKtA0iOͲ",bqôjL vU*?ALuu瓟)zm3M) ȗu?7)hL uT"5f@wݏ;19[*oouߐ(vL+EC|f|\VWmԺr7H)>pXdnJ{F3hZסmӢ S{U4LlMեWޞ.ܜXsAҽf( nxƖ,䲑 + +[W+zj&8W +%E:YghPE#K?t*&V}P$ Ok5moH@">?S͝}(S8tI6u]NRQdSҭp];m)BL0$v+ͥ5="Pv' ~0ٽk2|n>Ir$v)ML($/+M19gEL'kG|&DBfғӃF3Zy7PkUЉ)4; +4[ceJXp=yQOeÐowA*G95Á0UzJL|IK &ߘvi0~wf|maν F ԭ +XƺZՑ^L18&( 3ew2EKopzwguQYVUV9 ;Ǔ {/QЅwc br]y1MIaQv<|0aH| +l/vuL@"4{|%ZBo.a^ +W uu_f%>lE#c) Z)HJLgVA5v%Fq3EbPw阊sH'jKKpIx]vrxSt~jSb-2c Ĝ)!F[, +F#/9]~2s~:ݠ>F~Y}+98d60sg]F{kFυS-`C < @:s!OBpNL:OQowoi-/Lc 퓂ђUq)"ǡV4Uh {۔sS1x\,SpCL= ;Z0~γL1v]/N<mP1`wڅZ]W\8ly0E"mSmeu[9݂ɛ3<ӡ]v35L}A {} +xpfx +<8n]v}&DI_23.$NO"!Ąt`j)Fn^1r}ӟMhh=at# źtnou09Őםpp5'#â,{s(vY)wBI|:C0iɸQ n,{JSvtn4^j{VI[ΝDݪ^=U3ۃlQ_x݆/?K/ݵ˸xPXNYd ˚U}d +c2{@yפ /,ĂaȕK&R.K6JɫԨѨsH(q*ʥqHX4 p) `03 bX \UIa b:BKsN_1Ag'B?rQT[CԐn̻Bjõ٧Ƣ-1`b77ʛ'ѝ +&`|Fo.n)ҝ]DUn_7y)D~"eG!d:3ui-/.hwoؕ3E_ ]iew F"3+L0=A&)`MF^P j0(>C(`FFE\UˣKkծ$m]˽cv@]R%x̦eZPͫ\ l+/][䛀rd&XNrxmx+^ +ڬ`2J8+p nۆ*[{SuYXScQVb/`J ғ+ūlM gkF7A{1;x$%iEسcHbi{QViCwj|h2_Ar@`1A Lu{lIzfcWb(0_IQU:*cinYIt V׻/OjMk{}y.qN=Oܯ&i?}ddXyk؈vR`>cإ9& qQP*<_XZ]G\,UruqCcm!]w]{%jCtNSu JnOY0MvMn.094;`{຤|ďf)&LBb&h&s?S0\t_(]7Z흧dmo^d,;I]Ar-N j>pB8m ~潻PdDȸo\ ި*j=H}1z9&j;+(pL">o}fD +ѩMsE!Cڢj- Ac]GyrԲnhbГMtc)ߺh#iXQ,\3$to7Dur`S7ekM"rBTpͼ篻xMhՕE>ܶ=%ݺ<`]0 mG(ne@b2[Yq3gquႣB" aR&uS?A |6ptd2GحL|w]1/ZiLax֪\~vYyΦ0S0 #gnU]a`td>_tb|1nZC9rtUhڥ.G })) R +ț˻n7HGjĶՍE%!>޳S^6E)0ZpLJp|'"@.W9}n]DGD'7̲}DB¦ң%:tQ_DӪ26vU +IIςor+ȞT> +>3 RUFu5 D♾.X\ OElƄ!cVr} ?`,U1ݒ}fYh@(-VJuH vYbfϏbU_wQ TC }u?sVFt:'⚺Dʮ\s)SnFyU0+spuxs.W 8~n~ҐܤL1k$Lp&3/"l+V*ISys^pv/7i6L2ԟu5Ea3Ħ@t:[|kuLEt]>[3"Vc|avM|>[<]Ln)~v ?KuS+vc$P GsёkB]"p +Ir(CAFW4O]JxKAR+F4gQ:ϺO)Pԩ2p6‘Pl)X$]rsl!ݼ䙆#,QUE41?U黓̳_VA6sN:HF.|iB2ĺse~]l+`L%`N!u9ѝRKL8HAtm1s5^3A +vAQ!|vg61݁vA@Gwzt .Q%CwҨZ_r]N>ww57&6hy[՘0.AOu]4]S%*,&s*M6vJ>SGSb) $=f.w1E/=TLx[r0Q|¢u )^FEa~1_4\^\ u+/%9= +G˅*W\>kCM2ɐgꄭp +sT|owAG +p.yCҜv#^e-ll[ˮ m5}) /FHn쀘aDNAϗ* j$8)Oz5WÏKdcggPk84s]IUbg%bbW6҂@# 1B(C Gͧ#RUne݊/{Lwa.%{5SeI +-&/[%e7c +WK$ȉko 'vqNpx| ga^Fl2{ )h׻ШyN7#O.y3QW: +޷C)Mk +uw5pP+;dPw fKS$*Ҵ0*X0aI\lbaw[.|Rڵ}㳘Btս`oifw3mi]ڵY|ܱX䂊NHnfRoCZ˃]Һ7kR<ۡ@W +{R2EsuP_o[QGe(3{-~%)D6jhny(/I%9F;TJqCJǶBt*T9ZPAӶKǰ- Mn.9,wp_Ct ^gr0-5 \hB{IL|)0pp.rW/lѲ&&םA}wzVD2J~㺡hM0vARqv@4`unw6LrѥU`Gt:o*$ JaITd]vƝFN;̽>hwzh79L++15љҧc #b|A)EN?OF/'jnCAbV˓sQ4=G0+ESO.AK\.:mDpq%L^ݝC46_]g<U_kgUHAO\ 8Z.Xcvv\5*vAZ/ +:FƺzBL NmтJ'So4Nn @(ڽOYug%.@ +0нE|:XtUJm7Z36S z,L5ˏ[Ш> [N΁mI1r]3i=Q!)lT!d:l8wT@CiirF"rRl& JU"0Y5 A4cO b2"\L2,I`2A[|@WUnfd)ɃE=P4AN0Yun:iۥ[jpS=\] Ⱦ9R^w5J7$t/wy݈t(R)v +뮨)]V&]kL1,#g Ss|*|Z'Mrv <)v{ҦǖWDg#8>aBTA@}]D;S|̝1zslڔ{똼JPa,k*v)3u@<)oz|c#PM3Jg9PҢba\\$)L#݁: JV#WY}WŚ U .5{b6կ +2M9ܩJ$ɪpBcwN3}؅*Ȟ~db%"&ȴmȕjڽ4KhZ?>y +bH.mAN8s.ttѭH|gmQ3Ji#Ю.izWS& +h#Ox꾐9nZWr;"EC~ma$p)Ew׮]b. cٓ[$߱h"TPDR%ݧ)Di gdQYzs|+m +MbܷcItky){]iL^]l 8(@1]&]1Ro?ZzTsNOa `L\,cXwD.u"36nZ:# +u'P3P*AV,\aK>Dg%-Aw>m.M -ƈxl:Alު1HjTѓ^>֗S*bOˤBuFUĦ 㮠nv hh:?U-UJ຿dC nUR2^šnb63.P:C0(1wF! &.`wĹziݑ=& R u,a<@c>cN Qv!__BNWy<]K0 itd""jȳQ_S%_7=/vy7mu˧eOLtQWgin<,) |s݋Hm=x}'6Ҭ[f@0*L6kDlԹs ]ŽU"Qw9XE=biǘr5$&to[{rrr9G$;Ye[IΎ171+8gp~EC2H:,#>MQt}6:k HI͋8\lR> +:B [Gsŕ VkT[+4X}p25ȳNpz2w }աPI!,ap|"Y Ne]3X0=w-_칺9qp.ܣQ2,]WFU޸W+G.jW9]Ln?jscvDRs}n f(VڅSy:ʬ'yGJ{o #eC09! ] $- +-AA* S*0׏G}i^CݻaWNm3.&v3W NM+GXI^.L1r`=αpQ`7,Xל;" Χ&S\PY4Cy!v+sGLV\Ͻ%NE똌׵Ɵ_V +SuweX2`*EQ>^Q)b튎~VǦ9G;NaUݽ(Sěe4_24FןS oɗŴًR +%Ԯ.QH4rR #?籗+l:aq4k'umI?'*aSi+!DV{t'bƄ+"z0;y,J0}?*cP/ݳ1ca>ׂs b.NJ-.aoz-I% O ЍO.yu2 b;W~CgŧË8F%o$5xHB<76EPP` PuQs{L`ZOH?sQVp3Ĺ4dLDde$K.WSigj3}ĘDŽes@܏rWv (MAc.UމL=0ů + WУVrooQF٧׍`:LOpp 䘸N$o3ѰP) +~:K..{]ʴ欍*_b%Fu-dVƱ+Ksz=,tWG7y~| |5Ln꺷BEfp5TsscP6~ +SU#gٻpќ|4xߠ XŦao`6t$-`uɝu 2^볂*+I +vFb`ԦF:2:Qk(/B&!Y-|}e~j4S^b:WU# +X9ʞ+U7#"[p"î3W Kfъ ݺ53aJr%Cuhgl,NY ;^֋u-IݥFy#SJ 4_,&FFG5ʮBM0&<)b" u7 yL)Ly{3 u<볍]f +g#IẄU-.ZX!hH""vt㢔".cSۇUDL~Xa;g2cHP u6OڊdvGTE%%)V=\EԐQ>kg~Gdl?/[nbY[dW/Ll6i_Zx^">M}"#P` y}2Fla\Q3Rysmfl2fv!Bb,qԓԆ:ʻBj[vJ= C?%;]O:^vԈjsHzk<2m ++{;V2񿝉0á,Vlj0gI늸@Fev!%Oy/?;"^oNa S.&SjxD,] 1Gd_0_vWU37~\-K%՜ "h#KG נ;\Ԯau SaS TN +IK1k7>Z[L a p)]b*rLbjK ɍ)f0"kggע']af + SYc9]A&,]]']NChlف|<)L4L,*Ii8E`&nfmT^yo RV#b˼XͩF|{1.g¯`7tBp69D¡ش{3見ސIV'$f +HiSxcCӧ0PW +%i܂Pp~. irnPDP(d8| U]E.N FRڛXwr ۂ睒cW@1@$YCN}(k*K:i|_k@*[ +Gf(~K|Z,">vo1\$> gw 0-duv奘pwweg祘{1-$wz#}\AYCo@ȚhݭZw u{Zw)nl&n `瓳%tȋ]_@~ }]Wapu1*XIZȴnjwG7ù#hqKTC''& |uKԈ쾒kb MFT"Dw,wQ&W6nq"Z]U%pg)\S۫,+׏/R ABBFL4Nov({yp8!hH2#0ix[Z%ϑ +Y{GAk "z̐Co1MWXJϝ>10 ]"oyiNV~y1dC{!5dLex1<97:H*u.L֍Q`gv(T|en^Y0攣+4}4Ia +>UL7JwŔ&f@W?[CR|B)wIۊnh'@DI%z.!un#o08`k+ISB Tsvr>wMXluwL6r*Î) ] }aAty9/7+H?q.XAo]s7taa2n,sCatM)nh*C}?Mj>@PO5vl(p1U.dsxNgMԂ7Y[_cT ),> ; . [A*iۀ\WEN TkGC3ڶ[(q;:P.n2he +[0tJڕ@\-:ޠmL S9p(͂WÏحKduW(4-iZJ>aT0nnם#g2!c'AX 5]Zp oXʦIpp~<3E([7mAؚAH~8L'2S!$v„) A$rIG7<2pPlVnVnO +|H,&r"ԣ̍<n$&6.Ȯ Xw]jC>m۶) +IjL趛΅u_ZOSvS?0|lw.Σ" +bs"irDĺSASdqC;Te]C,@DBLn&4M2(WR[nb12R;Vzd>PwB|_6OdF)i{niR$HKiRr`Xgɱv5Ԟ~" m'&l\7ݟAUIq)WEl$S |jFo6HXLNKmt{k ^ q@"jvWxY.H>KFw N23Y[L?tW䃁d6c}&劮Ml;YAv/it.׍0'+ +72s؊ty}_GP뢿ntB+c E8;nvLrO!h0;3v9 Nj!?NyN#qidgud0tʰbj}KSSvpyfji}ucKZHӖh0.V)cu:Yd{׬-D[$'TA}ų<OB#[<;U +7(v!r7򡪔0R.碼-8w.X8^r唾7VE W@_U6O_M]< f%]W<@x+n}x;"B3?eAI%R-lrݢr1CXBܭbnSiI'"uPD "oA=bW-T0EH~J`b<drڝí%4ڃ&>яċ=i,Zi45L\)`K ΋)nU.A,2&ZF0e  V,j]GJZe*m +dЮꮲ.uMCY + &(O~Xƺ4=A=br=tB6)̓M3.Uv?>cS<#CՕwofW2{ +6!D"$ O_1/w='Zՠ  ubw8r+#(0|L$ma$t,r7v8\ow^lr펳2/j5*PA&'޾/9$D.yM@qq {iyUt_;֚Pܚ/Li&iRReF#z3o5]I.OУ+B3&jIaJ w.V^o ̤)Ѩ`\"9܏|?Ac# Kkוju'x]M/O)|\ݦ>;v3D.st@>`%Pe]^ܓju!1ū ,$a"[,v+Lzoq]Ȍuyxe׆vKy_ fl +dt ;5N 8gG_^)ԭ (A<%!'.MFn-82#e9AuQP@ ?V2zg7)eߺGS$m7"Fŕբtğ5cĔA&16ҝûV$#Juµ0[`e~WlluGN!3 *~r/^x–bzqzE&JiZ98d7b$t)"KSNqw.S]/ps܍9H{Fdxyv`bZŠ!|F绺Uڋ]Ub1C$>,h`;8~.u*9nvm0^<9u$,&|Z?eu ߄a$yn]okiyRbV13 g;O0_]|䇶i׎P< HQs]U?ĆS[1FphT"k DcW]QyYGv$Ǟi)U-:lߪ"jJW{_x>,wwM{F' LP6 +3+T~fۮ-ﭖhbnJ.xkD,M4K aL'%"ƣXu.;SG'χs^CjoHvԄ[3]iHBxw5(o6fHnm@JE\ȫ$Ki֋ +9$AO1L @`d57:`DM{6L.5ڳ 9E / + Zs!5纡guEҶY1bYءݪ;f/:ڍ7k)bX`xP݀@/NmyOYL5=Fu{T[/jB kzV9 +uQ2';>M_DP,o aJX" 1p@E Ha6'v¥`d={9Vxp)Ej)xQKM!g=t7ZEhv1Ah\8ɼLE¼u{^gn4/sȊ1J6a]oq .Pzg]zcj@eINA2oS|!:IB g3Ӯv}>ZVW,َNcJ|9س)4Kmٻs] 8]P  aKVi i7]wa2z.a*iYXS}"t!N`ǔL!5mW51=5 >'M*軮BqhJM<Z,eu]/JNEbwvKZu=س}_KP|)ix~ҷ@ڮ}e>jYu_+|| o/$yY$/]{U[fuJ۬k2dg3>wƀ@g m"Nᡊ+|I-V2i1넩Z-P6vE 5 S[΄! s`iԇopfB붺 SwK>kj's1`*X")9/ƯoT{`H'r=e" SwcrS,1xT)Poyu״.&#X`x1U?&bJAL|Ztt 7_K9]q!¬g)`/my'@Axa.v*2إi7Sya*gp4r#v뮜b^>G>Ŵ &#>9$L̊UjA,&輒/b5]Ba rүK~ +^bsEOMԛ;τv 4`bT~3*yԙW6mnqKqē CZG{H}dhԬN +L}@g7M {oBos7)C9V0OuS] 6:YRMYR*W~]o]Rbo*ֆ)f]h=Ǣ3b7J/\mFqLkY|,8W-p} 2 ,S q]v$Kw2< ?׉FN=JWlUut=bʍMȨx%hBpe&R{i㠠5µK+X__9'\Z^ Htq:ܱU)'J{kxbz|:ۼ۽L\ _c].bh^-mQ=+Xq[o%A"@Js;^[yb7fdUUT +mSuLjTBLuYh!ҟbE XL{gU46&gp]qv.û@u%(tLL"y/Gv7T/5LTVM".D>Bw|nzy].7jW5/>@t0)Q苊`6LuN?(/!70ZWtMgS3^G(+I0\1{&z]5 @=Nr-C}|VV+~ȴ_!x +;nR.Ύ1k\KH֝pڌc> -u%VEHA<8d^cTi ]$;a}H(dՒxC] NȼY8]$H'\1J3>2PkKîyE~tvLk}PG/O_.cB.phl +'9Bc "~qG/ ;Zn7/ ^j8lk +קn8>20OoŮ_G.Vh')Q[gP ¤<]cƐY\L$/@pݕNHy,c.#Un|da^mx3^W6j$d[jJ4a] ֵ嘠 m>o]v5\S$(ŦѶn3ŕLG.Q*^u INyͺ dpFpPv RWoQǍGl<;&GYsJDdkՂ" [p]1Tb>V, ++GIO5n7菑ʍ +0hl]@* .5U)-2JIdkM:5%n%VnC irR@yH!ݱ!2m[.s7#/N!xKDi *m04AuCvݹSMb$yZL?b9pΦ5>ں+- +<v ٕ|ŜO]F햋Eqm^s]S#<vmu$LW>KX8h/2fEU: fvz4 yyNu! @iQ l\o)keWҮFpU)޹ k4͸, G;)T.uUm9;S*UEA0-.TȫCXl+zUY$iW5#D]I*%XouJadLRNv`zZRS*lcxH( Pߟk1SD-ZsZ4Y73Ukw)& eg~c/5S %v}Jsvܝ}v,&N7 qUJkCi e;]vU{A'SO&㋓1ԺE·gl +vMK$/p]{ +޺AKxpVF-' KnKfV: N 2]@uL A).4^Mf +ZPH],@MS5ŦY7 [mv#o +t183wvV&Rl"T!G&HI K ;t)sZ1r;B O}!C4 25CD1v*R\k:'_q=uWlZi +L(&Oӟ. eu=+5=u=@")|:EB|Ipbg]M&:aN-ELktu\ŮGGoXܹFZ9zGS%c@[ڽ:n3@a-Ŕ;>~Vyg#bgAUg[}%bR]T^RZ24i}]JvAƦe 12@a$$33[(y9'.Hxp{t]pnskIkoj2o0qD6EhHY Y-ȟ1 +Y3VwlatPwFkn,Į9$>k3, I\xbbC!Lc{\v%˶|`Z%SQ|fpnY[@"+ݺ {p͎`]\17G~~GD=#cEhn]u) J34PuUppnmŷ }5?KG8&m0`7)]g&vj +dkL} xUi0Rj`-ss!zS)#A]*Bu8LXudv*Pu" bF ]z"gT+6Rz t8|co{rǭ= b0[ ׿c ~d574GerRP>ދ~+Ւ3;/ힾ'"d 7,qfui[05KePWʵh$ vE`=m* oB ӭ +߭4]W/`n@15S/p8(26St ]Ɛki .F]|FE`f +VAvU擩{]]3G-+Y>Z-o*\/-ށ80+6ݲŴW%]D0IU&}oI M߆NSiڒip.c|n+#]w[yuz5Ʈ4^xL XZe j90krY+)ojBta >qօ6[xټ"͈ >ڭJ7`* #LRŁ0!gE{yBYqnI#r)11c)ܮk1wy|G$>< +vV$׵Z%KkwG\B`uqp^%:/iVf?h /e +ͧ`qCzve)3@+.j*n]?(^BX[T .]/ s}}秗+lM𾾾Ƽ󬫪(ĿA@ +A`T FPs +@k.@ jG 5AN~Rx&_.ܜ4Lo +<n3Z(0YX&AaP-] 6$lLKF;l]psޡ<\r%&"9 w~]+cBлV +ׅ蓄aSp?%hlMAv+q,G7E3o4$~V(L . `R{.`AB7 `n$&vA*u0`rмR]]kK"Ot &<,|ڥqf1T ւr&m3EV'xtn7S`L0Ҡw1v`ծ:˷;̀[)5=*v쾩B>ГjOHn]4mcޛѾ>FmO>:"jE%uO` +R6ğ6˿2 kzsrʸh,=)fl2^jQmf\&_q{]"ʐp !@mr]EUٲ]@Kc3ÁpQ lyauB#:w0ъ'TqJy&~W R↬]ݎ馳f_fb?,]6N!uM@TgDmPgehm;W,D0kh8GG㙺)K$?.mzRAkz*jo\5bR|A5DW4EnOI"ܛ"OƈpL;pg I\]9 iNIѽv* 7єەzƥ޹08)ם,JDv8Z溶(x]A@e7͖77ནQ|%k״ Vv6\l?BBD洀< { OxT9_I}@)Z4^ܞy_cevnTCę%Qljy’@ZOiRǶUؙB{>Fv|NXZJ,H&hD*ٴ;;Y t0ͫ ѕG +@..2Z+\ bބ΢!Ko>xArxݠvr]܌*oT{HP%$e4ކ[7<3ȐSh NQ&ȘD;Nfu`Vus)yM"ӤnXB 'lAz^D>j9׵9ץk`L-MW9\w)vIюb"Mhrڍ-w)hy6z`vWة6n) Gm(&6!×k?vU1@f>ɫjĨ<ëbJt篷w-uxQ +Cp9Jg%іvUv2禶 Y8at+)|૭tǣ݀ƥfm[Dz-g>Jiɶ>=  IMP^⭣+_'ܽa Z5 ׽x f~L:Ywq1{mWL5K)Jbɮ=#L"v]-egֆ.ĦeHFw~V>]'cؿ Y[wd- 61] ݾS vʴ1"Exwu׿NpL}wU&&26=׉םnO7>0+liQ:mhH>Dc]&Okkt$M>WkE&`E*'cSer +l/kaZ& kӂDWש%ZuH נ)**$Z WD}er/!"ʍKӺ HD-RHʫ Ư )0)I!fo0_\'M-!{@ȔROz%H,&u49 /EhPW%U/H-q^+1{.+9 c[TXb]d*|ڷ6!ϴf%׻)6MF\R_}R)T;ϽW:w"b}zݕDvf+fޏ٢:u3>*zU 3[ݾ#@ wܡݬRo +^||κul)p{Kà}l4FN˦8" S"c +) +\u'aH TdׅgdSםkgف'˘'!"&%Jv_vGԯnILJal&&ms{OaE/giUb +!tB~T%!P OHw6S#Tp &bs ?(D0k ++h miwqddz QL.0bʉ%:Jm9RMfR./-賷/wF3/n"sq%J:` +t}Y Q&^0Z^B/ +NM:-eCTF8L0+¯pPn ׭,Yz?%V0$7jfvOPo~k[ BNЅ[js-G3kVTm&㔠\1"KRu'xy8~I|Sևȝ1KxSP;aȴӇq}rZǃ\4S$Lݩ׬~iw/$]iZ'H YLs*7@LSAn_ҪaȡsaHTvvau5L^MZLCH\;O hMAW!ЮUa7vrR8uM~0]W11xg"{#5.)1:-dlƇdz`P7K^ tu`!.-Lm*AHXצU,+/ zJ6ac+%=LGۢ}A}\jVOGր -@QE0 4[dT]awl/accǑy`DU ԋaԾM;Y`ҀҊXo< Oƕ=ϙuxY_P.5-q y/qo(lqT`ڬ`s3ge֡787ŵۡ'r0[|Uf6ޅbh*#s*.DVT>R Q~y]۹:3 +*L&|fv>otAVgCI7Mԓij^3ql4mE| +[Ug&uaOaiw +'ˡi +0P%/P2Ywd7kC~/ԍGSzםJUӹn/GΚME-K/\tQ5?Ӏ)0`J'hʘv0ُi?&^̫JP cN6!CO.O% x>L> R;[a)d1IWxĢ9F/G&}CQ#ޡ9TaЙ> +@;G-V*yoǟrٮ/䤨4YEa:.I^%Ym[wC%@@!S5XoY`mYbc.":JsfM @0h!)x^ғ5ޚCM寰*6\:DhF,,X]Cn9)]tOoVqyhj  S|ǹݲyv#rC:Qj-}֝Mp+Lwt&!SN \ڭ )*J^%!@]Zw.LS|ڏd>kE~%{eo|Z +iGqMca)g|T͵~vyn´w=k^]l(J[osi γؙSpd&]S% K%4B[>n$4a=>g|=LXFWL{ޓJVņ v(fi]ߡMF\,ecAҫ?Hs=[!^7GyF Л ='Ƣx2$ $9D3B5OzP02,e˭ Ew{$ fJھ +}dH:HA+B'p-Pj !)-af8wVd#KPjjkuyC`lccg#uFJJyHtѦi;RSMu_z=%8E?Y[]\$\%*V#L cbZb'Okv#洳"-_Zhޠ5[Vmaԝ_|ZnE)xlFiؚM{fY I-ٹnOw./4,Ѿ|[O>. +׽fgcc]J:']l.Ю ߛ|u0)D(P؎8/"0K7^w<[R׎nNc4]IMXOLv%I/R&Ua!.,I]D-9/~._)`F  ڥӳvZkG[$)n3`vv)OZĿv\Wmk:kO1E'v:oPu7x}˟"QMN>0].Q͕umܳ_v5yh*aʯؕb-~3M(Yl%L^Cj$ߟn^9x"۱MV 8Zc}N6Ge]bt>pI +)R +>8P UJִqL/43ڈ/R UNLg+ߵsg1O` +GeE0]M>]6nLj,LA*Te.~VE=7ulqjVN|ĕo]RNf ɗ\ v3hg9z?3^*ݠ?3Iw-%D)םxRS]X*5ΌmBܴ.C3kAfEO7iM&{tR &Px~qAa.p݃6Y\3S"G&St涸VI_lQ5vozTeV>t0L5]\Út'НFSAB3usiC6TwT:kSŬKɚ;1 ݱ%KruLXOGiH'ֶBܦ etJ'bqhT[E5= YZ,7hoj_VOX޽Ժ,AR5<-b?4%$ǭssͼZfBS״ݟ[ Yv^ +Φ{@SBqe.+m]W d#e `'5$MzMCI"!>O% My(+{Ώ"P?"7+s]`:|]VJA=v".{Sxo|?ӵ;5n1~7%LgȾ9R?P]b7)iyK$fŔf{IMfŤ +:آ뎚"vJ#Li0esAb9}Ux~.*ȎI7G_̓ u ]浣mMk%2y(1!ܦuj0^6přFGI?]HME#wAǨH*ya~1Ys}v,Lv uq6b`PGD4|3̻b=EtfL.XcRv UWM+?n; +IklsT8b\20۹2.]_B\@!Fc4a{^эZ%WvuẂv )Cߖ^bڐ%#݅ *ab$ 7|+I2b+{67 $Nr!R:E zSPX-Vo~'w3˵N/Rue˕sS1E\5 Z$OqΔciwll.tZ, bC0[zn^ +Ȑ9)`/af4$Ik}" CrY5Ab15-(D7jaa{na +î;Z3))lV_/͜"vYyVbw+X׊[h&@Ž=@SRARi[bu7uB13EO0=]XڥE@Lxim{uV-ʃ.*5qx24b#22MA k2,t-Ai_n; x%a]_[r}(v8iQs|ŷH$̡w$AGt1[u e ǒnϋc[ۓvSJTiA+EhS} K/e $EO-z?6|B3],W+Bl m׷˦ÄJ~WS|97$Own WFSyaֺ!G +bg8uu7\\ߺH`8{bw0vG;7S쪔7Gn[\tG)9"crSL]`jmosV7v.}cqBI4  +ݧBF +dқsVUn5H=\um Rtwk\mkgNvVn)f)EL/y3V-mKuSߥz|la.AUe/^|e\1O>w-_wt1y}ŶHw(A!ν֮s5 +i:Wbnp ЛY{AHu;0-0P2MHŻ+eQ?ӴէѸ9%d<ŴRm5 +Bi>C _bk@q- N]23uvA +ցog-Lܔ7K*E?dTGy*!.Iqn.+ePy_AiQ +i{['oSFddnػKCZ6|sA]]G<&LZE{R `vs]98ңi}H!Zu0J.CBӮ u\4Zv -ʤo)4v) Տ뢟]$IjЭ]ݘjO>]H48?Cu g>N>$=y iףu撲D~je+vHzuOu R='1aV>LX +?N'3Aܣ|SLAĮ7vϭKd8\_ws[@] UQmUU:h]ij +ɱi z ɺUorr[kdl$o6P1Z*c)Ǡ&au:(cv}࢖摥4DtRZE]7^/>qd +W,9q^xR4* @n޷C+DrawUO^]~גRd.>! +|Bg 3)chċH0/s.H)$VK,+u7 =)|>K>E02bM/+rob`aYZj>\݊].Y;;G=8)Ob"V] }nm:&-'uu Ɏi[OZBw $Rv)2 A8݀IL1Ϊ])! 8xx`ZuZ κSv-y̎DK -%sRxdf|TA{P)(5d7V;/~3[\yILTE + Ǧӽ.+Sr0~i` wg +%Z@K4CM![gM-Kbwݿ^"M]Ÿ> +@\[g0K$+͆N+Z +;q*Uy]0{D'/RD|KooszzW%}nw_]4 ΗrhSvi!_Z!(dwrig#Y~`RW}̒7 + Ԣ-A^?\ʈT,RR! @ȆtSNgeFpY %?w$Rv k8~E5)S䂍U} Ƭ>DЦ 'S m,a"4qabdEg0#czI|(|(D >g8:70MM> K3T#&vz~t}$đaU&촾I$y.4(&Sޘ$o_L_-Ѻ0zOfSDzȫ҈Sabó^;2S ƮT;&=مQ|v}?-\. Dz#`202BD 'teBůw[ /R$nE~Ct3a? N-::vV~:`|u׷EPED+'Q*aj#ÑHWPh16_:k̓Ů4Z - $ prZ#'WqoǴpUlŎ"?F}xC*nMVwgbp,p @" m9E ZA^+d1T::qP`P|T]〃wgz +ɼDv`SxvOÂ] i!&˙iCYC{]ױ6evEn>atQ\ M]!d=-rK &xI8uų`r6|1t9y kBsN g5^,W``1C/INa$0Qo4v:qK,I/9mdQ%kIP9ׅSK[$ڜ]t5)+ k˾! ƛ[Qf>n٧u; +htn/;Q +SեDΆd +Ped@nP*GGSDΖ:1͡?-InvQuLTK~Q#YufΞnf]]A`Iϯn\Q7 h*S\%B`h*B08ܑqm":/X*\IJTwnf- #jg8$?! ,y>HxYNX6nw'a`.9h!W4*<*LI_ws!w$9PqYM`]bS |BT.򰺽ܦ0}fun98?98E+B[ٕ;;v |Rk70S伱Ӽ0 JU;L9 +uJ6Ò.i1ɫ;܆=s!,U6~R/vK=#.4μ>&70|;sR4q&)LVN>Kn 31vnD?iFw3օK)XOzPɂvcf1!l˯g\Wu٘bHZ)#!aܭj֕|7xruW )!60- .+75l9<ץ:{Jy۶y% ."@Y^Ib}-Q8W@>3B -8:t~M?+]WO#DI+B_)k@ +3.!f)p( %2! ]O(vDtU1fo^K]%*15msT@L4iFd[s-aj̤1 {ʾ|RQp'/ڻ=CR9ZNf ׅ/f +vy"-u +.9u;>ui;}MDu=#r0~qZqk6YFvtR~떷h5Bz&r[dzi S>v׼Bu3u0ڵ|ns@VQg>$,nca Hg9a`8FeA"ILO -w^54#vYTD0,!I ~ؔ\4A`퐥!-^r6;ó +H +ԿǕ> +->^ЗS y U Gq*S\CkDô0J᷼ey$[";>?LBK"XNB2keSIͽMЄ[rmOUlbDFnjF .W6,a&ebH>3{1{+s`oy&/d(|dOq)9uy}(!;]Iuu!48b1,)Y>_8< Yti+4ExwH t7Sf%6"eޥ{ b)ֺ]UPG &|-Zv so]S.Uk{] +,uݲ U~Ժ1QAѝ&D{&nk+auZm^o`KmL轼nݭ +D7(As_tm^&Ǣ]j>cp>R8o&3a"^ٹ "1KӓOd$> RC:YZ0eC XABݗO캪S+R6"ĮW$YJw Bb +y71и/7;vYyEeHaGDPԍk) +SuO]W"SdH0‡rA_ń s0p-.u])F6Ťًiv}^g1>\MO3\]Y7hQ.g;W;poЎˍRFvkt mË &)nne?}͛a<ulC+bI,%Db] 㪽GflKV(/E%?R@&0JZ!͂Eh/ӎS#y.0vvyMdgY +g+3%Ϋ`lD d&I"W%ZnB],V7em\%,\Q/^gA +%NBs +hu}wG"F=,-[8'R0xhS̜sv$O6ōBi}]eم´)K7] +#nb类EZOtpPk &u4쩛 6}jʺOֵ͹.enœb20Sx9eE)ӝw_(Lqtq KO0v}_x?} _u_?8EssL<=ˇ`🂂$GGE?ȸv p]c;˝Q!#'K-^dkׄR^-,j>]sѝ,cP4h6H2S9BnzyJmu}Dz해ϽkGȵv"M/\Y3Uf+5>'ե{RW&h u BhH`ܐ\?uTW +KӖYW8EVq]rIrS-upQ.,kx6+0;r3\+DŽ SCm +GV~cN,pD@iӵו-iuq8?_]Ǩu.ֶ)Q&j+f;w[d;Wdʕf^T8wn8N0yt`#vUuaO:!/JWR&Hn0~W Zb +ċȳ:+N)]Xv#vL(Ѡ15aq_AL9)fIv|BFxXmp]`bZηnj֬T4yeԥCMفNţ[fLѻK RȆib4a +8\(Lsw.җoFuEɦ`[kI~}@&/)@3\vUǜBo I,7Êyt@uTtĶ),70y_i -S;32, Қ]bR]@ |]MAgE@kX,Z]ѣ&Y6AH + A4e5M+G"[SU[ +0y,NˑJ&1&D%],]Ӡr +ɒ GRPBSL]#A],pϥ~FErfDL6lMy?\~L!3q"`|튖2\,'&Nm_פ)dԔv]kKU$&_qkS Sae>t.)0hDs{ g]v`pP5kX0҇JҲg˧o.u&<>z=>A}dc5tu2EL~ڹ:^UI~IDdTN|bm]w~MhS=sW/J&҃^:Qf h$k/E,Y]:N]M)ZQ5_K"?mt-Pf^)]yXɊ_X-T +>N|D(LsXT`KfynIM攘RpMZ0rͺ08]bkf4ۥb N1vݜm;@V[V@C;|Y,Pëa&&"솴qڼSbjBZ}6g]beE\s7*rug +Ev^7)#SmCuvbcӁKuEn7ivnesa?.u ;f +ܩ0M6ź~.uJˇ tBj_E,Hu56t6z d:ZƔfȈ {Md0n0dU*\tMPf]d(^q`\ܚi*9^m<N}&aP:zs ufu.*9ne{Lx;*/ ʺ?u5h<$-\b}cwYթe.1}=Icʺκx0{C?uh l?:(iw„1[XƔt b\ .@W1SD9;3b=4hw)h.ee8գ`+\Nw/6gFjuP|2 2eMw2݅Jb EFEǐFǮL!|>MAꊏ¸w]g]u؉n EuA]/UNŲ˽.ȕFa>p޺ &Ov[". sܠ \k9xnx>LP\f g-ٹR7.2˒溱i5 }ތZ8vqodz:DۋTL̢ R~_jIjS\t)D-KJzl~tТNZQۖbuk8Vݸ1PbVO)d_DOQ&EExؤGR^ +_ΣpJ_hwbIF a4 H˓آ ɻ|:.+Yi%'Zuy-G<5Ίx9PÄ[)5eO,f|/!a-% (0' O3kA]M]jy.xꥻ'TШE.Zv2WϦxekKViZzMSjˈݩ+k@+cS/&iFKw799u1Bci"Da2k$N*Z[,]oG4]w?|#G B{xp\ &Fۦxn!1+62[7D]MM &2QFӷg;-?;kgkdV [Z=uo0ʱZ܍K+7aW'e=iS7Z/bƱ ⧥q,ϖ=5:-(sӞRpPבi 5ih( фXZ|ƓVB3{V-JPb;hQX]{>`?эn{=Ϳ#{)۩Xv)жKA n?T|ݕȫU&Gn +JKuD܌2U &]LOi˧VTl>"5 +]OUMir[8YL򢄿IRH FT7Y@4kLAۛynF,aݼ>CҘ+qa*RtOuM\PcӺ.j& RUtaR(!FڹHݻhb3O`wwO`D6auшm/`L-y;Eq>`37݁ODyTq%THᐼs- lНdQ^WWJ4 YAtwNp@Y1^pcCޝ +^斕]j\@@^.$ ;N;੅'@~o9-KF-[򈅮'ljS5\+0(iT+p>.GL^ }РvNddx.G/H:`_77zӵe' +\魡(>L vj?G W@ng"5zCӜK10s5lC XaoxJ 14Q-ڍhF\r- +"Eit(]` +|]84vՒ7ӮtgŽ5L W=Yr\u `A/ELAE$Ȟ;P98WK~&&{ֺ×Q0 uoKK-NWdj]1-旐E>@+”˛^ev71iZI-=yius[ u՝0 hIew(ufх{TG"Ymmn[j/-;LRK&`e=,q5DčdZuJNW1XXw.r + KRA+@A!! ťZ<﬉ІP0] +=&jyCV$q2FeQ,WTLHp)/ F8 (6< ns nf.&hhW5}Q06xݕ\.>?Rϔ1̾~ '虒Q/3T"DFp|SՑ<}o8y?V#G3BhU$k>:(__87T-zM /[L+q,i 0f"/PNk _oӭ#(e#V!bWu +cŤc6 Y.)MbxPj7!'oS n9Hbgnb>KL(BՋ +4>1wRșMa-huЛ]Coo{JN֭Mo|8MTb2,ӑ +}3S`q]Ň@AjAiBԮEv6"rul +„#IǮ%ɖR +1;ރ5offBxa+T`0vӭcZSܐ?<}挑'& +Qv=( (Ijݲ3snQMr,.A^P{Mđ-/_K}[r{L-PxRY@eVѾf[(F#J}Œke-&}d;@EاUM0( N(-+t#SƪeO +֕0[L,X\uGm]N8@}?6jEwwү}K``b_"K 4]rs xN8L-NCF&SwkBF/+Lx2}=f9w RkwYKJ  @j} w.?{M NdZTɣ[LJjAݭD+PX7BwLnJoC 5p+ڽ~m ڕ$"-E9) 4W)"FQS#SJ}W +Š^ͫKUMTo^L)}K1{~=m{9w,[P@h;9&Qޚs.N+ez ͻ"ME7ưT + +}f@ /X"Su ;$ސ2|k]ܾk^LtUOӦ  )zThv0Vv]2u ܔ]?vՐC^P7N|JRAO~̒oMΙ>kV)2^%C^hÙ)h7fIzS04+;P@}73ˠ߈N)>vVN$KETcԃv>g>P-}XZEՓpXkl8)Gv qPR!`EN $@],/$z톺yjfxzb5e>!v;֥IO`Вγ_Wn }՟"Qh #i7u-j~[ڕ _lj](^ 3(ov]N'tՕ6TJ)w ,;wbtܮ3,&][gм9"I+O$ { +08+Xe>p6'eNjjDqnm#qb'qk1%Д6pvRE!*΍cke2/<}/)r'Ȍ!`_ ${kUi,"nACUb?z}#3J,?D.ćvN椖V6Eb=JL +±msdQΝai[[UA:VĉIjbmBꄺaa¤[f$a$R|%N4uyn voQnSƼGav cR-bM?Ǎ?庂Qn#?hW%#C.nԮpA;#0myeBàuc%C;+#<¿]C_Х_K8xA?ltWp8uAYHU>hu2[ ]WKwi!$3 ٩NȄ.+GRgY/S(Y6Em+:uFF 0UhnD;=& %@+=zG9pdGH6+!}lbe&W19.H_20Y}_:KXCLW Ӯo7'ټM"R!i'xK'&=?r!)*]ܝYaoNM5ONetΆdWrM{.-H!vN}y6njS4`[qK_t:X?Ft0jխ:1+ t`pEdMrMYys[OҰ)zu'rmL5i Z bzLt*!kSvC͙℈hr u˵֔ycc6`Ƙ"ڵށs],B@Hq +y=t!CQA7JHMͤ{`än϶xiD.o<]Tsɑ:҄x][nTrVut5&H9 y;W0 -PbOPyj\d\/dz_9 ۝^(pN;* +M.3Ū/lѵNLNƵjtEna>Z?.R\;{Ϧ}'%y4W)>ѽ!ۇ!B&yLgd)gJ HmwYlXp {o#k7^]bl$xK)ۅMS$ҫuoZC*I6rډ&V\5v]捃N\+Q,11u0*Ws>mts7AMĄ]WL5&%Mdu#wu L?ɝL.D\^uiGE؅ >?̟*Y\Ε-,Ew.Sޮ,::p_u `py4E :eum[4qaʐ(DQ˭TrqtYlloj-wYH+p+S<E&q mao I 2J.76 Hkt +]>iqFz_"aA\#B9~&u,Ć,V&J' 礜MQE-j_)DKɻGBqr~SHѥK삝#W-,I)`qv]aN^s +CM\Pn`Q'4SuA*`DXNPP Al>Μ"OZ؅~5ҮVڥÎƂgY"´@]z;X=Iwa'$FJ%=8{ +f؝IRex2낖)~vZt 2j+NkK^+WDPuFQO\躔?XQY,†X5mWPO2Gd#EB*ؾ)f +_PBy"bS%pxpjluUrmw(6En/ɮ|j%H^`4^ݝD{0ԁ\c7vR@vp 3:OqTdfp'YInm2 g?A< SH 1 $*],8x]&R7aBާ5]Zkl +jLU]6Z0G-&7Eͦ0Vf=-6Ewɧ=]SUJɎ]&LJvbW9&LQ$J6f +o)mIub h7KTd~Ӱ)OQ߻uh;prw'C`z[)&@*V%׽[+᡽R7ݐ=ƂϹ7Or¯m!XB; :Z[} +~"rW6OjTiI{Ap#AȆř?NbKN{wR9e5& "~3 dDݴ^x\WgGkk^<bș[M@k'T)-b HY 5nV{FRumv=~`jaL(rBe*MO>=E:\.'Ĥs|]1y^vVa +;ZW2kР/o +{ Fݵ) ݭWw#Ȕ*Z ٝ"֡ +{gɊ!w0]ݏv%Ec z!tR#Lc3u]3c7.A욉ْS0,5O[ݚ; &zQɒM,mALi"ǭXl@SȏGǐ4+eH?.q$w +$x~şOܺ&o]N.a((ŹB~$&So@R]",Oo=y*,Ks +Uˢ:^k$-W%Y_cu.yevU;nS"D\j Oؤq"<݇S~&DAAK s1= AHؤ0iL6ε>ɽ{@j-Ns-ELx]!cݼo]qcCfAiw'i7_û:VzN}ĄBȃ@nmaS`oӿiWK5 J.Je!:z0Ϡ(X󏆘:6fMDdnwbA2v0n"ʔ.,D#⭮j&J-Y 'M;jQޫDR۔ e3/Lbeif"|7BׅS)$p[2ڢb[YC~Eθ݌ǽ@SC! >0D[WAڌ+8"h M͛~{aVlq2=UND+x iR~PELZ`rZt\w:B+M17݃9垷d8z_%KrR/UoidQrj}oһ Nj)`uWPӶ?h]-Φtq.Lojԡry bѵ[m0;қ1TSyR{ U-7 |hh7Kujק]SR7 +?v!vgS"5ppUNS8" ]М=|C*BvC@Ĵ}`\0q >[8.ګ|ˋv95S*\{8R11nZH[[Ra .U ΛR|FVM_vyV?X&ǻ!iUIkF_s # `t_A]~: 4<8aA|bLW=%^U~no1Uawq~ sq91Lz=ɼx %A]Z`,M!LPsybo9׭g 8w!F掄?d.pZd<^Vb7idq];62)1qj)ȟ݈UBJBҋ>ZT`}t%^*Lke9e\ҵ0=&rnAmx2R|s"Lyݴ3Q]BaA+Yz|dzLZ|-xGeb`@sX7H@>r.`K -]^]ttFF&ۛ^2!NV5ű`:ه} +S|fs$\;}=90'B˥Վ+a5`ÍH7i{0j܏"fRqüE&gD e5Ͻ趠xùfRf)L*^gȃ6WAk+25૸~߀jg]VtPX\tt0qu0i7D6Bn.)q0}0e>ep<+ +OTч0-)0cn.SkڝOhMO ѱ/Њ[f v09[7ͺDwvs&vĎ u3Z7g ТqP~] +BA fu*\f{qT1o.m2Cy3& ]ގetu!. - +gi&?uװ }:,5P=<n)ʵ̅hs[g`'.]?vdw/kV$$OŦ,-=In9JcjM.Aya1;tqxe֍spKe%r]酏n|TM)2_@JC]h }ve :Lc#"&.SuZz{ 8dsп5JU|]zZalFڥ]]n9tz9u*1=ZSIq7*? 3fr0]+^hb,&#|waW W擻B8r >ڍ$Z] bK4jeؠmok t0Z]1A +DZ0upnk̈́ p7Jq2uH骭.|Ά8wP|;fYLVfxxu%]itž|zVnhJ*NRdC$JP콍a !Lzu^jk~R$ ,H +}8ف5Q9-j}ea$Dːy{$w0%mvݭ!Rq]uu|#1Y_WU;uC@(v#|Ŕ!b +2jnW+@%]w+Lvu$|v_ڬ`$SFLbj+wW*L+MuYotrK7qLҮռH3 S\2TӮ:Jffȏ&KZ +*HK]52EWoXӥ_,<+~Wv/fk)EE?\".]1Q9RVz>PKFJzEBz:z wnwxhm>WU|nŵ4ui :RY'P}Ody9 Nsx6>PĤljJtuW~q1ۥk] = Z x4P= +]F>R_kgAV +&w +?g +Kv_( f]b*Vmq +[@N0O>eS koP9hh&TRacdA8SkI$SPaûݿ&^ BBW8n +B'Ӿ `Z4b\bLg +J\j.~ثR5c L}\O ߒ(䄜;CE/kk`x%lyLZqWނ1x"׊; (5-h49+z9$Busz%́WKdK*r]k0PZkАX;fN|l3r?`쁦0NF#؈/fMF? rXl\PWXd2Pk7k,6[Yϵ.1,s +]ɴ`늁\x vxA#?67R+Щ5^7ݖ'YEحvݷ׮|?;e!yS\\׭6i/vo\\v fsÔ[S,ktgN4F?]HUg÷WvL8떐XhWUҤna"uEJV]F^|6 ߮ i`f4>J$sa򶸘(e7g k'n4O/|@ܑ\L5yN0bq9.>Ѫw"b`PN>r u;OK|a}|;z#qQ:Cv尹l.m'-89P^C&XIw4(1L-3J@X쮬:doKrU˽2k 0|Nx]Y=>6"Kӯ4۬0[/P0I4/"OG[L"hn '<5JnFWX2Vs +iN /UQN)<+c>=xybb0+\u>&غugdI$bӮWV[eauyu,RI0nlS?ͳٵz`2ωv O],5j$;৛[| i7&·OQlbIE{hӮ(B2!h>@;{ ːEQR~#$'vm+n9`PWp)/GL RC,|h76\}fu%<%":?V6Xs0ɤLt.3"'C6XZА7 kN+*'Sx_ټeZq^DsL\Ń=Z+.* ˣ]f*,czM)pFL*cL ]aw2|~VX^d6΂:ǥg +b P6׵CπS5StYLE˺]&)2+7vk}ڍz,oYTZMa9S\[ʺUn@u/o1]P]E\FELIL ,T (O7jރ=_1T"´z,k7 IUC Anbw[Wr(OgN9ŌS@{=^́1\2%"/aj{)uhuoh,eo@G_]6z WlILSkH.x'$Czcb0&O]1A,Mj9L%Ů>8\l=-Jd ʙ}tw'k&963#'8Bu#쀸%fku(҅Dy$}|ZqAGn6b⣪vK7лƱE_LHTbW=DNC?%Q uۼ0]{p$d$HIR/e]vgg1+֒08i 飻~Szh[dkl}&Sk7G]+vѲ۷/M S랎 mTa@H]X:eg|+yݣٞWgqCvwo0L#>0wE.sPi[3y]жTa*/lr#xO" +;nw]`GwBIZ(;(6k٫y 5U-.g(]xv5/u}>B喥G=m#G9[ԁ»jD-8Pǽ5a:f\MQj +ՠO錄^f=D vvт GdgSٶUm8k=xj; +endstream endobj 57 0 obj <>stream +!e:sͺJUxQYEi&$Gt/FOϺpXDݣl@Z46Rs&58y)csr\6\L@O7e_Z7K*(FZvOv/L37dU0ik"[>wT?Aӄ68. +lҚl\t?uк*-H7ݚńSk8 )Ě&)R2h뚥]!sd3`,<@{u WRz, h>ݸ=KLuۭS)BkD'*AfCuC.6)g_JaP \2!M uZPB&jac9s\|Гѹq~3m&*zһl[?> D\Qn1b<EUpݯOחClv~I]$޻O0O U䵜%/l+<ַ)k+ +R7<ySZ}潑zȋg4u R 6r*J~@0* +uwI`/2!GwPA$ge7΅I0aR$įu}129Lڗ$AƼ$y0{>b|d[])p2c[uB ?G7KYF=,jޢfXBoTGhYh/b&t pb1(bC6-2B FR}L$Кz0>Uc!Ph+5}O^nk]JQun3D={lVTxN\3୶RنyVD] +\!/1ΔuEW,s}~(J787BXiw0duS-Nm:5QR`wwWEap‘[w<ɚ\)@m+H^nA2"W7et7Sg-,Y݌B;dVuS\w)}=L@K, [̃CZvv`;)/ c+D%Az*nΰGLf*=j +vU0}u%y]yw]Q a +.LXw dخ;PzcXB۫GnҞdNr伙;vLd.~ݧYg[9y4L5xcWx =Xw: .P˫\  RX} Ǯ6jep d5P'CQF]ZZxoXa}K"5Q],oAGKg3m؛=n$ēlQh +^B&9+`&V +r/!qr֨1l(.Ykcq@*^sɆlmR +Ӯ[yjIi,){" l2[-xbّ Oȴ.z[+ǒDwKظt.L])_.΍(i4u"#㓃t`u 05§抡O8_9*h״5Xg91*yׅɨuط;u!L|ݏ\7TâMLuu4ҵpBX Xݟߣ#~:hL(RЅV-6eZx4RT7C1:=إLeb +S`/ ;"_?V7/Z +-Y N%-%)1FJ0yFpgŹKhZp PehŪ9-Mڬq-m(]aqkYJ \V";Jz$ѹ̪#P$BᑲUH Pxc j.@9{N+Ch$xV#!F52 koy.̻x?j U繯1͔i;ϱ܏kk k1QN00Fu1;u]txkuڕpr=%ӯol봟ٓNtny:~*L?KB@.g*>S̼f•DyDu0Pw.&.]%"#aؽ2.ijvK6&<ԙב}G}M0i否Pnvaa,|,aۤc@M }.i)dMĮ`XVwrIjQ% +LYW|D?"GL +JsI&6ݤ~Gm.qR׸ɅGE +oը3[b}FQ -D׻[Lݍ@55iD}3J;RIʛr˄ ľNř~պj +vX/qtKtĭNkP! ;́Bi&YnrD_kxO16;fAs7*HIPOeߖo;WHinu]HB?b"0oK>(wrd@@ݭ;x%,nױS :¨ ]DG;7},.z$bbB{C,к71 +0W##JaRo3}$ح&Rw](,u٣c +`K*bIgbdpr]dujiQ[Gް`PڽMupk1_JB)aTF  bi]݉7Ȧ4=:2+t dAL~Bٯqf_FF%>CX׫FvKi^Ogs.ۤy۬ƪںH +Sv5FMrgV@j9_?M +e@!<8.* uwIMI)`ptxXuoiJKp3&֭.~s)ėv,B?|[3('v3gq 8&u 15?eZwΊ\w +EN!&(l(CMi79 Su3h: Һ.9VЀYtu}>);e]F!?1jwREKV4^AJnC&%_OW0XNMw`')x=">IU +S G l, Wֽ./J!@7ZĶgџ6ղ@[8ݛa )8bzGӲ; aTyi}<2 +tF%Vw Ƶfj +*QiuAf MĦ=[ex'LY$nuǞҥ +^/X]w;$h\kVlIݭӈp*:L |,& Iv?]8ŜB;uG[*sL`wUXt0Q+L XKZl)b:d9df +0!ڃU*Yl3"6]pU ,"TŅ2M€>SQ1 +wFRYa r:>fQ RgӺP1fuq'Pp.XL_-%Ɔ*߯KrI*)ퟹcYPLFgg=_ve( MVf_DceO"3oS;VB ٍK9aINANgZ?\d=!@{lfmYpͧ5"q5)JMs6EBTl/S1(]:~#TyҸfA}YOIB3O϶?CQ;{qNkw;۫8z՜$ rЁsl{elm+bJ;d5&\ny-xw(ǸVE:L9Wf7L1B'}V}2O"h )sL(w"PJ7n+qCo$iw,ɱgKh eIp=h+#k{:4f~2bڼ=yRW+o +T@JnB)#+@PfWDI.I2vМ 4r쀳Κ' 0rof$ jc% -{}vJĔ;Du"5oK5뚯O)KyzA+h#2h[*zWXMLȺ1}e^ Z,3c֦+ԥ$+P,췢/>a*.`%vد4#p}fYN!g^R+4j 1.p@b +99Z`F)vez@rp;[4e HhhWn~:kH}zQߐ! :92#˓p`!n"1mL%iĮ(ךUctpoӯ*G1uOr=[p] l_x3^KSTՍ  o6SGݽdVً=S_]v;s]?/1]pCpVȼAC00^X>{ DgCP~۩N"-{ $WPE* ˮM+aiFً`Dd7>wrAX5詤4nLpE[Xn;YC{1wsSj |.'muKp:|!h_PCMM +GO/n\,%bxMg]Y!2э;SB8;y,%6Agh5CMT{^aSL:HdD < _$M6,嫫[p"w>KǦd +Eż/T䬙# |D}H0RDm{}0I|h +U-`yVZvPLMsu5QRu`7+Lbp{ҽ~_ʗ|!ӽPc ӽYo.q9 @",(_=#.rj u}vW5"Rn| rd˛y񩿲=XU~_VR;c, XlC`tdP +]5݉?~]U|W`8vʓtL'+bR% +(uQ>sP}~GkO},">?B7׺>Q(>&0)懶W w762¯*T|v%j./b@=sȏMe7HK ټ i߳(wɳwY>ډh9S^۴ FnUyr6U`;sIZq(js>ذQw5$ + سjOdd*)oۮs:e&QûюѮTR@Vԇ%ݬal1pJ)`h"S hCLQjT͔&FJM#5 r3WL +uM(Ntƶ P)g zM"Q/^&,ZTױt&¢"I wNrkcUϛ0N'o GƳ\8`o9otU6( ]mŻo|]i}9z>mٖ+yB$}E$m6Wv;݈0A@2ו݋]:!v5vٿn.[0CLםVw2rAkdczDu Q n>v #IM뙂C_ÖBE?H8xr]!ROa5” yb;bEΌ┧B$3Mv(1.)\hhQrHu~ϊ^pӤEfOKʐH(|[zA\ӿ +ZyYlH-(22PO 5PUCI2LTB-n,LԨowiWz$k*Ů5w9#6tp| Gj؛{ +ruSj!7'!=ԭyF +zB^p,'].]Wـ +0t!ܬ'Z|I*vA $i d^C]H2ﺯo! ҏ-*, )KRQ#󲝉>)OЊ+_qB1)Ӛ;#3j +IEVh1iAA` +ٛ7"&۵nGH^}j.0LhS6 7nT$H$8,tZ>B)unB_xZ Ǥ0nqnY'+f +>k>U" +G}-PW5V:X{HC"*1uwk>Hqw/Rf0 &s\UWߗ^2?c@s\`ȅiٗUv1Dr!Ȩ oMɕ3c7[/;tnf('z‰9¹/QvwfW8 $\eXPYżwUx!Y/Zڞ_&y4/d!jKat7qPR!q}/F~΂Bb_d($zlEQNHȐx> v+x;µk}nZX۽(56[ta,d8vu̺K&} 0KnHPTXo)b0/]y3EdjSbu_ِyZ4U+K;\h#ڝp]vucn=v]*]Nݵn +p]umʀ5rG%i&s Lyծ$|e\NCPڅupvߤu5!TYvUBKLSɻ3Y2b~)x% D$u]>A~y| \ߒ @$݆6]7u]/Ӟj}Zlkׯub;Ӯ8KJ-ڲwtxjxH"m(²sy%O=\ wSӷ K.7)?\(:v5O*k5UxXJ~IY'bU~xm UR4 hcj VsDL'j"_=] YogRB2%aP_"r8&}6GD 'x(]eK{k1KȝpV0 +u%S&Bh? +Ю¸m&Zv2]7>iґŹvI/e^RؽEE`$.r%,>b/ҟ)V g3rr7L+v9As%JN ӿZmYށ;Ơ?Ydc~[Gڭnun}k tvtcשF>ElmoWY+ؠGAS:jU+3sI\"r$ڼ<#媋:L#eZIcXzGɡpfT+ۅi6ڊ"L J{U"3m|Y$D/L%Frg֒T|.М@"`J&4]?I÷0j_]B0-eMy '@j NL+n1 n)x7QBwҝ|ȴ.(\6Q\AH] r]`,rBbgJs uÁt S0S4=׻u/]b(AwC>%$@&zcР`{RC!/i2&spûraa 2f] +r[C5_6b(~]gM}ҵ\g7(>4XʬVbԩ?,vڤh3v֮sr 貋-7~! +iӐG#o즃4Lf\8E+vƶkeu!{] @P;<1rT`T&0krJMskw$on.!Ә(>+C?.>HCXϗjkUvJQi7q:/S?n(\T/.y< }?В:nM3 b6ˌifuqQzxnFOk}tQB8mAy {_U_ vV@K]D֞Z ɜ)>\Y7qmof(5])\7bx4[X͋r$dhYhj lv}]י@s F11UhMk7fw'.hZ︮u3S4q*X/ 6HkLO9X /gkzn ]]L^m|]=_ 7 _P).BĮϧH)arL9)}<ތFeZQmuU!ݝ]L][NjBp`ExI-EQ^h*Y<[T +5&yS}_oBWx h1e8J-9L#IF>,J^k_E`;BpW42P}.mUiHkV]LSݚHGz3Lʠ(^'6(}\Tfqd.n+ǦD r{9&ELZ3iDLK"ytwQ=gBL &ɓ? `uDLynai"v͛RuoL}>))>x= +$vw>kZxJe%J޽nhu)l6a. ?Jfͺ L UU&yݒ¼DTmpd"KCK}?kvKn{\,`ϕ]Ç)l_JJ27^Y܍U"m̅ lp Iᦳu. +Zx2|g(US)@6]3 IP> @{MxĭQV!Ԏ * 7y3]v\2,ZV)1BU&' q¢}%d1p1A+c*2-~5"`ِo!F.k璏vZk"@[އ*2 ؾ,L[hG> +7ZW:L1סr7]+ʀ(j^bru2H౮02{0 蒺ب\ZOG wר/pa5f-=&o Mj }%G(z+ +RwCG)"`:kZN֣jR +@bB'{H< dQkEKky{-&eCaz1sBH̀NhBdR: MOK,kc]P g殹DzDw^H +q:ictGWg.5`.o_zȔv/=eQ3OtK$w\?Dwop -3-Y7{#`obh Ӹ ^*\-_\)\ar]gm݋0DTBQ R)Lh׈um[88b9׭\<]"t?&M..5A.Z=+k9@Lʫ䘊54Zhi3sqgT}h\&DJE#u*Fr> [U}7+,Ihk*œ\B.dK2vKށ}0/2U*iKN +_GD/<[|7^7PN$ڵJ+5H%ךqz CKnpmʔ" HiBVQ?)'0mK@g/WǺ@UNBlϱA i)C~TJ:Y!5ףUQ-9 2゠+ǠDA{ H8'>QdM 3{_?:))ܵL8!ejj0|2#A+N=<>ټy*{NFTEA.EZ#1a8c}mgK ;̓qyvw.q'D!C_g&\DW 6l eB &KgNu^+L~̇G}ZXQ#svr]XPQ 1Y#h3u)CŊ%q{njjd cG.>2T`bVWoKErVͫ1g>t/EJ)y"Y*Aŕ@681nexͳ`Uj׸\ H\K!^">vMrb&gsiFa-<51<P ջ ԠvgΤ@]O֨'9?2T!ql"BLc>hq_kZԫVB&%uɜ[U}G%"kf!b'>m1!b{Ȯ(H}I q@(3V$ZxB,܂!Tm{FcjREXT@elvqZ7;4ө=x>g%"D3)-YwIF]thu'L!5G4>"@Jx.srՃ8] -Μdحu@vǻu0NK*:M2><&Sƽ"ڈi]{éޗMg3>vb 9va) +lփilׅEnA;FA 4]fqÑOd|LԦh&|x~ڥuBu:L.3o8L 9 U\kvЃ11}T530)n߮-]EZ.No0 5E]' ]We}#01#/˄D ,AdC "Y_Bv]vJ";_yPCńK:"E\/FJf&L[VI40D[hZt-m)$MwA.FgmwTRERS͗aOtrY8c 2Jݿb.~ +Z` "~FW齨]7coY2A!w˭pF#YݝK{(cZ*/&vWCP Ů.%IIs;׵Lx:c'vwa.. 4h@] 0=F19MAG1Lyu7 LbE(XȺۆ-ruߧ51u]b-֒]W +1 C~K5u㏧]X1ѩg-tw4ɂͯ 0i2Y71s{F>6#6WR)xKLjlurrk#z+(PLyJE6__qfdW;K^س(hm1{AJexJ*&𴕓%3aJKvORL$_ /T ,֞R@J!^=SQO~V0K2i&IDd!J|%(꼎62JV،-L*VEBi?l-1dԱc8RDzcY<>W+,3$V %9q&"-YոzݢUjܧ.2NXo>$l'5^&%00%Q +˖!2%FN*?3%\ӖE|?\Kpa"& 2 ]#؅+w$t#7%x$utp o=,:ơӮ ୲K]r&az=|1<k+IWM/~)Mn)?ne21]]w9E!v=31 br)/,y2~$` |W E8(uΦ`)L``춅Xnyb"k.WZè„̊YWK7e.䥂-o +<놌Sx`c-0iEm=۟nk_D3mru nLXF),\7kkץy@N_϶pqݽgLDzP>HKZ5d$s[ n,"ѿؕgPēY <9;ݬoȥpeYu%NlKJsbdxU9lnv$emFSs`?\< +}T@q\S'I D hu +64"B葂Eة3.EہSuYnGުI~+&:W|M㕯L)˔zZ6>FEĄ'+L#罵I yo]`bzM+ f6 &]ƨ/&n)f'\$SHٍX]|%(o`0#Jl +ĺ Ӯ0鋉GJtn58Q/L٥= ym +Y +;e7Yxˏ%r )&VAH /"\%unVn_r.n(bLH`>[X>[j qJsRyb;.QA.bnAjYDZLO@t6Jx39۳ɎX@HA* KɆ,XхG?LQ"w^arkeŧ+{:4;͒MV 8¶qWJIxnc$l' XhMFFɥ Chee41-%O%H~I8#%$ʑ翄o_*_xs+.?/nyS`E&0 oLn>4M +M:YnRr+P Ĝ_Ybowbw o`ܮ~ +O6Żkw u88u cK"i]0Vv[DŽ#v&Hl+k)e<67 LM1.X D)]iS[ ̊]]7v[4Ont6L+%}[d.r4b)Z0iu!,LC>iG;kU`S#,W`/9!Hq0 > ʁ>+[{e+\zֲo4B3 +]t`ʕţXۍmtW3^*n!y~"K87&٢ƙHNGI`}T6JƮ¶OҶ :>mVRČTz&C=`"c =w!*$+};Me3ڋ)H(KDlI[;tVQ7u:P&^E$)`tjE5_Ӿ_4s(XF? =eV[bS1Irōecj.[-WDaGbA3].Rv`%Q)L f,(]gh&Z_Ӯ;LwՉ].Y]5L@\/SȡuiG)Xݨ+>Cu@ 51=RZ'EGo(.U<bJ;Aku''L~wc +.F*4;fsw1etP uAITgٰvlXdV6;j麝è][/̚.ĖmtvY[M7s2X>_wRՏmޥqOERDW+ j3VsOȋ)#ι}Fhi.A ´LMkА+Rw\܉xT]/D~ >}Q|u8="$Մ0ZwaɊTPp^f ah~c7w,Y{ٲRHeK0/'ťX>1IM_4rml[:ߘL&n@kcmI:cȍׁ1 c#lK\8GRpzE;`EE]EbXLc\n|N-.ze裏KءL^F*Dn@zSnɒ24Ba0'Tk^PU$\iY,Mn.lƵbtHD DM]\A瘖e޴d#Jn|rrຆan\}+IjZ n ڽLO|utJ<96}KbsYIsjMIH.v%[禴|jaEw/L )g(`]~aJ t5L,hk}LD=5t0J.&ߜ-\"̴ᢵ>b`o|k7M*B{֐-mԝ\čp-$}v?cɬ@ ] :tm5k* !"IWf"J-8r[d_^^)(vCPn^tU+tcJ Sf dxhdK*k0bB'EYo 5_/6x| ָrj# )^`Qz۟KZ^pżw a1t* I?'I +lJz]WJKǤ+@%)Tܠm=%ݤϛ|Qt7ztmϼ/阴2_:.PE90,vPՓmPrߝʄ^G|]jHY)Ť^xJ_ힾj”z0s{ft>nعSb҃^ɓt+{< +ԍ1VS̮_PB3v&uۦ.yԮM{וFBInODXw{%ha)SNQ~O0uwEdZ|߮vq\͡|D_ib۰azV3R̐O3Z͙|YVf;-fI oXRzS'Ny+IMG䇶Ylr&Q?*8[h=Cb\w16CjZZ"*Be"NR.QӃe +R.B›B/COLy;_]vz@hnzje" V8<,r|M/Zv[B]LHhvldz5ݐfA j>c1a}5m܁LPgl-VSi&ɔuέ=8Q˙踮.n&` |#jNʴ#._bed]uFm BwI-_wEç(nC׻?ˎsD"Ar'ox]h%D_'қ){#?K Df~ + "Χ 3)Fk=Kf6@Yxa:$"Q( W=;"$Vxwj FԵ ZbLPEYHgK;-˪mQnCB=6J0G >acB +~l?|ٙ{Og)\SH6RQQ\@*qn#,]r1vF8zǤQ9/tf\x"@ny-pZviܕ7Er<4V7Ka%&ȲKү7HuGxSqup]afL=9L4? b}g hL䩇ÿU̫{mڭDo2UD]#0Q:E"Bsi/]k)L紎ŷDV o) +!"צR,T.~Š;APw h"0E֮\:X/vsiyA0U"'_WzF`U_lmb̦ZFe>-r)Ч#Z-W?Vu˾G~RVC +t:T6wi;"A!_O"V{BBp~O#vA_%@Ӹ0gLMOBDmeLZetF I~PcՎܜu k +|蘺8Ww.t7k0ZҢB.T]p u.u2hn.gbZ]g>xSohrU]HX_LM**. +Tb݌MQpbQգls lb",E~@S)u͉>޿"3sG^9ּyʲkjwu'.l"x54]Fy0D]K'jZyZ +>sK R\` +K?g 0jKhKZY>9L&hnPS}.W^6In#O;SQ : 4mIJR!eOdRTEu{Ww=k8Sw^,32ۖw#W+ei~ Eຆg5N4K%RYA)GCL;diuOGk*LMMq]Wt_jga9q +cS] + f5paUD]U:o_%oc$La~=E`lj:O9AgQwxׄ $[/܁̀L B^E -]J};QUUѽvUWrZ_s`:}{`WbCӲ8jpX% TXW U&s +^Kd/C5Tf.^z$VҌjkgA䮫#51Uk;ץ\|DϷֹ䪪ϫŸߩߪ)H(*ˡH Xk +j.@  V\&=tv+UFb=01/L7 <,nSVXy-|Cெa%@tGL^9^Mv30Ijlӝ#N APPwcL\AkXFRէc uGr݌0ˋ]RןE:&d#حDž&];7C{w[TR .467'.M”& +g + c)}|ֵK ´xdۇ)WcQOrlsl +1^F)r̒׷Mq a3oKjwku)dbT.Zz!.֒s7c1^=;P.sqM:ÔŴ-:g;h~/;lBi3#[ [}MD]qLޯguNrtkMݻ&h4t JI~d ¼+0KtmoRj@Yfh}#B\WJLv{gH=#pOB#FS,'~g[u'sL)b,;M:MI&h)z7e +QGO2iuJ )vӀwyolSdǃr`X~#쎃.8ɞ͖tyځ(åE}7 {Kյ肤B]x]Hw`Q&ȥIt\l]ލv/ST˗avs"U'& EY eDrjn'.#f͠-B}]bw J+\Pe͇Mx6g-)WK)8^:7Eb1_\~=$:וٯ.PsKYr_!`'l +{kӫ+/Nb? ic$l2^NW +Q8ޘdY#Ivx6i Mf˰UoÅ)@&^<<:qt5򍩘!G՟A2̂c/2gwGዦw#|HCQ&Ym; 9QFW?w;'}]E]J#+l;"qfIWBI/`_J#ܙ-˺@^ +[AaI={?Mxw7\ƣW1ۅ]ϰ?TS-< MnI՛ p:lx#i~+b}h+}9]`S:< <op [AP5<.g3EϾ _auۘԲL.{.z~ɵb:IզX Sf{L˪\/u2 +t ј9]2x9m)aRF=4`da RY '~WLI2 LUԥ7}>kn>gTc-Sɨ`6/]^ABha)MZ<4T jظD}|wT8V4f/rB@g$}ZGMᵦm,g0}6A8^VS4$qbXޠ4]j:  @Y7uAd=%i« z8<~&(@Xڮb~BY)p -0Eؖ2'`¿4:5>YT/k7{a7)gFj/5UȿGv49l@Q`4H@L|}P1=9z  M_]4/^c7#b)&C0UȄ~cZodVDz֥ݕ[ Gw]*3. zM?rjPcqe +d.̞ kW6,ҫ9لqA`Q8?2O g`qi`"ӟIwAThQ{Ef=y#E9Þ;c8\O1 NiuR$8Br*>3 +ݖoy߳L_ߢÜQ=޵"GzS6˖AoxڅJBuR~R\3[d4~1--T$ d uW6 {`x0CIꝧPf'a N(yhaݥ8j6LAiW_j)x- T +>iU8WxRs݊`*yS%w`.#1unۯ3v Vi`.C2) t- +r0a i3龼,|r<=&tծYS +ܫhWXavkwڝGx0cW9r" {61qy֮*G'.zEع4I<`oc}ǴK{+FI@MRSE^HI8O[]p_M9nƉOVg^z/}ch ap7󊄮W2x{FַS=PTZN V? *Cr*!4߾@'Wwuł>QptƁ k o̡@ʟîoR7trױ04QMvm^} Y +zjP)lLJ0eJhW֢@Nx&n5.8E~~`aN1}~N3K8+zbzMqa`뾁0jQ_X\o*3EGD,FˮdQ6EI 2iwV66E/9m +%'yDGZ0U.M)~Q 3λ;/5jiu0\풵s8)L`΄:+9 uكeęhΣg{6L٘, U甁jY +7JRв;WBrz]3yiC%B`4b +xzAf`j5]7 ;Si>ִŀI'D"d}߂*=!jwF`ذ(uLp=́*q[WC +0jyvA6wPӮ5`7$ +Xj+tkw"6q}(Xp{U3,8ACh=Anz](b*[[vr+Zԑ `U:!f|dOXnJݯ$9>0].~C9}ݞu M1BuA =?&`Zco5)85A2u{}Ss42kBHm3ᩣW{x%NĆւuxXYq8*{2%oU{Lܾrmz % WaGed0daxG 7,_w`?oc5&z-"XIԢC?>{"7/Plh_gӘ3A^z[($eA] Ju5 t? I!L}.2Nw3m7ץZ68Z< tW\RM4~XCl[T}Һ|Mb̲LT2Eny_DKN;bsywLGj&Gw-6ȏdy˚lEqV^&! +k/L8 M@.usXg#DuKgbbB%k$|:XXnꙥW%~J[6h 6){oܡGjxcʔ9 djz8uDVjM6&P=!e\ bx< thBt<8cRcgb,Pfbd*Ѷ_z6IQ8~Hh>h̻´Q/l&ml +V 3 +d^.Zz SO%UmM/L1z蟀ve"ȘW.Mb_Jy i] Se{ h`m6Mnk`.L"bBuGa +ELiVWv+Œi'o2GmDky[֥Q @u`bgS(z}-le*INE_}_.,W+đE +2i3Gͮ] (W'sg;!2⑿˿ ,A!XL>'Mbȹ/Ba{e<*q>PNT|t! hR4ÿc|^QWk1p{LI"t!&V.ѯ.yeU֗vBiLaG)i) "cf>Vb=nw8ٹ6MҔ٦9q^ ȹ1 4q{*nwdge0J8FbyG]\:>)6Lv8bAs + Su.j} +L~O݃^ȋ"\ݻ0=S BhQM;&Uۊ)1Xi>jA/l8̗_bR +o,J)m0AcR|V&Eݹrf Fdu$ +8:Sgc(Aϝ\ҺrDm +!oOf2i1@w:= v=J +&߂Xڦ:pؙO#4hTk3LiQ+ 5ޯ%.m^5SUߑ57̂x|(5E;pXEC FkehznBn tVJNtrƅ8AGj`Rz9<zn7 6"LגҖnU r=o:Ǿ`>H_kg63 P)j۪S~ Ooq-Q?gyMw-3ژWB/PC^2\4FzZ?YH賨u[9ȼZ<_'Su;; .J~MdefaawFw$`sjd-Uأ0}0 Ca:AV5L2-KN3AɺxrD΁0A;oh> ӔuWSD;D~01Mm_rL{نT-|%R8S(wgз8G?XEf]K׽[,[2AoL~Ƞ +vu>}q@1@/:hP^='J֦_wB4 KRr.NS8{]Γc+I`I5u]N"c*D`3f>`|NR͑d_NƟ$8J6Η7 E bcΊW׬_GSgG"J2$CUk| b")4 ZNQa&yڭz?v˹d]| "g%AWGXlmNee gqznh\dSP{j蒝eLw\&o" &oWaWb7\('kdL fd.sp\["L )NWgx+!XDCsEbk="&9( F``7]fGv4mV]?(F@Up=b<9ضk}LRBݕnȱ"/ӽuq hgn!&trLz-0$>>Ls(Lu 6&FwK +@bn )JwN @0hM g5r+e`惤m[vaщX49'YOSWFG=rb̍r&d`V +rmc3AJzI@Lryv\៌zǛI۽#2$ujV?-N٧E'# Lb5ׁ^" UEX \%Ί\.r|A?&gkZX%-{ÒFB2Cc}I]r?/xx=~\؊-MsV+^Ih!OaLae \,/{] ] `Q"ȅԚaKb.vبtKC0神fmEpPm @= $8~#nL?ۤ*r밇աN\ʾdWtmKJcw 1UQ]0-L}vZ aaQ mC:3Ti0LA|r\{Ƴ´{dO`HA8zzu I>KRʺ/`7_3q1AS1MT_n$qM{?*V$麙KGet' <)v&[\Oe(tXuxYU H K.j ~qElI;Ç湖q$qW$+5B4f}tzxP8'·k}M]Ȩv!$ίdMo@VIpA{tV]ũ\,8n~/XzT4OOƼb)ݗL>`\@XÓ>fZvviVa h \ra7k(YŵK]UL9]OLl ,U?Jfuf3{P>!jb@T?OC/.: s@ @3PaSuUD<4Ŝe0=,JvK7EManU_psr.zAu58" ˢ 8@+̥ uƇhYPk׮}\R(Xn-}{Sfߤm%]Z-@_inh:wGqScH3܆(&\MbE so`sEC\+`f!p$Q#h_1pn ' dzd,H9ɱ;' 埝qt8!n"'3%Y{ +VkWsěPvJ5mj_"̻4 +]&;K.V[$j<5)&'v9(Cd +:(&Ac*BOy9Eq9Onhau`-u\@Lm3u0hP9[!aF8u=:]h)=p]h"L$Hwcm0=Loz.%Z?ZRH̖߬ LopJt㼭^Hw[)-4~<'GdDi~Xk wf\:<şށ3i:JtHp=#Xƒ2ݭLؙBǻ7 ~珮kݵz.r j H|Ma`g}>(1D|o 6qJw ++$ul5L5(Ҷjiد0< ޏ&. +noĠ0`+,X")o@zc&lGXkW/&uu1uGdG~]ыqA0!xxix.Jʧ%pܮO{} -9ẋ(rL5ڼ^ݣFeT)Tbg3U-؛u6EjvBxW9㺼D؅h%nUF㺅ؕi|~Gg^jBjCb^u؜qnפ,h\׵ 㹅. +ĺ| S[U6@>-VN,w.GK.o(Rt+ZN[^r5*]n]1輽#. msV:2s BC]'>eAolNl\KB,(ꪗ*T}yN;S|y&wg@V8 ZnGJ[ vVmm)xWha+Uuǽ;ɬ(yPS*Ң{}qɛpp`LMg~eJ@ouTI"seM#r୽rkf?` wO)\Wك=!ar]\GŻ A=s.ڥջ'1hpCjk+_p}]1,TlUE.$-N}bZP`(J EZ S[F?P[=BxGL<^u(7`&I#ӊ亨gP#1<@zN/0 $Dmh]KuGN& +zaF%unjOٴT"Oe.; 0K`n K-}ɬokݹn̝$ -~7 g_B $T|UC %ΐG +Gf +4>E ,_Jb3^ hqhܬM(g·=MkЀ(l˲}]A 7ŁZNLWx~>|W,\@r iҖfV]FT O7kŧ's]2+chu\ޘy!H(>jyce@q{uYzr6hzgCZ(*cԡ)- "y}2HXi0IwsoF`I&{1c>danNLȊrOvSP뮍`7a-#8bF)r)n@µmt{-V./4eЃulvK!њ)(|±~] +l7^..ة 2ۘƝyː}D8D]aks!} rۚ/%xj,ld? ʔ]qGS Ku'|[&im;\ѻ *8: id=(y L ,!MQ)` =3Kk58}O7ZRyW#si0F:|{OǬsF6MbECS꺘Fm-o+,=kdcn+/C_Si̜z /NU;-)C R eguAtxŤy+ eH7C2{=2W> Z` usjLzaK|]hì[˝m&>LH N!GIb"e2e;jL)گNݻ<ńG[m1cvVk!xoRW_;O'2rONi cS/LUBPk]Lϯ֋̏o]rL +bݒU㢯~$ھb7bZFqGFLuȧ)Ssغast"vAtC"Х6H>_$wwß +oAUCXl~I7TxLె}CϬפrS(dru)Ѧ_آ->ebPƚiIoB?jv4.7+l!n.8P9چ׿1;h"d@Z~^3 rDh:". 7KsQ䒩=W;HmO[N4ێSfh:ERtS9] RL^cTt|]1=+zPm̃ݺUQ!mb6vOf9hL][ï bwT] +G 1/.Dp"t l"vT糖캈>aL!;|]5p!i0ѴXEl% LvavGnI.&}eC' @@`QfގDcb>.NqE`}ZF^!}a/&hVuYw캵Z4q]=z!c~aZo*L5{f.wlM!]Tgj w uQu2LQG~kα)J9nBM]fn 7MDbi(T|Y+~?:RkYj-RuWʩJ{ʹ;$n([K[!gܻ8ݧAFG`33]4*|59Jh Tpn +Zk@i\oi*^Hg12>xMҏfj ^̌PP/% +52KT%YRk"bv՜Lў--Sc0d1иؕQ B ]s}V=XY]Ga70WM;Xil"' KR*TջM) 6;6mcTlAz˼wODbT_hahWaSH䠒H/P5O3GaݥJvenmm +4*cdivꮰ hu0-SF]wGI^F]KD\بJ{.ʌHni8/I@]Mrw { +g>[_5,{붛;2H|.0uUGR@ݣNC/}/:6ES2@\Tresݒ_?E1\^Mq`,#"u4>S |VCQpHEi^\D`GYCW*G'^}üuoIwgdN9+-R5x&MEJyIo_+e.B~[.D0J)&ҺeuэOuWӚD +6ӯ<<3f x) +˔) j E-8&6G4$L%RbE݀0m{7_}Pѩq:?AHQUL ޱ{j4MlHe5;ޡ:!3:EA-ջ'nm3D} Ѷt訌P/#XV_5n7>bkBFE4A;`vg.}ΰje}i"iH%ޭmD.&ʎQLqµs.a?@D&e sdT!D [p2= 9YEZ {dc,`Q7H3.tC[޼vpχv*b!%DL?v^f鱖x9тv²M[;hz'ɀ\E;ob)ƢݿP{La$ d 9G&i!)fߠ.",3)q*L]+BufHazV5dX"r]BSUx]Rw]g/.*)v((n=ߞQC#;s8Ab&nCh;j&`>EM%mE[]v KSCcoL :Sv@.vfLpU:NS>H>̢W; _kZgk)'|{@ޡ7AL7s#˕G_inpVzTz98n.Kj+>?_$*;r5 jK~2ׁoQ* kd>A1lluT~HB[([_Dz o KnKiHT]jI +/"v/ԲSnyvg> GWŘ\I1ZqZkn08u;!&۲eP/Y&ߠڦAqݶ!&z|"w'oO]6E)! 015b>ZpI$ys]}1إMk+J +*.]PWՇO$^]x"8Dwњ|4-YcC-襉CRtdb.K bM ]ŝRG,fL~ EOn!k@8n\k`kaHF+\mg۶yYl*sִ~c+lE>^J@fbQ_:&M~h;.MҖO5ACmMd\I@1׹d.ꁴ&=Ά-g̪T@'3Fǐ8cpo (AD2amF0% +ɦ#<*جZ[JDeY/Ye<_fuFǥ]wq᭬Î@YєI +:Ti[0/ռ|Px9 vuwmw} \ţ z-vv!~xeVh"'h,BiWak$Tl`qiw)л"ApJvY{abgֲPK&:\ϙihi٭k ݜOM.g ]3[a ;e7v>+(LB-(+EYꂕ`⬯IʮRL6$eɭnrUkG}j].#_"_bJNl] w=%Kj]s}l!>t2IcOq~M{ +#NQ̳EHT.2e@u_˨ \N+](d17z+`KZV$YKѴ0% aC,.]jKQ s¨XHL91cH]moo[^212B@$#L@L/]vwBۉ)u5!0_hxcv[v=nHRΏ uh*z +ޠX\/qX|Џ|SA% +낲7`c5*+ m֭PELv':^BzفcA& ׸k#1S ^Qgc±urbO\xrJ.וx{22ud7\O`;@rL{=GzRY)'MIIͰIGQr+^In[ZɅQ +PX.d 8k5%bR ոkn +l7LP61K՗@fk@򊀔0)#5f2Y%riu۟ +ɿ]+0\]`j;L;,70=ȏcT{ڤIThrU$kвSp;LȻ0 ZiaصN||B.I=[YŎ鋰&`.Cڦg-~]0_)Vn/Y0aN0^Cv_ڍuB)ux>ζ)xC|vIK1|7YTヰ1 yHr7CQaFL`Ryc晄$GDu]) ޣ..(媏_妬\WIaSH*,S2]v<3Lv ,Y4lCXu ^%o :EKINoZNy +?U#IiF1޽K_!o`Tk9}CSk1[N1!XU MJԌ]K Q4MgUJv+ EE+ݲck$EPqbEMGޗ?5}-8 v<-DjWa.vS1 / ]Xg·"K4wkkD R6yx9NHai hW +2/ŴR@u@,^`SJ+<,2YY/LrqE7v>͝>Y.ueISv*PKʮpRWE=o.UR .zLLJeF< Vj}AKg$vRP`/v~[C>JxaͲcOAh BB?[2_R6]vw'm8:s/=&V=\^c ;2wv?TRԹnyc7[7"c2!3ta/v{ElF rY4 l7 +>k_!sboC^[ U2-Rͺ:jtU (ڣi޶޽vïGx([Z,P/Tr6k/Q +X5Mu֘T!7/6pHiFp˃HBt&Qfj?x/ϮT.6g&&&JFA?QKKe'/vL6ȬOE.;zEW)쳸UC퓌٤rSxEo BlԽcEQSFjGܼZ{|b0(M֑k+Ԉ] euncznm;N=[xag=Eɇ +~r: EF-~.IwBR&kaR xN sEgR|Mw)tV׺77V g" DtYF!BXL{C0%='@͜紘6f A|1%3worźKBaT)6yb|F +˸lP $tWlXB@8" HG4o +}0w@)-SJ q̼{'_1lv'q46R\tLjEJ!]@Ia^^G&g멝ˮ3ӊ9Fr2 N!Q{ +))v1p=LUv%Q)REL&Y o4n>B[iG +[q]otRDA돽9Jʮ_vWx DY15ʼ(6J#՛@yAߨ{dƫŪɴۻܳƴé󪹨H$ʡUFPs Bj, it}:NifAc`=KGA8y% +Rv&]{1%Q5IQQWmM/>[m+fS\~ʋq͉2r^A!yzAJ. E1Mڄ؍F*,?9'.1!P{0 yG)AO=7dH?H#Lp(YͦM1KWNQ6u[ЦػvQvyis3^}.ppCl'&?4Bی][c +tCLteR:ޛsN\AnE EGϝ_J\ ?΂ ._]z|]U! my<|QϕVj5@("CxkB]d(O/Hb^jw#_V~ +fB 2yk%k7' -`Wt%s)ܡ.Lx!X&ī3%%;خbTuOw޻^IrݓG^iL,RDp u/ +.xOBmaF2Zѩ.cvlt6݅`v="fۆ1rP$TĪuQ&(0'wυnWҒd.@RcpT^ uMQ&HZG֍ b(5EXڻ+D jW'ՏZ-+F޾Cvn׺lA"vt{2xH:$i׉Y0 nԭ߸lFCktW6ZnT `dd +)4v?yLAO],?C7>0 m#p6{(4Xdq6'N(5HL&:%#5ׄiNX$YvHl_L'{c _yw4*Nx`8 9,VBٲ=_t2I ԋc!h=>KfBu (:ݫ0ʑ4OrN>|˷ +aٳ<)`򭨀Vl^TSŭ8xs^LvG<_YKo}Vp')b6C(c{SqE)P@3.򌐐WwAs.Y + (E +8v%S$ڕ05:oJ6\Đ/1/!&`.%1w?36#Lzե!|YܾвbkN `rEBEA3X[T_V/CW܇Ccƞ:Qe;߬=*ƍ=Fҍ:la9_v\CoRL(!֮l;k-񣮵j [.D+4b0S +K)ikCrSx Ï.~vQ=kBE>w=Ry +yTP9K_P,7ʒְ7_'xn:*L[aO̝׸il-ZZrH5j# @,E9xTR`C& ; $ H^o5ޯٚ"Amԅ2ZI!\cb|Ӗdc#wHU[v2X ?%kK-Ll:!L0;T#eO|Ks0iۅqcbߓEs%'ؽůu습EjPivٽE*ǔem'_˰ 5X.J>@b0zLwյE~k_]E +%ߏQ"T>Ea3-Ma{3D0uyOg]tW]  =w P 9;mSxzukM`d6zctxw :]֖݊Jm> @^Jk߼Յ&_߲4pI?(kV'c͠pFzαu\+@ܾ` =S@mWn9R+~̆.B}meRЂsny>}v˽|aMqA1!&OGE:0&peN?[ʖX`=|37V jY$;H&`D]l"p\ 'SHbD\py] +̟cdB*A±֦ղ>u/2L^|)|밦jL=^{F@_vL"5@CO8~]٬P!u:W.ּܶS5/<hs BSl!q`-VE ն~{=8(UZtP®kPc +9ڽ"`D'hHn wWB<ۃ :Lj1!,F$D!M&2oYކ/Y]a*2c7L&bohWYo϶%jrɒRԍ\մ5BޡQݶ*GW<9Z߄K_XC~CJ|uל6p;X IMV7~ T2:2qO*ZFDӻz^T. ,AXs7޳Ҍ<ީk~Ԭh}tYaiS&u:mnP,;ϿWImiu-Ə +#?]i el%_GNbE?P> u`J&ꠐ@-"~@ԽҶdmCE-{]N2v_{WX057iJ_tXdgekTlL4BR)ALa>iqoSY.=`4SzՉދ&%JZd.O)3]M˿RXriU);Iq%}ouL٧7nk hݳ';77Fjrmdj 80D*nBsu"7=$SaյbLd`B^Ƃ>n6<[U/Te~ӛh\xҔt V-TPw;Єczr5>7ec5Cwj(WI$* +!&RIkَ6a\bq]}a_xC v;1Aw7# 'M|g@wݶ: +~vbXkWϒ 7K]j{Ru0Uµb^0_M b{r^vv8bڿ2 ]jRL~LؿAMs+7DRެih1!ޅ_څEzl`|®2aELS_݅{ Uc +AJ%'')X/f>eekBBbV5(L̦Qi.,rbk^xu >0xw]M"~= dnM] TA*.*4m̦bw#OtQ|ʄ9pHkn{#< +PXHB^ &_AW!{ڻ../(ZK[}陇A6b6cK,wJzzDldnTŷW6\\ tL ڳA/ 0:C:N5@ry5UTmy7b?FFUU/`{'LTcB.#]D7o&ItIEt}T i)K+Nw)ӉxjuQ7vc]W<UI˥pe1HwT}9 +I sj &7Zz#q ]66\&gaMJ*;&8k8ؽ'r/G,*SL,4S螼Vhںaz0v`W  #mg\ׅS5q:i$}:a붣mSl&U)DmLJ>S|,;@bC«~ !V bQ`3 !{Կ PSCVj-cђ*n"n٘9'[lK $U MJb(Z|P5{tS[!p*.P Z:E)t4vw5H%&dv7m:Z3@](VP&5ךsm=sB +S&UhL'纤/DI%L{D/2_1EaSHi`"(EB9cu%շtw92r&6 ,*CmT'Ýf8v-֫W=Y]/Mׇt1vGRjv`5bի.?6W,E7FdnaevHs.߼hX#ݜV xR);/D mk +"Ч,!ll5"U+W.9%׷8L#o5S+hjv@FDP6!} 8dyGtY<}ɢ,]"psl)tWь`PdNaC8puYg +;l^VbT  ,XO>jxa'3ӊ.I-~XnbYܭw*jhW K?9cBv _sN)un[.ӕy8̦AaHv3e]%^ CKT,⸅Yh!S1H2^/G^w}..ݧ%Ү|nS>g&uksV:9~&~4vbcgu/ɺnXjG",}F~7uyɰ?{2N*,"j#SxǠu ՛o}%%!kC#ɐ' Z R󗜊,Dfj NςM*b,?dݦ  &izz n#{&OAGVS]w-e.zw鑠-v)d4ڍ4 Uo03ռn_fL1hpmeu+R`bM}k S` +T 1Ea@wvS 6P|I?ES#ΩsI S5HB( #~}K +Fgaԅ3xnX]nO?_Iaj B *^+nB)ƪ!P寷JAMD,Q&C۠6ʱa&ɺ₩\we0Z +tF305%Y)yzomJ橞O$<_՟q>/<(v Ahgpwa +$k]H^nK \Zk)j7(Jr&a~qI>)l&an!U>[o04R+6E 钰>bx )t/LXt߹UN85TW)ET8d\XGr/wK$ҏ&y76K>j>JwV*5/C}qXkUH||żNn +Ԧ8NٖP\yo֩/tT/?vq@+Hڗ,59).HsZ"י▩IJvCe3)4a=N/.e@fZhb.ˈÏKA`-9֢uV;{tqZiaxѮ40KMw." `2臰I|I|{c5sx!WFfxr1Vb!PAM`9e]C_pt*y|\sW ++jC?VA &^}yfv>u)j:b43RnG|`aE2u2W֫ >&iMQBt P-ۦR!!,S8.r^ϏLk"ڍaFF ABlNC@7CKՄI J:A@3suIL>-3jknK&%li|VہTިjn5Xr'*Yk>,4uUO „?f/ΜpC $U%z ɹ8aaY밦gLz%׬\[iwH&2DV8)ԤuM>cy=('tڥN ygI'[nׅvs[ U|ީ)\ø%L_TO!0zنC66AHȓïenwB0$7?'M$dF?>3u@V<"ԛ>Zt[{k5#C7xIt,,%HNa*/OtjC%ylҲܨZ۬tȹvWYfE Py2X%_Xyؘ魮zn⬰=?)0XKH|Iچ@=WࢻONjmp Ԗďffɇs DY~%wĨ"ìAjj(B;c^ ՘J'J+ʊ-` )ą"ɴ4;9Ί]4S$V +\yƅ_ 7}3^;YT{!_^~!ݭXbl *Eۄ +ϥ<ѶZVE)BVMOp`5QcõXw]L؀S,xl[KzApDg.Y.QX$>ti%ʼ=o +),@0)LN].Nz1maLJAAVcK~;_Ŕ]J1횙MŮ9&v!1DUkׯk;$۩yz'1YFK|n&A:Hք"7" uMat=Ơ.= %ik輮LlnK=YMRd#1\S: wJ{ItKo64[GK`sv"≫C[eYs"lœERC%c곒}磀f[y +YAz%-X[c-Zu#ψV'W\Us5SXjو]_0X 8q6!`)55L ̴!jVPU]eGFNDDLі*ջ[P6ƿJv8Vb^u5L2GYuC8H.4Йv9`Qyu0BN1)+(.eMlO>>?QgF !,Hymt!/,z{:|ct^ALy_uU݄[A!źT#W91J#CbN)(Z@4:7h|cpNUTWxchUul]EN Hx&Li2;gQ'@ ppBKAL1Utnj״8̢c $o5X(0.F +  +ZUH Fozul&+Wxp򈏎=uoֶS׶}-6y -(.KnvE`FyL~!/ZF%c6evZo f2F N(oK0h ն>TFtEU l43 Hsj$UZLsmM +e䤔& +?OLJ%>9aa x4iVx{ת`sFwmXqy. 8~TݧOG&fa,B-Q,?0̀iX@_Su[wOC9Z[@C7杴qX]^iwd9<m +8S$BL7kOGAC@%d|7FRr&cДkW^x A`rk/Se eL\!9yL˘.>K\!S&Rm@o%X:9^jzәXI)3K- +p=IDP% + Xz uˌQ# [?kugS?ޟ ʾ+ 83Dvf6 % +~+QĈB8*8EA R䦪@[WTx&O ,&pu*eYq䚊;ؑ!:2uPOmci.ҢIV ,0yp#HlF@wRMdҫ*AiB"&[yĸ(}_)w.7 ㋘3 Mٔ,a/OZ>&ه=g6I)/4ǖ?1s%!5B݃~ +.t19)RhxI;_7Dh7M*XZ|K,BL_7cX:!&ʵ?f*P -zb WCSc@wY>h\vYzޠ_X\ݼCJ1ؙ:P` +@I>>˧ 0{%u 1ݘ37ʔ xYUw9uӂ Lxͽ+rіE V^JhevL S u+EUmx:'T w-__ Dmy#뇬ӓ%d~-3h킳p-4 +1Y$M( ,\JW6\F%@eɘ4XAv101L$90ޘnLh"9/p # Y +1%>1 m8*[ (C<sAM&kRDM:f:&T>]ǟv_ƙ<;Zy2- Fj +wqti +Ľ= Nd}.+Sܙ2TU%;SvEʓ/\37IM v;SJ~}8 +)h. y}kI2R @Uuu&d冓e4ul;J%V*9He&ץ`Mȵ@.yd8W,]!Eê}^/9X{4ϯKP#Aeh[K/EIw"h@{dGu*TSI՜̶bWL&KYT3m +=ѓ çj@,w(jׇ-E1䥦0lJ p N, }r]?c)K07&EI9 .Y^XVogZ! *}W3W Ύdՙ >Svj(t?`qk@O (nk^ + +=tqf#ʸ]ɂ0`[Yy-qrv_V]ܗGs5& m̋ y)O(rӃ-ʺv^&QyfEh% "8*Mc!N +{ SޝG{Cq6Y"G0-\OR%w~džC@'uvLVz  ʉk2̀<VL֊ks?[\a2Έ|zWfE$vADf b"iW [oS ݛz#ova.n (5kJY_ugٍ1bM)KVw+8fK5;&Ϗa'yI&J.;li,&_0-9u&x_brɧ08j5%QdSIـ3GUe#Mx,b\$=i*YtG,@@/j&g|Lm\^Xŵ1ujelir+֖HH~a+ze*@ß8p^Ѵ*KfQb))+aԗ' Z=|1 Qe]9:[ L 2Giȹ?>+Dyui<'2,xoڴ+{ɡOV֭,yICӫQS'Hus=.O.aM%%uaJ Q.0{gtdr̶Dt`z"S#cn'aLo+HٕV݃+v ]s|lwj2J]vapSzWt01erN`wJ\3#*X Ǝ`|Ct4]At]z[aƂM*dDyod"p,ct%#ć( n_]sw17Eb(h~y(HP)]P{Ɋ1gk^iTFXa8 Rlu)\׬J?crk OFs&?*z"r~0Ҽ:}2oGmb8$KQLim9x\3 *>[5  +^&4KdH'8DQ t&1N0:x!2Mj/ +V^\}-Դeٲ {'LrE9.9fˮm۽F:+EVe*`ho("'*s@"YhwH/7r^cVkXZ&@..G/MeQ/H+LB#Y +(_:[1c{83m.K +Y򑹋. P>!d`@/X! ˙G +> +R~}Lyk0v&k5?Ÿe!>hǜvJ4\Dcta%$ ac KCKғbmWܾBd4SgJU8aƻg!XL;*j歟5pßN^=CxqkN"eJ-JDP=(25}Dl6b27PsbLaB⦘ܩ&W˛[Q87pUv߲( ncDm*)I\!*")?7yx6U˥MI*&(9܀<-; ,W3#PAg9`Y/3E:yVjIȄ9we`+4cұC.ciwTQ}W(0%_b=t[)WFݝÃMߓ `lwHqj4W9t\'}kXPNuЇh;/}/lz s\XAx,OHuBe pB^; hZ8nU@(nӸcv=!`&Lv(?px]:-sE:[@ڻkФ4bi`;e#>#!A~k[|rTP~C]O  ZBn- vuOw}:Â[|5owr9SLBYJyݕRȗZx?fZ.:Zw[yR89G a"{w|ޮt lJ.Yٶ,AG F!?3AV&3 +8&KaSS] +>u7T/_b~;Kqi[{3r>SKB0G WF*O`5Kv]L%IoS`->ERh2yZٺ &LrK?osouLmIBM4Gp>3' {kj]$]RVEdEu|Uv_R_ʊK)ȯ XZ~G4d iWs/)mE=[V|9(o*U•ƼZV}eш^[Wؔڥ=&(v # YLW J4GFDVIFӢ(u7gQa$T^0ㆵ~s֡.EM"$`nfa)eaFU 6)Ga)^JW Co4Ks-ʩx _8[Pf5Мw +{vrehSQT0%i0o:l  Ã߱^7v꽁vK,{baBo 򅮡 +Lf9Fvn+F\wYޯAmu Ƀ`>81MQer?kAE.S\σڷ|_<$~blV.fuJ$y >czpPSZR0Y)6MڵNA]vwcɧKT9!|(⒈Qbgy +[Et@ZI-3C@}#u3˧EsR"u DWaYqղ"%N-hz^v"+ހu.;EJܳtMÈjE4vvelhvһ:Y$> !MnWE$:%5wz{w{c )Bcx +!NW-Q#V&+2,RCIP:$(ks> ++nϢMt ȭ$RC@gX #Td6Hib; ږz7Om*0zQd`㥓*֣VĦ xLZLk`-pLNR|vôm}kR-5v1b9gZ# h`C]bz>*yEg'' +֩0łZu#l ++G&pkbE^ߠH.u'IA'y */$횲=E%/n0I 1;b+dobndu_W'noJ_R烘Ugq\]]x0Lw&Ubw=r׊;|D's-Ze[ +NL(e#31ץo= 2ҁ[tCvKP߈ߠu\)ÜvU0ehy6#}G*Y)HQ5@Рu%jV[qEχ:IzdJS̉,^ +s8tVB0V *6Kg[:dV@DL +u\ׄ~1%ě"qs\a]߹:ץ}D<81)`p8 p٭&S\ވZ2x 1bhE6s1xu.6]˶e7O!%oE4޴'@) ub)ugbxEaPii*v5UF>[괻r)(]s7GY%"aui>Kln&ZNt(tNB5n>7$e ^uk'ImB_ ھ@4]O`u)ڰm7vaS|n 0_Mm[A ȐLJLbMݗ/B{ .¶&o'?3BK&膮FT m2{PUd2 Dw]bSMC'$0a$(ED=lVuԇ>b6$;~b.feTDV{(avlkV#r=Kx]]Hw $N92{v#&Sh{*מ]$ cJW~&]&}XE\FڻuRx}FqU.#֍cza6DM8t6׍˂`Ѕzi` +8؀I!&ϊqݥ7\Lw{*rnSP1x& +SUX+MQswC|c ')N0z}U!w#OoГΎYZ4qѼ+(ɭ`bБFnre t +> "hFƘ[RϮ7\cL;a}>khm,Ej'_fa@uywU}0FZ*f C8ʦfFcؔ5vH'< RQ@\\@ιZ H2{8BnКms(-tI5EB6̖pEרĿ#P$*a'F Xhs +j0NaW_T,Ю;XeR*/98x/I+,DV(5kwrfJo; eiHґQruB̍7+n`]qXD:EvKn4KE*]$ RuQQe<እ]Ƹ".1GU[,%`_r]A&C|Wy-v5Eu2żIm[ +endstream endobj 25 0 obj [24 0 R] endobj 58 0 obj <> endobj xref +0 59 +0000000000 65535 f +0000019342 00000 n +0000000147 00000 n +0000000000 00000 f +0000000000 00000 f +0000000016 00000 n +0000019393 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000662546 00000 n +0001388170 00000 n +0000019823 00000 n +0000019971 00000 n +0000662855 00000 n +0000662732 00000 n +0000020901 00000 n +0000021207 00000 n +0000020036 00000 n +0000020339 00000 n +0000020387 00000 n +0000043379 00000 n +0000043266 00000 n +0000043442 00000 n +0000040513 00000 n +0000043165 00000 n +0000040576 00000 n +0000043211 00000 n +0000662616 00000 n +0000662647 00000 n +0000662929 00000 n +0000663363 00000 n +0000664652 00000 n +0000730241 00000 n +0000795830 00000 n +0000861419 00000 n +0000863458 00000 n +0000929047 00000 n +0000994636 00000 n +0001060225 00000 n +0001125814 00000 n +0001191403 00000 n +0001256992 00000 n +0001322581 00000 n +0001388195 00000 n +trailer +<<501ED617BF67194F9E063B8F6A1B5A6A>]>> +startxref +1388395 +%%EOF diff --git a/Logo-Disruptive.jpg b/Logo-Disruptive.jpg new file mode 100644 index 0000000..88c904e Binary files /dev/null and b/Logo-Disruptive.jpg differ diff --git a/Logo-Disruptivedesvanecido.jpg b/Logo-Disruptivedesvanecido.jpg new file mode 100644 index 0000000..ccb4c9d Binary files /dev/null and b/Logo-Disruptivedesvanecido.jpg differ diff --git a/engraneactual.png b/engraneactual.png new file mode 100644 index 0000000..525542a Binary files /dev/null and b/engraneactual.png differ diff --git a/guna-fondo.png b/guna-fondo.png new file mode 100644 index 0000000..e29647b Binary files /dev/null and b/guna-fondo.png differ diff --git a/logo-guna-18.png b/logo-guna-18.png new file mode 100644 index 0000000..e055817 Binary files /dev/null and b/logo-guna-18.png differ