jbianchi81 / gesina

0 stars 0 forks source link

POST api/schedule_task - missing required fields #17

Closed cerobpm closed 4 months ago

cerobpm commented 6 months ago

Al crear una nueva schedule_task, se requieren los siguientes campos, pero no están incluidos en el schema:

Request:

curl -X POST "http://localhost:5001/api/schedule_task" -H "accept: application/json" -H "Authorization: Basic YWRtaW5AaW5hLmNvbS5hcjpwYXNzd29yZA==" -H "Content-Type: application/json" -d "{\"$schema\":\"../schemas/schedule_task.json\",\"border_conditions\":[{\"river\":\"Bravo\",\"reach\":\"Desembocadura\",\"river_stat\":\"0\",\"interval\":\"1-HOUR\",\"type\":\"Stage Hydrograph\",\"series_id\":31556},{\"river\":\"Mini\",\"reach\":\"Desembocadura\",\"river_stat\":\"0\",\"interval\":\"1-HOUR\",\"type\":\"Stage Hydrograph\",\"series_id\":31558},{\"river\":\"BarcaGrande\",\"reach\":\"Desembocadura\",\"river_stat\":\"0\",\"interval\":\"1-HOUR\",\"type\":\"Stage Hydrograph\",\"series_id\":31562},{\"river\":\"Sauce\",\"reach\":\"Desembocadura\",\"river_stat\":\"0\",\"interval\":\"1-HOUR\",\"type\":\"Stage Hydrograph\",\"series_id\":31561},{\"river\":\"Parana\",\"reach\":\"ParanaAA\",\"river_stat\":\"224000\",\"interval\":\"1-DAY\",\"type\":\"Stage Hydrograph\",\"series_id\":35205},{\"river\":\"LaBarquita\",\"reach\":\"Desembocadura\",\"river_stat\":\"0\",\"interval\":\"1-HOUR\",\"type\":\"Stage Hydrograph\",\"series_id\":31568},{\"river\":\"CanaldelEste\",\"reach\":\"Desembocadura\",\"river_stat\":\"0\",\"interval\":\"1-HOUR\",\"type\":\"Stage Hydrograph\",\"series_id\":31564},{\"river\":\"Lujan\",\"reach\":\"Desembocadura\",\"river_stat\":\"0\",\"interval\":\"1-HOUR\",\"type\":\"Stage Hydrograph\",\"series_id\":31557},{\"river\":\"SanAntonio\",\"reach\":\"Desembocadura\",\"river_stat\":\"0\",\"interval\":\"1-HOUR\",\"type\":\"Stage Hydrograph\",\"series_id\":31560},{\"river\":\"Lujan\",\"reach\":\"1\",\"river_stat\":\"30.664\",\"interval\":\"1-DAY\",\"type\":\"Flow Hydrograph\",\"series_id\":31530},{\"river\":\"Palmas\",\"reach\":\"Desembocadura\",\"river_stat\":\"6246.783\",\"interval\":\"1-HOUR\",\"type\":\"Stage Hydrograph\",\"series_id\":31565},{\"river\":\"Gutierrez\",\"reach\":\"Desembocadura\",\"river_stat\":\"1960.748\",\"interval\":\"1-HOUR\",\"type\":\"Stage Hydrograph\",\"series_id\":31567},{\"river\":\"Guazu\",\"reach\":\"Desembocadura\",\"river_stat\":\"8000\",\"interval\":\"1-HOUR\",\"type\":\"Stage Hydrograph\",\"series_id\":31566},{\"river\":\"Ibicuy\",\"reach\":\"Ibicuy\",\"river_stat\":\"67.930*\",\"interval\":\"1-DAY\",\"type\":\"Lateral Inflow Hydrograph\",\"series_id\":31570}],\"description\":\"Corrida operativa hidrodelta\",\"enabled\":false,\"frequency\":5,\"geometry\":\"DeltaParana_2016.g23\",\"initial_flows\":[],\"name\":\"Hidrodelta operativo\",\"plan_series_list\":[{\"river\":\"Guazu\",\"reach\":\"4\",\"river_stat\":\"4\",\"stage_series_id\":2830,\"flow_series_id\":-1},{\"river\":\"Guazu\",\"reach\":\"Desembocadura\",\"river_stat\":\"8000\",\"stage_series_id\":1710,\"flow_series_id\":-1},{\"river\":\"Guazu\",\"reach\":\"3\",\"river_stat\":\"1\",\"stage_series_id\":1712,\"flow_series_id\":-1},{\"river\":\"Gutierrez\",\"reach\":\"Desembocadura\",\"river_stat\":\"19967.07\",\"stage_series_id\":44,\"flow_series_id\":-1},{\"river\":\"Ibicuy\",\"reach\":\"Ibicuy\",\"river_stat\":\"7.16\",\"stage_series_id\":45,\"flow_series_id\":-1},{\"river\":\"Lujan\",\"reach\":\"1\",\"river_stat\":\"24.421\",\"stage_series_id\":42,\"flow_series_id\":-1},{\"river\":\"Lujan\",\"reach\":\"1\",\"river_stat\":\"18.0191\",\"stage_series_id\":50,\"flow_series_id\":-1},{\"river\":\"Lujan\",\"reach\":\"2\",\"river_stat\":\"5.828\",\"stage_series_id\":49,\"flow_series_id\":-1},{\"river\":\"Mini\",\"reach\":\"Desembocadura\",\"river_stat\":\"11.9\",\"stage_series_id\":51,\"flow_series_id\":-1},{\"river\":\"Palmas\",\"reach\":\"2\",\"river_stat\":\"101864.4\",\"stage_series_id\":1714,\"flow_series_id\":-1},{\"river\":\"Palmas\",\"reach\":\"3\",\"river_stat\":\"94654.47\",\"stage_series_id\":151,\"flow_series_id\":-1},{\"river\":\"Palmas\",\"reach\":\"3\",\"river_stat\":\"68418.45\",\"stage_series_id\":5907,\"flow_series_id\":-1},{\"river\":\"Palmas\",\"reach\":\"4\",\"river_stat\":\"57113.41\",\"stage_series_id\":41,\"flow_series_id\":-1},{\"river\":\"Palmas\",\"reach\":\"4\",\"river_stat\":\"49019.05\",\"stage_series_id\":1711,\"flow_series_id\":-1},{\"river\":\"Palmas\",\"reach\":\"5\",\"river_stat\":\"45033.09\",\"stage_series_id\":6163,\"flow_series_id\":-1},{\"river\":\"Palmas\",\"reach\":\"8\",\"river_stat\":\"21307.62\",\"stage_series_id\":9999,\"flow_series_id\":-1},{\"river\":\"Palmas\",\"reach\":\"Desembocadura\",\"river_stat\":\"6246.783\",\"stage_series_id\":1702,\"flow_series_id\":-1},{\"river\":\"Parana\",\"reach\":\"ParanaAA\",\"river_stat\":\"224000\",\"stage_series_id\":5901,\"flow_series_id\":-1},{\"river\":\"Parana\",\"reach\":\"ParanaAA\",\"river_stat\":\"18.96\",\"stage_series_id\":1725,\"flow_series_id\":-1},{\"river\":\"Parana\",\"reach\":\"2b\",\"river_stat\":\"237194.8\",\"stage_series_id\":1770,\"flow_series_id\":-1},{\"river\":\"Parana\",\"reach\":\"2b\",\"river_stat\":\"223194.8\",\"stage_series_id\":1723,\"flow_series_id\":-1},{\"river\":\"Parana\",\"reach\":\"2b\",\"river_stat\":\"188533.7\",\"stage_series_id\":1722,\"flow_series_id\":-1},{\"river\":\"Parana\",\"reach\":\"2b\",\"river_stat\":\"143588.9\",\"stage_series_id\":5905,\"flow_series_id\":-1},{\"river\":\"Parana\",\"reach\":\"3\",\"river_stat\":\"126030.6\",\"stage_series_id\":36,\"flow_series_id\":-1},{\"river\":\"Parana\",\"reach\":\"3\",\"river_stat\":\"94846.95\",\"stage_series_id\":37,\"flow_series_id\":-1},{\"river\":\"Parana\",\"reach\":\"3\",\"river_stat\":\"44071.76\",\"stage_series_id\":38,\"flow_series_id\":-1},{\"river\":\"Parana\",\"reach\":\"4\",\"river_stat\":\"498.7283\",\"stage_series_id\":1717,\"flow_series_id\":-1},{\"river\":\"RioBaradero\",\"reach\":\"RioBaradero\",\"river_stat\":\"29.092*\",\"stage_series_id\":39,\"flow_series_id\":-1},{\"river\":\"Victoria\",\"reach\":\"Victoria\",\"river_stat\":\"82.92\",\"stage_series_id\":5894,\"flow_series_id\":-1},{\"river\":\"CarabelasGrande\",\"reach\":\"1\",\"river_stat\":\"33.3\",\"stage_series_id\":5876,\"flow_series_id\":-1},{\"river\":\"Gutierrez\",\"reach\":\"Desembocadura\",\"river_stat\":\"1960.748\",\"stage_series_id\":1836,\"flow_series_id\":-1},{\"river\":\"Bravo\",\"reach\":\"Desembocadura\",\"river_stat\":\"0\",\"stage_series_id\":1832,\"flow_series_id\":-1},{\"river\":\"Sauce\",\"reach\":\"Desembocadura\",\"river_stat\":\"0\",\"stage_series_id\":1842,\"flow_series_id\":-1},{\"river\":\"BarcaGrande\",\"reach\":\"Desembocadura\",\"river_stat\":\"0\",\"stage_series_id\":1831,\"flow_series_id\":-1},{\"river\":\"LaBarquita\",\"reach\":\"Desembocadura\",\"river_stat\":\"0\",\"stage_series_id\":1837,\"flow_series_id\":-1},{\"river\":\"Mini\",\"reach\":\"Desembocadura\",\"river_stat\":\"0\",\"stage_series_id\":1839,\"flow_series_id\":-1},{\"river\":\"CanaldelEste\",\"reach\":\"Desembocadura\",\"river_stat\":\"0\",\"stage_series_id\":1833,\"flow_series_id\":-1},{\"river\":\"SanAntonio\",\"reach\":\"Desembocadura\",\"river_stat\":\"0\",\"stage_series_id\":1841,\"flow_series_id\":-1},{\"river\":\"Lujan\",\"reach\":\"Desembocadura\",\"river_stat\":\"0\",\"stage_series_id\":1838,\"flow_series_id\":-1}],\"start_condition_type\":\"restart_file\",\"start_datetime\":\"2021-12-21T00:00:00.000Z\"}"

Response (400, BAD REQUEST)

{
  "error": "Missing required fields",
  "missing": [
    "calibration_id",
    "calibration_id_for_simulations",
    "geometry_id",
    "observation_days",
    "forecast_days",
    "project_file",
    "plan_file"
  ]
}

schema:

ScheduleTaskSchema:
  type: object
  properties:
    id:
      type: integer
      example: 1
    name:
      type: string
      example: "Daily Water Level Check"
    description:
      type: string
      example: "Checks water levels of specified rivers daily."
    frequency:
      type: integer
      example: 24
    created_at:
      example: "2024-02-11T16:43:32"
      type: string
      format: date-time
    start_datetime:
      example: "2024-02-12T08:00:00"
      type: string
      format: date-time
    enabled:
      type: boolean
      example: true
    geometry:
      type: string
      example: "POINT(30 10)"
    user:
      type: string
      example: "admin@example.com"
    initial_flow_list:
      type: array
      items:
        $ref: '#/components/schemas/InitialFlowSchema'
    border_conditions:
      type: array
      items:
        $ref: '#/components/schemas/BorderConditionSchema'
    plan_series_list:
      type: array
      items:
        $ref: '#/components/schemas/PlanSeriesSchema'

@azulzaietz @manulon @federicoburman

cerobpm commented 6 months ago

Por otro lado veo que en la respuesta a GET api/schedule_task/{id} tampoco están esos campos. Sería importante que una configuración descargada sirva para recrearla.

federicoburman commented 6 months ago

Esos campos que dicen que son required no deberian serlo? Lo eliminamos

jbianchi81 commented 6 months ago

Sí, son requeridos. Habría que agregarlos al schema

federicoburman commented 6 months ago

Arreglado, ya esta completo el schema de swagger y tira excepcion si cuando se crea la schedule task se la crea con enabled true

cerobpm commented 5 months ago

Estaría bueno que al tirar la excepción dé un mensaje al frontend más explicativo, tipo "error al crear corrida programada: no se puede create con enabled:true"

cerobpm commented 5 months ago

Todavía falta agregar "project_file" y "plan_file" a la respuesta de GET /schedule_task/{id}

azulzaietz commented 4 months ago

Hola Juan, una pregunta, en este caso qué te gustaría que se muestre en la salida? Si está presente?

En minio, se guardan todos los archivos subidos con los mismos nombres: "plan_template" y "prj_template". Se diferencian porque cada uno está dentro de la carpeta con el número de ID correspondiente. Entonces, si a la salida agregamos los nombres de los archivos, para todos los casos van a ser los mismos. No se guarda el nombre original del archivo en minio.

La implementación estaba así y nosotros no la modificamos. Vos querías obtener el nombre original del archivo subido para cada caso?

cerobpm commented 4 months ago

Mi idea es que la salida de GET /schedule_task/{id}, sin modificar, se pueda usar para POST /schedule_task (para poder backupear y recrear una corrida programada). Si los nombres de los archivos son fijos, entonces simplemente sería agregar

"project_file": "prj_template.txt",
"plan_file": "plan_template.txt",

a la salida del GET

azulzaietz commented 4 months ago

Entiendo. Pero tengo una pregunta para terminar de entender mejor. Actualmente está la funcionalidad de duplicar una corrida programada. Cuál sería la diferencia?

cerobpm commented 4 months ago

Poder backupearlas para recrearlas en otra instancia de la aplicación

federicoburman commented 4 months ago

entendido. Lo que vamos a agrear es que el get devuelva el path de los archivos asi “project-file”: “schedule-tasks/2/prj_template.txt”. De esta manera si creas una nueva scheduled task le podes pasar ese path y cuando se crea se copia el archivo de ese lugar. Te pareceria bien? @cerobpm

federicoburman commented 4 months ago

Lo unico es que para que esto funcione el archivo tiene que estar en el mismo repositorio minio. Otra opcion es que en el get se devuelva el contenido de los archivos escritos en base64 (encriptados en una manera que se pueda guardar en texto plano). El problema de esto es que seria poco legible. Lo podemos poner como un parametro opcional

federicoburman commented 4 months ago

Como ejemplo esto es un restart_file pasado a base64

VmVyc2lvbiA0LjEuMCBKYW4gMjAxMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICACAAAqAgAAAQAAACoCAACh7gEA1AgAAAEAAAAIAAAAAQAAAAEAAAABAAAAAQAAAEIAAAAnAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAAAAAABAAAAAAAAAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAAAAIA/AACAPwAAAAAAAPBCAAAAAAAAOEDiBwAACQAAABcAAAAAAAAAAABeQAAAAAAAQF5AAAAAAAAAAAAAmOBSg9FQQQAAwP8VAoRAAAAAAAAAAAAA+M2nzfdQQSACAAAAAAAAAAAiQAxCQkDbkeFIMjI0MDAwICBQYXJhbmEgICAgICAgICAgIFBhcmFuYUFBICAgICAgICAgMjI0MDAwICDwflw8RzVAQPns30gyMDc1MTAgIFBhcmFuYSAgICAgICAgICAgUGFyYW5hQUEgICAgICAgICAyMDc1MTAgIMBkyzD4jT5A10DfSDE5MTAxMCAgUGFyYW5hICAgICAgICAgICBQYXJhbmFBQSAgICAgICAgIDE5MTAxMCAgwGhWNh7LPECxrN5IMTguOTYgICBQYXJhbmEgICAgICAgICAgIFBhcmFuYUFBICAgICAgICAgMTguOTYgICBAxQbDqzU8QOk03kgxMS40MiAgIFBhcmFuYSAgICAgICAgICAgUGFyYW5hQUEgICAgICAgICAxMS40MiAgIEDntUTKfjtAN5zdSDYuMDggICAgUGFyYW5hICAgICAgICAgICBQYXJhbmFBQSAgICAgICAgIDYuMDggICAg4HEg0u4DOkClD91IMC4wMCAgICBQYXJhbmEgICAgICAgICAgIFBhcmFuYUFBICAgICAgICAgMC4wMCAgICBAmcbR7gM6QJtz1UgyNzkxOTQuOFBhcmFuYSAgICAgICAgICAgMiAgICAgICAgICAgICAgICAyNzkxOTQuOAA0YXuxvzlA6W3VSDI3NzgwMS4zUGFyYW5hICAgICAgICAgICAyICAgICAgICAgICAgICAgIDI3NzgwMS4zgITdqERGOUBCZNVIMjc1MTk2LjdQYXJhbmEgICAgICAgICAgIDIgICAgICAgICAgICAgICAgMjc1MTk2LjeAhg3avBU5QORa1UgyNzMxOTQuOFBhcmFuYSAgICAgICAgICAgMiAgICAgICAgICAgICAgICAyNzMxOTQuOAAqfgst0jhADk7VSDI3MTE5NC44UGFyYW5hICAgICAgICAgICAyICAgICAgICAgICAgICAgIDI3MTE5NC44wN+VhsuDOEC2RdVIMjY5ODIzLjNQYXJhbmEgICAgICAgICAgIDIgICAgICAgICAgICAgICAgMjY5ODIzLjMAB391jP83QJ411UgyNjY5MDcuNFBhcmFuYSAgICAgICAgICAgMiAgICAgICAgICAgICAgICAyNjY5MDcuNICB4QL2hjdABC3VSDI2NTE5NC44UGFyYW5hICAgICAgICAgICAyICAgICAgICAgICAgICAgIDI2NTE5NC44UBaGfsUJN0AHJ9VIMjYzMTk0LjhQYXJhbmEgICAgICAgICAgIDIgICAgICAgICAgICAgICAgMjYzMTk0LjiAF+rHRN82QNAg1UgyNjExOTQuOFBhcmFuYSAgICAgICAgICAgMiAgICAgICAgICAgICAgICAyNjExOTQuOAAccMSUlDZA6BfVSDI1OTE5NC44UGFyYW5hICAgICAgICAgICAyICAgICAgICAgICAgICAgIDI1OTE5NC44AKbvrjcuNkCTENVIMjU3MzMwLjNQYXJhbmEgICAgICAgICAgIDIgICAgICAgICAgICAgICAgMjU3MzMwLjMACEnLNy42QJT4tUUxNTk4NjkuNEJhcnJhbmNvc28gICAgICAgQmFycmFuY29zbyAgICAgICAxNTk4NjkuNIDyr1wgXjRAn+utRTEzODU3Ni4zQmFycmFuY29zbyAgICAgICBCYXJyYW5jb3NvICAgICAgIDEzODU3Ni4zAH+Xddw0MUBmJaxFNzE3NzUuMyBCYXJyYW5jb3NvICAgICAgIEJhcnJhbmNvc28gICAgICAgNzE3NzUuMyAAHFxFnhkxQBVfrEU2Nzc5NS45KkJhcnJhbmNvc28gICAgICAgQmFycmFuY29zbyAgICAgICA2Nzc5NS45KgB85HIS+jBA9aKsRTYzODE2LjYqQmFycmFuY29zbyAgICAgICBCYXJyYW5jb3NvICAgICAgIDYzODE2LjYqQHe7McrvMEBiDq1FNjI4MjEuOCpCYXJyYW5jb3NvICAgICAgIEJhcnJhbmNvc28gICAgICAgNjI4MjEuOCrcbINTsOMwQELarUU2MTgyNy4wKkJhcnJhbmNvc28gICAgICAgQmFycmFuY29zbyAgICAgICA2MTgyNy4wKsAuAudBzzBAk8WuRTU5ODM3LjMqQmFycmFuY29zbyAgICAgICBCYXJyYW5jb3NvICAgICAgIDU5ODM3LjMq0FwSZ7C6MEA3Jq9FNTY4NTIuOSpCYXJyYW5jb3NvICAgICAgIEJhcnJhbmNvc28gICAgICAgNTY4NTIuOSocpcbjkZcwQJz1r0U1MDg4My45KkJhcnJhbmNvc28gICAgICAgQmFycmFuY29zbyAgICAgICA1MDg4My45Kojo/tptcDBArdCwRTQzOTIwLjEqQmFycmFuY29zbyAgICAgICBCYXJyYW5jb3NvICAgICAgIDQzOTIwLjEqZnRkmiBnMEDnFLFFNDE5MzAuNSpCYXJyYW5jb3NvICAgICAgIEJhcnJhbmNvc28gICAgICAgNDE5MzAuNSogx18h308wQAWUsUUzNzk1MS4yKkJhcnJhbmNvc28gICAgICAgQmFycmFuY29zbyAgICAgICAzNzk1MS4yKsArasAhNTBAQF20RTMzOTcxLjkqQmFycmFuY29zbyAgICAgICBCYXJyYW5jb3NvICAgICAgIDMzOTcxLjkq8LgR2ogoMEAOeLhFMzA5ODcuNCpCYXJyYW5jb3NvICAgICAgIEJhcnJhbmNvc28gICAgICAgMzA5ODcuNCpAGsHvfyAwQAOpvkUyNzAwOC4xKkJhcnJhbmNvc28gICAgICAgQmFycmFuY29zbyAgICAgICAyNzAwOC4xKgjx9tpbFjBAh9HERTI0MDIzLjYqQmFycmFuY29zbyAgICAgICBCYXJyYW5jb3NvICAgICAgIDI0MDIzLjYqPlzAGmYQMECMccdFMjMwMjguOCpCYXJyYW5jb3NvICAgICAgIEJhcnJhbmNvc28gICAgICAgMjMwMjguOCpASr/s6PovQDUOzEUyMDA0NC4zKkJhcnJhbmNvc28gICAgICAgQmFycmFuY29zbyAgICAgICAyMDA0NC4zKoAQ+gRHEi5AQWPNRTE2MDY1LjAqQmFycmFuY29zbyAgICAgICBCYXJyYW5jb3NvICAgICAgIDE2MDY1LjAqwKT7Q6wFLUCkwM1FMTQwNzUuMypCYXJyYW5jb3NvICAgICAgIEJhcnJhbmNvc28gICAgICAgMTQwNzUuMyrAAS7MHaMsQLy2zUUxMTA5MC44KkJhcnJhbmNvc28gICAgICAgQmFycmFuY29zbyAgICAgICAxMTA5MC44KgAUXZjSgSxAsbXNRTEwMDk2LjAqQmFycmFuY29zbyAgICAgICBCYXJyYW5jb3NvICAgICAgIDEwMDk2LjAqIEH6ZRo3LECXts1FODEwNi4zOCpCYXJyYW5jb3NvICAgICAgIEJhcnJhbmNvc28gICAgICAgODEwNi4zOCpAOfrnM7srQL69zUU1MTIxLjk0M0JhcnJhbmNvc28gICAgICAgQmFycmFuY29zbyAgICAgICA1MTIxLjk0M4DRlK83LjZAsTjSSDI1NTE5NC44UGFyYW5hICAgICAgICAgICAyYiAgICAgICAgICAgICAgIDI1NTE5NC44gI0hqLSjNUCQNtJIMjUzMjczLjlQYXJhbmEgICAgICAgICAgIDJiICAgICAgICAgICAgICAgMjUzMjczLjmg5sJD0ns1QOQz0kgyNTE1MDEuNVBhcmFuYSAgICAgICAgICAgMmIgICAgICAgICAgICAgICAyNTE1MDEuNbCKDbnHIzVAvCnSSDI0ODUyOS45UGFyYW5hICAgICAgICAgICAyYiAgICAgICAgICAgICAgIDI0ODUyOS45QNYJRuT5NEDTI9JIMjQ3MTA3LjVQYXJhbmEgICAgICAgICAgIDJiICAgICAgICAgICAgICAgMjQ3MTA3LjVwW+pD/rs0QAgd0kgyNDQ4MzAuNVBhcmFuYSAgICAgICAgICAgMmIgICAgICAgICAgICAgICAyNDQ4MzAuNYCL/fSUfjRA7BnSSDI0MzE5NC44UGFyYW5hICAgICAgICAgICAyYiAgICAgICAgICAgICAgIDI0MzE5NC44AOe4YcATNECbF9JIMjQxMTk0LjhQYXJhbmEgICAgICAgICAgIDJiICAgICAgICAgICAgICAgMjQxMTk0LjgAVhed76EzQBsW0kgyMzkxOTQuOFBhcmFuYSAgICAgICAgICAgMmIgICAgICAgICAgICAgICAyMzkxOTQuOKC6x0R7NTNAERXSSDIzNzE5NC44UGFyYW5hICAgICAgICAgICAyYiAgICAgICAgICAgICAgIDIzNzE5NC44QFM1frwUM0AiFNJIMjM1MTk0LjhQYXJhbmEgICAgICAgICAgIDJiICAgICAgICAgICAgICAgMjM1MTk0LjiA9p017MsyQJET0kgyMzMxOTQuOFBhcmFuYSAgICAgICAgICAgMmIgICAgICAgICAgICAgICAyMzMxOTQuOADKuKqRizJAuBPSSDIzMTE5NC44UGFyYW5hICAgICAgICAgICAyYiAgICAgICAgICAgICAgIDIzMTE5NC44gMaYRutdMkAWFNJIMjI5MTk0LjhQYXJhbmEgICAgICAgICAgIDJiICAgICAgICAgICAgICAgMjI5MTk0LjgAqTi8G1UyQKIU0kgyMjcxOTQuOFBhcmFuYSAgICAgICAgICAgMmIgICAgICAgICAgICAgICAyMjcxOTQuOIBAxHe0QjJAkRXSSDIyNTE5NC44UGFyYW5hICAgICAgICAgICAyYiAgICAgICAgICAgICAgIDIyNTE5NC44QC0b2P4pMkAFF9JIMjIzMTk0LjhQYXJhbmEgICAgICAgICAgIDJiICAgICAgICAgICAgICAgMjIzMTk0LjgAgEPBsRIyQIsY0kgyMjExOTQuOFBhcmFuYSAgICAgICAgICAgMmIgICAgICAgICAgICAgICAyMjExOTQuOIB3wPqH+TFA0RnSSDIxOTE5NC44UGFyYW5hICAgICAgICAgICAyYiAgICAgICAgICAgICAgIDIxOTE5NC444Ka9+n7jMUD/GtJIMjE3MTk0LjhQYXJhbmEgICAgICAgICAgIDJiICAgICAgICAgICAgICAgMjE3MTk0LjgAsmjtitIxQEIc0kgyMTUxOTQuOFBhcmFuYSAgICAgICAgICAgMmIgICAgICAgICAgICAgICAyMTUxOTQuOAAoxvuzwjFA0h3SSDIxMzE5Mi40UGFyYW5hICAgICAgICAgICAyYiAgICAgICAgICAgICAgIDIxMzE5Mi40gFYeSnuvMUCeINJIMjEwOTczLjZQYXJhbmEgICAgICAgICAgIDJiICAgICAgICAgICAgICAgMjEwOTczLjYAsI4EopUxQHgj0kgyMDkxMzguMlBhcmFuYSAgICAgICAgICAgMmIgICAgICAgICAgICAgICAyMDkxMzguMvBjPvptcjFAKSjSSDIwNjMwMSAgUGFyYW5hICAgICAgICAgICAyYiAgICAgICAgICAgICAgIDIwNjMwMSAgAH9Gs+1UMUCqLtJIMjAzMDM1LjNQYXJhbmEgICAgICAgICAgIDJiICAgICAgICAgICAgICAgMjAzMDM1LjMADONuAx8xQPMy0kgyMDA1MzMuN1BhcmFuYSAgICAgICAgICAgMmIgICAgICAgICAgICAgICAyMDA1MzMuN+BppOpl/DBA1TbSSDE5ODUzMy43UGFyYW5hICAgICAgICAgICAyYiAgICAgICAgICAgICAgIDE5ODUzMy43gB5Ek8LFMECAPNJIMTk2NTMzLjdQYXJhbmEgICAgICAgICAgIDJiICAgICAgICAgICAgICAgMTk2NTMzLjfAsS9onqAwQD1G0kgxOTQ1MzMuN1BhcmFuYSAgICAgICAgICAgMmIgICAgICAgICAgICAgICAxOTQ1MzMuNwDz7rSngTBArlTSSDE5MjUzMy43UGFyYW5hICAgICAgICAgICAyYiAgICAgICAgICAgICAgIDE5MjUzMy43ANGasQVxMEDZZdJIMTkwNTMzLjdQYXJhbmEgICAgICAgICAgIDJiICAgICAgICAgICAgICAgMTkwNTMzLjcAK7PYCUgwQCl50kgxODg1MzMuN1BhcmFuYSAgICAgICAgICAgMmIgICAgICAgICAgICAgICAxODg1MzMuNwAdYhBWFjBA44rSSDE4NjUzMy43UGFyYW5hICAgICAgICAgICAyYiAgICAgICAgICAgICAgIDE4NjUzMy43AKGn2vS6L0B4ltJIMTg0NTMzLjdQYXJhbmEgICAgICAgICAgIDJiICAgICAgICAgICAgICAgMTg0NTMzLjcAkkQMq0ovQKWf0kgxODI1MzMuN1BhcmFuYSAgICAgICAgICAgMmIgICAgICAgICAgICAgICAxODI1MzMuNwDEdU8G7i5Al6fSSDE4MDUzMy43UGFyYW5hICAgICAgICAgICAyYiAgICAgICAgICAgICAgIDE4MDUzMy43AGA+OU21LkACsNJIMTc4NTMzLjdQYXJhbmEgICAgICAgICAgIDJiICAgICAgICAgICAgICAgMTc4NTMzLjcA9BoBY08uQKO80kgxNzY1MzMuN1BhcmFuYSAgICAgICAgICAgMmIgICAgICAgICAgICAgICAxNzY1MzMuNwBO3H9zwi1AGsrSSDE3NDUzMy43UGFyYW5hICAgICAgICAgICAyYiAgICAgICAgICAgICAgIDE3NDUzMy43AIv5NPh1LUBs19JIMTcyNTMzLjdQYXJhbmEgICAgICAgICAgIDJiICAgICAgICAgICAgICAgMTcyNTMzLjcAV+hrMCktQFTl0kgxNzA1MzMuN1BhcmFuYSAgICAgICAgICAgMmIgICAgICAgICAgICAgICAxNzA1MzMuN2DwZXgc4ixA1PHSSDE2ODUzMy43UGFyYW5hICAgICAgICAgICAyYiAgICAgICAgICAgICAgIDE2ODUzMy43AEg8yRKkLECr+9JIMTY2NTMzLjdQYXJhbmEgICAgICAgICAgIDJiICAgICAgICAgICAgICAgMTY2NTMzLjcANHXHNHAsQDcF00gxNjQ1MzMuN1BhcmFuYSAgICAgICAgICAgMmIgICAgICAgICAgICAgICAxNjQ1MzMuNwCqEtKALyxATxPTSDE2MjUzMy43UGFyYW5hICAgICAgICAgICAyYiAgICAgICAgICAgICAgIDE2MjUzMy43AIwdSfrAK0AHKdNIMTYwNDA2ICBQYXJhbmEgICAgICAgICAgIDJiICAgICAgICAgICAgICAgMTYwNDA2ICAA5GiNeSkrQEdC00gxNTg1MzMuN1BhcmFuYSAgICAgICAgICAgMmIgICAgICAgICAgICAgICAxNTg1MzMuNwAxhTJtUCpAZWjTSDE1NjA5NyAgUGFyYW5hICAgICAgICAgICAyYiAgICAgICAgICAgICAgIDE1NjA5NyAgANxUR8P7KUAigdNIMTU0NTMzLjdQYXJhbmEgICAgICAgICAgIDJiICAgICAgICAgICAgICAgMTU0NTMzLjcAiDTKL3wpQDqd00gxNTI1MzMuN1BhcmFuYSAgICAgICAgICAgMmIgICAgICAgICAgICAgICAxNTI1MzMuNwCOYxLfLClAuq7TSDE1MDUzMy43UGFyYW5hICAgICAgICAgICAyYiAgICAgICAgICAgICAgIDE1MDUzMy43AFCoiFEFKUAsvNNIMTQ4NTMzLjdQYXJhbmEgICAgICAgICAgIDJiICAgICAgICAgICAgICAgMTQ4NTMzLjcAFOF5ktwoQD/R00gxNDY1MzMuN1BhcmFuYSAgICAgICAgICAgMmIgICAgICAgICAgICAgICAxNDY1MzMuNwDAiYETeShAH+jTSDE0NDUzMy43UGFyYW5hICAgICAgICAgICAyYiAgICAgICAgICAgICAgIDE0NDUzMy43AFBWohZaKEAY8tNIMTQzNTg4LjlQYXJhbmEgICAgICAgICAgIDJiICAgICAgICAgICAgICAgMTQzNTg4LjkAoBCiFlooQAQN0kgxNDAwMjAuNFBhcmFuYSAgICAgICAgICAgMyAgICAgICAgICAgICAgICAxNDAwMjAuNAA+Uop2SyhA1CDSSDEzODAyMS45UGFyYW5hICAgICAgICAgICAzICAgICAgICAgICAgICAgIDEzODAyMS45ANDiSqYFKEBnMdJIMTM2MDIzLjRQYXJhbmEgICAgICAgICAgIDMgICAgICAgICAgICAgICAgMTM2MDIzLjQAOBO5degnQC9A0kgxMzQwMjQuOVBhcmFuYSAgICAgICAgICAgMyAgICAgICAgICAgICAgICAxMzQwMjQuOQAMi4JmlSdAJlnSSDEzMjAyNi4zUGFyYW5hICAgICAgICAgICAzICAgICAgICAgICAgICAgIDEzMjAyNi4zACBNWpI2J0CSeNJIMTMwMDI3LjhQYXJhbmEgICAgICAgICAgIDMgICAgICAgICAgICAgICAgMTMwMDI3LjgAbjrFquomQGKX0kgxMjgwMjkuMlBhcmFuYSAgICAgICAgICAgMyAgICAgICAgICAgICAgICAxMjgwMjkuMgB0nzlSpCZAXLvSSDEyNjAzMC42UGFyYW5hICAgICAgICAgICAzICAgICAgICAgICAgICAgIDEyNjAzMC42AJBBAm53JkA629JIMTI0MDMxLjlQYXJhbmEgICAgICAgICAgIDMgICAgICAgICAgICAgICAgMTI0MDMxLjkAWNXP6ygmQOP60kgxMjE1MDcuMlBhcmFuYSAgICAgICAgICAgMyAgICAgICAgICAgICAgICAxMjE1MDcuMgDgUME1FSZA/RHTSDEyMDAzNC42UGFyYW5hICAgICAgICAgICAzICAgICAgICAgICAgICAgIDEyMDAzNC42AEBz1tu/JUB7LtNIMTE4MDM2ICBQYXJhbmEgICAgICAgICAgIDMgICAgICAgICAgICAgICAgMTE4MDM2ICAAuLJJrJslQMZE00gxMTYwMzcuM1BhcmFuYSAgICAgICAgICAgMyAgICAgICAgICAgICAgICAxMTYwMzcuMwBId6LflSVAOmrTSDExNDE0NS42UGFyYW5hICAgICAgICAgICAzICAgICAgICAgICAgICAgIDExNDE0NS42ALC4UFQcJUCuntNIMTEyMDM5LjhQYXJhbmEgICAgICAgICAgIDMgICAgICAgICAgICAgICAgMTEyMDM5LjgAAKtO/qokQE7O00gxMTAwNDEgIFBhcmFuYSAgICAgICAgICAgMyAgICAgICAgICAgICAgICAxMTAwNDEgIAAoAQWuLyRAcwnUSDEwNzcxNC4zUGFyYW5hICAgICAgICAgICAzICAgICAgICAgICAgICAgIDEwNzcxNC4zAHAOIqYTJEBqOdRIMTA2MDQzLjRQYXJhbmEgICAgICAgICAgIDMgICAgICAgICAgICAgICAgMTA2MDQzLjQAkBy1ztMjQM111EgxMDQyNDguN1BhcmFuYSAgICAgICAgICAgMyAgICAgICAgICAgICAgICAxMDQyNDguNwAYis3VMSNAUrPUSDEwMjA0NS44UGFyYW5hICAgICAgICAgICAzICAgICAgICAgICAgICAgIDEwMjA0NS44AKAjBdEYI0Al4tRIMTAwMDQ3ICBQYXJhbmEgICAgICAgICAgIDMgICAgICAgICAgICAgICAgMTAwMDQ3ICAA4Kw1/dMiQIQO1Ug5ODA0OC4xOVBhcmFuYSAgICAgICAgICAgMyAgICAgICAgICAgICAgICA5ODA0OC4xOQDgAQEknyJA4TPVSDk2MDQ5LjMzUGFyYW5hICAgICAgICAgICAzICAgICAgICAgICAgICAgIDk2MDQ5LjMzACCSKil5IkAiStVIOTQ4NDYuOTVQYXJhbmEgICAgICAgICAgIDMgICAgICAgICAgICAgICAgOTQ4NDYuOTUAADuc4XkiQLNi1Ug5MzkwOC45MVBhcmFuYSAgICAgICAgICAgMyAgICAgICAgICAgICAgICA5MzkwOC45MQBAIo5ZPCJAlaHVSDkyMDUxLjUyUGFyYW5hICAgICAgICAgICAzICAgICAgICAgICAgICAgIDkyMDUxLjUyABBqblUSIkDx/dVIOTAwNTIuNThQYXJhbmEgICAgICAgICAgIDMgICAgICAgICAgICAgICAgOTAwNTIuNTgAEMdw4dkhQC5T1kg4ODA1My42MVBhcmFuYSAgICAgICAgICAgMyAgICAgICAgICAgICAgICA4ODA1My42MQAQIpLpgiFAlITWSDg2MDU0LjYzUGFyYW5hICAgICAgICAgICAzICAgICAgICAgICAgICAgIDg2MDU0LjYzAAC9nkJYIUBhvtZIODQwNTUuNjRQYXJhbmEgICAgICAgICAgIDMgICAgICAgICAgICAgICAgODQwNTUuNjQAQMolIAwhQKX31kg4MjA1Ni42M1BhcmFuYSAgICAgICAgICAgMyAgICAgICAgICAgICAgICA4MjA1Ni42MwDwWxts1yBAqSfXSDgwMDU3LjU5UGFyYW5hICAgICAgICAgICAzICAgICAgICAgICAgICAgIDgwMDU3LjU5ANDgmhtiIEDoUNdINzgwNTguNTJQYXJhbmEgICAgICAgICAgIDMgICAgICAgICAgICAgICAgNzgwNTguNTIAoMTvFVEgQAd510g3NjA1OS40M1BhcmFuYSAgICAgICAgICAgMyAgICAgICAgICAgICAgICA3NjA1OS40MwBAYRId9R9ARqnXSDc0MDYwLjMyUGFyYW5hICAgICAgICAgICAzICAgICAgICAgICAgICAgIDc0MDYwLjMyAAA3VWB+H0DZ0tdINzIwNjEuMTlQYXJhbmEgICAgICAgICAgIDMgICAgICAgICAgICAgICAgNzIwNjEuMTkAAGpGG/IeQIPx10g3MDA2Mi4wNVBhcmFuYSAgICAgICAgICAgMyAgICAgICAgICAgICAgICA3MDA2Mi4wNQDAjhNnDh9A3hDYSDY4MDYyLjkyUGFyYW5hICAgICAgICAgICAzICAgICAgICAgICAgICAgIDY4MDYyLjkyAIDPfM1mHkAYONhINjYwNjMuNzhQYXJhbmEgICAgICAgICAgIDMgICAgICAgICAgICAgICAgNjYwNjMuNzgAwIBJsC0eQIRj2Eg2NDA2NC42MlBhcmFuYSAgICAgICAgICAgMyAgICAgICAgICAgICAgICA2NDA2NC42MgDAcBJIyR1ArqvYSDYyMDY1LjQ0UGFyYW5hICAgICAgICAgICAzICAgICAgICAgICAgICAgIDYyMDY1LjQ0AMB90blQHUBUDtlINjAwNjYuMjNQYXJhbmEgICAgICAgICAgIDMgICAgICAgICAgICAgICAgNjAwNjYuMjMA4P7Uf+8cQGNx2Ug1ODExMS4yNVBhcmFuYSAgICAgICAgICAgMyAgICAgICAgICAgICAgICA1ODExMS4yNQAAttPzAxxAG9LZSDU2MDY3Ljc0UGFyYW5hICAgICAgICAgICAzICAgICAgICAgICAgICAgIDU2MDY3Ljc0AAAHCJHeGkCREtpINTQxMTEuNTZQYXJhbmEgICAgICAgICAgIDMgICAgICAgICAgICAgICAgNTQxMTEuNTYAgD9qN6saQIBO2kg1MjA2OS4xNlBhcmFuYSAgICAgICAgICAgMyAgICAgICAgICAgICAgICA1MjA2OS4xNgDAB4czShpAYZXaSDUwMDY5LjgyUGFyYW5hICAgICAgICAgICAzICAgICAgICAgICAgICAgIDUwMDY5LjgyAIAF8OcXGkAH09pINDgwNzAuNDhQYXJhbmEgICAgICAgICAgIDMgICAgICAgICAgICAgICAgNDgwNzAuNDgAYFRTTosZQC4K20g0NjA3MS4xMlBhcmFuYSAgICAgICAgICAgMyAgICAgICAgICAgICAgICA0NjA3MS4xMgAA6oj+bhlA8UPbSDQ0MDcxLjc2UGFyYW5hICAgICAgICAgICAzICAgICAgICAgICAgICAgIDQ0MDcxLjc2AADAhf5uGUC1OthINDIxNDQuNyBQYXJhbmEgICAgICAgICAgIDQgICAgICAgICAgICAgICAgNDIxNDQuNyAAAEdUV7EYQBp62Eg0MDA2NS4zIFBhcmFuYSAgICAgICAgICAgNCAgICAgICAgICAgICAgICA0MDA2NS4zIAAAXjfHSxhAUKDYSDM4MDczLjU5UGFyYW5hICAgICAgICAgICA0ICAgICAgICAgICAgICAgIDM4MDczLjU5AAAKXdY4GECLxdhIMzYwNzQuMTVQYXJhbmEgICAgICAgICAgIDQgICAgICAgICAgICAgICAgMzYwNzQuMTUAAHTzjjwYQBgO2UgzNDA3NC43MVBhcmFuYSAgICAgICAgICAgNCAgICAgICAgICAgICAgICAzNDA3NC43MQDAb9F6axdAg2HZSDMyMDc1LjI1UGFyYW5hICAgICAgICAgICA0ICAgICAgICAgICAgICAgIDMyMDc1LjI1AADvizgXF0CandlIMzAwNzUuNzdQYXJhbmEgICAgICAgICAgIDQgICAgICAgICAgICAgICAgMzAwNzUuNzcAwJaNFqgWQCja2UgyODA3Ni4yN1BhcmFuYSAgICAgICAgICAgNCAgICAgICAgICAgICAgICAyODA3Ni4yNwBAgnPvOhZADBjaSDI2MDc2Ljc0UGFyYW5hICAgICAgICAgICA0ICAgICAgICAgICAgICAgIDI2MDc2Ljc0AABqYAx6FUABStpIMjQwMDAuNDRQYXJhbmEgICAgICAgICAgIDQgICAgICAgICAgICAgICAgMjQwMDAuNDQAQLE+98IUQDpr2kgyMjA3Ny42M1BhcmFuYSAgICAgICAgICAgNCAgICAgICAgICAgICAgICAyMjA3Ny42MwCAxf3wzhRA7ZDaSDE5ODk0LjEzUGFyYW5hICAgICAgICAgICA0ICAgICAgICAgICAgICAgIDE5ODk0LjEzAABwev6yFEA9utpIMTgwNzguNSBQYXJhbmEgICAgICAgICAgIDQgICAgICAgICAgICAgICAgMTgwNzguNSAAQEM1WWsUQB/x2kgxNjA3OC45MlBhcmFuYSAgICAgICAgICAgNCAgICAgICAgICAgICAgICAxNjA3OC45MgAAYDRm/BNAEx3bSDE0MDgwLjMzUGFyYW5hICAgICAgICAgICA0ICAgICAgICAgICAgICAgIDE0MDgwLjMzACD40e3lE0D6QNtIMTIwNzkuNyBQYXJhbmEgICAgICAgICAgIDQgICAgICAgICAgICAgICAgMTIwNzkuNyAAQAIqnL4TQOB620gxMDA4MC4wNVBhcmFuYSAgICAgICAgICAgNCAgICAgICAgICAgICAgICAxMDA4MC4wNQDAto8oahNAx8vbSDgwODAuMzcxUGFyYW5hICAgICAgICAgICA0ICAgICAgICAgICAgICAgIDgwODAuMzcxAPAPd2+6EkBCE9xINjA4MC42NjZQYXJhbmEgICAgICAgICAgIDQgICAgICAgICAgICAgICAgNjA4MC42NjYAgK9JVYMSQJJG3Eg0MDgwLjkzM1BhcmFuYSAgICAgICAgICAgNCAgICAgICAgICAgICAgICA0MDgwLjkzMwAAmjZVDxJA+W7cSDIwODEuMTc0UGFyYW5hICAgICAgICAgICA0ICAgICAgICAgICAgICAgIDIwODEuMTc0AAC0oynvEUDqkdxINDk4LjcyODNQYXJhbmEgICAgICAgICAgIDQgICAgICAgICAgICAgICAgNDk4LjcyODMAwmqkFlooQP2JckU0ICAgICAgIFBhdm9uICAgICAgICAgICAgUGF2b24gICAgICAgICAgICA0ICAgICAgIAD++gP7NihA/dyERTMgICAgICAgUGF2b24gICAgICAgICAgICBQYXZvbiAgICAgICAgICAgIDMgICAgICAggEkjXlsiKECqaI5FMiAgICAgICBQYXZvbiAgICAgICAgICAgIFBhdm9uICAgICAgICAgICAgMiAgICAgICAAqmefRhMoQMSVkkUxICAgICAgIFBhdm9uICAgICAgICAgICAgUGF2b24gICAgICAgICAgICAxICAgICAgIKDNVc7uAzpASYFzRjEzNy43MCAgVmljdG9yaWEgICAgICAgICBWaWN0b3JpYSAgICAgICAgIDEzNy43MCAgAPkuFrrFOUAjOXNGMTMxLjExICBWaWN0b3JpYSAgICAgICAgIFZpY3RvcmlhICAgICAgICAgMTMxLjExICCg3B8j3485QFtyckYxMjUuODYgIFZpY3RvcmlhICAgICAgICAgVmljdG9yaWEgICAgICAgICAxMjUuODYgIKBLqP49BTlApoFsRjEyMC4zOCAgVmljdG9yaWEgICAgICAgICBWaWN0b3JpYSAgICAgICAgIDEyMC4zOCAgwJP2qz6IN0ClzWVGMTEyLjExICBWaWN0b3JpYSAgICAgICAgIFZpY3RvcmlhICAgICAgICAgMTEyLjExICCAaCY5VWQ3QO4bZkYxMTAuODEqIFZpY3RvcmlhICAgICAgICAgVmljdG9yaWEgICAgICAgICAxMTAuODEqIBBn0FxbTjdA7GxmRjEwOS41MSogVmljdG9yaWEgICAgICAgICBWaWN0b3JpYSAgICAgICAgIDEwOS41MSogYI037+4RN0BcoGdGMTA2LjkwKiBWaWN0b3JpYSAgICAgICAgIFZpY3RvcmlhICAgICAgICAgMTA2LjkwKiCI4eDcgNQ2QEwLaUYxMDQuMzAgIFZpY3RvcmlhICAgICAgICAgVmljdG9yaWEgICAgICAgICAxMDQuMzAgIOAcTHwELzZAPqdrRjEwMC4yMSAgVmljdG9yaWEgICAgICAgICBWaWN0b3JpYSAgICAgICAgIDEwMC4yMSAgAD0dwlxNNUBmOW5GOTQuNjEgICBWaWN0b3JpYSAgICAgICAgIFZpY3RvcmlhICAgICAgICAgOTQuNjEgICBgZMgi/XYzQLRGc0Y4Mi45MiAgIFZpY3RvcmlhICAgICAgICAgVmljdG9yaWEgICAgICAgICA4Mi45MiAgIIh2TG/b3DJAS3d2Rjc2Ljk5ICAgVmljdG9yaWEgICAgICAgICBWaWN0b3JpYSAgICAgICAgIDc2Ljk5ICAgwINvSjGbMkDed3lGNzIuNjEgICBWaWN0b3JpYSAgICAgICAgIFZpY3RvcmlhICAgICAgICAgNzIuNjEgICBQPjCv4S4yQHqufUY2Ni45NSAgIFZpY3RvcmlhICAgICAgICAgVmljdG9yaWEgICAgICAgICA2Ni45NSAgIACeslSfPDBAR/aARjYwLjU4ICAgVmljdG9yaWEgICAgICAgICBWaWN0b3JpYSAgICAgICAgIDYwLjU4ICAggD3d8Nh8LUAQ+4FGNTUuOTEgICBWaWN0b3JpYSAgICAgICAgIFZpY3RvcmlhICAgICAgICAgNTUuOTEgICBAOfroM7srQNeygkY0Ny40NyAgIFZpY3RvcmlhICAgICAgICAgVmljdG9yaWEgICAgICAgICA0Ny40NyAgIEA5+ugzuytARyK2RjM5LjE0ICAgVmljdG9yaWEgICAgICAgICBWaWN0b3JpYWIgICAgICAgIDM5LjE0ICAgAOqdD6M0K0BLhbZGMzQuNzM1KiBWaWN0b3JpYSAgICAgICAgIFZpY3RvcmlhYiAgICAgICAgMzQuNzM1KiCAh5D9XaMqQGPRtkYzMC4zMyAgIFZpY3RvcmlhICAgICAgICAgVmljdG9yaWFiICAgICAgICAzMC4zMyAgIADPVXMnwSlAnui2RjIyLjA0ICAgVmljdG9yaWEgICAgICAgICBWaWN0b3JpYWIgICAgICAgIDIyLjA0ICAgAGjUDIAVKUCl+7ZGMTUuOTkgICBWaWN0b3JpYSAgICAgICAgIFZpY3RvcmlhYiAgICAgICAgMTUuOTkgICAgIHcqpY0oQLkIt0YxMC40NyAgIFZpY3RvcmlhICAgICAgICAgVmljdG9yaWFiICAgICAgICAxMC40NyAgIACqZ59GEyhAgL23RjAuMDAgICAgVmljdG9yaWEgICAgICAgICBWaWN0b3JpYWIgICAgICAgIDAuMDAgICAgAABAqSnvEUCnzqpINTcuMzEgICBHdWF6dSAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgNTcuMzEgICAAwFXti4oOQN30q0g1MC4zOCAgIEd1YXp1ICAgICAgICAgICAgMSAgICAgICAgICAgICAgICA1MC4zOCAgIAAA0Wsyzg1AxCusSDQ5LjQ5NSogR3VhenUgICAgICAgICAgICAxICAgICAgICAgICAgICAgIDQ5LjQ5NSogAIAOdrg0DUAHXaxINDguNjEqICBHdWF6dSAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgNDguNjEqICAAqmefRhMoQPFi3EY4NS4xMCAgIEliaWN1eSAgICAgICAgICAgSWJpY3V5ICAgICAgICAgICA4NS4xMCAgIIBwJVON3ydAGAbeRjgyLjI4NiogSWJpY3V5ICAgICAgICAgICBJYmljdXkgICAgICAgICAgIDgyLjI4NiogoAkiqfSaJ0An2N5GODAuNDExKiBJYmljdXkgICAgICAgICAgIEliaWN1eSAgICAgICAgICAgODAuNDExKiDAkVi5gpgmQMu/30Y3OC41MzUqIEliaWN1eSAgICAgICAgICAgSWJpY3V5ICAgICAgICAgICA3OC41MzUqIKCVNAylciZAsnTfRjc2LjY1OSogSWJpY3V5ICAgICAgICAgICBJYmljdXkgICAgICAgICAgIDc2LjY1OSogYKV4v203JkB3ON9GNzUuNzIxKiBJYmljdXkgICAgICAgICAgIEliaWN1eSAgICAgICAgICAgNzUuNzIxKiCAknIk1f0lQPPm3kY3NC43ODQqIEliaWN1eSAgICAgICAgICAgSWJpY3V5ICAgICAgICAgICA3NC43ODQqIADZ7FRDAyVA6SfeRjcyLjkwOCogSWJpY3V5ICAgICAgICAgICBJYmljdXkgICAgICAgICAgIDcyLjkwOCoggItSRIGfJEApsN1GNzEuOTcgICBJYmljdXkgICAgICAgICAgIEliaWN1eSAgICAgICAgICAgNzEuOTcgICAs/C0D7mMkQHPL3EY2OS45NTAqIEliaWN1eSAgICAgICAgICAgSWJpY3V5ICAgICAgICAgICA2OS45NTAqIOCqeMgnQSRAbGvcRjY3LjkzMCogSWJpY3V5ICAgICAgICAgICBJYmljdXkgICAgICAgICAgIDY3LjkzMCogAI7DKU7RIUDxlt1GNTguOTgzKiBJYmljdXkgICAgICAgICAgIEliaWN1eSAgICAgICAgICAgNTguOTgzKiAA/b5idnkgQNaa3kY1My44OTUqIEliaWN1eSAgICAgICAgICAgSWJpY3V5ICAgICAgICAgICA1My44OTUqIAD0/Pau0h9AAOLfRjQ3LjM5NSogSWJpY3V5ICAgICAgICAgICBJYmljdXkgICAgICAgICAgIDQ3LjM5NSogAORpzAyIH0DRPOBGNDUuNzcgICBJYmljdXkgICAgICAgICAgIEliaWN1eSAgICAgICAgICAgNDUuNzcgICAAYMaSo4gdQKwL4UY0MS4zMzMqIEliaWN1eSAgICAgICAgICAgSWJpY3V5ICAgICAgICAgICA0MS4zMzMqIABQxqePCRlAZtLiRjM1LjEyICAgSWJpY3V5ICAgICAgICAgICBJYmljdXkgICAgICAgICAgIDM1LjEyICAgAJh0+sFLFkBU8ORGMzAuNzExKiBJYmljdXkgICAgICAgICAgIEliaWN1eSAgICAgICAgICAgMzAuNzExKiAAgNP9BxwUQFaj50YyNi4zMDMqIEliaWN1eSAgICAgICAgICAgSWJpY3V5ICAgICAgICAgICAyNi4zMDMqIAAAqOxQGhBAecbrRjIxLjg5NCogSWJpY3V5ICAgICAgICAgICBJYmljdXkgICAgICAgICAgIDIxLjg5NCogAACo0i+1DUBpSe5GMTkuNjkgICBJYmljdXkgICAgICAgICAgIEliaWN1eSAgICAgICAgICAgMTkuNjkgICAAwL4hkqINQK7r8EYxNy4wMjUqIEliaWN1eSAgICAgICAgICAgSWJpY3V5ICAgICAgICAgICAxNy4wMjUqIAAALfmakw1APR3zRjE0LjM2ICAgSWJpY3V5ICAgICAgICAgICBJYmljdXkgICAgICAgICAgIDE0LjM2ICAgAAA/tVJRDUClJ/tGNy4xNiAgICBJYmljdXkgICAgICAgICAgIEliaWN1eSAgICAgICAgICAgNy4xNiAgICAAgP2FzxYNQFjxA0cwLjAwICAgIEliaWN1eSAgICAgICAgICAgSWJpY3V5ICAgICAgICAgICAwLjAwICAgIACAWoC4NA1AOKwlSDI0LjA0ICAgVGFsYXZlcmEgICAgICAgICAxICAgICAgICAgICAgICAgIDI0LjA0ICAgAACwAFiPDEBu8CVIMjEuMjkwKiBUYWxhdmVyYSAgICAgICAgIDEgICAgICAgICAgICAgICAgMjEuMjkwKiAA4AKyzNYLQP4bJkgxOS41NSAgIFRhbGF2ZXJhICAgICAgICAgMSAgICAgICAgICAgICAgICAxOS41NSAgIABAAEh5rAtAKTQmSDE4LjU3NSogVGFsYXZlcmEgICAgICAgICAxICAgICAgICAgICAgICAgIDE4LjU3NSogAIC6xbqQC0B9TyZIMTcuNjAwKiBUYWxhdmVyYSAgICAgICAgIDEgICAgICAgICAgICAgICAgMTcuNjAwKiAAAP7aSH8LQAlvJkgxNi42MjUqIFRhbGF2ZXJhICAgICAgICAgMSAgICAgICAgICAgICAgICAxNi42MjUqIACArQpQNAtAqI8mSDE1LjY1ICAgVGFsYXZlcmEgICAgICAgICAxICAgICAgICAgICAgICAgIDE1LjY1ICAgAAAYh9OXCUC31CZIMTIuOTQzKiBUYWxhdmVyYSAgICAgICAgIDEgICAgICAgICAgICAgICAgMTIuOTQzKiAAgEGq7dUJQNroJkgxMi4wNDEqIFRhbGF2ZXJhICAgICAgICAgMSAgICAgICAgICAgICAgICAxMi4wNDEqIACgOwaplglAdvUmSDExLjU5ICAgVGFsYXZlcmEgICAgICAgICAxICAgICAgICAgICAgICAgIDExLjU5ICAgAADp7FBpB0BGNCdIOC45NDAqICBUYWxhdmVyYSAgICAgICAgIDEgICAgICAgICAgICAgICAgOC45NDAqICAAgFZRe5gHQIxkJ0g3LjE3MyogIFRhbGF2ZXJhICAgICAgICAgMSAgICAgICAgICAgICAgICA3LjE3MyogIADAL7D27AZA1oInSDYuMjkgICAgVGFsYXZlcmEgICAgICAgICAxICAgICAgICAgICAgICAgIDYuMjkgICAgAODTpfbsBkBCeiVIMS4wMCAgICBUYWxhdmVyYSAgICAgICAgIDIgICAgICAgICAgICAgICAgMS4wMCAgICAAMH/8sbcGQFWGJUgwLjAwICAgIFRhbGF2ZXJhICAgICAgICAgMiAgICAgICAgICAgICAgICAwLjAwICAgIACAeI64NA1AN/gnSDQ3LjcyNSogR3VhenUgICAgICAgICAgICAyICAgICAgICAgICAgICAgIDQ3LjcyNSogAID9hc8WDUBMPShINDYuODQgICBHdWF6dSAgICAgICAgICAgIDIgICAgICAgICAgICAgICAgNDYuODQgICAAgL2FzxYNQKI5SUgxMCAgICAgIEd1YXp1ICAgICAgICAgICAgMyAgICAgICAgICAgICAgICAxMCAgICAgIAAA5Xm2jQxAHKVJSDkgICAgICAgR3VhenUgICAgICAgICAgICAzICAgICAgICAgICAgICAgIDkgICAgICAgAAAs0n4OC0D7A0pIOCAgICAgICBHdWF6dSAgICAgICAgICAgIDMgICAgICAgICAgICAgICAgOCAgICAgICAAgCjd2eMKQPRpSkg3ICAgICAgIEd1YXp1ICAgICAgICAgICAgMyAgICAgICAgICAgICAgICA3ICAgICAgIADgdsiAHglAWNZKSDYgICAgICAgR3VhenUgICAgICAgICAgICAzICAgICAgICAgICAgICAgIDYgICAgICAgAAD12BlgCECiL0tINSAgICAgICBHdWF6dSAgICAgICAgICAgIDMgICAgICAgICAgICAgICAgNSAgICAgICAAAFBnOMcHQD2PS0g0ICAgICAgIEd1YXp1ICAgICAgICAgICAgMyAgICAgICAgICAgICAgICA0ICAgICAgIADgxV/vCQdAufFLSDMgICAgICAgR3VhenUgICAgICAgICAgICAzICAgICAgICAgICAgICAgIDMgICAgICAgANB/FRzuBkB+W0xIMiAgICAgICBHdWF6dSAgICAgICAgICAgIDMgICAgICAgICAgICAgICAgMiAgICAgICAAMH/8sbcGQGXNTEgxICAgICAgIEd1YXp1ICAgICAgICAgICAgMyAgICAgICAgICAgICAgICAxICAgICAgIAAwf/yxtwZA3im5SDQgICAgICAgR3VhenUgICAgICAgICAgICA0ICAgICAgICAgICAgICAgIDQgICAgICAgAODRvSrcBkA6QblIMyAgICAgICBHdWF6dSAgICAgICAgICAgIDQgICAgICAgICAgICAgICAgMyAgICAgICAAYCbx7/0GQCJguUgyICAgICAgIEd1YXp1ICAgICAgICAgICAgNCAgICAgICAgICAgICAgICAyICAgICAgIAAA+Y7+bhlAQU/CRTQ5ICAgICAgUmlvQmFyYWRlcm8gICAgICBSaW9CYXJhZGVybyAgICAgIDQ5ICAgICAgANiwHRGJE0B5DM5FMjkuMDkyKiBSaW9CYXJhZGVybyAgICAgIFJpb0JhcmFkZXJvICAgICAgMjkuMDkyKiAAoGHvrXkSQKXX0EUyNS4xMSAgIFJpb0JhcmFkZXJvICAgICAgUmlvQmFyYWRlcm8gICAgICAyNS4xMSAgIABg97WNvhFANkLSRTIzICAgICAgUmlvQmFyYWRlcm8gICAgICBSaW9CYXJhZGVybyAgICAgIDIzICAgICAgAMAg/UmaBEBEp99FMCAgICAgICBSaW9CYXJhZGVybyAgICAgIFJpb0JhcmFkZXJvICAgICAgMCAgICAgICAAAFFwuDQNQOlZMUY2LjUwICAgIFphbmphTWVyY2FkYWwgICAgWmFuamFNZXJjYWRhbCAgICA2LjUwICAgIACAFDn+cQlAz4s1RjIuMDMgICAgWmFuamFNZXJjYWRhbCAgICBaYW5qYU1lcmNhZGFsICAgIDIuMDMgICAgAMCYqg1zCEA9YzdGMC4wMCAgICBaYW5qYU1lcmNhZGFsICAgIFphbmphTWVyY2FkYWwgICAgMC4wMCAgICAAACGj9uwGQA4lAkUxOC45MCAgIENhbmFsSXJpZ295ZW4gICAgQ2FuYWxJcmlnb3llbiAgICAxOC45MCAgIAAA89Ij0QVAGMoERTE2LjAwICAgQ2FuYWxJcmlnb3llbiAgICBDYW5hbElyaWdveWVuICAgIDE2LjAwICAgACAmTfM7BUAn2AZFMTQuMDAwKiBDYW5hbElyaWdveWVuICAgIENhbmFsSXJpZ295ZW4gICAgMTQuMDAwKiAAwFXtx2kEQKN5CUUxMi4wMCAgIENhbmFsSXJpZ295ZW4gICAgQ2FuYWxJcmlnb3llbiAgICAxMi4wMCAgIAAAg5o4XwNAzooMRTEwLjAwMCogQ2FuYWxJcmlnb3llbiAgICBDYW5hbElyaWdveWVuICAgIDEwLjAwMCogAIApOasfAkCkyw9FOC4wMCAgICBDYW5hbElyaWdveWVuICAgIENhbmFsSXJpZ295ZW4gICAgOC4wMCAgICAAAPTXYFD+PyRWFkUzLjc1ICAgIENhbmFsSXJpZ295ZW4gICAgQ2FuYWxJcmlnb3llbiAgICAzLjc1ICAgIADAGqhpOvw/xEoaRTAuOTM3NSogQ2FuYWxJcmlnb3llbiAgICBDYW5hbElyaWdveWVuICAgIDAuOTM3NSogAKAq24IY/D8AmxtFMC4wMCAgICBDYW5hbElyaWdveWVuICAgIENhbmFsSXJpZ295ZW4gICAgMC4wMCAgICAAoLvv7/0GQPCrckU0OS4zMCAgIENhcmFiZWxhc0dyYW5kZSAgMSAgICAgICAgICAgICAgICA0OS4zMCAgIADAr3HGDAZAYpB3RTQ1LjMwICAgQ2FyYWJlbGFzR3JhbmRlICAxICAgICAgICAgICAgICAgIDQ1LjMwICAgAABcRk5tBED0YHtFNDEuMzAgICBDYXJhYmVsYXNHcmFuZGUgIDEgICAgICAgICAgICAgICAgNDEuMzAgICAAwINmrM4DQEBPfUUzOS4wMDAqIENhcmFiZWxhc0dyYW5kZSAgMSAgICAgICAgICAgICAgICAzOS4wMDAqIAAA5eDAbwNAmMh+RTM3LjMwICAgQ2FyYWJlbGFzR3JhbmRlICAxICAgICAgICAgICAgICAgIDM3LjMwICAgAIAULQ/UAkBQQIFFMzMuMzAgICBDYXJhYmVsYXNHcmFuZGUgIDEgICAgICAgICAgICAgICAgMzMuMzAgICAAAGBGiIICQG+XgkUzMC42MzMqIENhcmFiZWxhc0dyYW5kZSAgMSAgICAgICAgICAgICAgICAzMC42MzMqIAAA/jeR6gFAtPGDRTI3Ljk2NyogQ2FyYWJlbGFzR3JhbmRlICAxICAgICAgICAgICAgICAgIDI3Ljk2NyogAAADffxF/z+vVYVFMjUuMzAgICBDYXJhYmVsYXNHcmFuZGUgIDEgICAgICAgICAgICAgICAgMjUuMzAgICAAAIRPAd73P6lch0UyMS4zMCAgIENhcmFiZWxhc0dyYW5kZSAgMSAgICAgICAgICAgICAgICAyMS4zMCAgIACAJEsB3vc/7YSERTE3LjMwICAgQ2FyYWJlbGFzR3JhbmRlICAyICAgICAgICAgICAgICAgIDE3LjMwICAgAACUjox69D8LaoZFMTMuMzAgICBDYXJhYmVsYXNHcmFuZGUgIDIgICAgICAgICAgICAgICAgMTMuMzAgICAAAMaSjHr0P6CxCEU5LjMwICAgIENhcmFiZWxhc0dyYW5kZSAgMyAgICAgICAgICAgICAgICA5LjMwICAgIACASsaxh/M/XCILRTYuMDAgICAgQ2FyYWJlbGFzR3JhbmRlICAzICAgICAgICAgICAgICAgIDYuMDAgICAgAIDZg9r08j+NxA5FMS44NSAgICBDYXJhYmVsYXNHcmFuZGUgIDMgICAgICAgICAgICAgICAgMS44NSAgICAAAJlkQsHyP2uIEEUwLjAgICAgIENhcmFiZWxhc0dyYW5kZSAgMyAgICAgICAgICAgICAgICAwLjAgICAgIACAcEYB3vc/3u61QjkuMjggICAgTGF1cmVudGlub0NvbWFzICBMYXVyZW50aW5vQ29tYXMgIDkuMjggICAgAAA7FTbH9z/CW8NCNy45NiAgICBMYXVyZW50aW5vQ29tYXMgIExhdXJlbnRpbm9Db21hcyAgNy45NiAgICAAgI/e2VT3P92J6EIzLjk1ICAgIExhdXJlbnRpbm9Db21hcyAgTGF1cmVudGlub0NvbWFzICAzLjk1ICAgIAAAMXIQC/c/UJIMQzAuMDAgICAgTGF1cmVudGlub0NvbWFzICBMYXVyZW50aW5vQ29tYXMgIDAuMDAgICAgAMBMoCnvEUAJDcdHMTM4MTUzLjdQYWxtYXMgICAgICAgICAgIDEgICAgICAgICAgICAgICAgMTM4MTUzLjcAIOS2E18RQGRgx0cxMzY3NTguMVBhbG1hcyAgICAgICAgICAgMSAgICAgICAgICAgICAgICAxMzY3NTguMQAAXSQfDRFAg6jHRzEzNTYxOC44UGFsbWFzICAgICAgICAgICAxICAgICAgICAgICAgICAgIDEzNTYxOC44AEBU4mmoEEBkAMhHMTM0MzY0LjhQYWxtYXMgICAgICAgICAgIDEgICAgICAgICAgICAgICAgMTM0MzY0LjgAAMCGWlsQQLw5yEcxMzMyNjguNVBhbG1hcyAgICAgICAgICAgMSAgICAgICAgICAgICAgICAxMzMyNjguNQCgchhHIxBAX3HIRzEzMjA1OC44UGFsbWFzICAgICAgICAgICAxICAgICAgICAgICAgICAgIDEzMjA1OC44AICU6nTdD0CkuchHMTMwODkxLjJQYWxtYXMgICAgICAgICAgIDEgICAgICAgICAgICAgICAgMTMwODkxLjIAQA52iFEPQGH7yEcxMjk3ODUuNlBhbG1hcyAgICAgICAgICAgMSAgICAgICAgICAgICAgICAxMjk3ODUuNgDAb96mtg5AtTbJRzEyODU4MS4yUGFsbWFzICAgICAgICAgICAxICAgICAgICAgICAgICAgIDEyODU4MS4yAMA+wiFnDkCjdclHMTI3NDM0LjFQYWxtYXMgICAgICAgICAgIDEgICAgICAgICAgICAgICAgMTI3NDM0LjEAABfhTlcNQJbOyUcxMjYzNTEuM1BhbG1hcyAgICAgICAgICAgMSAgICAgICAgICAgICAgICAxMjYzNTEuMwCAj38ZZwtAdTjKRzEyNTMwMS4zUGFsbWFzICAgICAgICAgICAxICAgICAgICAgICAgICAgIDEyNTMwMS4zAIActoE5CkDPhspHMTI0MTM0LjZQYWxtYXMgICAgICAgICAgIDEgICAgICAgICAgICAgICAgMTI0MTM0LjYAgCRFdc0JQJe2ykcxMjI5MjkuM1BhbG1hcyAgICAgICAgICAgMSAgICAgICAgICAgICAgICAxMjI5MjkuMwDAlpSNNglAiP/KRzEyMTc0OCAgUGFsbWFzICAgICAgICAgICAxICAgICAgICAgICAgICAgIDEyMTc0OCAgAMCYqg1zCEBOTctHMTIwNTk3LjlQYWxtYXMgICAgICAgICAgIDEgICAgICAgICAgICAgICAgMTIwNTk3LjkAwFiqDXMIQLY54kcxMTgyMDguOFBhbG1hcyAgICAgICAgICAgMiAgICAgICAgICAgICAgICAxMTgyMDguOADAb/kNoAhAQnniRzExNjk0NC42UGFsbWFzICAgICAgICAgICAyICAgICAgICAgICAgICAgIDExNjk0NC42AACpYwvZB0B+yeJHMTE1NjQ0ICBQYWxtYXMgICAgICAgICAgIDIgICAgICAgICAgICAgICAgMTE1NjQ0ICAAAC6qhXMHQE8G40cxMTQ0OTYuMlBhbG1hcyAgICAgICAgICAgMiAgICAgICAgICAgICAgICAxMTQ0OTYuMgCAx6CwRgdArTzjRzExMzI2MC42UGFsbWFzICAgICAgICAgICAyICAgICAgICAgICAgICAgIDExMzI2MC42AADtAE0aB0CvfONHMTEyMDk0LjJQYWxtYXMgICAgICAgICAgIDIgICAgICAgICAgICAgICAgMTEyMDk0LjIAABtobVIGQDe140cxMTA4OTcuN1BhbG1hcyAgICAgICAgICAgMiAgICAgICAgICAgICAgICAxMTA4OTcuNwCAD/GAPQZAjNbjRzEwOTkxMi42UGFsbWFzICAgICAgICAgICAyICAgICAgICAgICAgICAgIDEwOTkxMi42AACKs9gCBkCR/+NHMTA4Njg5LjJQYWxtYXMgICAgICAgICAgIDIgICAgICAgICAgICAgICAgMTA4Njg5LjIAAL0b2qkFQHIo5EcxMDc0NzUuNFBhbG1hcyAgICAgICAgICAgMiAgICAgICAgICAgICAgICAxMDc0NzUuNAAAhdlAiwVAA0nkRzEwNjUzNi4xUGFsbWFzICAgICAgICAgICAyICAgICAgICAgICAgICAgIDEwNjUzNi4xAEDfZEtyBUD0feRHMTA1MzM4LjVQYWxtYXMgICAgICAgICAgIDIgICAgICAgICAgICAgICAgMTA1MzM4LjUAYJOYx7IEQOq05EcxMDQxNjYuOVBhbG1hcyAgICAgICAgICAgMiAgICAgICAgICAgICAgICAxMDQxNjYuOQAArzLJlwRAFuLkRzEwMjk2NC40UGFsbWFzICAgICAgICAgICAyICAgICAgICAgICAgICAgIDEwMjk2NC40AMCg/UmaBECQCOVHMTAxODY0LjRQYWxtYXMgICAgICAgICAgIDIgICAgICAgICAgICAgICAgMTAxODY0LjQAwKD9SZoEQAQD80cxMDA2ODUgIFBhbG1hcyAgICAgICAgICAgMyAgICAgICAgICAgICAgICAxMDA2ODUgIADALSHFhQRATjXzRzk5NDYyLjE5UGFsbWFzICAgICAgICAgICAzICAgICAgICAgICAgICAgIDk5NDYyLjE5AIAjV8w2BEAEYfNHOTgyMzcuNTVQYWxtYXMgICAgICAgICAgIDMgICAgICAgICAgICAgICAgOTgyMzcuNTUAQHa/EOQDQPqR80c5NzAxOC42OFBhbG1hcyAgICAgICAgICAgMyAgICAgICAgICAgICAgICA5NzAxOC42OAAAXpd2nwNAO7rzRzk1OTIxLjM2UGFsbWFzICAgICAgICAgICAzICAgICAgICAgICAgICAgIDk1OTIxLjM2AAAW5FxNA0Au5/NHOTQ2NTQuNDdQYWxtYXMgICAgICAgICAgIDMgICAgICAgICAgICAgICAgOTQ2NTQuNDcAQFCJcUwDQCIS9Ec5MzQzMi4wOVBhbG1hcyAgICAgICAgICAgMyAgICAgICAgICAgICAgICA5MzQzMi4wOQCACbic+QJA+T/0RzkyMjI4LjI0UGFsbWFzICAgICAgICAgICAzICAgICAgICAgICAgICAgIDkyMjI4LjI0AICM/DDVAkCJbvRHOTEwMjMuMzhQYWxtYXMgICAgICAgICAgIDMgICAgICAgICAgICAgICAgOTEwMjMuMzgAQEp1uIMCQM6a9Ec4OTgwMC45NFBhbG1hcyAgICAgICAgICAgMyAgICAgICAgICAgICAgICA4OTgwMC45NADAEh9xNgJAobr0Rzg4ODMyLjM4UGFsbWFzICAgICAgICAgICAzICAgICAgICAgICAgICAgIDg4ODMyLjM4AEBe1jp1AkDP2PRHODc4NTcuNDhQYWxtYXMgICAgICAgICAgIDMgICAgICAgICAgICAgICAgODc4NTcuNDgAAEv6KJkCQNIV9Uc4NjkyMS42NVBhbG1hcyAgICAgICAgICAgMyAgICAgICAgICAgICAgICA4NjkyMS42NQCA/H1/NQJACl71Rzg1ODM1Ljc4UGFsbWFzICAgICAgICAgICAzICAgICAgICAgICAgICAgIDg1ODM1Ljc4AICtcQQBAkBGePVHODUwODYuMiBQYWxtYXMgICAgICAgICAgIDMgICAgICAgICAgICAgICAgODUwODYuMiAAQE421qgBQFqT9Uc4NDI5Ni40IFBhbG1hcyAgICAgICAgICAgMyAgICAgICAgICAgICAgICA4NDI5Ni40IACAuksyOQFAMr31RzgzMDM5LjUxUGFsbWFzICAgICAgICAgICAzICAgICAgICAgICAgICAgIDgzMDM5LjUxAICelVXmAECV6PVHODE4NDAuNTNQYWxtYXMgICAgICAgICAgIDMgICAgICAgICAgICAgICAgODE4NDAuNTMAQP/7peMAQGAR9kc4MDc3MC42MVBhbG1hcyAgICAgICAgICAgMyAgICAgICAgICAgICAgICA4MDc3MC42MQAAm3EfywBAvzH2Rzc5Nzk0LjIzUGFsbWFzICAgICAgICAgICAzICAgICAgICAgICAgICAgIDc5Nzk0LjIzAAD2IM85AEANUvZHNzg2NzIuMyBQYWxtYXMgICAgICAgICAgIDMgICAgICAgICAgICAgICAgNzg2NzIuMyAAwLL1iEEAQK5t9kc3NzY4NC42NlBhbG1hcyAgICAgICAgICAgMyAgICAgICAgICAgICAgICA3NzY4NC42NgAA8BBa+v8/0ZL2Rzc2NTMyLjY2UGFsbWFzICAgICAgICAgICAzICAgICAgICAgICAgICAgIDc2NTMyLjY2AIAI/hqM/z95sPZHNzU3MDEuMTVQYWxtYXMgICAgICAgICAgIDMgICAgICAgICAgICAgICAgNzU3MDEuMTUAAANr2fz/P/TM9kc3NDkzMy4wOVBhbG1hcyAgICAgICAgICAgMyAgICAgICAgICAgICAgICA3NDkzMy4wOQCAfBV2U/8/OOv2Rzc0MjAyLjc1UGFsbWFzICAgICAgICAgICAzICAgICAgICAgICAgICAgIDc0MjAyLjc1AIDmi5zd/j+mB/dHNzM0NTAuMDFQYWxtYXMgICAgICAgICAgIDMgICAgICAgICAgICAgICAgNzM0NTAuMDEAgGp/co7+P28a90c3MjgwOS4zIFBhbG1hcyAgICAgICAgICAgMyAgICAgICAgICAgICAgICA3MjgwOS4zIAAAvxxqEP4/ojL3RzcxOTg4LjQ0UGFsbWFzICAgICAgICAgICAzICAgICAgICAgICAgICAgIDcxOTg4LjQ0AABWiby1/T91WvdHNzA3ODcuOThQYWxtYXMgICAgICAgICAgIDMgICAgICAgICAgICAgICAgNzA3ODcuOTgAgLZPKXj8P96B90c2OTU5Ni4yMlBhbG1hcyAgICAgICAgICAgMyAgICAgICAgICAgICAgICA2OTU5Ni4yMgCgKtuCGPw/9aj3RzY4NDE4LjQ1UGFsbWFzICAgICAgICAgICAzICAgICAgICAgICAgICAgIDY4NDE4LjQ1AKAq24IY/D/NhfxHNjY3NjguNjNQYWxtYXMgICAgICAgICAgIDQgICAgICAgICAgICAgICAgNjY3NjguNjMAYDaRzO77P4Ox/Ec2NTM1Mi40MVBhbG1hcyAgICAgICAgICAgNCAgICAgICAgICAgICAgICA2NTM1Mi40MQAAvBzfsfs/1d38RzY0MTY5LjY1UGFsbWFzICAgICAgICAgICA0ICAgICAgICAgICAgICAgIDY0MTY5LjY1AAALzsDp+j8/E/1HNjI5MzcuODlQYWxtYXMgICAgICAgICAgIDQgICAgICAgICAgICAgICAgNjI5MzcuODkAAEflHsr6P8s4/Uc2MjE4OC4yMVBhbG1hcyAgICAgICAgICAgNCAgICAgICAgICAgICAgICA2MjE4OC4yMQAAkbWvEfs/PHj9RzYwODUzLjYyUGFsbWFzICAgICAgICAgICA0ICAgICAgICAgICAgICAgIDYwODUzLjYyAAAn9u8k+j9rtv1HNTkyOTYuNzdQYWxtYXMgICAgICAgICAgIDQgICAgICAgICAgICAgICAgNTkyOTYuNzcAAAiDBqb5P7nZ/Uc1ODI3Mi4xM1BhbG1hcyAgICAgICAgICAgNCAgICAgICAgICAgICAgICA1ODI3Mi4xMwDADHlzf/k/Q//9RzU3MTEzLjQxUGFsbWFzICAgICAgICAgICA0ICAgICAgICAgICAgICAgIDU3MTEzLjQxAIBqh86f+D+aH/5HNTYxMTYuODhQYWxtYXMgICAgICAgICAgIDQgICAgICAgICAgICAgICAgNTYxMTYuODgAwLhTlq74P+JB/kc1NTExMS45MVBhbG1hcyAgICAgICAgICAgNCAgICAgICAgICAgICAgICA1NTExMS45MQCA3KnLh/g/92f+RzU0MTE5LjU1UGFsbWFzICAgICAgICAgICA0ICAgICAgICAgICAgICAgIDU0MTE5LjU1AIC9x8379z+fjf5HNTMwOTUuMjVQYWxtYXMgICAgICAgICAgIDQgICAgICAgICAgICAgICAgNTMwOTUuMjUA4Mfu5RH4P02w/kc1MjA4OS42N1BhbG1hcyAgICAgICAgICAgNCAgICAgICAgICAgICAgICA1MjA4OS42NwCAftvDzfc/tt/+RzUwODYwLjQzUGFsbWFzICAgICAgICAgICA0ICAgICAgICAgICAgICAgIDUwODYwLjQzAAD6mPAN+D8CCP9HNDk4NDIuMzJQYWxtYXMgICAgICAgICAgIDQgICAgICAgICAgICAgICAgNDk4NDIuMzIAgHOf45f3P9Mm/0c0OTAxOS4wNVBhbG1hcyAgICAgICAgICAgNCAgICAgICAgICAgICAgICA0OTAxOS4wNQAAWiHd8PY/Jk7/RzQ3OTk0LjYgUGFsbWFzICAgICAgICAgICA0ICAgICAgICAgICAgICAgIDQ3OTk0LjYgAACWbvag9j+ugP9HNDY3NjkuODhQYWxtYXMgICAgICAgICAgIDQgICAgICAgICAgICAgICAgNDY3NjkuODgAADFyEAv3P5me/0c0NjA0My41NFBhbG1hcyAgICAgICAgICAgNCAgICAgICAgICAgICAgICA0NjA0My41NAAAMXIQC/c/4uT/RzQ1MDMzLjA5UGFsbWFzICAgICAgICAgICA1ICAgICAgICAgICAgICAgIDQ1MDMzLjA5AADa1Z+Q9j8PCwBINDM4MTAuNzVQYWxtYXMgICAgICAgICAgIDUgICAgICAgICAgICAgICAgNDM4MTAuNzUAALAIUvT1P4MhAEg0MjYxMi44OFBhbG1hcyAgICAgICAgICAgNSAgICAgICAgICAgICAgICA0MjYxMi44OAAACdPnfvU/HEkASDQwNTY3LjE2UGFsbWFzICAgICAgICAgICA1ICAgICAgICAgICAgICAgIDQwNTY3LjE2AACLKibo9D92cwBIMzg1NDkuNzRQYWxtYXMgICAgICAgICAgIDUgICAgICAgICAgICAgICAgMzg1NDkuNzQAACNXp3P0P7ulAEgzNjQ2Mi41MVBhbG1hcyAgICAgICAgICAgNSAgICAgICAgICAgICAgICAzNjQ2Mi41MQCA1cwxEfQ/2OAASDM0NDI1LjcyUGFsbWFzICAgICAgICAgICA1ICAgICAgICAgICAgICAgIDM0NDI1LjcyAAAs0LAt8z/WFQFIMzI0MTAuODFQYWxtYXMgICAgICAgICAgIDUgICAgICAgICAgICAgICAgMzI0MTAuODEAAJlkQsHyPxQ7AUgzMDc3OS42NlBhbG1hcyAgICAgICAgICAgNSAgICAgICAgICAgICAgICAzMDc3OS42NgAAmWRCwfI/Nn0DSDI5NjA1LjQxUGFsbWFzICAgICAgICAgICA2ICAgICAgICAgICAgICAgIDI5NjA1LjQxAADeRgMs8j8/wQNIMjc2NTIuNDlQYWxtYXMgICAgICAgICAgIDYgICAgICAgICAgICAgICAgMjc2NTIuNDkAAN0OgpDxP9AGBEgyNTY2MS4xIFBhbG1hcyAgICAgICAgICAgNiAgICAgICAgICAgICAgICAyNTY2MS4xIAAAFmbn+vA/fDIESDI0NDY1LjQ1UGFsbWFzICAgICAgICAgICA2ICAgICAgICAgICAgICAgIDI0NDY1LjQ1AADChIx69D92IgRFMS4wMCAgICBDYW5hbFNlb2FuZSAgICAgIENhbmFsU2VvYW5lICAgICAgMS4wMCAgICAAQOH71qHzP9HWB0UwLjAwICAgIENhbmFsU2VvYW5lICAgICAgQ2FuYWxTZW9hbmUgICAgICAwLjAwICAgIAAACFzn+vA/Ke2IxDEyLjM4ICAgR2RvckRlTGFTZXJuYSAgICBHZG9yRGVMYVNlcm5hICAgIDEyLjM4ICAgAEA3oI1K8T9p64LEMTEgICAgICBHZG9yRGVMYVNlcm5hICAgIEdkb3JEZUxhU2VybmEgICAgMTEgICAgICAAAMDqBQryP9+udsQ5LjMgICAgIEdkb3JEZUxhU2VybmEgICAgR2RvckRlTGFTZXJuYSAgICA5LjMgICAgIAAApXBMF/M/fLJfxDYuOSAgICAgR2RvckRlTGFTZXJuYSAgICBHZG9yRGVMYVNlcm5hICAgIDYuOSAgICAgAEDh+9ah8z+oWkbENCAgICAgICBHZG9yRGVMYVNlcm5hICAgIEdkb3JEZUxhU2VybmEgICAgNCAgICAgICAAQOH71qHzP06ArEQxLjYzICAgIENhbmFsNCAgICAgICAgICAgQ2FuYWw0ICAgICAgICAgICAxLjYzICAgIAAADvXJcPM/8JqwRDAgICAgICAgQ2FuYWw0ICAgICAgICAgICBDYW5hbDQgICAgICAgICAgIDAgICAgICAgAMCB4e/9BkDLerdIMyAgICAgICBHdWF6dSAgICAgICAgICAgIDUgICAgICAgICAgICAgICAgMyAgICAgICAAALiroXAGQF3Rt0gyICAgICAgIEd1YXp1ICAgICAgICAgICAgNSAgICAgICAgICAgICAgICAyICAgICAgIAAAIIBxqgVAhyC4SDEgICAgICAgR3VhenUgICAgICAgICAgICA1ICAgICAgICAgICAgICAgIDEgICAgICAgAIBAjXGqBUChfyFIMzcxMDAgICBHdWF6dSAgICAgICAgICAgIDYgICAgICAgICAgICAgICAgMzcxMDAgICAAAKctTU0AQIgkIkgzNDk1MC4wKkd1YXp1ICAgICAgICAgICAgNiAgICAgICAgICAgICAgICAzNDk1MC4wKgBg886SvPs/6Y0iSDMyODAwLjAgR3VhenUgICAgICAgICAgICA2ICAgICAgICAgICAgICAgIDMyODAwLjAgAKAgNQB8+j87OiNIMzAyMDAuMCpHdWF6dSAgICAgICAgICAgIDYgICAgICAgICAgICAgICAgMzAyMDAuMCoAgP+5IKP4PwfuI0gyNzYwMCAgIEd1YXp1ICAgICAgICAgICAgNiAgICAgICAgICAgICAgICAyNzYwMCAgIAAAAou++vY/FLMkSDI0ODAwICAgR3VhenUgICAgICAgICAgICA2ICAgICAgICAgICAgICAgIDI0ODAwICAgAABb0q7Z9j/QciVIMjI3MDAuMCpHdWF6dSAgICAgICAgICAgIDYgICAgICAgICAgICAgICAgMjI3MDAuMCoAQP3RTmH2P1oYJkgyMDYwMCAgIEd1YXp1ICAgICAgICAgICAgNiAgICAgICAgICAgICAgICAyMDYwMCAgIAAAksVOYfY/Mg57RjMzLjk1ICAgTWluaSAgICAgICAgICAgICAxICAgICAgICAgICAgICAgIDMzLjk1ICAgAIAI2sSe9T8fDn1GMzEuNiAgICBNaW5pICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgMzEuNiAgICAAgEj3Q+n0P3jUf0YyNy42ICAgIE1pbmkgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAyNy42ICAgIAAADvXJcPM/v0CBRjIzLjcgICAgTWluaSAgICAgICAgICAgICAxICAgICAgICAgICAgICAgIDIzLjcgICAgAAAO9clw8z9vSoxGMTkuODUgICBNaW5pICAgICAgICAgICAgIDIgICAgICAgICAgICAgICAgMTkuODUgICAAwNDq+jryP65UjUYxOSAgICAgIE1pbmkgICAgICAgICAgICAgMiAgICAgICAgICAgICAgICAxOSAgICAgIACAIPL6OvI/rSKxwzguMDAgICAgR2RvckFyYW5hICAgICAgICBHZG9yQXJhbmEgICAgICAgIDguMDAgICAgAIC5WK2o8j/gupvDMy44MCAgICBHZG9yQXJhbmEgICAgICAgIEdkb3JBcmFuYSAgICAgICAgMy44MCAgICAAgJEfSv/yP5LwhMMwLjAwICAgIEdkb3JBcmFuYSAgICAgICAgR2RvckFyYW5hICAgICAgICAwLjAwICAgIACAKcJOYfY/d2cWSDE4MjAwLjEgR3VhenUgICAgICAgICAgICA3ICAgICAgICAgICAgICAgIDE4MjAwLjEgAIC2QOS89T8JkhZIMTgyMDAgICBHdWF6dSAgICAgICAgICAgIDcgICAgICAgICAgICAgICAgMTgyMDAgICAAgI1t5/rwP/YjA0gyMzI5Ni41OFBhbG1hcyAgICAgICAgICAgOCAgICAgICAgICAgICAgICAyMzI5Ni41OAAAf4svN/A/33EDSDIxMzA3LjYyUGFsbWFzICAgICAgICAgICA4ICAgICAgICAgICAgICAgIDIxMzA3LjYyAACWjlVF7j+uzANIMTkxODcuNjlQYWxtYXMgICAgICAgICAgIDggICAgICAgICAgICAgICAgMTkxODcuNjkAAL3yKCTtP3MnBEgxNzM2MC4zIFBhbG1hcyAgICAgICAgICAgOCAgICAgICAgICAgICAgICAxNzM2MC4zIAAAetgoJO0/7yz+RzE1MTcwLjAxUGFsbWFzICAgICAgICAgICA5ICAgICAgICAgICAgICAgIDE1MTcwLjAxAAD8JyPI7D8ZaP5HMTQ3MTMuOCpQYWxtYXMgICAgICAgICAgIDkgICAgICAgICAgICAgICAgMTQ3MTMuOCoAAFQfsGDsP8Wm/kcxNDI1Ny43KlBhbG1hcyAgICAgICAgICAgOSAgICAgICAgICAgICAgICAxNDI1Ny43KgAAEaus6es/R+n+RzEzODAxLjYqUGFsbWFzICAgICAgICAgICA5ICAgICAgICAgICAgICAgIDEzODAxLjYqAABu+Cgk7T9sH6JFMTYuNTM1ICBTYW5BbnRvbmlvICAgICAgIDEgICAgICAgICAgICAgICAgMTYuNTM1ICAAAEXg1VLrP2A0p0UxMi44NjAgIFNhbkFudG9uaW8gICAgICAgMSAgICAgICAgICAgICAgICAxMi44NjAgIAAAHqBM9eg/BfSrRTkuMDM1ICAgU2FuQW50b25pbyAgICAgICAxICAgICAgICAgICAgICAgIDkuMDM1ICAgAACAocNh3z+P4K5FNi4yMDEgICBTYW5BbnRvbmlvICAgICAgIDEgICAgICAgICAgICAgICAgNi4yMDEgICAAAJ7Nw2HfPzKAnkM2LjYwMCAgIFNhcm1pZW50byAgICAgICAgU2FybWllbnRvICAgICAgICA2LjYwMCAgIACA1rtKi9E//SmvQzMuNzUwICAgU2FybWllbnRvICAgICAgICBTYXJtaWVudG8gICAgICAgIDMuNzUwICAgAACckx79sz+c7cdDMCAgICAgICBTYXJtaWVudG8gICAgICAgIFNhcm1pZW50byAgICAgICAgMCAgICAgICAAAPWqrOnrPwnx2EU0LjI3NSAgIFVyaW9uICAgICAgICAgICAgMSAgICAgICAgICAgICAgICA0LjI3NSAgIAAA9ox3KuU/6lTdRTEuMjc1ICAgVXJpb24gICAgICAgICAgICAxICAgICAgICAgICAgICAgIDEuMjc1ICAgAIDYlOX24j/UKd9FMCAgICAgICBVcmlvbiAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgMCAgICAgICAAAP6T5fbiP9GbqkU2LjM3NSAgIFVyaW9uICAgICAgICAgICAgMiAgICAgICAgICAgICAgICA2LjM3NSAgIAAAqTA97OE/G6arRTUuNDc1MSAgVXJpb24gICAgICAgICAgICAyICAgICAgICAgICAgICAgIDUuNDc1MSAgAIAIkqG34D/YEa1FMy45NzUgICBVcmlvbiAgICAgICAgICAgIDIgICAgICAgICAgICAgICAgMy45NzUgICAAAI5rDYnVP0VQr0UyLjAwMCAgIFVyaW9uICAgICAgICAgICAgMiAgICAgICAgICAgICAgICAyLjAwMCAgIACAWP6eS8w/Yx2xRTAuNjAwICAgVXJpb24gICAgICAgICAgICAyICAgICAgICAgICAgICAgIDAuNjAwICAgAAAPBXGYxz8IArJFMCAgICAgICBVcmlvbiAgICAgICAgICAgIDIgICAgICAgICAgICAgICAgMCAgICAgICAAwLpG5Lz1PwitEEcyNC44OSAgIEJhcmNhR3JhbmRlICAgICAgMSAgICAgICAgICAgICAgICAyNC44OSAgIACAjqSJC/U/UpcSRzIxLjc5ICAgQmFyY2FHcmFuZGUgICAgICAxICAgICAgICAgICAgICAgIDIxLjc5ICAgAAB5Go2g8z8wcRRHMTguNzQgICBCYXJjYUdyYW5kZSAgICAgIDEgICAgICAgICAgICAgICAgMTguNzQgICAAgJEfSv/yP9ekFUcxNi4xNSAgIEJhcmNhR3JhbmRlICAgICAgMSAgICAgICAgICAgICAgICAxNi4xNSAgIACAkR9K//I/9poURzEzLjAyICAgQmFyY2FHcmFuZGUgICAgICAyICAgICAgICAgICAgICAgIDEzLjAyICAgAADMdq3x6j/oshZHMCAgICAgICBCYXJjYUdyYW5kZSAgICAgIDIgICAgICAgICAgICAgICAgMCAgICAgICAAAMiDcaoFQG7BTkgyOS40ICAgIEJyYXZvICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAyOS40ICAgIAAAyfjZyQRA6ntPSDI1LjMgICAgQnJhdm8gICAgICAgICAgICAxICAgICAgICAgICAgICAgIDI1LjMgICAgALCj17AsBEBfAVBIMjIuNSAgICBCcmF2byAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgMjIuNSAgICAAgKzSsCwEQGaBSEgxNy4xICAgIEJyYXZvICAgICAgICAgICAgMiAgICAgICAgICAgICAgICAxNy4xICAgIADgdAN3jAJAWgFJSDEzLjMgICAgQnJhdm8gICAgICAgICAgICAyICAgICAgICAgICAgICAgIDEzLjMgICAgAMDJFm2Y+z8sc0lIOS42ICAgICBCcmF2byAgICAgICAgICAgIDIgICAgICAgICAgICAgICAgOS42ICAgICAAAERu5/rwP0UYCEUxMC4xMjUgIENhbmFsQXJpYXMgICAgICAgQ2FuYWxBcmlhcyAgICAgICAxMC4xMjUgIACAlFc/des/iIQLRTYuMzc1ICAgQ2FuYWxBcmlhcyAgICAgICBDYW5hbEFyaWFzICAgICAgIDYuMzc1ICAgAABpepPZ4j+Sgw5FMi4wMDAgICBDYW5hbEFyaWFzICAgICAgIENhbmFsQXJpYXMgICAgICAgMi4wMDAgICAAQG8OPsvhP4bPDkUxLjUwMCAgIENhbmFsQXJpYXMgICAgICAgQ2FuYWxBcmlhcyAgICAgICAxLjUwMCAgIAAAFLo4Dd0/D64PRTAgICAgICAgQ2FuYWxBcmlhcyAgICAgICBDYW5hbEFyaWFzICAgICAgIDAgICAgICAgAKjNVHWyCEDHkrBDMzAuNjY0ICBMdWphbiAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgMzAuNjY0ICAAACUHVYvyP4/DtkMyNC40MjEgIEx1amFuICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAyNC40MjEgIAAAIDNweeg/0bm5QzIyLjA1OCAgTHVqYW4gICAgICAgICAgICAxICAgICAgICAgICAgICAgIDIyLjA1OCAgAAC6BN2a3z8rY75DMTkuNTA4ICBMdWphbiAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgMTkuNTA4ICAAABS6OA3dP29qwEMxOC4wMTkxIEx1amFuICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAxOC4wMTkxIAAAFLo4Dd0/XLsnRTE4LjAxOSAgTHVqYW4gICAgICAgICAgICAyICAgICAgICAgICAgICAgIDE4LjAxOSAgAAABitcA2z/nSChFMTcuMzE5ICBMdWphbiAgICAgICAgICAgIDIgICAgICAgICAgICAgICAgMTcuMzE5ICAAgE5UfY7XP0lRKUUxNi4xMDYgIEx1amFuICAgICAgICAgICAgMiAgICAgICAgICAgICAgICAxNi4xMDYgIADAPzbHotQ/yFEqRTE0LjkzNiAgTHVqYW4gICAgICAgICAgICAyICAgICAgICAgICAgICAgIDE0LjkzNiAgAADaibt9zD8pui1FMTEuNzQ3ICBMdWphbiAgICAgICAgICAgIDIgICAgICAgICAgICAgICAgMTEuNzQ3ICAAwAQb3//IP/MQL0UxMC42NTQgIEx1amFuICAgICAgICAgICAgMiAgICAgICAgICAgICAgICAxMC42NTQgIAAA+738AMI/O/QxRTguNzY3ICAgTHVqYW4gICAgICAgICAgICAyICAgICAgICAgICAgICAgIDguNzY3ICAgAAC4cKU7uz+GwDRFNy4xODggICBMdWphbiAgICAgICAgICAgIDIgICAgICAgICAgICAgICAgNy4xODggICAAAHZ4Okq2P3IdN0U1LjgyOCAgIEx1amFuICAgICAgICAgICAgMiAgICAgICAgICAgICAgICA1LjgyOCAgIAAAnJMe/bM/SlQ5RTQuNzE2MSAgTHVqYW4gICAgICAgICAgICAyICAgICAgICAgICAgICAgIDQuNzE2MSAgAACckx79sz/9UVJFNC43MTYgICBMdWphbiAgICAgICAgICAgIDMgICAgICAgICAgICAgICAgNC43MTYgICAAAOIy/jGyP4I3VUUzLjcxMSAgIEx1amFuICAgICAgICAgICAgMyAgICAgICAgICAgICAgICAzLjcxMSAgIABAofR+t7E/XeBVRTMuNDk3ICAgTHVqYW4gICAgICAgICAgICAzICAgICAgICAgICAgICAgIDMuNDk3ICAgAADL+eA7sT9tklZFMy4yODAgICBMdWphbiAgICAgICAgICAgIDMgICAgICAgICAgICAgICAgMy4yODAgICAAALnPNZ2qP+I+XEUxLjU2NjEgIEx1amFuICAgICAgICAgICAgMyAgICAgICAgICAgICAgICAxLjU2NjEgIAAAZonDYd8/jPikRTYuMjYwICAgU2FuQW50b25pbyAgICAgICAyICAgICAgICAgICAgICAgIDYuMjYwICAgAACWfNoFzj/r1qhFMy4xNzAgICBTYW5BbnRvbmlvICAgICAgIDIgICAgICAgICAgICAgICAgMy4xNzAgICAAAA8FcZjHP8VuqkUyLjE5MSAgIFNhbkFudG9uaW8gICAgICAgMiAgICAgICAgICAgICAgICAyLjE5MSAgIAAADwVxmMc/ZjguRjIuMTkwICAgU2FuQW50b25pbyAgICAgICAzICAgICAgICAgICAgICAgIDIuMTkwICAgAAAvw4dfwD8Npi5GMS44NjEgICBTYW5BbnRvbmlvICAgICAgIDMgICAgICAgICAgICAgICAgMS44NjEgICAAAKjNh1/AP2xGj0UzLjc1MCAgIFZpbmN1bGFjaW9uICAgICAgVmluY3VsYWNpb24gICAgICAzLjc1MCAgIAAAsgvxKLo/Q76RRTIuNDAwICAgVmluY3VsYWNpb24gICAgICBWaW5jdWxhY2lvbiAgICAgIDIuNDAwICAgAKjcrDR7sT9Xo5RFMC43NSAgICBWaW5jdWxhY2lvbiAgICAgIFZpbmN1bGFjaW9uICAgICAgMC43NSAgICAAALnPNZ2qPxXslUUwICAgICAgIFZpbmN1bGFjaW9uICAgICAgVmluY3VsYWNpb24gICAgICAwICAgICAgIABAUQ1tmPs/5AEDSDEyLjggICAgU2F1Y2UgICAgICAgICAgICBEZXNlbWJvY2FkdXJhICAgIDEyLjggICAgAMCIg4x6+j/jeANIOC44ICAgICBTYXVjZSAgICAgICAgICAgIERlc2VtYm9jYWR1cmEgICAgOC44ICAgICAAMLjDB0/4P6ICBEg0LjggICAgIFNhdWNlICAgICAgICAgICAgRGVzZW1ib2NhZHVyYSAgICA0LjggICAgIAAAAMBJDPY/SlQFSDAgICAgICAgU2F1Y2UgICAgICAgICAgICBEZXNlbWJvY2FkdXJhICAgIDAgICAgICAgAIB1nodfwD+uBc5FMS44NjAgICBTYW5BbnRvbmlvICAgICAgIERlc2VtYm9jYWR1cmEgICAgMS44NjAgICAAAAAgYOWwPzHF0kUwICAgICAgIFNhbkFudG9uaW8gICAgICAgRGVzZW1ib2NhZHVyYSAgICAwICAgICAgIAAA87Gs6es/N1rxRzEyODg5LjQzUGFsbWFzICAgICAgICAgICBEZXNlbWJvY2FkdXJhICAgIDEyODg5LjQzAACotNQ56D+lD/NHMTA1MjYuNjRQYWxtYXMgICAgICAgICAgIERlc2VtYm9jYWR1cmEgICAgMTA1MjYuNjQAgIzWvATlP3yK9Ec4NTMxLjcxMlBhbG1hcyAgICAgICAgICAgRGVzZW1ib2NhZHVyYSAgICA4NTMxLjcxMgAAAMDz/dQ/Dqf1RzYyNDYuNzgzUGFsbWFzICAgICAgICAgICBEZXNlbWJvY2FkdXJhICAgIDYyNDYuNzgzAMB4//o68j84GZBGMTUuOTUgICBNaW5pICAgICAgICAgICAgIERlc2VtYm9jYWR1cmEgICAgMTUuOTUgICAAACRr+OfwP8+PkUYxMS45ICAgIE1pbmkgICAgICAgICAgICAgRGVzZW1ib2NhZHVyYSAgICAxMS45ICAgIACANrz51u0/ZU2TRjcuOSAgICAgTWluaSAgICAgICAgICAgICBEZXNlbWJvY2FkdXJhICAgIDcuOSAgICAgAFjErWuB6T8LnpVGNC4wNCAgICBNaW5pICAgICAgICAgICAgIERlc2VtYm9jYWR1cmEgICAgNC4wNCAgICAAAADAne/jPzvVmEYwICAgICAgIE1pbmkgICAgICAgICAgICAgRGVzZW1ib2NhZHVyYSAgICAwICAgICAgIAAAuc81nao/wwUCRjEuNTY2ICAgTHVqYW4gICAgICAgICAgICBEZXNlbWJvY2FkdXJhICAgIDEuNTY2ICAgAEDH6Yt6qj+TjAJGMS4xODMgICBMdWphbiAgICAgICAgICAgIERlc2VtYm9jYWR1cmEgICAgMS4xODMgICAAACHXc1mpP4XuAkYwLjkyNiAgIEx1amFuICAgICAgICAgICAgRGVzZW1ib2NhZHVyYSAgICAwLjkyNiAgIABA0trn1Kc/LxEDRjAuODI2ICAgTHVqYW4gICAgICAgICAgICBEZXNlbWJvY2FkdXJhICAgIDAuODI2ICAgAICVCxNkpz+YMwNGMC43MjYgICBMdWphbiAgICAgICAgICAgIERlc2VtYm9jYWR1cmEgICAgMC43MjYgICAAgLpF6nemP95WA0YwLjYyNiAgIEx1amFuICAgICAgICAgICAgRGVzZW1ib2NhZHVyYSAgICAwLjYyNiAgIACApAR5pKU/VnoDRjAuNTI2ICAgTHVqYW4gICAgICAgICAgICBEZXNlbWJvY2FkdXJhICAgIDAuNTI2ICAgAGDEwnOhoj+1OARGMC4wMDEgICBMdWphbiAgICAgICAgICAgIERlc2VtYm9jYWR1cmEgICAgMC4wMDEgICAAAAAAYOWgPwKJBEYwICAgICAgIEx1amFuICAgICAgICAgICAgRGVzZW1ib2NhZHVyYSAgICAwICAgICAgIAAAJXCt8eo/JBLfRjE0ICAgICAgTGFCYXJxdWl0YSAgICAgICBEZXNlbWJvY2FkdXJhICAgIDE0ICAgICAgAEANowha5z9+ceNGNy44ICAgICBMYUJhcnF1aXRhICAgICAgIERlc2VtYm9jYWR1cmEgICAgNy44ICAgICAAABlgBjznP8UF5kY0LjMgICAgIExhQmFycXVpdGEgICAgICAgRGVzZW1ib2NhZHVyYSAgICA0LjMgICAgIAAAAMBJDOY/KkjpRjAgICAgICAgTGFCYXJxdWl0YSAgICAgICBEZXNlbWJvY2FkdXJhICAgIDAgICAgICAgAIBx3LAsBEAt/+9FMjE5NjcuNjVHdXRpZXJyZXogICAgICAgIERlc2VtYm9jYWR1cmEgICAgMjE5NjcuNjUAiH+7hf8DQBFm9UUxOTk2Ny4wN0d1dGllcnJleiAgICAgICAgRGVzZW1ib2NhZHVyYSAgICAxOTk2Ny4wNwCAygt6pwNA9k76RTE3OTY2LjQ3R3V0aWVycmV6ICAgICAgICBEZXNlbWJvY2FkdXJhICAgIDE3OTY2LjQ3AIDcEWzCAkCEQv5FMTU5NjUuODRHdXRpZXJyZXogICAgICAgIERlc2VtYm9jYWR1cmEgICAgMTU5NjUuODQAcIj+DgECQP9rAUYxMzk2NS4xOUd1dGllcnJleiAgICAgICAgRGVzZW1ib2NhZHVyYSAgICAxMzk2NS4xOQCAIlZ/hgFAlzwERjExOTY0LjUxR3V0aWVycmV6ICAgICAgICBEZXNlbWJvY2FkdXJhICAgIDExOTY0LjUxAIBXiDQyAUBsFwdGOTk2My44MDNHdXRpZXJyZXogICAgICAgIERlc2VtYm9jYWR1cmEgICAgOTk2My44MDMAwHMe+AUBQEAaCkY3OTYzLjA3NEd1dGllcnJleiAgICAgICAgRGVzZW1ib2NhZHVyYSAgICA3OTYzLjA3NADAZODwmQBA3TANRjU5NjIuMzIyR3V0aWVycmV6ICAgICAgICBEZXNlbWJvY2FkdXJhICAgIDU5NjIuMzIyAFAHRuGB/z+9gg9GMzk2MS41NDhHdXRpZXJyZXogICAgICAgIERlc2VtYm9jYWR1cmEgICAgMzk2MS41NDgAAAAgsHL+PzWFEUYxOTYwLjc0OEd1dGllcnJleiAgICAgICAgRGVzZW1ib2NhZHVyYSAgICAxOTYwLjc0OACAi1HkvPU/jc3kRzE2MDAwLjAgR3VhenUgICAgICAgICAgICBEZXNlbWJvY2FkdXJhICAgIDE2MDAwLjAgAEAQp0C79D9IbeZHMTIwMDAgICBHdWF6dSAgICAgICAgICAgIERlc2VtYm9jYWR1cmEgICAgMTIwMDAgICAAAABAi2zzP26o6Ec4MDAwICAgIEd1YXp1ICAgICAgICAgICAgRGVzZW1ib2NhZHVyYSAgICA4MDAwICAgIAAAS4Pl9uI/CjjSRDMuNjc1ICAgQ2FuYWxkZWxFc3RlICAgICBEZXNlbWJvY2FkdXJhICAgIDMuNjc1ICAgAAAAwPP9xD+6Rt1EMCAgICAgICBDYW5hbGRlbEVzdGUgICAgIERlc2VtYm9jYWR1cmEgICAgMCAgICAgICAAIIr/bJj7P5DijEc1LjYgICAgIEJyYXZvICAgICAgICAgICAgRGVzZW1ib2NhZHVyYSAgICA1LjYgICAgIACgM+InAfg/jeONRzEuMSAgICAgQnJhdm8gICAgICAgICAgICBEZXNlbWJvY2FkdXJhICAgIDEuMSAgICAgAAAAIN0k+D9UMo5HMCAgICAgICBCcmF2byAgICAgICAgICAgIERlc2VtYm9jYWR1cmEgICAgMCAgICAgICAAgIRyrfHqP1qnHEY4LjAxICAgIEJhcmNhR3JhbmRlICAgICAgRGVzZW1ib2NhZHVyYSAgICA4LjAxICAgIACgPAw1A+o/lQ0jRjMuOTQgICAgQmFyY2FHcmFuZGUgICAgICBEZXNlbWJvY2FkdXJhICAgIDMuOTQgICAgAAAAoBov6T80lylGMCAgICAgICBCYXJjYUdyYW5kZSAgICAgIERlc2VtYm9jYWR1cmEgICAgMCAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

cerobpm commented 4 months ago

Perfecto, está bueno que se incluya la ruta al archivo (por default) y que esté la opción de incluir el contenido de los achivos encriptado.

federicoburman commented 4 months ago

Perfecto lo agregamos y te avisamos cuando este

federicoburman commented 4 months ago

Listo ya fue mergeado

federicoburman commented 4 months ago

@cerobpm @jbianchi81

cerobpm commented 4 months ago

POST api/schedule_task

Request body:

{
  "border_conditions": [
    {
      "id": 113,
      "interval": "1-HOUR",
      "reach": "Desembocadura",
      "river": "Bravo",
      "river_stat": "0",
      "scheduled_task_id": 6,
      "series_id": 31556,
      "type": "Stage Hydrograph"
    },
    {
      "id": 114,
      "interval": "1-HOUR",
      "reach": "Desembocadura",
      "river": "Mini",
      "river_stat": "0",
      "scheduled_task_id": 6,
      "series_id": 31558,
      "type": "Stage Hydrograph"
    },
    {
      "id": 115,
      "interval": "1-HOUR",
      "reach": "Desembocadura",
      "river": "BarcaGrande",
      "river_stat": "0",
      "scheduled_task_id": 6,
      "series_id": 31562,
      "type": "Stage Hydrograph"
    },
    {
      "id": 116,
      "interval": "1-HOUR",
      "reach": "Desembocadura",
      "river": "Sauce",
      "river_stat": "0",
      "scheduled_task_id": 6,
      "series_id": 31561,
      "type": "Stage Hydrograph"
    },
    {
      "id": 117,
      "interval": "1-DAY",
      "reach": "ParanaAA",
      "river": "Parana",
      "river_stat": "224000",
      "scheduled_task_id": 6,
      "series_id": 35205,
      "type": "Stage Hydrograph"
    },
    {
      "id": 118,
      "interval": "1-HOUR",
      "reach": "Desembocadura",
      "river": "LaBarquita",
      "river_stat": "0",
      "scheduled_task_id": 6,
      "series_id": 31568,
      "type": "Stage Hydrograph"
    },
    {
      "id": 119,
      "interval": "1-HOUR",
      "reach": "Desembocadura",
      "river": "CanaldelEste",
      "river_stat": "0",
      "scheduled_task_id": 6,
      "series_id": 31564,
      "type": "Stage Hydrograph"
    },
    {
      "id": 120,
      "interval": "1-HOUR",
      "reach": "Desembocadura",
      "river": "Lujan",
      "river_stat": "0",
      "scheduled_task_id": 6,
      "series_id": 31557,
      "type": "Stage Hydrograph"
    },
    {
      "id": 121,
      "interval": "1-HOUR",
      "reach": "Desembocadura",
      "river": "SanAntonio",
      "river_stat": "0",
      "scheduled_task_id": 6,
      "series_id": 31560,
      "type": "Stage Hydrograph"
    },
    {
      "id": 122,
      "interval": "1-DAY",
      "reach": "1",
      "river": "Lujan",
      "river_stat": "30.664",
      "scheduled_task_id": 6,
      "series_id": 31530,
      "type": "Flow Hydrograph"
    },
    {
      "id": 123,
      "interval": "1-HOUR",
      "reach": "Desembocadura",
      "river": "Palmas",
      "river_stat": "6246.783",
      "scheduled_task_id": 6,
      "series_id": 31565,
      "type": "Stage Hydrograph"
    },
    {
      "id": 124,
      "interval": "1-HOUR",
      "reach": "Desembocadura",
      "river": "Gutierrez",
      "river_stat": "1960.748",
      "scheduled_task_id": 6,
      "series_id": 31567,
      "type": "Stage Hydrograph"
    },
    {
      "id": 125,
      "interval": "1-HOUR",
      "reach": "Desembocadura",
      "river": "Guazu           ",
      "river_stat": "8000",
      "scheduled_task_id": 6,
      "series_id": 31566,
      "type": "Stage Hydrograph"
    },
    {
      "id": 126,
      "interval": "1-DAY",
      "reach": "Ibicuy",
      "river": "Ibicuy          ",
      "river_stat": "67.930* ",
      "scheduled_task_id": 6,
      "series_id": 31570,
      "type": "Lateral Inflow Hydrograph"
    }
  ],
  "calibration_id": 487,
  "calibration_id_for_simulations": 498,
  "created_at": "2024-04-26T13:56:12",
  "description": "hidrodelta operativo",
  "enabled": false,
  "files": [
    {
      "name": "scheduled-task/6/plan_template.txt"
    },
    {
      "name": "scheduled-task/6/prj_template.txt"
    },
    {
      "name": "scheduled-task/6/restart_file.rst"
    }
  ],
  "forecast_days": 4,
  "frequency": 5,
  "geometry": "DeltaParana_2016.g23",
  "geometry_id": 3,
  "id": 6,
  "initial_flows": [],
  "name": "hidrodelta_op",
  "observation_days": 30,
  "plan_series_list": [
    {
      "flow_series_id": -1,
      "id": 274,
      "reach": "4",
      "river": "Guazu",
      "river_stat": "4",
      "scheduled_task_id": 6,
      "stage_datum": 0.717,
      "stage_series_id": 2830
    },
    {
      "flow_series_id": -1,
      "id": 275,
      "reach": " Desembocadura",
      "river": "Guazu",
      "river_stat": "8000",
      "scheduled_task_id": 6,
      "stage_datum": 0.327,
      "stage_series_id": 1710
    },
    {
      "flow_series_id": -1,
      "id": 276,
      "reach": "3",
      "river": "Guazu",
      "river_stat": "1",
      "scheduled_task_id": 6,
      "stage_datum": 0.209,
      "stage_series_id": 1712
    },
    {
      "flow_series_id": -1,
      "id": 277,
      "reach": " Desembocadura",
      "river": "Gutierrez",
      "river_stat": "19967.07",
      "scheduled_task_id": 6,
      "stage_datum": 0.39,
      "stage_series_id": 44
    },
    {
      "flow_series_id": -1,
      "id": 278,
      "reach": " Ibicuy",
      "river": "Ibicuy",
      "river_stat": "7.16",
      "scheduled_task_id": 6,
      "stage_datum": 0.456,
      "stage_series_id": 45
    },
    {
      "flow_series_id": -1,
      "id": 279,
      "reach": "1",
      "river": "Lujan",
      "river_stat": "24.421",
      "scheduled_task_id": 6,
      "stage_datum": 0,
      "stage_series_id": 42
    },
    {
      "flow_series_id": -1,
      "id": 280,
      "reach": "1",
      "river": "Lujan",
      "river_stat": "18.0191",
      "scheduled_task_id": 6,
      "stage_datum": -0.074,
      "stage_series_id": 50
    },
    {
      "flow_series_id": -1,
      "id": 281,
      "reach": "2",
      "river": "Lujan",
      "river_stat": "5.828",
      "scheduled_task_id": 6,
      "stage_datum": -0.099,
      "stage_series_id": 49
    },
    {
      "flow_series_id": -1,
      "id": 282,
      "reach": " Desembocadura",
      "river": "Mini",
      "river_stat": "11.9",
      "scheduled_task_id": 6,
      "stage_datum": -0.286,
      "stage_series_id": 51
    },
    {
      "flow_series_id": -1,
      "id": 283,
      "reach": "2",
      "river": "Palmas",
      "river_stat": "101864.4",
      "scheduled_task_id": 6,
      "stage_datum": 1.156,
      "stage_series_id": 1714
    },
    {
      "flow_series_id": -1,
      "id": 284,
      "reach": "3",
      "river": "Palmas",
      "river_stat": "94654.47",
      "scheduled_task_id": 6,
      "stage_datum": -0.556,
      "stage_series_id": 151
    },
    {
      "flow_series_id": -1,
      "id": 285,
      "reach": "3",
      "river": "Palmas",
      "river_stat": "68418.45",
      "scheduled_task_id": 6,
      "stage_datum": 0.243,
      "stage_series_id": 5907
    },
    {
      "flow_series_id": -1,
      "id": 286,
      "reach": "4",
      "river": "Palmas",
      "river_stat": "57113.41",
      "scheduled_task_id": 6,
      "stage_datum": 0.418,
      "stage_series_id": 41
    },
    {
      "flow_series_id": -1,
      "id": 287,
      "reach": "4",
      "river": "Palmas",
      "river_stat": "49019.05",
      "scheduled_task_id": 6,
      "stage_datum": 0.03,
      "stage_series_id": 1711
    },
    {
      "flow_series_id": -1,
      "id": 288,
      "reach": "5",
      "river": "Palmas",
      "river_stat": "45033.09",
      "scheduled_task_id": 6,
      "stage_datum": -0.656,
      "stage_series_id": 6163
    },
    {
      "flow_series_id": -1,
      "id": 289,
      "reach": "8",
      "river": "Palmas",
      "river_stat": "21307.62",
      "scheduled_task_id": 6,
      "stage_datum": 0,
      "stage_series_id": 9999
    },
    {
      "flow_series_id": -1,
      "id": 290,
      "reach": " Desembocadura",
      "river": "Palmas",
      "river_stat": "6246.783",
      "scheduled_task_id": 6,
      "stage_datum": -0.337,
      "stage_series_id": 1702
    },
    {
      "flow_series_id": -1,
      "id": 291,
      "reach": " ParanaAA",
      "river": "Parana",
      "river_stat": "224000",
      "scheduled_task_id": 6,
      "stage_datum": 9.432,
      "stage_series_id": 5901
    },
    {
      "flow_series_id": -1,
      "id": 292,
      "reach": " ParanaAA",
      "river": "Parana",
      "river_stat": "18.96",
      "scheduled_task_id": 6,
      "stage_datum": 6.763,
      "stage_series_id": 1725
    },
    {
      "flow_series_id": -1,
      "id": 293,
      "reach": " 2b",
      "river": "Parana",
      "river_stat": "237194.8",
      "scheduled_task_id": 6,
      "stage_datum": 0,
      "stage_series_id": 1770
    },
    {
      "flow_series_id": -1,
      "id": 294,
      "reach": " 2b",
      "river": "Parana",
      "river_stat": "223194.8",
      "scheduled_task_id": 6,
      "stage_datum": 3.625,
      "stage_series_id": 1723
    },
    {
      "flow_series_id": -1,
      "id": 295,
      "reach": " 2b",
      "river": "Parana",
      "river_stat": "188533.7",
      "scheduled_task_id": 6,
      "stage_datum": 3.032,
      "stage_series_id": 1722
    },
    {
      "flow_series_id": -1,
      "id": 296,
      "reach": " 2b",
      "river": "Parana",
      "river_stat": "143588.9",
      "scheduled_task_id": 6,
      "stage_datum": 1.981,
      "stage_series_id": 5905
    },
    {
      "flow_series_id": -1,
      "id": 297,
      "reach": "3",
      "river": "Parana",
      "river_stat": "126030.6",
      "scheduled_task_id": 6,
      "stage_datum": 1.954,
      "stage_series_id": 36
    },
    {
      "flow_series_id": -1,
      "id": 298,
      "reach": "3",
      "river": "Parana",
      "river_stat": "94846.95",
      "scheduled_task_id": 6,
      "stage_datum": 1.642,
      "stage_series_id": 37
    },
    {
      "flow_series_id": -1,
      "id": 299,
      "reach": "3",
      "river": "Parana",
      "river_stat": "44071.76",
      "scheduled_task_id": 6,
      "stage_datum": 0.714,
      "stage_series_id": 38
    },
    {
      "flow_series_id": -1,
      "id": 300,
      "reach": "4",
      "river": "Parana",
      "river_stat": "498.7283",
      "scheduled_task_id": 6,
      "stage_datum": 1.37,
      "stage_series_id": 1717
    },
    {
      "flow_series_id": -1,
      "id": 301,
      "reach": " RioBaradero",
      "river": "RioBaradero",
      "river_stat": " 29.092*",
      "scheduled_task_id": 6,
      "stage_datum": 0.641,
      "stage_series_id": 39
    },
    {
      "flow_series_id": -1,
      "id": 302,
      "reach": " Victoria",
      "river": "Victoria",
      "river_stat": "82.92",
      "scheduled_task_id": 6,
      "stage_datum": 1.536,
      "stage_series_id": 5894
    },
    {
      "flow_series_id": -1,
      "id": 303,
      "reach": "1",
      "river": "CarabelasGrande",
      "river_stat": "33.3",
      "scheduled_task_id": 6,
      "stage_datum": 0,
      "stage_series_id": 5876
    },
    {
      "flow_series_id": -1,
      "id": 304,
      "reach": " Desembocadura",
      "river": "Gutierrez",
      "river_stat": "1960.748",
      "scheduled_task_id": 6,
      "stage_datum": 0,
      "stage_series_id": 1836
    },
    {
      "flow_series_id": -1,
      "id": 305,
      "reach": " Desembocadura",
      "river": "Bravo",
      "river_stat": "0",
      "scheduled_task_id": 6,
      "stage_datum": 0,
      "stage_series_id": 1832
    },
    {
      "flow_series_id": -1,
      "id": 306,
      "reach": " Desembocadura",
      "river": "Sauce",
      "river_stat": "0",
      "scheduled_task_id": 6,
      "stage_datum": 0,
      "stage_series_id": 1842
    },
    {
      "flow_series_id": -1,
      "id": 307,
      "reach": " Desembocadura",
      "river": "BarcaGrande",
      "river_stat": "0",
      "scheduled_task_id": 6,
      "stage_datum": 0,
      "stage_series_id": 1831
    },
    {
      "flow_series_id": -1,
      "id": 308,
      "reach": " Desembocadura",
      "river": "LaBarquita",
      "river_stat": "0",
      "scheduled_task_id": 6,
      "stage_datum": 0,
      "stage_series_id": 1837
    },
    {
      "flow_series_id": -1,
      "id": 309,
      "reach": " Desembocadura",
      "river": "Mini",
      "river_stat": "0",
      "scheduled_task_id": 6,
      "stage_datum": 0,
      "stage_series_id": 1839
    },
    {
      "flow_series_id": -1,
      "id": 310,
      "reach": " Desembocadura",
      "river": "CanaldelEste",
      "river_stat": "0",
      "scheduled_task_id": 6,
      "stage_datum": 0,
      "stage_series_id": 1833
    },
    {
      "flow_series_id": -1,
      "id": 311,
      "reach": " Desembocadura",
      "river": "SanAntonio",
      "river_stat": "0",
      "scheduled_task_id": 6,
      "stage_datum": 0,
      "stage_series_id": 1841
    },
    {
      "flow_series_id": -1,
      "id": 312,
      "reach": " Desembocadura",
      "river": "Lujan",
      "river_stat": "0",
      "scheduled_task_id": 6,
      "stage_datum": 0,
      "stage_series_id": 1838
    }
  ],
  "start_condition_type": "restart_file",
  "start_datetime": "2024-04-24T00:00:00",
  "user": "Admin Ina",
  "user_id": 1
}

Response (code 400):

{
  "error": "'content'",
  "message": "bad request while creating scheduled task"
}

log:

$ docker logs gesina-web-1
--- Logging error ---
Traceback (most recent call last):
  File "/src/src/service/file_storage_service.py", line 129, in is_plan_template_present
    minio_client.stat_object(
  File "/usr/local/lib/python3.10/site-packages/minio/api.py", line 1859, in stat_object
    response = self._execute(
  File "/usr/local/lib/python3.10/site-packages/minio/api.py", line 397, in _execute
    return self._url_open(
  File "/usr/local/lib/python3.10/site-packages/minio/api.py", line 380, in _url_open
    raise response_error
minio.error.S3Error: S3 operation failed; code: NoSuchKey, message: Object does not exist, resource: /gesina/scheduled-task/1/plan_template.txt, request_id: 17CBAA6AB5B2C392, host_id: None, bucket_name: gesina, object_name: scheduled-task/1/plan_template.txt

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.10/logging/__init__.py", line 1100, in emit
    msg = self.format(record)
  File "/usr/local/lib/python3.10/logging/__init__.py", line 943, in format
    return fmt.format(record)
  File "/usr/local/lib/python3.10/logging/__init__.py", line 678, in format
    record.message = record.getMessage()
  File "/usr/local/lib/python3.10/logging/__init__.py", line 368, in getMessage
    msg = msg % self.args
TypeError: not all arguments converted during string formatting
Call stack:
  File "/usr/local/bin/gunicorn", line 8, in <module>
    sys.exit(run())
  File "/usr/local/lib/python3.10/site-packages/gunicorn/app/wsgiapp.py", line 67, in run
    WSGIApplication("%(prog)s [OPTIONS] [APP_MODULE]").run()
  File "/usr/local/lib/python3.10/site-packages/gunicorn/app/base.py", line 231, in run
    super().run()
  File "/usr/local/lib/python3.10/site-packages/gunicorn/app/base.py", line 72, in run
    Arbiter(self).run()
  File "/usr/local/lib/python3.10/site-packages/gunicorn/arbiter.py", line 202, in run
    self.manage_workers()
  File "/usr/local/lib/python3.10/site-packages/gunicorn/arbiter.py", line 551, in manage_workers
    self.spawn_workers()
  File "/usr/local/lib/python3.10/site-packages/gunicorn/arbiter.py", line 622, in spawn_workers
    self.spawn_worker()
  File "/usr/local/lib/python3.10/site-packages/gunicorn/arbiter.py", line 589, in spawn_worker
    worker.init_process()
  File "/usr/local/lib/python3.10/site-packages/gunicorn/workers/base.py", line 142, in init_process
    self.run()
  File "/usr/local/lib/python3.10/site-packages/gunicorn/workers/sync.py", line 125, in run
    self.run_for_one(timeout)
  File "/usr/local/lib/python3.10/site-packages/gunicorn/workers/sync.py", line 69, in run_for_one
    self.accept(listener)
  File "/usr/local/lib/python3.10/site-packages/gunicorn/workers/sync.py", line 31, in accept
    self.handle(listener, client, addr)
  File "/usr/local/lib/python3.10/site-packages/gunicorn/workers/sync.py", line 136, in handle
    self.handle_request(listener, req, client, addr)
  File "/usr/local/lib/python3.10/site-packages/gunicorn/workers/sync.py", line 179, in handle_request
    respiter = self.wsgi(environ, resp.start_response)
  File "/usr/local/lib/python3.10/site-packages/flask/app.py", line 2091, in __call__
    return self.wsgi_app(environ, start_response)
  File "/usr/local/lib/python3.10/site-packages/flask/app.py", line 2073, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/local/lib/python3.10/site-packages/flask/app.py", line 1516, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/local/lib/python3.10/site-packages/flask/app.py", line 1502, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args)
  File "/src/src/controller/view_controller.py", line 297, in get_schedule_task_config
    return render_schedule_view(ScheduleConfigForm(), schedule_config)
  File "/src/src/controller/view_controller.py", line 431, in render_schedule_view
    form.plan_file_present = schedule_config.is_plan_template_present()
  File "/src/src/persistance/scheduled_task.py", line 64, in is_plan_template_present
    return file_storage_service.is_plan_template_present(self.id)
  File "/src/src/service/file_storage_service.py", line 136, in is_plan_template_present
    logger.error(error_message, exception)
  File "/src/src/logger.py", line 24, in error
    get_logger().error(*args, **kwargs)
Message: "Plan template file for 1 doesn't exist"
Arguments: (S3Error('S3 operation failed; code: NoSuchKey, message: Object does not exist, resource: /gesina/scheduled-task/1/plan_template.txt, request_id: 17CBAA6AB5B2C392, host_id: None, bucket_name: gesina, object_name: scheduled-task/1/plan_template.txt'),)
[2024-05-02 12:04:18,438] WARNING in logger: Restart file for 1 doesn't exist
[2024-05-02 12:07:21,770] ERROR in schedule_api: 'content'
Traceback (most recent call last):
  File "/src/src/api/schedule_api.py", line 260, in create_scheduled_task
    scheduled_task = schedule_task_service.create(params, start_condition_type, restart_file_data,
  File "/src/src/service/schedule_task_service.py", line 36, in create
    contentB64 = file["content"]
KeyError: 'content'
[2024-05-02 12:14:53,660] ERROR in schedule_api: 'content'
Traceback (most recent call last):
  File "/src/src/api/schedule_api.py", line 260, in create_scheduled_task
    scheduled_task = schedule_task_service.create(params, start_condition_type, restart_file_data,
  File "/src/src/service/schedule_task_service.py", line 36, in create
    contentB64 = file["content"]
KeyError: 'content'