Skip to main content

Zibanu authentication library for django projects

Project description

Paquete de autenticación y autorización de Zibanu para Django - zibanu.django.auth package

Este paquete contiene los servicios y librerias necesarias para la autenticación y autorización de usuarios a través de la API de Django. Estos componentes proporcionan la funcionalidad necesaria para gestionar la autenticación de usuarios y permitir el acceso a recursos protegidos.

El repositorio ofrece doce (12) servicios API REST para el login, logout, refresh, cambio de contraseña, solicitud de contraseña, agregar usuario, eliminar usuario, listar usuarios, actualización de usuarios, lista de permisos, actualización de perfil y listado de los grupos.

APIs


Login (Iniciar sesion)

Este servicio permite realizar el proceso de autenticación de un usuario con django. La autenticación se realiza utilizando el conjunto email y password.

El servicio toma un conjunto de credenciales de usuario y devuelve un token web JSON para probar la autenticación de esas credenciales.

Parámetros:

  • email: Correo electrónico con el que se realiza la autenticación.
  • password: Clave del usuario.
  • close (opcional): Indica al sistema que debe cerrar las otras sesiones que se encuentran activas. Este parámetro se evalúa únicamente si el usuario tiene la bandera "multiple_login" habilitada en su perfil.

Retorna:

HTTP Status
  • 200, si la autenticación es exitosa y un objeto JSON.
  • 401, si la autenticación NO es exitosa, por error de usuario/clave. (Usuario Inactivo, usuario inexistente, clave/password errado).
  • 412, si la autenticación NO es exitosa debido a que el usuario posee varias sesiones abiertas. (multiple_login).
  • 500, cualquier otra excepción no manejada.
JSON
{
  "token": "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoic2xpZGluZyIsImV4cCI6MTY5Njg4ODMwMCwiaWF0IjoxNjk2ODg0NzAwLCJqdGkiOiI4YjBhMjhlMjg5ODA0NzNkODcwZWUxMTkxMDMyMmJmOSIsInJlZnJlc2hfZXhwIjoxNjk2ODg4MzAwLCJ1c2VyX2lkIjoxMiwidXNlciI6eyJlbWFpbCI6Im1hY2VyY2hhQGdtYWlsLmNvbSIsImlzX3N0YWZmIjpmYWxzZSwiaXNfc3VwZXJ1c2VyIjpmYWxzZSwidXNlcm5hbWUiOiJtYWNlcmNoYTIiLCJwcm9maWxlIjp7InRpbWV6b25lIjoiQW1lcmljYS9Cb2dvdGEiLCJ0aGVtZSI6ImNvcnBvcmF0ZSIsImxhbmciOiJlcyIsImF2YXRhciI6Ii85ai80QUFRU2taSlJnQUJBUUFBQVFBQkFBRC80U2NMUlhocFpnQUFUVTBBS2dBQUFBZ0FCUUVhQUFVQUFBQUJBQUFBU2dFYkFBVUFBQUFCQUFBQVVnRW9BQU1BQUFBQkFBSUFBQUlUQUFNQUFBQUJBQUVBQUlkcEFBUUFBQUFCQUFBQVdnQUFBTFFBQUFCSUFBQUFBUUFBQUVnQUFBQUJBQWVRQUFBSEFBQUFCREF5TWpHUkFRQUhBQUFBQkFFQ0F3Q2dBQUFIQUFBQUJEQXhNRENnQVFBREFBQUFBUUFCQUFDZ0FnQUVBQUFBQVFBQUFQbWdBd0FFQUFBQUFRQUFBTXFrQmdBREFBQUFBUUFBQUFBQUFBQUFBQVlCQXdBREFBQUFBUUFHQUFBQkdnQUZBQUFBQVFBQUFRSUJHd0FGQUFBQUFRQUFBUW9CS0FBREFBQUFBUUFDQUFBQ0FRQUVBQUFBQVFBQUFSSUNBZ0FFQUFBQUFRQUFKZThBQUFBQUFBQUFTQUFBQUFFQUFBQklBQUFBQWYvWS85c0FoQUFCQVFFQkFRRUNBUUVDQXdJQ0FnTUVBd01EQXdRRkJBUUVCQVFGQmdVRkJRVUZCUVlHQmdZR0JnWUdCd2NIQndjSENBZ0lDQWdKQ1FrSkNRa0pDUWtKQVFFQkFRSUNBZ1FDQWdRSkJnVUdDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FuLzNRQUVBQXIvd0FBUkNBQ0NBS0FEQVNJQUFoRUJBeEVCLzhRQm9nQUFBUVVCQVFFQkFRRUFBQUFBQUFBQUFBRUNBd1FGQmdjSUNRb0xFQUFDQVFNREFnUURCUVVFQkFBQUFYMEJBZ01BQkJFRkVpRXhRUVlUVVdFSEluRVVNb0dSb1FnalFySEJGVkxSOENRelluS0NDUW9XRnhnWkdpVW1KeWdwS2pRMU5qYzRPVHBEUkVWR1IwaEpTbE5VVlZaWFdGbGFZMlJsWm1kb2FXcHpkSFYyZDNoNWVvT0VoWWFIaUltS2twT1VsWmFYbUptYW9xT2twYWFucUttcXNyTzB0YmEzdUxtNndzUEV4Y2JIeU1uSzB0UFUxZGJYMk5uYTRlTGo1T1htNStqcDZ2SHk4L1QxOXZmNCtmb0JBQU1CQVFFQkFRRUJBUUVBQUFBQUFBQUJBZ01FQlFZSENBa0tDeEVBQWdFQ0JBUURCQWNGQkFRQUFRSjNBQUVDQXhFRUJTRXhCaEpCVVFkaGNSTWlNb0VJRkVLUm9iSEJDU016VXZBVlluTFJDaFlrTk9FbDhSY1lHUm9tSnlncEtqVTJOemc1T2tORVJVWkhTRWxLVTFSVlZsZFlXVnBqWkdWbVoyaHBhbk4wZFhaM2VIbDZnb09FaFlhSGlJbUtrcE9VbFphWG1KbWFvcU9rcGFhbnFLbXFzck8wdGJhM3VMbTZ3c1BFeGNiSHlNbkswdFBVMWRiWDJObmE0dVBrNWVibjZPbnE4dlAwOWZiMytQbjYvOW9BREFNQkFBSVJBeEVBUHdEK05XQUNRYlQ2MXQyMGlXMG1HemlzcTJZTkdEMzRyWWpqVjhocS9mNlZKdG40eFZsZEcxSGMyYm9CSzIwZHMvUTFGUGI3TEdLT01nZ1JyeVBkYzFuQ0JQSytmbkZiVW9DMlVXQmo5MG4vQUtDSzdLY2RIRTVPWFc1ejBpa3FvOU0xMU9nRmVGYXVia01lU0IxRmF1alBod3lIdlUwSEdMME9tck5PTHNhZmlhd0RMejFVWXJ6aUpUQkx0NzU0cjJQVlltbnMvUDZzZXRlUzNFSk11QWRoem5PTS9wV2VNZytkTXZMNnE1ZVZuWDZaY00yMk04RnVtZTlmYWZ3UC9aQytKdng1anRidlNoYjZmYTNqbU9PNXZXS3hFcjE1VUVBZWhKQUo0cjRxOEM2TnJYajN4dHB2Z1h3eEQ1NzNVOFlmK0hlUTMrcXllQUNPV1BZWjlxL2FYd1hONE0rSHVxQzIxTHhyNG8xQy93Qk9aWWpCNGNhS0d4dE5wNVZoSXlvcW8zRzFnekgrTUxtdHN2Zk9tMGNlYlV2WmF4M01qeDMvQU1FSmYyc3Jud1hONHUrR2NtaytMSklGVjdqVExXU1MxdlYvdWxVbVZVWUhzZCtENjErTTN4YytDdnhNK0JYajI1K0hYeFQwUzYwRFhiTFo5b3M3eE5raUs2aDBidUNyQThNQ1FlY0hnMS9xVy84QUJPM1I3YngzOE5kTTFYWEkwbG5odFVTU1pVOHA1OGhXekxGdVpZMmRQbTNSTXlNZDJEeHg4a2Y4RjF2K0NSSGgzOXNUNEZ0OFgvaGZwVU1IeEI4S1dNZ3RMaUloR3U3WlNaUHNzdzREODh4a25jckhBeUd4WGo0N0hZZDRuNnJKV2srcHRsZUx4WHN2YXVQdXJjL3pYZEx1bzFZckoxYml1bUdqMjl5dSt6QlppTXQrRlpuaXZ3YnIvaFRYN3ZRdFl0cHJHOHNwbmd1TGU0UXh5eFNSbmE2T2pZS3NDT1FlbFFhVmNheGFTNzdiY2NlbVAxelhSRlNocEk5S2JqSjNneU41anByRmJwV1Vja0RIT0J6L0FDckU4TzZqWURUVkZ3SEdYYzV4eGdzU0s3SzhMWE1NZ2xUTXFvenVvNHlNRWtmV3VZMERSemM2VkRNMXRJeDhvUDhBS2ZsSmJrY0gycTVLVGxlSnJDVVBadE5XTHpmMlBLTm9sVVo5YXF6V0ZvV3pFNnNNZGpVZHhwTm1BUVk1VTlUdDZWbnphY0Y1Z2xaUU94V3VmRUtTMWtPbHkyOTBkSnBqSWQyUWZ4cG45bktlVzYwd1BlUWZOSk5HNDZZd1JVWjFtR0Z2TG0rWWpydC9wWExHckZzNkpVMmovOUQrTkxUakg1V0ZCem11aWljSTNOY3pha1JOZ2NMWFJLVllncFg5QjBJU1V2ZVorUFl4NldSUGNScWlIYjJCL2xYUnVDYkNKbC91TC9LdWFuY0ZUdUk2Z2ZoM3JyUGsvc3lCb3puNUIwK2xkZExXYlBPcXV5dWppaTdwZWt5ZHdRS3Y2SHVqdTNoYitIbXMrOFltOUNqclZ5eWUzMHVXUysxYWRiZFNNN1pEaHlBZjRWQTZIc1RpdVJPTWFscE95TzMyS2RLNjNQWFlMU2E1dFFzU2I5cTdpY2dZSEE3L0FGcnhYWGRmMFdMV0YwV3daYmk0WWdFb3dLSVNjL01RZW85UFdzWFUvalA0MWd2SjQvQkZ4OWdnWWJWWGd1UjNMRThEa2NWbWZCWHc4MnVlSXJqVU5SK2Viek1CaUFUNWttY24rWjcxdzQzT29WR3FWTGZZOW5MY2k1RTZsV1doK24zd2crRXZpbjRXNk5lYTVwMW0wbXZhL2FQRGEzQlZ2M0tTZ2x4RG5oWlg0WHpGVXNGSndleC9RdjhBWlcrQkErRHVqMmFTeVJwSlBNMzJwNVNyM1VNajRkRUN1clpYR2QyUG15ZWVtSzhyOFFUM1BoQ0dDMnRaSkFsbmIyL21UeGgvUGliQTJJRHlGd3VNaGVSMUo1cjZuL1owOE4vRkR4UHFPbmVKTGpUWmJtTzdZM01FOGpaK1Jjb3hJWWtrOWVmeHI2emxvMGVXbFRWNWZsL21aNVprOVRFeWRhcTdSdjhBZi9rZjBqZnNaL0ZQeFI4T05Mc3ZCZHlKTHkyVnRsbk1xaU1wYk15c0ZjS0FHTUxFNFBIeU1jODErbzN4bDhWTDRoL1pMOFk2dHFFSXVJNE5GbkNvNDRaMUdBY0hnc0d3VnlDTTQraC9QYjluWmJNZUU3R082RVFrMktzYnNRVlhqTEJuL256eldOL3dVQi9hcTE3NGErQXZEbndROFB4cEpMNHhFcVhFNllDdzJ0dUF4SzdDVHZkeW93ZXFpdkJ6bkwzaWNSVGpHRnBwcHQraHBqc2poZzZkVEUwNm51Nis2ZnhKZjhGVlBBZWo2TjhlTFB4aHBwam1tMS9UNHByeDBCVU5jUkR5aSswODduakNGc2NaOXEvS202dEkxT2RoL01pdjJNLzRLVVdGNXFIeFh0OWF1VVUyVi9hazI0QTJ2Rk5ic3R0Y3hOR2VVdzhRY2RBeXR1SFVnZmxicU9sQU9RZUFPbGZTNTdsNmRhVTBmRVpMam5Ha3FiNkhsT3N4eHg2UmNUd05zZEkyeDM3WXJhME83c3JUVElMVnA1STlpS29EREJ3QjZkcXBlTWRJanR0R251b1pHYmZ0WFl2QURGZ08vSno3ZmhVeHNWYUl5bEM3NXdXNTUvUG44NitkalRuRjNSOVFwUXF3OTdRNlNTNmdaU04yZnBXSmRzcjVTUHAxckdEem8yQWpBL1NwM21jZFZOS3JWNXpMMmNZNlJZU0pGSXUxa0RmV3NTNnRiUVBrd3BrVnZENWVXRlpjL3dBODdjWndvd1BmUCtGZWU0MjZIU3BOYkgvLzBmNDBMZERKSGtkNjFZQTRQWEdCV1BZT1F3R2VLNkdJb0hKYnBYOUFINDVPTjFZam1CWmRvOUNmeUZkYlpzdjlrMisvZ0JBQ2ZweFdCUERzUVNJY2dnamo2Vm96WGNWcG9rQlFGN2hvMlZVUDNjOC9NY2RoM05iMFpxS2N1eHkxY08ybEZHTmFUVzkxcmR4Q3lrckZGODdZeUFXNkFBNUJQSFNwTmIwSnpKSGYrSXBYa3R0d1ZTN0ZncFBDRTV6aENlT3Z5OGV0ZFhwR21RNlpvaGp1U1d1TGVFNmhNT09Ya0JqaEdlcEhWc2ZTdHp4UFlRMjN3Mmd0dFFPNjR1WVdka1AzdG0wTTMwQUpIMHo2MTg5aSthYWxVZlEraXc5RlJpcWFSOHUrSTlKK3czN1hOcnRNY3Z5QUE5RDByOVF2MkFmZ1hvVjNMSjQxOFJoWk5wUW1CR0EzTWVZNHhuSUxuRzl1eUo5N2xnSy9MdlF4cW5qZjdOcGtpaWE0ZGxoaExrNTNCZ29QKzl5Qlg5Sy83Qi93UTBYd3Arei9BRzJzYW8wVjFmNmhleTNDc0ZiQ3h4QVFoVG5JSkxoaXB5Zmw5NjZlRXNGQ3RpT2VTMks0anhMdytDNUw2dlFoOGVhcnFrdmloNzNWQjludDdsWGxrUkFYQWRNZ0RLREF3TWM4ZWxmczcreTlxM2gzd2oremkveFcxUFE1NExMVE5QM3EwRXhTV1NkemdDM2l5SFlNN0Rld1lCVkJPUml2alh3cjhPTFhYdkY2YU40blEzTVZ4RzF5TFdJaE45ckNRR0FHRGtNVGxnTUVqb2ErdHZoLzhSOUU4YStMYmY0S2FuOFBKcmZUYkNWb0xLYTB5amlSZVdLcUZ3cWdFcmpub2NtdnVNWGg0S3Q3V1V0UytFcytwUmdxRlZYWFZuMmgrejVjZUxmSC93QUFiNzRqWGR6ZjJvZTh1YnhKcFVFY3JRS2lmZEh6QUFZd0FjbGp4NzErWkhpYjRrZU5maUQ0ODhVZUpkYmJOeHBVRUthYmJzKzFFdHpNRHRqK1VCWkdLamV3R0N4T0RnOGZ0bDhIN0RVNS9oWHFud3VqMEY5TnRyT1ZvclNmZnVrT3c3OTBvd29BZm93d1QwUFVWK1hmeEg4TVIyZjdRTnZwV3VoTEhUNzFtdDd5VjBBZUZWQWFOMkhCY0dUNVZPUWZtWG10Y21iZFM4K2g1L0huRUZMRlZuUndhdEJINHZmOEZPYk8xOFRhOTRPK0lkcEpDK28zbWs1MWVHSGg0SlM3bUI1QjEvZlJBWlBxdlBVVitRK3NXeWhDN0lKUHIycjlqLzhBZ3F6NGVnMDd3bjREK0lWb2hzWlpudWROMUswUU1GU2FINXJaMnlTUTMyZjVTdjhBQ1FmVTErTzMyeExpMFdUSWRYenoxeml2Unh5VGs0M3NmQjVkSGxqb2VUZUtvcDB0TGFDQ2RsUzR1SWdZOEE0d2QyQWUxYnYyUzRuUU9vWTd1ZWUxVi9GbW5SU2FocFR4U1kzM1M1UWRncWtrK25wWG91bXJadzJ3akRDUThkY0hIQTQ2Q3ZuS09ENTV5UGRyWXJrcHhaNWxjYVk1VWxGd2F6MjA2VlJzWmVhOWZuc29KSlBPQ2hNY2JRT3RaRjdwbTZUTWZISGFveEdYS09wRlBIT1N1ZWFOWk5HTnpjL3BWVk5QZWE0TzBZelhlVGFZRlg1eWV0SkZaMjhhbmRqa2RUWE45VWlkZjE5dlpILy8wdjR6N2FXTnVCeFcvR3k3T09hNGVHVWh4bmdWMU1OeUZHMGVsZnZjSm41SE9ucDJORzh1VlRUbW1ZZ0xFTnpFK2xlbytDZkJOL2NhREY0bjFFZk5jQUczVHVJaWNnRUh2MzlNNHowcjVrOFM2akxkM05wNGFzenZrbGZFckE0Kzl6ajZldGZwQjRuZ2g4Ti9DalIvR1JVR0cwc3BZWlFNWUpRWkhJOWVsR0ZuR3BVbXZzeFd2ci93eDFLZzZNVnpieTJQbVR4VGMydDc0SDF6eEphTHRqMURXSWJPTWorR0swUVJnYnUzelpKeFZqNG4zOEJ1OVdrRW1FMG5TNExUTGRDMDZDWmlQKytnQ2Zhc0hXYmxMRDlrUFJKZHUyVzV2cFpXNUJMTTBqSGNQd3htdkh2alY0cVpOZDFEU1lUL0FNZmtGaXdIWWo3TWc1N2RhOHJNNnFvMCtYK1pSL1gvQUlCOURnNktsVjkxYk5yN3JXL1U5cS9aSitFWGlMeDFORnExaEhpS3dsYTh1cEQxaHQ0Q0haajZCMkFVRWRjKzFmMURmc2NRNnhyL0FNRDlKdW1oampTeEtXeUtJdHFTQ0o4c3lEcTJRN2M0NzgxK0pQN0RjMmxlR2ZoeDRvc2ZFVWtGdEg0bTBkTE5wWkgydkczbkJnSTJCNGRncENqbkpKRmYxSWZCKzAwVHd4NGZzRzBpM1dHMHM5UFI3ZDBBVVI3WWl6RVk0TDV4dTZrOVJtdnRPRTh2Y0tQT3V1cCtmOFg0dVU2empMVkZqd1Y4Tm9vdmoxWmFwWXhlWUlyWXhrRW5BalJRenJnOGpCK1VpdjBkK0ZmZ1h3em92aUVlTWJhQ0tTOWpNVVlaVTVFaWd0SzJDTys1UWZiRmZIL3dBZ2UyMWE4MXkvY1NTaU9aSVdaajh4bC9lelNzeC91NUl5ZjdvOXErenZnMXJKbENYRWNubVJPaGtWTnBKTFNESlA4QTQ3bjhSWHFaaGU3U1BCdzAxRkp4ZXA5WVRRV1FOeHF1bFJ0QUpUdVpGT0FXT1dKL1BQNTE4WWZ0Ui9CM1RQaUxZVzNpeTNnam0xU3hMUnR1SHpOYnlIZHRPT0dNYktDcFBTdnJIV05RaXM5RUZzR0pMRGNldWVja2dlM1hyK0ZlUmVMN3JWTGZTcDd1d0JrL2NibzlweUdPRHV3dmZqSng3ZHE0OHJjb1NTSXg3WExkbjgxSC9CVkx3cGIrTHYyZmRXMTIyUDJodEExQzF2NVNvK1ZvUzdXbTQ0d2Qvd0M4M01UMndEa1YvTWxCSi9ZOG01dDMyV1ZzYnV1MG5wK0ZmMTBmdFE2WlllSlBDWGl2NFI2bEhKYlgydDZaZnJFcFg1WlVpdGtrREhqRFlkMEtIa3FUMTRyK1J2N1RORE1OTTFFQXd5Si9kNkVEMHIwYzlvcU5SVFR2Y01qbmRTZ2lEWEk0aDRnMHFLVmhMSDVrcjlzSENlcDdkNjlLUzhzMWlqM3NDTnVGS25JSTZjVjR2ZFE3TmVzTEtkZlBoaWpsa1RPT0JrS09EMXhXcFBCNUxHNjA4U01HK1dSQ1NjajJKNkg2VjVGUEVTcDNsVFZ6NkRFNFNNa28zUFQzdTdaVC9yVi9Pc3ErMWFCRzNCZ2ZvZUs4OGppU1ViMFhhQjNMZzQ5dXRPTU1aNnZuNmRLd3E1aTUvRWpLbmdFbGE1MU54cWtHRGs5S3dibldrS0haNkhGWk10dkU3YlZWa1B1YzlLekd0b2k0K1k3ZURYTFd4RXJlNmR0SERLTHVmLy9UL2kwbWlWRkJHZW9yVXRwd2liMi9oQlA1VnpVTTkzSW9VUlIvbWY4QUNxMnBOZXhhZmNTdnNWUkdRUUNlK0I2VisxdXZ5cHV4K2FRb3FVbEY5Uzc4STdlMTFmeHRMcVdyc0JCRWpQdWJvclBrRDllbGZwUm9JMHI0aGZDWFdQaEpIT3EzTFdqdmFtUTRVUzRKVVp4eGtpdnpLOEYyZmlhR1dXYlFXdG5XZVB5NVk3Z2Jra1FrZktWd2UvVHA5YStuL2hGck45NHM4VzIzdzhuOFB4YUxxelJzYmJWYk5ualdBUkQvQUZra1pKRHhjYldBNVBRRVlyYkk4WXFjK1ZyU1YwZGVlWUpWTFNUczFhM3lQRlBpSGV0WS9DWHdUb2NwZERDSjBsamJqRGlZOVIySXpnZlN2TnJEVHJ2NGxmRU9IVFFoQ3hLaVRQMUFqajV6K1FyMlg5b0xVRjhUNlFtdFgxckpaNnBwZDNKRGNReFJuN05JNWJtWkd3TWhndTdJNCtoelh6MzhPOVZ2OVA4QUZhM0ZpclNUU1pEN1JuNVcvd0QxMTVXYXpVc1lxZlRUOEQyc0RGL1ZaVmRtZnI5b0dqN1BCRUdrNkJheHJQRk9Rck9Ca3hxQmpMc1FJeU1aYm5JengxcituWDRQYWpDUGd0YmFkTUI1Y05qYjJ6T3d3KzJPRUVER1QwSkl6MUk2azEvTDE0UDhWaUx3bFlhRmZ0T0wxcmlLWWZaemhXSzR5clBuMFBUQnIrZ2Y0S2ZFaTAvNFY4MnJSVFkweUhWN3VKMmtQbWJVdGhqZ0RuRzRZK2hyOWN5TENSdjhqOG56MjdpbSs1OXhmQ1BVbjBmVHJlM3YzSUdvL3dDakdJNFpWWm95NjRPT2NqYm4wTEhPZHRmVm43UCtvUzZmQkFzellObkVzTW4rNldrVXQ5UUFQeXI4OGZndjhUYkhYSnJtSjIrU081SlVxQmhGVVlHM0JKNFVEY09DUnhYMTU4TXRhbXRTSVltQmVhUUFEMURLeCtVREFBNDZZcjBLOUdMYlZqd2JjcnVmZWQvcTF1Yi9BSExKdlNSUVFqY3VXalAzQmpqTEQxOUs0VDRrNnJKNGI4SXZxa01mblF0S0JGRmpMS3pjRlNlNENra2cxbkNSZFR2Rmt0WkZSaXF0dUI1L2RnNS9yaXVBK1BQeEIwTFFmaHJkVytybGlMWmxrZVZHMjhyODZqZDE1SXgyenlLOHJDWUp5clc2Sms0N0VXamMvRlg0dHcrTHRVL2IxazEzWExacmJ3em9maDJLQzFrTXU2Sm11cGk4NHc3bkRvUVVZWUdBZzlSWDg1LzdSdnc3UHcrK01QaVR3WEpCTkI5a3ZwamFDYU14dEpiTzVhRjFCNEtGU01FZi9XSDlSOGZ3MjF2NGxlSmRRMTZFalM3Q2ZaOWdYZXZuWENxQTRrazVsSFhoVDk0OThIaXZ6YS80S20rRFpyTDRZNlQ0OTErd01Xc2FQcWEyUXU0WkJOdnNiZ1NOaG5IekJkNFVxckFGU1Q2MTYrWllCZXcwV3o5VGp5N01uOWFWbDBzZno3UXgrYjRyanQ3cksrVGFzcFhrTUNYeUNlQ01ZOWNWNk5QWjJMeHBHVlBUMXhYRzJVbHBxZmlxZTdiWklua3hsMjM0Sk85dS9RSDYxNjFEYTZjRzh5TGJHcmM4eUtUK3ByNWpDNGYzV2ZYNDdFcExRODBuME8xVnkwUzdGL3VqcCtOWmN0dkRhL3V4eDNyMVdTSzFtVTRqWEE1eXJJZjFIQS9Pc1diVElKc2xGUDZWaFd3aWhyb1lZZkd5U09CdVhDbko3Wi93ck4yTjVZYVB0d0FlcDkvd3JzN3pTN0tPTXRjdEpLbzdLUU1lL0pyaHIzVXRDdDVERkZjdkV5L2RSaGxxODJ2c2UvVG56SzUvLzlUK0pRM0VrTW0wSDVhemRkdXYrSlBPRy9pQUIrbExlTzNsNEI2SE5jaDRtMUkrVEZiTDBmNzN2aXYyREZWSXhwdHlQaXN1d2puSlhSN2o4SUwvQUV5eXM3dTVuVUZ2SStVTTJNa01wd000NmozcjY4K0VrR3A2VGR0NDlrZlplVFJiRVFBTnRqMjVDWVBHRFg1Y1crdFhGc29peGxGN1p4WDBKSiswejR0bDhPdzZCcDFta0loUUtYakJ5UUIvRWFuS3N4cFUyblBwdFlyT2NqcTFHNVU5bWZvcnF1aVhmanJ3dGR4YXpjUW8wa0VrVVVMdWk3ZzZsUXdVdHRCK25Tdm5uOWtqOW1uVGZpMTRhOFEzbGxZdU5aOE1TWkV6dXhTNTViOTNHVU9BeUtNNHdRMmVLK1pQaDc0cDFmNGgrUGROOEthdmVUMnRycU53c1V6eGttU09EckpzSDk0cmtjOThkNi9lUDRHZkFuV2ZEdWt0WmZCdlY5TTAyd1dZT3NFdm5DNGtqVW5mNWtSRzd6R0FPZlJ1T0srbHlyQzBzeHJLcTQyNVR3TTF4TTh0b09qS1h4YmJuNTFmRWl6OGRlRHJPemUxU0JMVy9sV0I3bVloR2d5eFVNeWpzbkJKeGtWK2p2d0grTlhnRHhSNGF1dmdXMnZpMjFYVHIxTlN0THRNcEZmU1N4Z1NSTVNmbExOOHlidUNTUlhiZUl2MmVmQ01rMC9pcnhzMGVzWEVBTGJMaENpaFc0QVdNNEFJOU9wNjE2TDhFZjJHL2dkOFFkUmc4UStNZEEzenp1RXRyVFNuZTBta0orNkdrUTV5ZTJPbk5mVTBzUFV3dFp5aHF2UHQ1SHkxYk1xR0pvY2owYS9GbnFmN0YrcXRvL3hpMVB3ZGZ0SjVzVEY1UE00Yjk0MHUwZkxnWnpqSzlOcEdLKys3YjRyRDRlNnhMZGVLZzhOdnBWdEc4MGlMblpsdjliZ2M3R0w0R2VtSzdlTC9BSUpqWC9neXhoK0tQN09rcVBybWxyQlAvWmh2WnJ3enh4UnFra1Viekk4Wm1DTGdva3VTVjZIT2EvTTc5dlA5b0h3LzRROE9hejRLMDFMaUh4TGZRZllib1NSN1BzMzNmUGhsRDRJa1ZQbDI0R053UFZhOUpaelFjSlRUVHNjR2E1VFdwT1BORnBNOXEwci9BSUxoZkNYd0xjeVJ6L0QvQUZEV3JpeS8wZUtaZFRTM2lkSXl5bzVRVzdzTjRPZnZIdG12TVBpYi93QUZ1ZmgxOFNkRmswSFd2ZzFGZTJjamJ0dHpyZHgxd1J6NVVjWklJSkJIb2Evbm1hWHpITHRrbGozcGNFa0FWOEZQUDZxYmF1cmluaFUvY1IrM09uZjhGbXBQQ3NYaytCZmhGNGR0VWlBQVc1dTlSdUZVS01EaDdoUng3Q3ZIL2lmL0FNRmFmR0h4WjBxWFFmRi93dDhCM2RoSzZTUEJjNmZOY0s3UloyRmc5d2QyM0p4dTlhL0xPMHNMaTVrTU1RM0ZzREF5ZVNPQWVPTTlCM1BhckhpbndoNG04R2F0UG9IaTNUcm5TciszSUV0dGR4TkRNaFpRd0RJNERLU3JBNElCd1FlaEZiVnMxcVRYTEw4VG1oaHVWcVVkR2ZYZy9idnVOT2thYncvOExmaHZZOFlKWHdycDBoSHBqemtrSi9FazFXbi9BT0NrbjdRdGdDdmgreThLYVNwNkN5OE1hTENSOUNMUW45YStFN2hUNlZubFdZbk9BQUNlVC9kR1RTbmpKYWNxUytRcXJsTFJ5YitaOW4rTGYrQ2puN1l2aW5STHJ3dGVlS1Zpc3I2SjRKNGJXenM3ZFhqZFNyS1ZpZ1FjZzRyOC9wOU90REtXbHVHVmpqZ2s4WTRBSFBUaXZxandkK3czKzNSOFVXZzFUNGUvQ1B4WnFsbmNSck5CY3hhWGNDR1dLUVpTUkpIUlZLTU9Rd0pCSFExK2lYd2Yvd0NDQXY4QXdVaytLeVEzUGlUd3BZZUQ3U1FaYWZYYjJKSlZYL3IydC9QbXo3TXExMHdmTXYzbHJucDA2MEtNVkZ5UHhGaWdpaWZmSk0wbnN4T0tra2JSeWRwdFlta3lBRHNYT2UzYXYxOStPdjhBd1F2L0FHNi9nMXJMNlhwbW5hWjRwdDl3RWR6cDEvR2daVDNNZDM1REtmYm12Zzc0aWZzTy90aGZDYlN0VjhSZVAvaHpydW02Wm9rZm5YZDg5cXoyc2NXNEtKRE5IdlR5eVNQbUJLNDVKQTVxY1JUbWtuWTY2T01wUzBqTS85WCtHMjVuVmdVNzlxODgxZVY1Ym9vNXlFNkQwcmV1Ymg5Ky9PTnZOY2RkTTdYRE9Xems1cjlTemVxbkRrUjRtWFVIRlhadVdka0xpMSsxbmtFNHg2R3ZidmhKNHIwdndxYnV5dUxaSnJtNmpLd3UyQ0VMZktEajF6MEZlQjZiZHl3bG9BTnlzYzQ5Sytpdmd4NE5mWDcyK3ZGVVNUV3NIbVFwakxNNXlBQU8vd0RTdk13VWZlVW83bzN6Q0VYUmJuc1pId3p1TkIwVDRzVzB1dlhhQ0tXWmthNEFHd0VuQk9TQ09lY1k2SDA2MSs3bmh6NFUrTTAwSzE4UStDL0VVRjVaN2ZOdG1oQUVpYmlTc2I0SmJnSDVpUmpBSGZtdndMMWI0YzYvb21wUzJ1cHRpZDJPOVZ5VkdPZXZyejI2Vjc3OEh2Qy9qQzN2Wkk5U3VIazBxNXR6SExGSzhqRHlsS3NER3l1cFJzcU9weGpnam12b01semY2czNSbkhkbmdaNWxzY1ZGVll6dG9mc2Q0NDhTZkgveGo4TnJ6VnZCR2hSNnZmYVU2d2hSTWdDQWhoTkpFak92bk9vd1FoT08rZTFYL3dCbHo5cHZ4RGJlR2sxTStNRjhPZUk3RzkreWFSTmNNam90MUNGZVJabGJMSU5yYk9Cbm5QSUJyaC8yUi9pcDhaZkNueFcwV3grRGxqYTZURmZzZFBzRjE5Vm0wM1VtaFNTUXEwQWpMUmx3TWViRXlsVDFZak5mdmY4QUFMOXBYL2duSCswLzRsdWZnSisxaDhOL0R2Z0w0aTJjNGluMHJXck8zUzJ1Wmd3QWUwdldSY3JJZVUzc0NRUnRaK3RmYjA2YXJMMnNxbG50WnI5VDgzL3RKNENwR0xvYzZUdmRQb3U2UHAzOWlYOXFLdzhUdzJtbGVHcktEd3A0K204eVJ0TGtaSTlKOFFaK1p4QWVZbzUyQTh6ZEh0UnY0dHZVZnp2ZjhGblBqLzRIK1BYN2J2aVBYZkJPaVNhRUxCSU5QMU9LVEFhZlZMZU1SM3NyZ0VqY0hWWUN3KzhJUTNPYzErNVgvQlJ2NEVmOE1XZnN2Nm40My9aOTB6VGRBOE5pOGlrTEplWEl2TEc5bGtVV3JXUWxtZU1zR0M4cGhpb1lsTnVTZjQyTmYxdTkxclZwOVgxV1UzRnpjeVBMTks1TE83eU1XWm1Zbmtra2srNXI1ak9NUENqTlNnNzM3SDArWjhVMHN4cEwyTWJkN2xjT0NSMnExRStIR0RXSjlvU2dYQUJ5akEvVTRyenFsZUxTYlBBOWhMZTF6OStmK0NOWDdhSDdBLzdGMC9qRHg5KzFsNE51dkZIaWVjVzBlZ3lSV1VGNUhCRXU5cDhDZGdJNVdmWmh3Q2R2QXh6bjh3LzIxZjJocm45cXY5cG54biswSnFFTFc3K0tOUm11MGhiWm1LRXNSREdTaW9yRklnaWx0b0pJeWNrNVB5dEJxQmpqRE9lUFk1cUc4MUt5QURTU2hSemtraitXZjU0clduU3B1YnJYMWZkblZVbGlLdEZVZVhSRk9abEs0SEZmb1Ivd1NzL1lrdnYyNy8yelBEWHdkdjRKSmZERmszOXMrSTVJd1J0MHl6S3M4WllIZzNNalJ3RGpPSkNSOTAxK2ZtbTIwK3VhaGE2Vm8wVXQ3YzMwb2hndDdkRExMS3pmZFdPTk1zN1B6dFZBVDdWL1psL3dTby80SjFYM3dJL1pXMVQ0b2ZFTFhJZEU4YytNN1ZycTgwdVM5ZlQ1clMwUldXMnQ3c2tJSTVGQmVWeTVQbHUvSlhZVFhSVnhUaEJTNVpOTjI5MkxrMTV0SzJubWVCSExYT282VG1vdis4N1g4bDVuOUpQaVA0VVcxekZCcVhoa2p3L2Y2WWl3MmR6Q1VFY0Z1aXF2a1RSc2Rzc1B5cjhqRUVkVklOZUt2KzB2OEovQU90UDRiK0xtdWFQbzkrWW5sYTcvQUxUdFBzVWl4NFZuU1Jwa2FQQnhsSkZEQWR6WDh1WHhXL1pQOEFmdEZqVE5XL1pSK1BlcWVKdE9DUmpWOUNmVWY3YWJUaXdkM2NtZTZnVkkxMk41ak51UUhKM0FIRmZucisweDhKL2dsOEg5VnRMYldkWDByV251SXZOaDFTME1jYXlCUU9VamFaektoeVBuZ1YwUE8zSTVQMWVGNFpxMUtibkNzbkh6dXZ6MVBIakxEMDZ5cGNzdWR1MWxxeit4SHhEL0FNRk5QK0NXSDl1LzhJYjRqK0xYaHA3dWVRV3ZrcUxpNldSM1lLSTFlS0Y0MkxNUUJ0ZHNrNHI0ODhmL0FMZjMvQkgvQUVueENQQ2RuOGZmQzl0ZFg3U3hDeWNYaldjZTFoRzhOektJOWxzYzVVcEtWQkFPUVJYOFhPb2VQZmhicXZpS2J3SkZxTndscHExbkorODNrUnlOOHl2QUcycHRrSTVUS2ducDFySytKWDdNL3dBQXZHK2lwcVduNjNwdGxjM2NheStZRmEwZG5JQTVPM3lYR2NndDZnanJYeXVXenpHcmlaMGFOUk54N3ZmelIraTVqd3JsRU1OVHhWYU1yUzY5bjJaLy85YitDdTV1VElwQU5Zei9BSHFuYVFnZEtyRTVOZmVZdW9tN0hQQldqWVZKSGlPNlByWHZud284WFhYaGxqcWFzUktFWlJnbkpWMngyOVJrVjREWGRlSFlydG9vaGJydkliSlhrWlhQUFQwcml2Sk84UlNpbXVWbjZhYWZhNkY0bzhPemVLNzZTT0czZ2haeklEZ2dLTWtEL0N1THRmRU9uNkY4S0x6eFZjVFBOZGFoUDVWaXJyd0lFN2tZNExjNTcvZHpYeVRlK0tCcVZ0YTZCWnpQSEJjU1lsZ1U0VlJHY0FONzg1UHJYWmZFRHhCSmRReDZiYk1Qc3RvaXhJcTlOeEh6SDZzZXY1VjZqekJwcXBINGp5UDdJZzA0U2VoOU0vQmo5b3J4SlpmR3Z3WDRqMUdkNUlkRTFOSmh0WitGSytYZ1lJd3FvV0JHT3BQclg3cmZGYnhUK3pSKzFsb0owUHg1YU0xNEl3dGxxVVNnWFZtNXlENVVxbmRnTUI4ci9MMnIrV1B3dnJGL3BUSFU3UnRoVnd1Znd6WDA5NEcrS21yYWZNQmEzVEtycVVZS2R1ZDNVNTlhK3M0ZjRuOWk1WWZFcm1qTDhENWJpRGhUMnpqV3c3NVpSMDlUN1ErS1h4YS9iRGorSEZ0K3lmZitPVzhhZUJ0QXZ2dGVuVzk3TzIyMW1DTkdNRStZZHFvN1lRSGFwYjVRTVYrYlh4TjhSZkZyNGZzcjZucGtFTnM3YlZ1RkxTb3g3QTU1VSsxZm9aNE14ZHdLN3hoako4eGJLakpPT2VLNUw0ODZObzJvZkQ1cmZXZ1ZFY2lSWEkyZ0FMS1FnZGNjNVY5cEI3VjA1amtrSjBIV2d6Z3dHT3BScnhvMUthbDVuNVkzZnhuOGN6ZjZ1ZUpNOWtRZjF6L09zci9oTy9IMnBFajdmS1BaTURIYjJybU5jMEc4MFBYcnJ3OWVEYk5hU0dJOFl5UjBQUFk5UlhyM3c2MGpTbmRpNmlhN3R6eEczZjFJeHprVitkVkZPUHV0bjZYRERVSVJjNHdSMXZ3eThIZUl2RkdxQk5mdjdxVlpHWDkySkdHUWV4S25BcjlKL0Evd3Q4RHl3cnAxNWFRZVdxQU16cXJjOGo1bWJrbmcxOHQvQlV3NjU0cXY5VVVNSXJDTGxWT0NXQXp6MklHTVpyMm40T2VLMzFmeFdZWGo4MEZIbFVIRE1xbHlPZlExOWR3NDZLbkQyNnZkdEw1SHlPZlFxdU1uVGR1Vkp2NW5vL2pEd3I0eitIdXBlSHZIM3d1MGpUZGNQaG04aXVyZUM2SXRuaE1FZ2xTV0M5aWxnbGk4dVFBa2VadDlCMXo5Yi90SGY4RnFQMjR2MmpmQTJxL0N6eHY4UGZBTnRwV3RSZVJleHBkT3J5b3JCaXBtVFVGZkRsUm5CRzRjRTROZVYrSU5QYlh2QWZpVFNRTXBMNGUxU1JBZXU1YldSbC9XdjV4WmJ1ZkM1WmdjYy9NYStpNG94cndNNHZENktlNTRlUlpGaGN5aHo0eUNsS205Tno5ZHZDUDdWWDdUM3d3ZTdnK0YraWVCL0R5YXBBdGxkTEdMVzVTV0ZYVjFpa0YzZFRoMDNLcEljRUhBem5GWXY3WEg3V0g3Ylg3YUhoelJ2REg3UjNqUFRkZHR0Q2xZMmRyYng2VGFKYUZVMkw1Y2x1RWJZVkpBUUhZQ09tYS9KMWJtUlRrODA3N1hMMk9QcFh5V0k0anFWWThsYjNsNjJQc3FIRG1GcFZmYjBvcU11L0tuK0xkejNqVC9BSWNhOWI2cmJwYzNhaUxlTXkrYkE1US8zc2VaazQ2bkhQcHpYMEo0SjhVZkV2d1ZxSDJ2VnZEMmxlS3RQZ2RnMEdvVHFiZVhuQkpVU2dwNWc1NElQcUsrQURjU2tqY3g0OXpVNDFIVVBKTm9zMGdqYjd5Qmp0WSs0emcxODdUNUlTOXJCZThqNk9WVjhuc2w4Si8vMS80RUgrL2lrcFgrL1NWOXBXK0k1eUpTZHdIdlhzbmdnQVdrakRxSStQOEF2bzE0MG4zeDlhOW04RWY4ZWN2L0FGekg4eldZSElhR3pmOEFDUUkyZVNDVDduUFd2UmRXSi9zUmpubk5lY2FIL3dBaDZQOEEzVC9PdlJ0Vy93Q1FHMzFvVzZBNkhTVVQvaEN3eEF5WjQ4bi9BSUM5YUdrZjZ0UHFLbzZUL3dBaVNQOEFydkgvQU9ndlY3U1A5V24xV3V1bi9IajZISlcrQ1hxZnBCOExYY1N1Z0p3QkZnZHVTTTFoZkZuNS9EWGlBUHppMDcvOWRCVzM4TGY5Zko5SWY1aXNUNHIvQVBJdCtJUCt2VC8yb0svVlpmN2l6OHVoL3ZQelB6Vy9hSUFUeG1KazRkN1czWm1IVW5iMUo3bXNUVHBKTGZ4UHA4bHV4UmpNY2xUZ241UjZWdWZ0RmY4QUkzcC8xNlcvL29OWUZuL3lNbW5mOWR6L0FPZ2l2eVRGZnhQbWo5Ync2L2RmTDlENy93REJjTU5wNHA4VVJXcUNKZnM2Y0lObzV0UVR3UGZtc2o5bTVtVHhIZk9od2ZzU2Nqci9BSzJ0dnduL0FNalo0by82OTAvOUpSV0gremovQU1qRGZmOEFYakgvQU9qYStneXI0cUgrS1I4cm12dzEvd0RERS9UYnc2cXQ0SjFKMkdUL0FHUmVqUGZCZ2s0citZV2JwK0EvbFg5UGZoei9BSkVmVXY4QXNFWHYvb2lTdjVoSnZ1L2dQNVY3dkh2L0FDNU9MZ1QrSFc5VVJVVVVWK2VuM0JJNEFIRlJIZ1ZNL1NvVDBOTmJNRC8vMlFBQS85c0FoQUFKQmdjVUVoSVVGQk1VRlJVVUZ4Z1lGeGNYRnhnWEZoY2NGaHdYRnhjY0hCd1hHQndvSUJ3ZEpSd2NGeUl4SVNVcEt5NHVMaGNmTXpnekxEY29MUzRzQVFvS0NnNE5EaG9RRUJvc0pCOGtMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN6L3dBQVJDQURLQVBrREFTSUFBaEVCQXhFQi84UUFIQUFBQVFVQkFRRUFBQUFBQUFBQUFBQUFBd0VDQkFVR0FBY0kvOFFBUkJBQUFRTUNBd1VGQkFnRUJBVUZBQUFBQVFBQ0VRTWhCQkl4QlVGUllYRUdFeUtCa1RLaHNjRUhGVUpTMGVIdzhSUWpZbklrZ3BMQ0ZrTlRvcklYTXpSRVZQL0VBQmdCQUFNQkFRQUFBQUFBQUFBQUFBQUFBQUFCQWdNRS84UUFJaEVBQWdJQ0F3QUNBd0VBQUFBQUFBQUFBQUVDRVNFeEF4SkJFekpSWVhFaS85b0FEQU1CQUFJUkF4RUFQd0R5VUpRRWdDY0YySEtPYW5oQ2hLQ21JZTV1blZjNUl4eGtkVTRwaUJoSW5KRXFLQ01SU0VGaFI5eW9sa1dvMURDa1ZBZ0ZReTBQYVVVRkJhaUF4SFBRSmlhREFTcE5MWmRWL3MwbnU2TkpWcnNzMGFJL21IeG5jMEVrZWkyM1p6RjA2ME1ZY3hHZ2d0cWY5MWo2cWpOdWp5akc0QjlPMVJqMmYzTkxmaW9ibUw2VXA3T2JXWVdWV3RlT1k5eEJXSzdlZlJ5MXRBMXNMVHl1cHlYTUUrSnUrQnhHcWxwRnFaNCswb3JFajZjV1RBVk9pOWgrN2xOTFZ6WG93QUlWRWdHbE1mN1RVU296eVVkemZFa3lsUkp5cE1pQ09TWE9VV0toK1JOeXJoVks3dkVoalNGMEltWklnQm1WZGxUMXlBRmFuQk1ZRThLaWFIQmNBdUM2RXhDalVkVTV5WTNVSWprSUFaS1FsYzhydHlRRG1vN0ZHcGxTV0pvVEdWUW81VXh3UUhNUTBOQWdRRWZaV0dkVnFDTlp0TzRjVDBDRUc1ckM5MW9NQTBVS0pkclZjRERpSURHMkZoekpBbjhGS1ZzcHVrV1RXNGVpWUxCVmR2Qm5NU2Q1dUEwZGI4bGM5bjhXMnBWRVVHMG5OdURUYzdPT29kWnc5RmxkaTRRZ3VmVUpJbVptNUpQRmJUWndMU0h0WTBsdmlFRXlSdnVkVm9zbWJpZXFiR2JtYUNTSFNCbGRjVzRFY3ZkTUt6ZlJ6QTgxbjlrYlFCQUlNQjBPQTN6bzRmQlhlR3hFam5LNStTTFRzcURqcG5pUDBwOWpYVVgvQU1SVFlTd3pueWl3T3VZamNGNW0rbXZwSHQzRFgwemNrZ2gzOXVtbWgxdUY0THQzQUNqV2V3ZXlETGY3VGNlNkZzbGNWSVYwK3BUWlU4TlBCRUxVMk9ha3NYa2czem5rRVV0UTZKSmM0K1YwdzBFZ3hvbWs4bElrcms2SnNpMjRKcGFGS0lUSEtXaXJJK1FjVjNtandtbGdVME93UGVKZSs1SnhwaGRrQ2VRd2MxRUNHaU5LZENZcWNVMUtWUkp3MUNLNUNicjVvejBJVEF2Q2ExT2VtQkpsSWRUMVVtbW85Sm0rd0hOTnhHSmdaVzY4ZEVXa2dxMldKb2pMTXQzNzRWSld4SmVkSUhKTWVYSGVTbllLbkxsRXAyYVJna2FQczNRQm5OYUFEeDZxM0dFYVRjdzA3M0tOMmZvZ2g1Nkcra0NUZjlibElxVmQ3aklrd2RGdEdsSEpEVGNzRnZobnNaNFJEbXg2bmp5VjFzUUV4dUIwSG1zdGdROCtJQWthTFc3QnB1QkVpUGtpM0kxakJSTkhoTUVRZVZqNWhhYlp6RGNuUlZPRU5nTjZtVnNSM1ZONzNTUXdGeDAzQ2RGRTIzZ1h4eDJWSGJlcE5hbkdyVzNHK0NicnhydGUvUFd6YW1JSjV0TUgzcmMvV3o2cE5Xb2JnbjBCbFlidEhRTEt6Z2J0SXpzUEZqdkVEMXVaNXJXTWFoUnl0LzZzejVhbUVLUzlxR1dxR2kwd0ljZzBqcVozNktTK21OZFZIdzJubm9wb3RNSUtoVHM2UnlaS05CZ0pLUk5CWFNnUXE1Y3VKU0dNS1NFdkZMS1FEUWxDUnFkQ29Rb0tWSUVxQkNEVWRVZHlCR2lPNU5DWUtvdVlJQVA1anpDWlhKTmhxVVpvaTNEVlJKbHhRQ3NTNDZBSGw4a0dyUmdLZlVvMnRycUR6L05Sdy9NSmpyMVVNb2hqUlR0azRZdWZhNDM5RkRjQm1oYW5zMEc4SkRSbUkrODZEcWZ1aU5FNHh0bFNkSXZjSGdoVG9rRVhkSERTT2ZWQWM0T3RBdFBSVHpUelFiays3OWxDZFJjM01RQkh2OXk2SkxGSXk0M25KcHRnWUthWUFJTFNaNlFyckhPN2xvbHJTWU9XQ2MzWGtQVlZIWmpEanV3Nm9YWlJ1QU04VW0wYXI2dGJ3UElwR0d0RVJEWUZvMW1aVXJDT3VNVkptb0dJY0dNSUVrdEJoVk8zZHRPRE82Yk9aNHVDZlpCTUN3NDM5eTBMYUliU0FKbUdqcVNzSHRmRE9EdzhpK1lHZVBudzVKckpqek5Sd1NjSTVsTXdRTXVVVFBQWDNySGRyNkJwMThra2hyV2hzL2R2QzFXS3BCejJrRDdvNmdpUFBTRlFkczY0cTFNeEdVc1BkZzY1Z0FEZmVESlBIVUxWbkg2Wlp5RTV2TkhLRFVhczJhSURVcVFESTNGTXc0OElzaVlsM2hLU2kydzZmcUZIcFhncFRTMUc3dE55b29MQWxjUWk1RW1WS2dzR3VoRWhOaEZEc0dBbFQydFRySW9MSW9SQW1BSndRQTRKMEpzSnpVQU00STlRZ1hRQ1VSb3pHZDI3OFVYZ0tzVEN0dVhPdEYwK3FJYU9Mako4L3dBazdFVTRZMW8rMjZQTGVuWWsvd0EwTjFBK1FVRmhxaklaK3VpcGFqNGVZMzYvaXJmR3UvbU5idUFMajEwK2FwcXgvbWVhVTlsUlFWbE11Z0FMZjlrZG41YVQzT2c1aUEzVFVHOWp1MTlGajlsMDRlT01PUFMwTDBMWWROb28wMmd6NFovekczd1duRXZUUGxlS0NWNlppQjBSY0RobXlNd2tOZ2FtSjVoU3FkSzJZWHNmVzY3WU5JbHp3ZnRINFgrUzJaaW1FcWRvUXgyVEpPOG5rZUFWa3lyU0xlOGF3eUx3RUNwc2tPY0NBUEdlSG42TFI0SFp6UlN5Z0NSeTUvTlEyL1RhTTZXQjFQRmQ3U3l1R1VtNDRnK1N6ZTJhWjBGanZIUGN0WlJHVVJHbndWZnRqQUNvMDViUEFrYytTSW1VbmJ0bVV3ci9BUERpcmJNSWFHblVuTS9UMTl5emYwaVlVTmZTcUNJYzNLUU5BOER4ZXZ5V3J3VklnZ08wTFFDM2c0U1o2L2lWbnUyMUdjT04rVjdZSnRZeUw4TDI4bG85RTNreExTdUpVZk1XbEZsUjJMb0ZqYWZoSjZmRkVvVTdEWFFJT0xkNGZNS1JUWng1Y2tsc2ZnV1Uxd2xjQXVsVVFKQ0dXb29UWlVzb0hsU1pVUWxOU0E0QmRDUWxNem9IUkZCVHdVS1U5cWdzSXVCU0FwcGRBSktZcU9jSmNHamY4RmI5d0dqS1BUOWVTcDlsR2FnSzBPT1pEZ2R4Q1VjMnluakJXTU9hdXh1dVVFcGpqL2lMOGZtbjdJY0hZaW9lVnZnZ1loLytJSFZEMWY3SzlyOUJYUG1wVkozRWdkTlZWMG01cWs3cHVwR0xxdytyL2NoN0xibWRITlp0MnlsbzFPRTJjRzBUVk53OFpXaittZm1SK3BXcjdNMGlLY3VzSnR4VlRSQXFZYkRzSWpLWkovekd4OGlQUmJDaTBBZ1JZRFFXdHU5NjZZeE9XVEhVcU9WaGtRRFlIbWVDTHNuRCtKeDRENGo5MExHdXUwNmhvRHVXbjdLdzJZM0t3azZ1L0NWVEVpZmg0blQyUitTbjBDUXFyRGs3dDhlcXRtWGdkRm14aFhDM3FoWnZOT3JPdDgxR3FHMzYwUWdaVmJRd3dZWE9Bc1pFZGYzOUZtdHQwdTl3OVpvdUJUbHZVUzcxbGFuYWxTMGJwbjNUWlVEbkF4ZTVKSDl3dnJ4V3lWb3paNU5xbXNkbE1IUkd4bEkwM3ZiOTF4SG9VUDJnc1RZSGpOQjFSMlZCeDg5eWlWajdJUEZITFFmeXNqK0RhUWJ2RWhxQlJ0TEhSZFpIWmk2a2cxQW1PZWh3dXlwV0ZJZVhwcm5wcEFTWlVXT2hTNU1sZGxUc2lrWkhTdEs1SUVpZ2dVYkV2dkhCU0FWQmRjK2FVaW9MSmFiTllXZ0hpdERqUm1wU05RRlRVWGdBRGVQSld1ejhVRExUcHB1V25IV2pPZDdLVHMrNkhWRHdFL0ZSSDFjMVhOelZoaGFQZFZLemQwR0R4RVdWTzEzaUtpV0VrYXJMc1hhQm1vNDhiKzVXT3c2UjFWVXhwZTZGcHNHekxsQXRCOVR3VXdWdXdtNlZGZ0t6MkZyWkVEN0lpNUUzUHFWNkpoRzVnMDhwbmdZMCtLODQ3bk04R3d1Sm5VbWRGNkRnSFNEdXNQaCt2VmRNYk9lWTZzL3htZFBrQkh3VnBoWCtFa0c4UndqU2ZPL3ZWVTh5K2R3QkpFYTIwVTZqVWh3YnhhZlV4ZFUwUVNNQlU4TFR6OTRKS3U2UUFBNktod05pQi9VZmVGYzBLa0NQMUZnRkxRMEVjNmI4MDFvK3lmS1V3dUVubnB3bVB5UkFNMnVxa0dRY2FKdkVrRTlZL0Q4VmhzZGlnTWEyazBFQnJTNHlkN3pNYTdoOFZzTVRWT2MvZEh3QXY4MWhxT3ozdHhsWjdpQ05HbTVrYnI3b0MwU2VDY1pNNTJvdzJYRVAvcWh3OHgrTXFraUZzdTJ0RXVGT3Exc3RBTFhPSGxIbHJkWko0blJSSlpMZzhFZXNmRXo5MFZyWlFUN2JkWkhCUzJsU2kyQ2Mza21TUnFwRXBwQ0dpYkFrbGNpRUpoS1ZGV2NRbW5jbkZOSlFNU0YwSlNQVkpsU0FpaDRYWnd1Q2RLZ3NZNTlqMFFFZXM3d2xNb3ZVc3FPaVEzR3RKQmV3a2plQzRmTldHSGZSZjdEaXgrNlNTSjRlYUVhTTJQN1dsSnNuQ043NEg3TGRKNHExZGt0b21kOW5scmhscXRCQm41L0VIbXM3VnBsamlEcXRSdExBNTZtY3Z5a1d0ZVFOSlZEdFhDWmZITWdtRWNsajQ2SWVIZEJCV2gyZlhrKzlaNmxUSk13U09RVi9nbVEyMzVwY1krUXZHejN6UEZBSkFpZndXdDJkaUlaVU15QVQ2WFdDd3J3eDdYSFFPQjZYMy9yZ3RYc0t0RkNxWGJuR1Q1bGRNV3JPZWF3WGxlckFGcm1SNUg5MVB3NzVqakE4N0czd1dSeE8wSmc2Z213TzYzNWFxODJUVnpORVdzWTMzSFByQ3BrbHRoWFgrUVZwaHFrK2gvWDY0cW1wVklnOHlQMTVLZmhhbG1qZVpIelNFUytuR2ZsODFKb3U0cU5RcXk3eklYVlRwY1dVcEF5dTJoQmVmRnJGZ1kwdjcvbXMxUmFhaGRrRURReU13bnArdFZNMmk5eHFodVdXZ2tFRW5UUzlwTThGWVlLZ1lBWXdnRFFaU3RNRVpLdHJoSGR2TXkwZ3RJeXlPbTVlZWJWdy9jMXFsTUd6VGJvUUNQY1Y2L2l0bDFIQzFGem8wOEprZENzRjJtN0hZeCtJYzZsaDZyZ1EyVGxnVEViMUUydnlWeHBtSmRHZnkvRlNtMHhHcXU2WFlQYUdhVGh5TFJkMUp2eGNwVE93K01IdE1vdDYxNlEvM0tFMGF1ek9ocVFnY2xwejJOckQycXVEYjF4RGY5b0tUL2hHUGF4ZUNiMHFQZDhLYWVDRExsaVlXS2J0bkN0b1B5aXBUcWlKelU4eEhRNW1neXEvK0lIQXFXMFZURnlGSWFQTmNhNFRIQ2RCOGtpa2NXbE5rcGhZL3dBdXE3dW5mb3BESXpsMHJwVFdsUVdqcXhza3c3a3l1N2Ntc2ZDbDdORXNGelhlU1FCdmo1N2xOd3RJTkFWRmc2NERnU2JLMnJiU1lCNFZjV3RzeWxGNkpsSnBKNERmZEQyemhKcG1JTVgxQ3FhbTBUdU9xSmhhYjhRU3hwOElFdVBMZ24yVHdIVnJKWTlrNlhmQnpIQ0EwV2NQdmNDcE5iQUVPTFRxSnZvaTdMY0tEU0dTWTVYS25WcXhxZ0ZvMUh0SGNGcEdDb2lVc21YTkYzZWh0UjBOMW5wdTZyUjdNMnl5blVkVGRKcHVBQjQ4amRDR3hHbVM4a256VGFmWnh0UjM4c3VCNDdvODBsY2REYlVpMXhtSGFBQzJDMmJPOGpQbXJqc3JYek5CNGcyNW5oK3Q2aDRQc3BWYXh3T0liQmFiWlNRQ1l1YmhTTUJSZGhudHpaWE5OcGFmRElIRGNkNjFzenJCWVZuRnVVY0lJUEVxUHRmdEQzTGZDUEdIQVFkTjgrbjRLZGphZWFEdzA5Ylg0ckNkcDhYbnJPajdNTm5pUUlKOWJlU1U1VWlVclpldCtrZkVOSGhaUkhNVTI2K2FFLzZSc1lkSE1IUmpCOGxqbHl3N0ZHcXFmU0Jqai96aU9nQStDaTFPMm1OZC93RFlxZjZpRm4xd1RVaFVXdFh0TGluYTE2aC96dS9GUm43WHJIV3E4LzVqK0toRUpDanN3b083SFBQMmo2b2JzUzQ3ejZvUlNKdVRGU0ZOVThVMXp6eFhJVlI2VnNhUTRqaWtnTGc5S1dCVVdOZ0paU1pDbUZJWVExRjBsRGxMbjZwSmhSQ0pUQ1VwS1k1UWJJRlZOMGhTSnpCS3k5TkJFZWhoSFAwUXlGUDJmaXNsb3VtdDVGSnVzRUd0U0xEQjE1Szc3TlZ5d0U1aTJUcUJJdHVqZXFyRnN2Sk90MWI5bnNyckV4dTE0OHVDdUgySm45VFhZVEh0YUJtWTNkZUJZcXhGUU85azIzQ3dBNmNGUS9VN21nZUlsc2E3b2trQk5ZNTlQdzZnNkxwN05iT1J4WGhaWXpFQTIzalVxd3dGVnJXMkk4dFZrdHUxSzdjdmdjS1JBSmNCSkovcWpRS1gyZXhJTWw4NUd4b1lra3hFcU8rYUwrUEI2WmdhaktERzFITUw4K3JnTXdaMTRIbXI2cGhLZUxwa1BoL0I0QUR3Zm5FL2t2Tk5qN1FxWVIrWnJpK2s0NnpvT0RoODF1Y0ZpUlZIZllXei90VXBpZWJScFBKUTcyZFNna3FNYjIzcDFjSzgwaTQ1UTFybVBGczBrajFCMUhOWUNxNlN0NzlLUGFKdUlkUnBCc0dtQzU4aTRlNjJYaUlBa2ppZVM4L2xKeWIyYzBra3prcVJLa3lhRkFWaHNqWTliRXZ5VWFibnUxaG8zY1Nkd1ZlRjZUOUdYYS9DNEdsVkZacnU4YzRFRnJRWmJFUnJhREo4MFhTMFVrbThtZjdTOWlxdUN3OUt0V01PcU9JTEFQWXRJa3pkeDRBUnpXVWN0cjlJM2F4bVBxdE5OcGJUWTB0Ykp1Wk15Um9GaTNGQ3VzaWtrbmdZUW1rSjVLYVFxSUZwMHk0aHJSTG5FQm9HcEpNQWVxOUVIMFRzWUd1cllsNG1NMlNtTXJTUnZjVHBOcFEvb2Y3UDk5aUhZbDRsbEN6SkZqV0kvd0JyYjlTRjdJV3pNaVFSRUhUMFJkQ3QrSG5tRCtpZkJzdTU5YW9PR1pyUWY5RFo5NjBlenV5R0NvM3A0ZW1EOTV3em4xZkpWaC9CUHBYcGd1WnZwRTNIOWg0Y2tiQ1k1cjVBRGdSWWd0Z2dwMytCZjBvOXQ5bWNQaUx2b1UzTys5bEFkNmlENzFsY1o5SDJGRWcwNmpKKzB4N2lCNU9uM3IwWEViVG9NTVZLMUZoNFBxTUI5SlRQckhEUEVERTBEUDhBV3cvN2tmSWl1a3ZEeWZFZlJ2U3lQN3V1L1BIZ3podVNlRG9FaWVPN21zdi9BTUVZMy9vai9XejhWN2Jpc1RnMnY3ditMb05xd0RrTDJEVzQ4TGlpL3dBSi9YUzl5ZHhZcm5IWjh0dUtZNTFrcFRIRlpObmFrTWxPWTZDbXJsbVVHS0xoYU9ZL0ZBWUZiYklBa2plZEZTRkxSWFlzK0l4MFNVM2xwbHRpclhFWUlDNHVkNVVWdUdQQkpxaEoyaWZnZTBOVU9oejhyYjNndUV4YVFMbTZ0c0hVcXVKYzkrWWpUUnJlT2hpL1ZVK0d3Z0JIelUwWVkxYlpzckd5U1RvQnZXa1cyWno2bXoySHRIRFZRS2VKTHFUM0FYTHgzWm0xbk4wOC9WWFAvcHpoaTF3WStxMFBnbUg1Z2Q0TUZZN3MxZ2FWUjlhaTlvY0docHpXekF4RWdqeVVuRGJYeG15bjVUL053ODJtUzJQaXc5TGNsdmVNbzVuRjNVV2FHbjJDcTBCbXA0a0VURVZHa201MDhFbVBKUDJqaVdZTWlyVExPOUVaMk5jNW9jdy8wT2FMOHh6V2k3TDlyc05qSURYWktwLzViaUFUL2FkSGZIa3N6OUsyR28wZTdERzVhdFNYT0RiTnlEZVdpMGwyL2tWTGNTNDhzMWhtQTJ2ajNWNnRTcTgrSjdpNCtlN3lFRHlVSmM0cHNyQW9jdWxObGRtVHNLSGdwNGNnWmdsNzBjVUpoMVlZbE1LR01RT1Bva2RXamNmUS9nbmFIMFk5T3AweTRoclFTNXhBYUJxU1RBSHFoMTM1QU0xcGdpNGt6eVhwUDBjZG1RMDA4YlY3dXF3dG1rMXBKZ243VHRJSXVJM0U4azBtOWJNNVZITXRHbDJDTVJnOEcyalNER2xvMUxYSE5VY1pjNXhNYjl3MHRkVW0ydTJlMDhNQjNyR01CKzJHbHduV0p6WldrY3d0WjJqMjNoYVZBdXJOY3h1Z0RKejVyd0d4cWJiN2NWa3RuZHZhZUpES0Q2Slk1emNvZG1FRjVFRFVHeFBMMVZjYWxxY1ZmNkNUalZ3ZUNsYjJ2eGRlYzJKcU40UVExdnF3QlFNVy9FRWt1eEZWMmJYK2E1cFBtWUpXOG9qTTUxQ2lING1vQWM3c3JSU3BuZ1RiTTczRDNMejd0Smp6aHF6bVZHVmFiamZLOWpjaG5XQkF0UEN5MmNJSlpKak9VcFZFaFY4TVo4VFhHZnZQcUdmUE5kUnErRHpCekFDMms4QXVBOFJMMmtscGw0SkVBblFxRmpOclptdzBocEJCQkdZQzM5Tng3MU93TzNBY3JvRWl6aHU0VDBYSExxcGZvN29kcFJyMHBjWHNaelI0U0hlVUg4MVgvd0FJL3dDNmZSYmJFN1ZaOXBqVEkxYUlrY1I0MUQrdGFIM0hlNWIvQUJSOFppdVdYcU1rU21GS2tLd1p1aEZ5NWNwQTZWWVlTcEYrU3IxSWE3M3BBWDJIcTVnRS9FMEFHeWJLdHd0VXN2N2t1S3hacXVEZnNnKzlYZG9qcmtzY0FBS2JudU56Ylc4YnJlcWdqR0hmcE4wVEdWb2FHY05md1ZaS08zZ2RmVFRka3NmbHhEbk9pWEF6Nnl0ejlZVTNXSkJCR2gwbnJvdkxzRlZEVE85V3VIMmtSRW1mMSt5MjR1U2xUTWVYanQyaXcyN3NFTmQzbUhjR3pmTHVCM0VLb3htME1SVkk3d09lNEFOQkxpZkNOMHV2eFZqaWNjWERLREErUG9tdFluS0tid0VXMHNtZHhPS2V6VmtjMUZPMEg4bHFxMUFGcHROdElXVHgySHlPdDdKdUR5L0pZempSckJ4Zmdqc1kvajhFenYzSGVVTlBZMlZCb2tqcEozbjNxVmhNSk9xTGg4UHZQdTNLWGhXK0tJbENFMldHRHc0YUxDRllVOE9DRkJmVmd4eVU3RHZKRXo2V1hUQkk1NVdSZG9pcXhoN3N5QnJUYzBQYVJ2OEFDNEVTcHV4UHBKcjRXaUtWTEQwV3RrbjJYUkoxZ0Y4RG9FVmgwQ3pHMXRyVm1WcWpBOHcxeEF1ZEpUNVA4NUNFVlBEUmNiWDdlNG5GQUNyUXc3dzB5QTZrSEFIU1lKS3JCMm14TFlMR1VhWkdtV2hSRWVlUlZuMTFXKys3MUtiOWNWditvNzFLeStSbWk0b3BWUmREdGh0R0lHSWUwY0d3MGVqWVZWdGF2V3JQbXRWZlZjQkFMaVRiVzBvSjJ0V2lPOGRIQ1NrK3RLdjMzZXBTY2s5bEtGYW9DYU1iMGFtMGh1WU9CaUpCTjc4QnZISGdrK3NxbjNqNnJtN1RxRDdSV2RJMHVpYmdkcXZwR1F3SGZCa2dxMi80emQvK1dqLzNLZ08xbnhHL2pKUS9yT3A5NU5TNjRRbm5aRVNMaXVTWUhMbHlSQUNxUTFrMlVjS2JRM29BUVZjcGc4TEoyQ2RlU28xZlVvbERSQUVpczZaS2psR09pRlIxUWdET3NVZW5WUXNTYitRK0NSaFI2THd0c0pVbmVyS2wxVk5nTkQrdHdWcmhYR0JjNnJvZ3pDYXlIelpiV2haN0hVY3dxTmk3Q1NPbjdmQlhOWTNIVWZKUVgvOEF2TzZOL3dERUk1QWhnellVaWs3S1FoWWtYUFZFYm9PaTUyZEpQbTJZYWZxeWxiR0VrbmVvZXcvYkEzZnNwK3lmYkkzWmo4MDQ3UkVzSmpjVlY4YnBPa3dyVEFFNUFlUVZGaXZhZXJ2Qyt3M29QaVZwRDdNem45VVdEQjRtOVFzajJyWkdMcmMzVDZnSDVyWjBCcCt1S3gvYkQvNVZUb3ovQU1RdE9iNms4UDJLVmN1SzVjeDBITGx5NUFITGtxUkFISllTSkVtQi85az0iLCJtZXNzYWdlc190aW1lb3V0IjoxMCwia2VlcF9sb2dnZWRfaW4iOnRydWUsImFwcF9wcm9maWxlIjp7ImRlY2ltYWxzIjozLCJtZXNzYWdlVGltZU91dCI6MTAsInZpZXdBbm9uRGV2aWNlcyI6dHJ1ZX0sIm11bHRpcGxlX2xvZ2luIjp0cnVlLCJzZWN1cmVfcGFzc3dvcmQiOnRydWV9LCJyb2xlcyI6WyJDdXN0b21lckFkbWluIl0sInBlcm1pc3Npb25zIjpbXX19.l_4tZ0R_EpfYVN5wionUOe6dLHKeKSBVRWDEhE5RAlmazRnsAOWJYFDXTvB8UObRRlDytT5u18cd3zO97_X5wg"
}

Ejemplo de uso

import requests

api_url = "https://www.myserver.com/auth/login/"
headers = {"Content-Type": "application/json", "Accept": "application/json"}
payload = {"email": "jhon.doe@jdoe.com", "password": "tuMvERweRley", "close": True}
response = requests.post(api_url, data=payload, headers=headers)

Logout (Cerrar sesion)

Este servicio permite cerrar la sesión de un usuario.

Retorna:

HTTP Status
  • 200, si la sesión del usuario ha sido cerrada con éxito.
  • 500, cualquier otra excepción no manejada.

Refresh (Actualizar)

Refresca un Java Web Token y actualiza su tiempo de vida de acuerdo a lo configurado en los settings.

Parámetros:

  • token: String con el JWT actual para la autenticación y actualización del mismo.

Retorna:

HTTP Status
  • 200, si el proceso es exitoso.
  • 401, si la actualización falla.
  • 500, cualquier otra excepción no manejada.
JSON
{
    "token": "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoic2xpZGluZyIsImV4cCI6MTY5Njg4ODMwMCwiaWF0IjoxNjk2ODg0NzAwLCJqdGkiOiI4YjBhMjhlMjg5ODA0NzNkODcwZWUxMTkxMDMyMmJmOSIsInJlZnJlc2hfZXhwIjoxNjk2ODg4MzAwLCJ1c2VyX2lkIjoxMiwidXNlciI6eyJlbWFpbCI6Im1hY2VyY2hhQGdtYWlsLmNvbSIsImlzX3N0YWZmIjpmYWxzZSwiaXNfc3VwZXJ1c2VyIjpmYWxzZSwidXNlcm5hbWUiOiJtYWNlcmNoYTIiLCJwcm9maWxlIjp7InRpbWV6b25lIjoiQW1lcmljYS9Cb2dvdGEiLCJ0aGVtZSI6ImNvcnBvcmF0ZSIsImxhbmciOiJlcyIsImF2YXRhciI6Ii85ai80QUFRU2taSlJnQUJBUUFBQVFBQkFBRC80U2NMUlhocFpnQUFUVTBBS2dBQUFBZ0FCUUVhQUFVQUFBQUJBQUFBU2dFYkFBVUFBQUFCQUFBQVVnRW9BQU1BQUFBQkFBSUFBQUlUQUFNQUFBQUJBQUVBQUlkcEFBUUFBQUFCQUFBQVdnQUFBTFFBQUFCSUFBQUFBUUFBQUVnQUFBQUJBQWVRQUFBSEFBQUFCREF5TWpHUkFRQUhBQUFBQkFFQ0F3Q2dBQUFIQUFBQUJEQXhNRENnQVFBREFBQUFBUUFCQUFDZ0FnQUVBQUFBQVFBQUFQbWdBd0FFQUFBQUFRQUFBTXFrQmdBREFBQUFBUUFBQUFBQUFBQUFBQVlCQXdBREFBQUFBUUFHQUFBQkdnQUZBQUFBQVFBQUFRSUJHd0FGQUFBQUFRQUFBUW9CS0FBREFBQUFBUUFDQUFBQ0FRQUVBQUFBQVFBQUFSSUNBZ0FFQUFBQUFRQUFKZThBQUFBQUFBQUFTQUFBQUFFQUFBQklBQUFBQWYvWS85c0FoQUFCQVFFQkFRRUNBUUVDQXdJQ0FnTUVBd01EQXdRRkJBUUVCQVFGQmdVRkJRVUZCUVlHQmdZR0JnWUdCd2NIQndjSENBZ0lDQWdKQ1FrSkNRa0pDUWtKQVFFQkFRSUNBZ1FDQWdRSkJnVUdDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FuLzNRQUVBQXIvd0FBUkNBQ0NBS0FEQVNJQUFoRUJBeEVCLzhRQm9nQUFBUVVCQVFFQkFRRUFBQUFBQUFBQUFBRUNBd1FGQmdjSUNRb0xFQUFDQVFNREFnUURCUVVFQkFBQUFYMEJBZ01BQkJFRkVpRXhRUVlUVVdFSEluRVVNb0dSb1FnalFySEJGVkxSOENRelluS0NDUW9XRnhnWkdpVW1KeWdwS2pRMU5qYzRPVHBEUkVWR1IwaEpTbE5VVlZaWFdGbGFZMlJsWm1kb2FXcHpkSFYyZDNoNWVvT0VoWWFIaUltS2twT1VsWmFYbUptYW9xT2twYWFucUttcXNyTzB0YmEzdUxtNndzUEV4Y2JIeU1uSzB0UFUxZGJYMk5uYTRlTGo1T1htNStqcDZ2SHk4L1QxOXZmNCtmb0JBQU1CQVFFQkFRRUJBUUVBQUFBQUFBQUJBZ01FQlFZSENBa0tDeEVBQWdFQ0JBUURCQWNGQkFRQUFRSjNBQUVDQXhFRUJTRXhCaEpCVVFkaGNSTWlNb0VJRkVLUm9iSEJDU016VXZBVlluTFJDaFlrTk9FbDhSY1lHUm9tSnlncEtqVTJOemc1T2tORVJVWkhTRWxLVTFSVlZsZFlXVnBqWkdWbVoyaHBhbk4wZFhaM2VIbDZnb09FaFlhSGlJbUtrcE9VbFphWG1KbWFvcU9rcGFhbnFLbXFzck8wdGJhM3VMbTZ3c1BFeGNiSHlNbkswdFBVMWRiWDJObmE0dVBrNWVibjZPbnE4dlAwOWZiMytQbjYvOW9BREFNQkFBSVJBeEVBUHdEK05XQUNRYlQ2MXQyMGlXMG1HemlzcTJZTkdEMzRyWWpqVjhocS9mNlZKdG40eFZsZEcxSGMyYm9CSzIwZHMvUTFGUGI3TEdLT01nZ1JyeVBkYzFuQ0JQSytmbkZiVW9DMlVXQmo5MG4vQUtDSzdLY2RIRTVPWFc1ejBpa3FvOU0xMU9nRmVGYXVia01lU0IxRmF1alBod3lIdlUwSEdMME9tck5PTHNhZmlhd0RMejFVWXJ6aUpUQkx0NzU0cjJQVlltbnMvUDZzZXRlUzNFSk11QWRoem5PTS9wV2VNZytkTXZMNnE1ZVZuWDZaY00yMk04RnVtZTlmYWZ3UC9aQytKdng1anRidlNoYjZmYTNqbU9PNXZXS3hFcjE1VUVBZWhKQUo0cjRxOEM2TnJYajN4dHB2Z1h3eEQ1NzNVOFlmK0hlUTMrcXllQUNPV1BZWjlxL2FYd1hONE0rSHVxQzIxTHhyNG8xQy93Qk9aWWpCNGNhS0d4dE5wNVZoSXlvcW8zRzFnekgrTUxtdHN2Zk9tMGNlYlV2WmF4M01qeDMvQU1FSmYyc3Jud1hONHUrR2NtaytMSklGVjdqVExXU1MxdlYvdWxVbVZVWUhzZCtENjErTTN4YytDdnhNK0JYajI1K0hYeFQwUzYwRFhiTFo5b3M3eE5raUs2aDBidUNyQThNQ1FlY0hnMS9xVy84QUJPM1I3YngzOE5kTTFYWEkwbG5odFVTU1pVOHA1OGhXekxGdVpZMmRQbTNSTXlNZDJEeHg4a2Y4RjF2K0NSSGgzOXNUNEZ0OFgvaGZwVU1IeEI4S1dNZ3RMaUloR3U3WlNaUHNzdzREODh4a25jckhBeUd4WGo0N0hZZDRuNnJKV2srcHRsZUx4WHN2YXVQdXJjL3pYZEx1bzFZckoxYml1bUdqMjl5dSt6QlppTXQrRlpuaXZ3YnIvaFRYN3ZRdFl0cHJHOHNwbmd1TGU0UXh5eFNSbmE2T2pZS3NDT1FlbFFhVmNheGFTNzdiY2NlbVAxelhSRlNocEk5S2JqSjNneU41anByRmJwV1Vja0RIT0J6L0FDckU4TzZqWURUVkZ3SEdYYzV4eGdzU0s3SzhMWE1NZ2xUTXFvenVvNHlNRWtmV3VZMERSemM2VkRNMXRJeDhvUDhBS2ZsSmJrY0gycTVLVGxlSnJDVVBadE5XTHpmMlBLTm9sVVo5YXF6V0ZvV3pFNnNNZGpVZHhwTm1BUVk1VTlUdDZWbnphY0Y1Z2xaUU94V3VmRUtTMWtPbHkyOTBkSnBqSWQyUWZ4cG45bktlVzYwd1BlUWZOSk5HNDZZd1JVWjFtR0Z2TG0rWWpydC9wWExHckZzNkpVMmovOUQrTkxUakg1V0ZCem11aWljSTNOY3pha1JOZ2NMWFJLVllncFg5QjBJU1V2ZVorUFl4NldSUGNScWlIYjJCL2xYUnVDYkNKbC91TC9LdWFuY0ZUdUk2Z2ZoM3JyUGsvc3lCb3puNUIwK2xkZExXYlBPcXV5dWppaTdwZWt5ZHdRS3Y2SHVqdTNoYitIbXMrOFltOUNqclZ5eWUzMHVXUysxYWRiZFNNN1pEaHlBZjRWQTZIc1RpdVJPTWFscE95TzMyS2RLNjNQWFlMU2E1dFFzU2I5cTdpY2dZSEE3L0FGcnhYWGRmMFdMV0YwV3daYmk0WWdFb3dLSVNjL01RZW85UFdzWFUvalA0MWd2SjQvQkZ4OWdnWWJWWGd1UjNMRThEa2NWbWZCWHc4MnVlSXJqVU5SK2Viek1CaUFUNWttY24rWjcxdzQzT29WR3FWTGZZOW5MY2k1RTZsV1doK24zd2crRXZpbjRXNk5lYTVwMW0wbXZhL2FQRGEzQlZ2M0tTZ2x4RG5oWlg0WHpGVXNGSndleC9RdjhBWlcrQkErRHVqMmFTeVJwSlBNMzJwNVNyM1VNajRkRUN1clpYR2QyUG15ZWVtSzhyOFFUM1BoQ0dDMnRaSkFsbmIyL21UeGgvUGliQTJJRHlGd3VNaGVSMUo1cjZuL1owOE4vRkR4UHFPbmVKTGpUWmJtTzdZM01FOGpaK1Jjb3hJWWtrOWVmeHI2emxvMGVXbFRWNWZsL21aNVprOVRFeWRhcTdSdjhBZi9rZjBqZnNaL0ZQeFI4T05Mc3ZCZHlKTHkyVnRsbk1xaU1wYk15c0ZjS0FHTUxFNFBIeU1jODErbzN4bDhWTDRoL1pMOFk2dHFFSXVJNE5GbkNvNDRaMUdBY0hnc0d3VnlDTTQraC9QYjluWmJNZUU3R082RVFrMktzYnNRVlhqTEJuL256eldOL3dVQi9hcTE3NGErQXZEbndROFB4cEpMNHhFcVhFNllDdzJ0dUF4SzdDVHZkeW93ZXFpdkJ6bkwzaWNSVGpHRnBwcHQraHBqc2poZzZkVEUwNm51Nis2ZnhKZjhGVlBBZWo2TjhlTFB4aHBwam1tMS9UNHByeDBCVU5jUkR5aSswODduakNGc2NaOXEvS202dEkxT2RoL01pdjJNLzRLVVdGNXFIeFh0OWF1VVUyVi9hazI0QTJ2Rk5ic3R0Y3hOR2VVdzhRY2RBeXR1SFVnZmxicU9sQU9RZUFPbGZTNTdsNmRhVTBmRVpMam5Ha3FiNkhsT3N4eHg2UmNUd05zZEkyeDM3WXJhME83c3JUVElMVnA1STlpS29EREJ3QjZkcXBlTWRJanR0R251b1pHYmZ0WFl2QURGZ08vSno3ZmhVeHNWYUl5bEM3NXdXNTUvUG44NitkalRuRjNSOVFwUXF3OTdRNlNTNmdaU04yZnBXSmRzcjVTUHAxckdEem8yQWpBL1NwM21jZFZOS3JWNXpMMmNZNlJZU0pGSXUxa0RmV3NTNnRiUVBrd3BrVnZENWVXRlpjL3dBODdjWndvd1BmUCtGZWU0MjZIU3BOYkgvLzBmNDBMZERKSGtkNjFZQTRQWEdCV1BZT1F3R2VLNkdJb0hKYnBYOUFINDVPTjFZam1CWmRvOUNmeUZkYlpzdjlrMisvZ0JBQ2ZweFdCUERzUVNJY2dnamo2Vm96WGNWcG9rQlFGN2hvMlZVUDNjOC9NY2RoM05iMFpxS2N1eHkxY08ybEZHTmFUVzkxcmR4Q3lrckZGODdZeUFXNkFBNUJQSFNwTmIwSnpKSGYrSXBYa3R0d1ZTN0ZncFBDRTV6aENlT3Z5OGV0ZFhwR21RNlpvaGp1U1d1TGVFNmhNT09Ya0JqaEdlcEhWc2ZTdHp4UFlRMjN3Mmd0dFFPNjR1WVdka1AzdG0wTTMwQUpIMHo2MTg5aSthYWxVZlEraXc5RlJpcWFSOHUrSTlKK3czN1hOcnRNY3Z5QUE5RDByOVF2MkFmZ1hvVjNMSjQxOFJoWk5wUW1CR0EzTWVZNHhuSUxuRzl1eUo5N2xnSy9MdlF4cW5qZjdOcGtpaWE0ZGxoaExrNTNCZ29QKzl5Qlg5Sy83Qi93UTBYd3Arei9BRzJzYW8wVjFmNmhleTNDc0ZiQ3h4QVFoVG5JSkxoaXB5Zmw5NjZlRXNGQ3RpT2VTMks0anhMdytDNUw2dlFoOGVhcnFrdmloNzNWQjludDdsWGxrUkFYQWRNZ0RLREF3TWM4ZWxmczcreTlxM2gzd2oremkveFcxUFE1NExMVE5QM3EwRXhTV1NkemdDM2l5SFlNN0Rld1lCVkJPUml2alh3cjhPTFhYdkY2YU40blEzTVZ4RzF5TFdJaE45ckNRR0FHRGtNVGxnTUVqb2ErdHZoLzhSOUU4YStMYmY0S2FuOFBKcmZUYkNWb0xLYTB5amlSZVdLcUZ3cWdFcmpub2NtdnVNWGg0S3Q3V1V0UytFcytwUmdxRlZYWFZuMmgrejVjZUxmSC93QUFiNzRqWGR6ZjJvZTh1YnhKcFVFY3JRS2lmZEh6QUFZd0FjbGp4NzErWkhpYjRrZU5maUQ0ODhVZUpkYmJOeHBVRUthYmJzKzFFdHpNRHRqK1VCWkdLamV3R0N4T0RnOGZ0bDhIN0RVNS9oWHFud3VqMEY5TnRyT1ZvclNmZnVrT3c3OTBvd29BZm93d1QwUFVWK1hmeEg4TVIyZjdRTnZwV3VoTEhUNzFtdDd5VjBBZUZWQWFOMkhCY0dUNVZPUWZtWG10Y21iZFM4K2g1L0huRUZMRlZuUndhdEJINHZmOEZPYk8xOFRhOTRPK0lkcEpDK28zbWs1MWVHSGg0SlM3bUI1QjEvZlJBWlBxdlBVVitRK3NXeWhDN0lKUHIycjlqLzhBZ3F6NGVnMDd3bjREK0lWb2hzWlpudWROMUswUU1GU2FINXJaMnlTUTMyZjVTdjhBQ1FmVTErTzMyeExpMFdUSWRYenoxeml2Unh5VGs0M3NmQjVkSGxqb2VUZUtvcDB0TGFDQ2RsUzR1SWdZOEE0d2QyQWUxYnYyUzRuUU9vWTd1ZWUxVi9GbW5SU2FocFR4U1kzM1M1UWRncWtrK25wWG91bXJadzJ3akRDUThkY0hIQTQ2Q3ZuS09ENTV5UGRyWXJrcHhaNWxjYVk1VWxGd2F6MjA2VlJzWmVhOWZuc29KSlBPQ2hNY2JRT3RaRjdwbTZUTWZISGFveEdYS09wRlBIT1N1ZWFOWk5HTnpjL3BWVk5QZWE0TzBZelhlVGFZRlg1eWV0SkZaMjhhbmRqa2RUWE45VWlkZjE5dlpILy8wdjR6N2FXTnVCeFcvR3k3T09hNGVHVWh4bmdWMU1OeUZHMGVsZnZjSm41SE9ucDJORzh1VlRUbW1ZZ0xFTnpFK2xlbytDZkJOL2NhREY0bjFFZk5jQUczVHVJaWNnRUh2MzlNNHowcjVrOFM2akxkM05wNGFzenZrbGZFckE0Kzl6ajZldGZwQjRuZ2g4Ti9DalIvR1JVR0cwc3BZWlFNWUpRWkhJOWVsR0ZuR3BVbXZzeFd2ci93eDFLZzZNVnpieTJQbVR4VGMydDc0SDF6eEphTHRqMURXSWJPTWorR0swUVJnYnUzelpKeFZqNG4zOEJ1OVdrRW1FMG5TNExUTGRDMDZDWmlQKytnQ2Zhc0hXYmxMRDlrUFJKZHUyVzV2cFpXNUJMTTBqSGNQd3htdkh2alY0cVpOZDFEU1lUL0FNZmtGaXdIWWo3TWc1N2RhOHJNNnFvMCtYK1pSL1gvQUlCOURnNktsVjkxYk5yN3JXL1U5cS9aSitFWGlMeDFORnExaEhpS3dsYTh1cEQxaHQ0Q0haajZCMkFVRWRjKzFmMURmc2NRNnhyL0FNRDlKdW1oampTeEtXeUtJdHFTQ0o4c3lEcTJRN2M0NzgxK0pQN0RjMmxlR2ZoeDRvc2ZFVWtGdEg0bTBkTE5wWkgydkczbkJnSTJCNGRncENqbkpKRmYxSWZCKzAwVHd4NGZzRzBpM1dHMHM5UFI3ZDBBVVI3WWl6RVk0TDV4dTZrOVJtdnRPRTh2Y0tQT3V1cCtmOFg0dVU2empMVkZqd1Y4Tm9vdmoxWmFwWXhlWUlyWXhrRW5BalJRenJnOGpCK1VpdjBkK0ZmZ1h3em92aUVlTWJhQ0tTOWpNVVlaVTVFaWd0SzJDTys1UWZiRmZIL3dBZ2UyMWE4MXkvY1NTaU9aSVdaajh4bC9lelNzeC91NUl5ZjdvOXErenZnMXJKbENYRWNubVJPaGtWTnBKTFNESlA4QTQ3bjhSWHFaaGU3U1BCdzAxRkp4ZXA5WVRRV1FOeHF1bFJ0QUpUdVpGT0FXT1dKL1BQNTE4WWZ0Ui9CM1RQaUxZVzNpeTNnam0xU3hMUnR1SHpOYnlIZHRPT0dNYktDcFBTdnJIV05RaXM5RUZzR0pMRGNldWVja2dlM1hyK0ZlUmVMN3JWTGZTcDd1d0JrL2NibzlweUdPRHV3dmZqSng3ZHE0OHJjb1NTSXg3WExkbjgxSC9CVkx3cGIrTHYyZmRXMTIyUDJodEExQzF2NVNvK1ZvUzdXbTQ0d2Qvd0M4M01UMndEa1YvTWxCSi9ZOG01dDMyV1ZzYnV1MG5wK0ZmMTBmdFE2WlllSlBDWGl2NFI2bEhKYlgydDZaZnJFcFg1WlVpdGtrREhqRFlkMEtIa3FUMTRyK1J2N1RORE1OTTFFQXd5Si9kNkVEMHIwYzlvcU5SVFR2Y01qbmRTZ2lEWEk0aDRnMHFLVmhMSDVrcjlzSENlcDdkNjlLUzhzMWlqM3NDTnVGS25JSTZjVjR2ZFE3TmVzTEtkZlBoaWpsa1RPT0JrS09EMXhXcFBCNUxHNjA4U01HK1dSQ1NjajJKNkg2VjVGUEVTcDNsVFZ6NkRFNFNNa28zUFQzdTdaVC9yVi9Pc3ErMWFCRzNCZ2ZvZUs4OGppU1ViMFhhQjNMZzQ5dXRPTU1aNnZuNmRLd3E1aTUvRWpLbmdFbGE1MU54cWtHRGs5S3dibldrS0haNkhGWk10dkU3YlZWa1B1YzlLekd0b2k0K1k3ZURYTFd4RXJlNmR0SERLTHVmLy9UL2kwbWlWRkJHZW9yVXRwd2liMi9oQlA1VnpVTTkzSW9VUlIvbWY4QUNxMnBOZXhhZmNTdnNWUkdRUUNlK0I2VisxdXZ5cHV4K2FRb3FVbEY5Uzc4STdlMTFmeHRMcVdyc0JCRWpQdWJvclBrRDllbGZwUm9JMHI0aGZDWFdQaEpIT3EzTFdqdmFtUTRVUzRKVVp4eGtpdnpLOEYyZmlhR1dXYlFXdG5XZVB5NVk3Z2Jra1FrZktWd2UvVHA5YStuL2hGck45NHM4VzIzdzhuOFB4YUxxelJzYmJWYk5ualdBUkQvQUZra1pKRHhjYldBNVBRRVlyYkk4WXFjK1ZyU1YwZGVlWUpWTFNUczFhM3lQRlBpSGV0WS9DWHdUb2NwZERDSjBsamJqRGlZOVIySXpnZlN2TnJEVHJ2NGxmRU9IVFFoQ3hLaVRQMUFqajV6K1FyMlg5b0xVRjhUNlFtdFgxckpaNnBwZDNKRGNReFJuN05JNWJtWkd3TWhndTdJNCtoelh6MzhPOVZ2OVA4QUZhM0ZpclNUU1pEN1JuNVcvd0QxMTVXYXpVc1lxZlRUOEQyc0RGL1ZaVmRtZnI5b0dqN1BCRUdrNkJheHJQRk9Rck9Ca3hxQmpMc1FJeU1aYm5JengxcituWDRQYWpDUGd0YmFkTUI1Y05qYjJ6T3d3KzJPRUVER1QwSkl6MUk2azEvTDE0UDhWaUx3bFlhRmZ0T0wxcmlLWWZaemhXSzR5clBuMFBUQnIrZ2Y0S2ZFaTAvNFY4MnJSVFkweUhWN3VKMmtQbWJVdGhqZ0RuRzRZK2hyOWN5TENSdjhqOG56MjdpbSs1OXhmQ1BVbjBmVHJlM3YzSUdvL3dDakdJNFpWWm95NjRPT2NqYm4wTEhPZHRmVm43UCtvUzZmQkFzellObkVzTW4rNldrVXQ5UUFQeXI4OGZndjhUYkhYSnJtSjIrU081SlVxQmhGVVlHM0JKNFVEY09DUnhYMTU4TXRhbXRTSVltQmVhUUFEMURLeCtVREFBNDZZcjBLOUdMYlZqd2JjcnVmZWQvcTF1Yi9BSExKdlNSUVFqY3VXalAzQmpqTEQxOUs0VDRrNnJKNGI4SXZxa01mblF0S0JGRmpMS3pjRlNlNENra2cxbkNSZFR2Rmt0WkZSaXF0dUI1L2RnNS9yaXVBK1BQeEIwTFFmaHJkVytybGlMWmxrZVZHMjhyODZqZDE1SXgyenlLOHJDWUp5clc2Sms0N0VXamMvRlg0dHcrTHRVL2IxazEzWExacmJ3em9maDJLQzFrTXU2Sm11cGk4NHc3bkRvUVVZWUdBZzlSWDg1LzdSdnc3UHcrK01QaVR3WEpCTkI5a3ZwamFDYU14dEpiTzVhRjFCNEtGU01FZi9XSDlSOGZ3MjF2NGxlSmRRMTZFalM3Q2ZaOWdYZXZuWENxQTRrazVsSFhoVDk0OThIaXZ6YS80S20rRFpyTDRZNlQ0OTErd01Xc2FQcWEyUXU0WkJOdnNiZ1NOaG5IekJkNFVxckFGU1Q2MTYrWllCZXcwV3o5VGp5N01uOWFWbDBzZno3UXgrYjRyanQ3cksrVGFzcFhrTUNYeUNlQ01ZOWNWNk5QWjJMeHBHVlBUMXhYRzJVbHBxZmlxZTdiWklua3hsMjM0Sk85dS9RSDYxNjFEYTZjRzh5TGJHcmM4eUtUK3ByNWpDNGYzV2ZYNDdFcExRODBuME8xVnkwUzdGL3VqcCtOWmN0dkRhL3V4eDNyMVdTSzFtVTRqWEE1eXJJZjFIQS9Pc1diVElKc2xGUDZWaFd3aWhyb1lZZkd5U09CdVhDbko3Wi93ck4yTjVZYVB0d0FlcDkvd3JzN3pTN0tPTXRjdEpLbzdLUU1lL0pyaHIzVXRDdDVERkZjdkV5L2RSaGxxODJ2c2UvVG56SzUvLzlUK0pRM0VrTW0wSDVhemRkdXYrSlBPRy9pQUIrbExlTzNsNEI2SE5jaDRtMUkrVEZiTDBmNzN2aXYyREZWSXhwdHlQaXN1d2puSlhSN2o4SUwvQUV5eXM3dTVuVUZ2SStVTTJNa01wd000NmozcjY4K0VrR3A2VGR0NDlrZlplVFJiRVFBTnRqMjVDWVBHRFg1Y1crdFhGc29peGxGN1p4WDBKSiswejR0bDhPdzZCcDFta0loUUtYakJ5UUIvRWFuS3N4cFUyblBwdFlyT2NqcTFHNVU5bWZvcnF1aVhmanJ3dGR4YXpjUW8wa0VrVVVMdWk3ZzZsUXdVdHRCK25Tdm5uOWtqOW1uVGZpMTRhOFEzbGxZdU5aOE1TWkV6dXhTNTViOTNHVU9BeUtNNHdRMmVLK1pQaDc0cDFmNGgrUGROOEthdmVUMnRycU53c1V6eGttU09EckpzSDk0cmtjOThkNi9lUDRHZkFuV2ZEdWt0WmZCdlY5TTAyd1dZT3NFdm5DNGtqVW5mNWtSRzd6R0FPZlJ1T0srbHlyQzBzeHJLcTQyNVR3TTF4TTh0b09qS1h4YmJuNTFmRWl6OGRlRHJPemUxU0JMVy9sV0I3bVloR2d5eFVNeWpzbkJKeGtWK2p2d0grTlhnRHhSNGF1dmdXMnZpMjFYVHIxTlN0THRNcEZmU1N4Z1NSTVNmbExOOHlidUNTUlhiZUl2MmVmQ01rMC9pcnhzMGVzWEVBTGJMaENpaFc0QVdNNEFJOU9wNjE2TDhFZjJHL2dkOFFkUmc4UStNZEEzenp1RXRyVFNuZTBta0orNkdrUTV5ZTJPbk5mVTBzUFV3dFp5aHF2UHQ1SHkxYk1xR0pvY2owYS9GbnFmN0YrcXRvL3hpMVB3ZGZ0SjVzVEY1UE00Yjk0MHUwZkxnWnpqSzlOcEdLKys3YjRyRDRlNnhMZGVLZzhOdnBWdEc4MGlMblpsdjliZ2M3R0w0R2VtSzdlTC9BSUpqWC9neXhoK0tQN09rcVBybWxyQlAvWmh2WnJ3enh4UnFra1Viekk4Wm1DTGdva3VTVjZIT2EvTTc5dlA5b0h3LzRROE9hejRLMDFMaUh4TGZRZllib1NSN1BzMzNmUGhsRDRJa1ZQbDI0R053UFZhOUpaelFjSlRUVHNjR2E1VFdwT1BORnBNOXEwci9BSUxoZkNYd0xjeVJ6L0QvQUZEV3JpeS8wZUtaZFRTM2lkSXl5bzVRVzdzTjRPZnZIdG12TVBpYi93QUZ1ZmgxOFNkRmswSFd2ZzFGZTJjamJ0dHpyZHgxd1J6NVVjWklJSkJIb2Evbm1hWHpITHRrbGozcGNFa0FWOEZQUDZxYmF1cmluaFUvY1IrM09uZjhGbXBQQ3NYaytCZmhGNGR0VWlBQVc1dTlSdUZVS01EaDdoUng3Q3ZIL2lmL0FNRmFmR0h4WjBxWFFmRi93dDhCM2RoSzZTUEJjNmZOY0s3UloyRmc5d2QyM0p4dTlhL0xPMHNMaTVrTU1RM0ZzREF5ZVNPQWVPTTlCM1BhckhpbndoNG04R2F0UG9IaTNUcm5TciszSUV0dGR4TkRNaFpRd0RJNERLU3JBNElCd1FlaEZiVnMxcVRYTEw4VG1oaHVWcVVkR2ZYZy9idnVOT2thYncvOExmaHZZOFlKWHdycDBoSHBqemtrSi9FazFXbi9BT0NrbjdRdGdDdmgreThLYVNwNkN5OE1hTENSOUNMUW45YStFN2hUNlZubFdZbk9BQUNlVC9kR1RTbmpKYWNxUytRcXJsTFJ5YitaOW4rTGYrQ2puN1l2aW5STHJ3dGVlS1Zpc3I2SjRKNGJXenM3ZFhqZFNyS1ZpZ1FjZzRyOC9wOU90REtXbHVHVmpqZ2s4WTRBSFBUaXZxandkK3czKzNSOFVXZzFUNGUvQ1B4WnFsbmNSck5CY3hhWGNDR1dLUVpTUkpIUlZLTU9Rd0pCSFExK2lYd2Yvd0NDQXY4QXdVaytLeVEzUGlUd3BZZUQ3U1FaYWZYYjJKSlZYL3IydC9QbXo3TXExMHdmTXYzbHJucDA2MEtNVkZ5UHhGaWdpaWZmSk0wbnN4T0tra2JSeWRwdFlta3lBRHNYT2UzYXYxOStPdjhBd1F2L0FHNi9nMXJMNlhwbW5hWjRwdDl3RWR6cDEvR2daVDNNZDM1REtmYm12Zzc0aWZzTy90aGZDYlN0VjhSZVAvaHpydW02Wm9rZm5YZDg5cXoyc2NXNEtKRE5IdlR5eVNQbUJLNDVKQTVxY1JUbWtuWTY2T01wUzBqTS85WCtHMjVuVmdVNzlxODgxZVY1Ym9vNXlFNkQwcmV1Ymg5Ky9PTnZOY2RkTTdYRE9Xems1cjlTemVxbkRrUjRtWFVIRlhadVdka0xpMSsxbmtFNHg2R3ZidmhKNHIwdndxYnV5dUxaSnJtNmpLd3UyQ0VMZktEajF6MEZlQjZiZHl3bG9BTnlzYzQ5Sytpdmd4NE5mWDcyK3ZGVVNUV3NIbVFwakxNNXlBQU8vd0RTdk13VWZlVW83bzN6Q0VYUmJuc1pId3p1TkIwVDRzVzB1dlhhQ0tXWmthNEFHd0VuQk9TQ09lY1k2SDA2MSs3bmh6NFUrTTAwSzE4UStDL0VVRjVaN2ZOdG1oQUVpYmlTc2I0SmJnSDVpUmpBSGZtdndMMWI0YzYvb21wUzJ1cHRpZDJPOVZ5VkdPZXZyejI2Vjc3OEh2Qy9qQzN2Wkk5U3VIazBxNXR6SExGSzhqRHlsS3NER3l1cFJzcU9weGpnam12b01semY2czNSbkhkbmdaNWxzY1ZGVll6dG9mc2Q0NDhTZkgveGo4TnJ6VnZCR2hSNnZmYVU2d2hSTWdDQWhoTkpFak92bk9vd1FoT08rZTFYL3dCbHo5cHZ4RGJlR2sxTStNRjhPZUk3RzkreWFSTmNNam90MUNGZVJabGJMSU5yYk9Cbm5QSUJyaC8yUi9pcDhaZkNueFcwV3grRGxqYTZURmZzZFBzRjE5Vm0wM1VtaFNTUXEwQWpMUmx3TWViRXlsVDFZak5mdmY4QUFMOXBYL2duSCswLzRsdWZnSisxaDhOL0R2Z0w0aTJjNGluMHJXck8zUzJ1Wmd3QWUwdldSY3JJZVUzc0NRUnRaK3RmYjA2YXJMMnNxbG50WnI5VDgzL3RKNENwR0xvYzZUdmRQb3U2UHAzOWlYOXFLdzhUdzJtbGVHcktEd3A0K204eVJ0TGtaSTlKOFFaK1p4QWVZbzUyQTh6ZEh0UnY0dHZVZnp2ZjhGblBqLzRIK1BYN2J2aVBYZkJPaVNhRUxCSU5QMU9LVEFhZlZMZU1SM3NyZ0VqY0hWWUN3KzhJUTNPYzErNVgvQlJ2NEVmOE1XZnN2Nm40My9aOTB6VGRBOE5pOGlrTEplWEl2TEc5bGtVV3JXUWxtZU1zR0M4cGhpb1lsTnVTZjQyTmYxdTkxclZwOVgxV1UzRnpjeVBMTks1TE83eU1XWm1Zbmtra2srNXI1ak9NUENqTlNnNzM3SDArWjhVMHN4cEwyTWJkN2xjT0NSMnExRStIR0RXSjlvU2dYQUJ5akEvVTRyenFsZUxTYlBBOWhMZTF6OStmK0NOWDdhSDdBLzdGMC9qRHg5KzFsNE51dkZIaWVjVzBlZ3lSV1VGNUhCRXU5cDhDZGdJNVdmWmh3Q2R2QXh6bjh3LzIxZjJocm45cXY5cG54biswSnFFTFc3K0tOUm11MGhiWm1LRXNSREdTaW9yRklnaWx0b0pJeWNrNVB5dEJxQmpqRE9lUFk1cUc4MUt5QURTU2hSemtraitXZjU0clduU3B1YnJYMWZkblZVbGlLdEZVZVhSRk9abEs0SEZmb1Ivd1NzL1lrdnYyNy8yelBEWHdkdjRKSmZERmszOXMrSTVJd1J0MHl6S3M4WllIZzNNalJ3RGpPSkNSOTAxK2ZtbTIwK3VhaGE2Vm8wVXQ3YzMwb2hndDdkRExMS3pmZFdPTk1zN1B6dFZBVDdWL1psL3dTby80SjFYM3dJL1pXMVQ0b2ZFTFhJZEU4YytNN1ZycTgwdVM5ZlQ1clMwUldXMnQ3c2tJSTVGQmVWeTVQbHUvSlhZVFhSVnhUaEJTNVpOTjI5MkxrMTV0SzJubWVCSExYT282VG1vdis4N1g4bDVuOUpQaVA0VVcxekZCcVhoa2p3L2Y2WWl3MmR6Q1VFY0Z1aXF2a1RSc2Rzc1B5cjhqRUVkVklOZUt2KzB2OEovQU90UDRiK0xtdWFQbzkrWW5sYTcvQUxUdFBzVWl4NFZuU1Jwa2FQQnhsSkZEQWR6WDh1WHhXL1pQOEFmdEZqVE5XL1pSK1BlcWVKdE9DUmpWOUNmVWY3YWJUaXdkM2NtZTZnVkkxMk41ak51UUhKM0FIRmZucisweDhKL2dsOEg5VnRMYldkWDByV251SXZOaDFTME1jYXlCUU9VamFaektoeVBuZ1YwUE8zSTVQMWVGNFpxMUtibkNzbkh6dXZ6MVBIakxEMDZ5cGNzdWR1MWxxeit4SHhEL0FNRk5QK0NXSDl1LzhJYjRqK0xYaHA3dWVRV3ZrcUxpNldSM1lLSTFlS0Y0MkxNUUJ0ZHNrNHI0ODhmL0FMZjMvQkgvQUVueENQQ2RuOGZmQzl0ZFg3U3hDeWNYaldjZTFoRzhOektJOWxzYzVVcEtWQkFPUVJYOFhPb2VQZmhicXZpS2J3SkZxTndscHExbkorODNrUnlOOHl2QUcycHRrSTVUS2ducDFySytKWDdNL3dBQXZHK2lwcVduNjNwdGxjM2NheStZRmEwZG5JQTVPM3lYR2NndDZnanJYeXVXenpHcmlaMGFOUk54N3ZmelIraTVqd3JsRU1OVHhWYU1yUzY5bjJaLy85YitDdTV1VElwQU5Zei9BSHFuYVFnZEtyRTVOZmVZdW9tN0hQQldqWVZKSGlPNlByWHZud284WFhYaGxqcWFzUktFWlJnbkpWMngyOVJrVjREWGRlSFlydG9vaGJydkliSlhrWlhQUFQwcml2Sk84UlNpbXVWbjZhYWZhNkY0bzhPemVLNzZTT0czZ2haeklEZ2dLTWtEL0N1THRmRU9uNkY4S0x6eFZjVFBOZGFoUDVWaXJyd0lFN2tZNExjNTcvZHpYeVRlK0tCcVZ0YTZCWnpQSEJjU1lsZ1U0VlJHY0FONzg1UHJYWmZFRHhCSmRReDZiYk1Qc3RvaXhJcTlOeEh6SDZzZXY1VjZqekJwcXBINGp5UDdJZzA0U2VoOU0vQmo5b3J4SlpmR3Z3WDRqMUdkNUlkRTFOSmh0WitGSytYZ1lJd3FvV0JHT3BQclg3cmZGYnhUK3pSKzFsb0owUHg1YU0xNEl3dGxxVVNnWFZtNXlENVVxbmRnTUI4ci9MMnIrV1B3dnJGL3BUSFU3UnRoVnd1Znd6WDA5NEcrS21yYWZNQmEzVEtycVVZS2R1ZDNVNTlhK3M0ZjRuOWk1WWZFcm1qTDhENWJpRGhUMnpqV3c3NVpSMDlUN1ErS1h4YS9iRGorSEZ0K3lmZitPVzhhZUJ0QXZ2dGVuVzk3TzIyMW1DTkdNRStZZHFvN1lRSGFwYjVRTVYrYlh4TjhSZkZyNGZzcjZucGtFTnM3YlZ1RkxTb3g3QTU1VSsxZm9aNE14ZHdLN3hoako4eGJLakpPT2VLNUw0ODZObzJvZkQ1cmZXZ1ZFY2lSWEkyZ0FMS1FnZGNjNVY5cEI3VjA1amtrSjBIV2d6Z3dHT3BScnhvMUthbDVuNVkzZnhuOGN6ZjZ1ZUpNOWtRZjF6L09zci9oTy9IMnBFajdmS1BaTURIYjJybU5jMEc4MFBYcnJ3OWVEYk5hU0dJOFl5UjBQUFk5UlhyM3c2MGpTbmRpNmlhN3R6eEczZjFJeHprVitkVkZPUHV0bjZYRERVSVJjNHdSMXZ3eThIZUl2RkdxQk5mdjdxVlpHWDkySkdHUWV4S25BcjlKL0Evd3Q4RHl3cnAxNWFRZVdxQU16cXJjOGo1bWJrbmcxOHQvQlV3NjU0cXY5VVVNSXJDTGxWT0NXQXp6MklHTVpyMm40T2VLMzFmeFdZWGo4MEZIbFVIRE1xbHlPZlExOWR3NDZLbkQyNnZkdEw1SHlPZlFxdU1uVGR1Vkp2NW5vL2pEd3I0eitIdXBlSHZIM3d1MGpUZGNQaG04aXVyZUM2SXRuaE1FZ2xTV0M5aWxnbGk4dVFBa2VadDlCMXo5Yi90SGY4RnFQMjR2MmpmQTJxL0N6eHY4UGZBTnRwV3RSZVJleHBkT3J5b3JCaXBtVFVGZkRsUm5CRzRjRTROZVYrSU5QYlh2QWZpVFNRTXBMNGUxU1JBZXU1YldSbC9XdjV4WmJ1ZkM1WmdjYy9NYStpNG94cndNNHZENktlNTRlUlpGaGN5aHo0eUNsS205Tno5ZHZDUDdWWDdUM3d3ZTdnK0YraWVCL0R5YXBBdGxkTEdMVzVTV0ZYVjFpa0YzZFRoMDNLcEljRUhBem5GWXY3WEg3V0g3Ylg3YUhoelJ2REg3UjNqUFRkZHR0Q2xZMmRyYng2VGFKYUZVMkw1Y2x1RWJZVkpBUUhZQ09tYS9KMWJtUlRrODA3N1hMMk9QcFh5V0k0anFWWThsYjNsNjJQc3FIRG1GcFZmYjBvcU11L0tuK0xkejNqVC9BSWNhOWI2cmJwYzNhaUxlTXkrYkE1US8zc2VaazQ2bkhQcHpYMEo0SjhVZkV2d1ZxSDJ2VnZEMmxlS3RQZ2RnMEdvVHFiZVhuQkpVU2dwNWc1NElQcUsrQURjU2tqY3g0OXpVNDFIVVBKTm9zMGdqYjd5Qmp0WSs0emcxODdUNUlTOXJCZThqNk9WVjhuc2w4Si8vMS80RUgrL2lrcFgrL1NWOXBXK0k1eUpTZHdIdlhzbmdnQVdrakRxSStQOEF2bzE0MG4zeDlhOW04RWY4ZWN2L0FGekg4eldZSElhR3pmOEFDUUkyZVNDVDduUFd2UmRXSi9zUmpubk5lY2FIL3dBaDZQOEEzVC9PdlJ0Vy93Q1FHMzFvVzZBNkhTVVQvaEN3eEF5WjQ4bi9BSUM5YUdrZjZ0UHFLbzZUL3dBaVNQOEFydkgvQU9ndlY3U1A5V24xV3V1bi9IajZISlcrQ1hxZnBCOExYY1N1Z0p3QkZnZHVTTTFoZkZuNS9EWGlBUHppMDcvOWRCVzM4TGY5Zko5SWY1aXNUNHIvQVBJdCtJUCt2VC8yb0svVlpmN2l6OHVoL3ZQelB6Vy9hSUFUeG1KazRkN1czWm1IVW5iMUo3bXNUVHBKTGZ4UHA4bHV4UmpNY2xUZ241UjZWdWZ0RmY4QUkzcC8xNlcvL29OWUZuL3lNbW5mOWR6L0FPZ2l2eVRGZnhQbWo5Ync2L2RmTDlENy93REJjTU5wNHA4VVJXcUNKZnM2Y0lObzV0UVR3UGZtc2o5bTVtVHhIZk9od2ZzU2Nqci9BSzJ0dnduL0FNalo0by82OTAvOUpSV0gremovQU1qRGZmOEFYakgvQU9qYStneXI0cUgrS1I4cm12dzEvd0RERS9UYnc2cXQ0SjFKMkdUL0FHUmVqUGZCZ2s0citZV2JwK0EvbFg5UGZoei9BSkVmVXY4QXNFWHYvb2lTdjVoSnZ1L2dQNVY3dkh2L0FDNU9MZ1QrSFc5VVJVVVVWK2VuM0JJNEFIRlJIZ1ZNL1NvVDBOTmJNRC8vMlFBQS85c0FoQUFKQmdjVUVoSVVGQk1VRlJVVUZ4Z1lGeGNYRnhnWEZoY2NGaHdYRnhjY0hCd1hHQndvSUJ3ZEpSd2NGeUl4SVNVcEt5NHVMaGNmTXpnekxEY29MUzRzQVFvS0NnNE5EaG9RRUJvc0pCOGtMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN6L3dBQVJDQURLQVBrREFTSUFBaEVCQXhFQi84UUFIQUFBQVFVQkFRRUFBQUFBQUFBQUFBQUFBd0VDQkFVR0FBY0kvOFFBUkJBQUFRTUNBd1VGQkFnRUJBVUZBQUFBQVFBQ0VRTWhCQkl4QlVGUllYRUdFeUtCa1RLaHNjRUhGVUpTMGVIdzhSUWpZbklrZ3BMQ0ZrTlRvcklYTXpSRVZQL0VBQmdCQUFNQkFRQUFBQUFBQUFBQUFBQUFBQUFCQWdNRS84UUFJaEVBQWdJQ0F3QUNBd0VBQUFBQUFBQUFBQUVDRVNFeEF4SkJFekpSWVhFaS85b0FEQU1CQUFJUkF4RUFQd0R5VUpRRWdDY0YySEtPYW5oQ2hLQ21JZTV1blZjNUl4eGtkVTRwaUJoSW5KRXFLQ01SU0VGaFI5eW9sa1dvMURDa1ZBZ0ZReTBQYVVVRkJhaUF4SFBRSmlhREFTcE5MWmRWL3MwbnU2TkpWcnNzMGFJL21IeG5jMEVrZWkyM1p6RjA2ME1ZY3hHZ2d0cWY5MWo2cWpOdWp5akc0QjlPMVJqMmYzTkxmaW9ibUw2VXA3T2JXWVdWV3RlT1k5eEJXSzdlZlJ5MXRBMXNMVHl1cHlYTUUrSnUrQnhHcWxwRnFaNCswb3JFajZjV1RBVk9pOWgrN2xOTFZ6WG93QUlWRWdHbE1mN1RVU296eVVkemZFa3lsUkp5cE1pQ09TWE9VV0toK1JOeXJoVks3dkVoalNGMEltWklnQm1WZGxUMXlBRmFuQk1ZRThLaWFIQmNBdUM2RXhDalVkVTV5WTNVSWprSUFaS1FsYzhydHlRRG1vN0ZHcGxTV0pvVEdWUW81VXh3UUhNUTBOQWdRRWZaV0dkVnFDTlp0TzRjVDBDRUc1ckM5MW9NQTBVS0pkclZjRERpSURHMkZoekpBbjhGS1ZzcHVrV1RXNGVpWUxCVmR2Qm5NU2Q1dUEwZGI4bGM5bjhXMnBWRVVHMG5OdURUYzdPT29kWnc5RmxkaTRRZ3VmVUpJbVptNUpQRmJUWndMU0h0WTBsdmlFRXlSdnVkVm9zbWJpZXFiR2JtYUNTSFNCbGRjVzRFY3ZkTUt6ZlJ6QTgxbjlrYlFCQUlNQjBPQTN6bzRmQlhlR3hFam5LNStTTFRzcURqcG5pUDBwOWpYVVgvQU1SVFlTd3pueWl3T3VZamNGNW0rbXZwSHQzRFgwemNrZ2gzOXVtbWgxdUY0THQzQUNqV2V3ZXlETGY3VGNlNkZzbGNWSVYwK3BUWlU4TlBCRUxVMk9ha3NYa2czem5rRVV0UTZKSmM0K1YwdzBFZ3hvbWs4bElrcms2SnNpMjRKcGFGS0lUSEtXaXJJK1FjVjNtandtbGdVME93UGVKZSs1SnhwaGRrQ2VRd2MxRUNHaU5LZENZcWNVMUtWUkp3MUNLNUNicjVvejBJVEF2Q2ExT2VtQkpsSWRUMVVtbW85Sm0rd0hOTnhHSmdaVzY4ZEVXa2dxMldKb2pMTXQzNzRWSld4SmVkSUhKTWVYSGVTbllLbkxsRXAyYVJna2FQczNRQm5OYUFEeDZxM0dFYVRjdzA3M0tOMmZvZ2g1Nkcra0NUZjlibElxVmQ3aklrd2RGdEdsSEpEVGNzRnZobnNaNFJEbXg2bmp5VjFzUUV4dUIwSG1zdGdROCtJQWthTFc3QnB1QkVpUGtpM0kxakJSTkhoTUVRZVZqNWhhYlp6RGNuUlZPRU5nTjZtVnNSM1ZONzNTUXdGeDAzQ2RGRTIzZ1h4eDJWSGJlcE5hbkdyVzNHK0NicnhydGUvUFd6YW1JSjV0TUgzcmMvV3o2cE5Xb2JnbjBCbFlidEhRTEt6Z2J0SXpzUEZqdkVEMXVaNXJXTWFoUnl0LzZzejVhbUVLUzlxR1dxR2kwd0ljZzBqcVozNktTK21OZFZIdzJubm9wb3RNSUtoVHM2UnlaS05CZ0pLUk5CWFNnUXE1Y3VKU0dNS1NFdkZMS1FEUWxDUnFkQ29Rb0tWSUVxQkNEVWRVZHlCR2lPNU5DWUtvdVlJQVA1anpDWlhKTmhxVVpvaTNEVlJKbHhRQ3NTNDZBSGw4a0dyUmdLZlVvMnRycUR6L05Sdy9NSmpyMVVNb2hqUlR0azRZdWZhNDM5RkRjQm1oYW5zMEc4SkRSbUkrODZEcWZ1aU5FNHh0bFNkSXZjSGdoVG9rRVhkSERTT2ZWQWM0T3RBdFBSVHpUelFiays3OWxDZFJjM01RQkh2OXk2SkxGSXk0M25KcHRnWUthWUFJTFNaNlFyckhPN2xvbHJTWU9XQ2MzWGtQVlZIWmpEanV3Nm9YWlJ1QU04VW0wYXI2dGJ3UElwR0d0RVJEWUZvMW1aVXJDT3VNVkptb0dJY0dNSUVrdEJoVk8zZHRPRE82Yk9aNHVDZlpCTUN3NDM5eTBMYUliU0FKbUdqcVNzSHRmRE9EdzhpK1lHZVBudzVKckpqek5Sd1NjSTVsTXdRTXVVVFBQWDNySGRyNkJwMThra2hyV2hzL2R2QzFXS3BCejJrRDdvNmdpUFBTRlFkczY0cTFNeEdVc1BkZzY1Z0FEZmVESlBIVUxWbkg2Wlp5RTV2TkhLRFVhczJhSURVcVFESTNGTXc0OElzaVlsM2hLU2kydzZmcUZIcFhncFRTMUc3dE55b29MQWxjUWk1RW1WS2dzR3VoRWhOaEZEc0dBbFQydFRySW9MSW9SQW1BSndRQTRKMEpzSnpVQU00STlRZ1hRQ1VSb3pHZDI3OFVYZ0tzVEN0dVhPdEYwK3FJYU9Mako4L3dBazdFVTRZMW8rMjZQTGVuWWsvd0EwTjFBK1FVRmhxaklaK3VpcGFqNGVZMzYvaXJmR3UvbU5idUFMajEwK2FwcXgvbWVhVTlsUlFWbE11Z0FMZjlrZG41YVQzT2c1aUEzVFVHOWp1MTlGajlsMDRlT01PUFMwTDBMWWROb28wMmd6NFovekczd1duRXZUUGxlS0NWNlppQjBSY0RobXlNd2tOZ2FtSjVoU3FkSzJZWHNmVzY3WU5JbHp3ZnRINFgrUzJaaW1FcWRvUXgyVEpPOG5rZUFWa3lyU0xlOGF3eUx3RUNwc2tPY0NBUEdlSG42TFI0SFp6UlN5Z0NSeTUvTlEyL1RhTTZXQjFQRmQ3U3l1R1VtNDRnK1N6ZTJhWjBGanZIUGN0WlJHVVJHbndWZnRqQUNvMDViUEFrYytTSW1VbmJ0bVV3ci9BUERpcmJNSWFHblVuTS9UMTl5emYwaVlVTmZTcUNJYzNLUU5BOER4ZXZ5V3J3VklnZ08wTFFDM2c0U1o2L2lWbnUyMUdjT04rVjdZSnRZeUw4TDI4bG85RTNreExTdUpVZk1XbEZsUjJMb0ZqYWZoSjZmRkVvVTdEWFFJT0xkNGZNS1JUWng1Y2tsc2ZnV1Uxd2xjQXVsVVFKQ0dXb29UWlVzb0hsU1pVUWxOU0E0QmRDUWxNem9IUkZCVHdVS1U5cWdzSXVCU0FwcGRBSktZcU9jSmNHamY4RmI5d0dqS1BUOWVTcDlsR2FnSzBPT1pEZ2R4Q1VjMnluakJXTU9hdXh1dVVFcGpqL2lMOGZtbjdJY0hZaW9lVnZnZ1loLytJSFZEMWY3SzlyOUJYUG1wVkozRWdkTlZWMG01cWs3cHVwR0xxdytyL2NoN0xibWRITlp0MnlsbzFPRTJjRzBUVk53OFpXaittZm1SK3BXcjdNMGlLY3VzSnR4VlRSQXFZYkRzSWpLWkovekd4OGlQUmJDaTBBZ1JZRFFXdHU5NjZZeE9XVEhVcU9WaGtRRFlIbWVDTHNuRCtKeDRENGo5MExHdXUwNmhvRHVXbjdLdzJZM0t3azZ1L0NWVEVpZmg0blQyUitTbjBDUXFyRGs3dDhlcXRtWGdkRm14aFhDM3FoWnZOT3JPdDgxR3FHMzYwUWdaVmJRd3dZWE9Bc1pFZGYzOUZtdHQwdTl3OVpvdUJUbHZVUzcxbGFuYWxTMGJwbjNUWlVEbkF4ZTVKSDl3dnJ4V3lWb3paNU5xbXNkbE1IUkd4bEkwM3ZiOTF4SG9VUDJnc1RZSGpOQjFSMlZCeDg5eWlWajdJUEZITFFmeXNqK0RhUWJ2RWhxQlJ0TEhSZFpIWmk2a2cxQW1PZWh3dXlwV0ZJZVhwcm5wcEFTWlVXT2hTNU1sZGxUc2lrWkhTdEs1SUVpZ2dVYkV2dkhCU0FWQmRjK2FVaW9MSmFiTllXZ0hpdERqUm1wU05RRlRVWGdBRGVQSld1ejhVRExUcHB1V25IV2pPZDdLVHMrNkhWRHdFL0ZSSDFjMVhOelZoaGFQZFZLemQwR0R4RVdWTzEzaUtpV0VrYXJMc1hhQm1vNDhiKzVXT3c2UjFWVXhwZTZGcHNHekxsQXRCOVR3VXdWdXdtNlZGZ0t6MkZyWkVEN0lpNUUzUHFWNkpoRzVnMDhwbmdZMCtLODQ3bk04R3d1Sm5VbWRGNkRnSFNEdXNQaCt2VmRNYk9lWTZzL3htZFBrQkh3VnBoWCtFa0c4UndqU2ZPL3ZWVTh5K2R3QkpFYTIwVTZqVWh3YnhhZlV4ZFUwUVNNQlU4TFR6OTRKS3U2UUFBNktod05pQi9VZmVGYzBLa0NQMUZnRkxRMEVjNmI4MDFvK3lmS1V3dUVubnB3bVB5UkFNMnVxa0dRY2FKdkVrRTlZL0Q4VmhzZGlnTWEyazBFQnJTNHlkN3pNYTdoOFZzTVRWT2MvZEh3QXY4MWhxT3ozdHhsWjdpQ05HbTVrYnI3b0MwU2VDY1pNNTJvdzJYRVAvcWh3OHgrTXFraUZzdTJ0RXVGT3Exc3RBTFhPSGxIbHJkWko0blJSSlpMZzhFZXNmRXo5MFZyWlFUN2JkWkhCUzJsU2kyQ2Mza21TUnFwRXBwQ0dpYkFrbGNpRUpoS1ZGV2NRbW5jbkZOSlFNU0YwSlNQVkpsU0FpaDRYWnd1Q2RLZ3NZNTlqMFFFZXM3d2xNb3ZVc3FPaVEzR3RKQmV3a2plQzRmTldHSGZSZjdEaXgrNlNTSjRlYUVhTTJQN1dsSnNuQ043NEg3TGRKNHExZGt0b21kOW5scmhscXRCQm41L0VIbXM3VnBsamlEcXRSdExBNTZtY3Z5a1d0ZVFOSlZEdFhDWmZITWdtRWNsajQ2SWVIZEJCV2gyZlhrKzlaNmxUSk13U09RVi9nbVEyMzVwY1krUXZHejN6UEZBSkFpZndXdDJkaUlaVU15QVQ2WFdDd3J3eDdYSFFPQjZYMy9yZ3RYc0t0RkNxWGJuR1Q1bGRNV3JPZWF3WGxlckFGcm1SNUg5MVB3NzVqakE4N0czd1dSeE8wSmc2Z213TzYzNWFxODJUVnpORVdzWTMzSFByQ3BrbHRoWFgrUVZwaHFrK2gvWDY0cW1wVklnOHlQMTVLZmhhbG1qZVpIelNFUytuR2ZsODFKb3U0cU5RcXk3eklYVlRwY1dVcEF5dTJoQmVmRnJGZ1kwdjcvbXMxUmFhaGRrRURReU13bnArdFZNMmk5eHFodVdXZ2tFRW5UUzlwTThGWVlLZ1lBWXdnRFFaU3RNRVpLdHJoSGR2TXkwZ3RJeXlPbTVlZWJWdy9jMXFsTUd6VGJvUUNQY1Y2L2l0bDFIQzFGem8wOEprZENzRjJtN0hZeCtJYzZsaDZyZ1EyVGxnVEViMUUydnlWeHBtSmRHZnkvRlNtMHhHcXU2WFlQYUdhVGh5TFJkMUp2eGNwVE93K01IdE1vdDYxNlEvM0tFMGF1ek9ocVFnY2xwejJOckQycXVEYjF4RGY5b0tUL2hHUGF4ZUNiMHFQZDhLYWVDRExsaVlXS2J0bkN0b1B5aXBUcWlKelU4eEhRNW1neXEvK0lIQXFXMFZURnlGSWFQTmNhNFRIQ2RCOGtpa2NXbE5rcGhZL3dBdXE3dW5mb3BESXpsMHJwVFdsUVdqcXhza3c3a3l1N2Ntc2ZDbDdORXNGelhlU1FCdmo1N2xOd3RJTkFWRmc2NERnU2JLMnJiU1lCNFZjV3RzeWxGNkpsSnBKNERmZEQyemhKcG1JTVgxQ3FhbTBUdU9xSmhhYjhRU3hwOElFdVBMZ24yVHdIVnJKWTlrNlhmQnpIQ0EwV2NQdmNDcE5iQUVPTFRxSnZvaTdMY0tEU0dTWTVYS25WcXhxZ0ZvMUh0SGNGcEdDb2lVc21YTkYzZWh0UjBOMW5wdTZyUjdNMnl5blVkVGRKcHVBQjQ4amRDR3hHbVM4a256VGFmWnh0UjM4c3VCNDdvODBsY2REYlVpMXhtSGFBQzJDMmJPOGpQbXJqc3JYek5CNGcyNW5oK3Q2aDRQc3BWYXh3T0liQmFiWlNRQ1l1YmhTTUJSZGhudHpaWE5OcGFmRElIRGNkNjFzenJCWVZuRnVVY0lJUEVxUHRmdEQzTGZDUEdIQVFkTjgrbjRLZGphZWFEdzA5Ylg0ckNkcDhYbnJPajdNTm5pUUlKOWJlU1U1VWlVclpldCtrZkVOSGhaUkhNVTI2K2FFLzZSc1lkSE1IUmpCOGxqbHl3N0ZHcXFmU0Jqai96aU9nQStDaTFPMm1OZC93RFlxZjZpRm4xd1RVaFVXdFh0TGluYTE2aC96dS9GUm43WHJIV3E4LzVqK0toRUpDanN3b083SFBQMmo2b2JzUzQ3ejZvUlNKdVRGU0ZOVThVMXp6eFhJVlI2VnNhUTRqaWtnTGc5S1dCVVdOZ0paU1pDbUZJWVExRjBsRGxMbjZwSmhSQ0pUQ1VwS1k1UWJJRlZOMGhTSnpCS3k5TkJFZWhoSFAwUXlGUDJmaXNsb3VtdDVGSnVzRUd0U0xEQjE1Szc3TlZ5d0U1aTJUcUJJdHVqZXFyRnN2Sk90MWI5bnNyckV4dTE0OHVDdUgySm45VFhZVEh0YUJtWTNkZUJZcXhGUU85azIzQ3dBNmNGUS9VN21nZUlsc2E3b2trQk5ZNTlQdzZnNkxwN05iT1J4WGhaWXpFQTIzalVxd3dGVnJXMkk4dFZrdHUxSzdjdmdjS1JBSmNCSkovcWpRS1gyZXhJTWw4NUd4b1lra3hFcU8rYUwrUEI2WmdhaktERzFITUw4K3JnTXdaMTRIbXI2cGhLZUxwa1BoL0I0QUR3Zm5FL2t2Tk5qN1FxWVIrWnJpK2s0NnpvT0RoODF1Y0ZpUlZIZllXei90VXBpZWJScFBKUTcyZFNna3FNYjIzcDFjSzgwaTQ1UTFybVBGczBrajFCMUhOWUNxNlN0NzlLUGFKdUlkUnBCc0dtQzU4aTRlNjJYaUlBa2ppZVM4L2xKeWIyYzBra3prcVJLa3lhRkFWaHNqWTliRXZ5VWFibnUxaG8zY1Nkd1ZlRjZUOUdYYS9DNEdsVkZacnU4YzRFRnJRWmJFUnJhREo4MFhTMFVrbThtZjdTOWlxdUN3OUt0V01PcU9JTEFQWXRJa3pkeDRBUnpXVWN0cjlJM2F4bVBxdE5OcGJUWTB0Ykp1Wk15Um9GaTNGQ3VzaWtrbmdZUW1rSjVLYVFxSUZwMHk0aHJSTG5FQm9HcEpNQWVxOUVIMFRzWUd1cllsNG1NMlNtTXJTUnZjVHBOcFEvb2Y3UDk5aUhZbDRsbEN6SkZqV0kvd0JyYjlTRjdJV3pNaVFSRUhUMFJkQ3QrSG5tRCtpZkJzdTU5YW9PR1pyUWY5RFo5NjBlenV5R0NvM3A0ZW1EOTV3em4xZkpWaC9CUHBYcGd1WnZwRTNIOWg0Y2tiQ1k1cjVBRGdSWWd0Z2dwMytCZjBvOXQ5bWNQaUx2b1UzTys5bEFkNmlENzFsY1o5SDJGRWcwNmpKKzB4N2lCNU9uM3IwWEViVG9NTVZLMUZoNFBxTUI5SlRQckhEUEVERTBEUDhBV3cvN2tmSWl1a3ZEeWZFZlJ2U3lQN3V1L1BIZ3podVNlRG9FaWVPN21zdi9BTUVZMy9vai9XejhWN2Jpc1RnMnY3ditMb05xd0RrTDJEVzQ4TGlpL3dBSi9YUzl5ZHhZcm5IWjh0dUtZNTFrcFRIRlpObmFrTWxPWTZDbXJsbVVHS0xoYU9ZL0ZBWUZiYklBa2plZEZTRkxSWFlzK0l4MFNVM2xwbHRpclhFWUlDNHVkNVVWdUdQQkpxaEoyaWZnZTBOVU9oejhyYjNndUV4YVFMbTZ0c0hVcXVKYzkrWWpUUnJlT2hpL1ZVK0d3Z0JIelUwWVkxYlpzckd5U1RvQnZXa1cyWno2bXoySHRIRFZRS2VKTHFUM0FYTHgzWm0xbk4wOC9WWFAvcHpoaTF3WStxMFBnbUg1Z2Q0TUZZN3MxZ2FWUjlhaTlvY0docHpXekF4RWdqeVVuRGJYeG15bjVUL053ODJtUzJQaXc5TGNsdmVNbzVuRjNVV2FHbjJDcTBCbXA0a0VURVZHa201MDhFbVBKUDJqaVdZTWlyVExPOUVaMk5jNW9jdy8wT2FMOHh6V2k3TDlyc05qSURYWktwLzViaUFUL2FkSGZIa3N6OUsyR28wZTdERzVhdFNYT0RiTnlEZVdpMGwyL2tWTGNTNDhzMWhtQTJ2ajNWNnRTcTgrSjdpNCtlN3lFRHlVSmM0cHNyQW9jdWxObGRtVHNLSGdwNGNnWmdsNzBjVUpoMVlZbE1LR01RT1Bva2RXamNmUS9nbmFIMFk5T3AweTRoclFTNXhBYUJxU1RBSHFoMTM1QU0xcGdpNGt6eVhwUDBjZG1RMDA4YlY3dXF3dG1rMXBKZ243VHRJSXVJM0U4azBtOWJNNVZITXRHbDJDTVJnOEcyalNER2xvMUxYSE5VY1pjNXhNYjl3MHRkVW0ydTJlMDhNQjNyR01CKzJHbHduV0p6WldrY3d0WjJqMjNoYVZBdXJOY3h1Z0RKejVyd0d4cWJiN2NWa3RuZHZhZUpES0Q2Slk1emNvZG1FRjVFRFVHeFBMMVZjYWxxY1ZmNkNUalZ3ZUNsYjJ2eGRlYzJKcU40UVExdnF3QlFNVy9FRWt1eEZWMmJYK2E1cFBtWUpXOG9qTTUxQ2lING1vQWM3c3JSU3BuZ1RiTTczRDNMejd0Smp6aHF6bVZHVmFiamZLOWpjaG5XQkF0UEN5MmNJSlpKak9VcFZFaFY4TVo4VFhHZnZQcUdmUE5kUnErRHpCekFDMms4QXVBOFJMMmtscGw0SkVBblFxRmpOclptdzBocEJCQkdZQzM5Tng3MU93TzNBY3JvRWl6aHU0VDBYSExxcGZvN29kcFJyMHBjWHNaelI0U0hlVUg4MVgvd0FJL3dDNmZSYmJFN1ZaOXBqVEkxYUlrY1I0MUQrdGFIM0hlNWIvQUJSOFppdVdYcU1rU21GS2tLd1p1aEZ5NWNwQTZWWVlTcEYrU3IxSWE3M3BBWDJIcTVnRS9FMEFHeWJLdHd0VXN2N2t1S3hacXVEZnNnKzlYZG9qcmtzY0FBS2JudU56Ylc4YnJlcWdqR0hmcE4wVEdWb2FHY05md1ZaS08zZ2RmVFRka3NmbHhEbk9pWEF6Nnl0ejlZVTNXSkJCR2gwbnJvdkxzRlZEVE85V3VIMmtSRW1mMSt5MjR1U2xUTWVYanQyaXcyN3NFTmQzbUhjR3pmTHVCM0VLb3htME1SVkk3d09lNEFOQkxpZkNOMHV2eFZqaWNjWERLREErUG9tdFluS0tid0VXMHNtZHhPS2V6VmtjMUZPMEg4bHFxMUFGcHROdElXVHgySHlPdDdKdUR5L0pZempSckJ4Zmdqc1kvajhFenYzSGVVTlBZMlZCb2tqcEozbjNxVmhNSk9xTGg4UHZQdTNLWGhXK0tJbENFMldHRHc0YUxDRllVOE9DRkJmVmd4eVU3RHZKRXo2V1hUQkk1NVdSZG9pcXhoN3N5QnJUYzBQYVJ2OEFDNEVTcHV4UHBKcjRXaUtWTEQwV3RrbjJYUkoxZ0Y4RG9FVmgwQ3pHMXRyVm1WcWpBOHcxeEF1ZEpUNVA4NUNFVlBEUmNiWDdlNG5GQUNyUXc3dzB5QTZrSEFIU1lKS3JCMm14TFlMR1VhWkdtV2hSRWVlUlZuMTFXKys3MUtiOWNWditvNzFLeStSbWk0b3BWUmREdGh0R0lHSWUwY0d3MGVqWVZWdGF2V3JQbXRWZlZjQkFMaVRiVzBvSjJ0V2lPOGRIQ1NrK3RLdjMzZXBTY2s5bEtGYW9DYU1iMGFtMGh1WU9CaUpCTjc4QnZISGdrK3NxbjNqNnJtN1RxRDdSV2RJMHVpYmdkcXZwR1F3SGZCa2dxMi80emQvK1dqLzNLZ08xbnhHL2pKUS9yT3A5NU5TNjRRbm5aRVNMaXVTWUhMbHlSQUNxUTFrMlVjS2JRM29BUVZjcGc4TEoyQ2RlU28xZlVvbERSQUVpczZaS2psR09pRlIxUWdET3NVZW5WUXNTYitRK0NSaFI2THd0c0pVbmVyS2wxVk5nTkQrdHdWcmhYR0JjNnJvZ3pDYXlIelpiV2haN0hVY3dxTmk3Q1NPbjdmQlhOWTNIVWZKUVgvOEF2TzZOL3dERUk1QWhnellVaWs3S1FoWWtYUFZFYm9PaTUyZEpQbTJZYWZxeWxiR0VrbmVvZXcvYkEzZnNwK3lmYkkzWmo4MDQ3UkVzSmpjVlY4YnBPa3dyVEFFNUFlUVZGaXZhZXJ2Qyt3M29QaVZwRDdNem45VVdEQjRtOVFzajJyWkdMcmMzVDZnSDVyWjBCcCt1S3gvYkQvNVZUb3ovQU1RdE9iNms4UDJLVmN1SzVjeDBITGx5NUFITGtxUkFISllTSkVtQi85az0iLCJtZXNzYWdlc190aW1lb3V0IjoxMCwia2VlcF9sb2dnZWRfaW4iOnRydWUsImFwcF9wcm9maWxlIjp7ImRlY2ltYWxzIjozLCJtZXNzYWdlVGltZU91dCI6MTAsInZpZXdBbm9uRGV2aWNlcyI6dHJ1ZX0sIm11bHRpcGxlX2xvZ2luIjp0cnVlLCJzZWN1cmVfcGFzc3dvcmQiOnRydWV9LCJyb2xlcyI6WyJDdXN0b21lckFkbWluIl0sInBlcm1pc3Npb25zIjpbXX19.l_4tZ0R_EpfYVN5wionUOe6dLHKeKSBVRWDEhE5RAlmazRnsAOWJYFDXTvB8UObRRlDytT5u18cd3zO97_X5wg"

Ejemplo de uso

import requests

api_url = "https://www.myserver.com/auth/refresh/"
headers = {"Content-Type": "application/json", "Accept": "application/json"}
payload = {
    "token": "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoic2xpZGluZyIsImV4cCI6MTY5Njg4ODMwMCwiaWF0IjoxNjk2ODg0NzAwLCJqdGkiOiI4YjBhMjhlMjg5ODA0NzNkODcwZWUxMTkxMDMyMmJmOSIsInJlZnJlc2hfZXhwIjoxNjk2ODg4MzAwLCJ1c2VyX2lkIjoxMiwidXNlciI6eyJlbWFpbCI6Im1hY2VyY2hhQGdtYWlsLmNvbSIsImlzX3N0YWZmIjpmYWxzZSwiaXNfc3VwZXJ1c2VyIjpmYWxzZSwidXNlcm5hbWUiOiJtYWNlcmNoYTIiLCJwcm9maWxlIjp7InRpbWV6b25lIjoiQW1lcmljYS9Cb2dvdGEiLCJ0aGVtZSI6ImNvcnBvcmF0ZSIsImxhbmciOiJlcyIsImF2YXRhciI6Ii85ai80QUFRU2taSlJnQUJBUUFBQVFBQkFBRC80U2NMUlhocFpnQUFUVTBBS2dBQUFBZ0FCUUVhQUFVQUFBQUJBQUFBU2dFYkFBVUFBQUFCQUFBQVVnRW9BQU1BQUFBQkFBSUFBQUlUQUFNQUFBQUJBQUVBQUlkcEFBUUFBQUFCQUFBQVdnQUFBTFFBQUFCSUFBQUFBUUFBQUVnQUFBQUJBQWVRQUFBSEFBQUFCREF5TWpHUkFRQUhBQUFBQkFFQ0F3Q2dBQUFIQUFBQUJEQXhNRENnQVFBREFBQUFBUUFCQUFDZ0FnQUVBQUFBQVFBQUFQbWdBd0FFQUFBQUFRQUFBTXFrQmdBREFBQUFBUUFBQUFBQUFBQUFBQVlCQXdBREFBQUFBUUFHQUFBQkdnQUZBQUFBQVFBQUFRSUJHd0FGQUFBQUFRQUFBUW9CS0FBREFBQUFBUUFDQUFBQ0FRQUVBQUFBQVFBQUFSSUNBZ0FFQUFBQUFRQUFKZThBQUFBQUFBQUFTQUFBQUFFQUFBQklBQUFBQWYvWS85c0FoQUFCQVFFQkFRRUNBUUVDQXdJQ0FnTUVBd01EQXdRRkJBUUVCQVFGQmdVRkJRVUZCUVlHQmdZR0JnWUdCd2NIQndjSENBZ0lDQWdKQ1FrSkNRa0pDUWtKQVFFQkFRSUNBZ1FDQWdRSkJnVUdDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FuLzNRQUVBQXIvd0FBUkNBQ0NBS0FEQVNJQUFoRUJBeEVCLzhRQm9nQUFBUVVCQVFFQkFRRUFBQUFBQUFBQUFBRUNBd1FGQmdjSUNRb0xFQUFDQVFNREFnUURCUVVFQkFBQUFYMEJBZ01BQkJFRkVpRXhRUVlUVVdFSEluRVVNb0dSb1FnalFySEJGVkxSOENRelluS0NDUW9XRnhnWkdpVW1KeWdwS2pRMU5qYzRPVHBEUkVWR1IwaEpTbE5VVlZaWFdGbGFZMlJsWm1kb2FXcHpkSFYyZDNoNWVvT0VoWWFIaUltS2twT1VsWmFYbUptYW9xT2twYWFucUttcXNyTzB0YmEzdUxtNndzUEV4Y2JIeU1uSzB0UFUxZGJYMk5uYTRlTGo1T1htNStqcDZ2SHk4L1QxOXZmNCtmb0JBQU1CQVFFQkFRRUJBUUVBQUFBQUFBQUJBZ01FQlFZSENBa0tDeEVBQWdFQ0JBUURCQWNGQkFRQUFRSjNBQUVDQXhFRUJTRXhCaEpCVVFkaGNSTWlNb0VJRkVLUm9iSEJDU016VXZBVlluTFJDaFlrTk9FbDhSY1lHUm9tSnlncEtqVTJOemc1T2tORVJVWkhTRWxLVTFSVlZsZFlXVnBqWkdWbVoyaHBhbk4wZFhaM2VIbDZnb09FaFlhSGlJbUtrcE9VbFphWG1KbWFvcU9rcGFhbnFLbXFzck8wdGJhM3VMbTZ3c1BFeGNiSHlNbkswdFBVMWRiWDJObmE0dVBrNWVibjZPbnE4dlAwOWZiMytQbjYvOW9BREFNQkFBSVJBeEVBUHdEK05XQUNRYlQ2MXQyMGlXMG1HemlzcTJZTkdEMzRyWWpqVjhocS9mNlZKdG40eFZsZEcxSGMyYm9CSzIwZHMvUTFGUGI3TEdLT01nZ1JyeVBkYzFuQ0JQSytmbkZiVW9DMlVXQmo5MG4vQUtDSzdLY2RIRTVPWFc1ejBpa3FvOU0xMU9nRmVGYXVia01lU0IxRmF1alBod3lIdlUwSEdMME9tck5PTHNhZmlhd0RMejFVWXJ6aUpUQkx0NzU0cjJQVlltbnMvUDZzZXRlUzNFSk11QWRoem5PTS9wV2VNZytkTXZMNnE1ZVZuWDZaY00yMk04RnVtZTlmYWZ3UC9aQytKdng1anRidlNoYjZmYTNqbU9PNXZXS3hFcjE1VUVBZWhKQUo0cjRxOEM2TnJYajN4dHB2Z1h3eEQ1NzNVOFlmK0hlUTMrcXllQUNPV1BZWjlxL2FYd1hONE0rSHVxQzIxTHhyNG8xQy93Qk9aWWpCNGNhS0d4dE5wNVZoSXlvcW8zRzFnekgrTUxtdHN2Zk9tMGNlYlV2WmF4M01qeDMvQU1FSmYyc3Jud1hONHUrR2NtaytMSklGVjdqVExXU1MxdlYvdWxVbVZVWUhzZCtENjErTTN4YytDdnhNK0JYajI1K0hYeFQwUzYwRFhiTFo5b3M3eE5raUs2aDBidUNyQThNQ1FlY0hnMS9xVy84QUJPM1I3YngzOE5kTTFYWEkwbG5odFVTU1pVOHA1OGhXekxGdVpZMmRQbTNSTXlNZDJEeHg4a2Y4RjF2K0NSSGgzOXNUNEZ0OFgvaGZwVU1IeEI4S1dNZ3RMaUloR3U3WlNaUHNzdzREODh4a25jckhBeUd4WGo0N0hZZDRuNnJKV2srcHRsZUx4WHN2YXVQdXJjL3pYZEx1bzFZckoxYml1bUdqMjl5dSt6QlppTXQrRlpuaXZ3YnIvaFRYN3ZRdFl0cHJHOHNwbmd1TGU0UXh5eFNSbmE2T2pZS3NDT1FlbFFhVmNheGFTNzdiY2NlbVAxelhSRlNocEk5S2JqSjNneU41anByRmJwV1Vja0RIT0J6L0FDckU4TzZqWURUVkZ3SEdYYzV4eGdzU0s3SzhMWE1NZ2xUTXFvenVvNHlNRWtmV3VZMERSemM2VkRNMXRJeDhvUDhBS2ZsSmJrY0gycTVLVGxlSnJDVVBadE5XTHpmMlBLTm9sVVo5YXF6V0ZvV3pFNnNNZGpVZHhwTm1BUVk1VTlUdDZWbnphY0Y1Z2xaUU94V3VmRUtTMWtPbHkyOTBkSnBqSWQyUWZ4cG45bktlVzYwd1BlUWZOSk5HNDZZd1JVWjFtR0Z2TG0rWWpydC9wWExHckZzNkpVMmovOUQrTkxUakg1V0ZCem11aWljSTNOY3pha1JOZ2NMWFJLVllncFg5QjBJU1V2ZVorUFl4NldSUGNScWlIYjJCL2xYUnVDYkNKbC91TC9LdWFuY0ZUdUk2Z2ZoM3JyUGsvc3lCb3puNUIwK2xkZExXYlBPcXV5dWppaTdwZWt5ZHdRS3Y2SHVqdTNoYitIbXMrOFltOUNqclZ5eWUzMHVXUysxYWRiZFNNN1pEaHlBZjRWQTZIc1RpdVJPTWFscE95TzMyS2RLNjNQWFlMU2E1dFFzU2I5cTdpY2dZSEE3L0FGcnhYWGRmMFdMV0YwV3daYmk0WWdFb3dLSVNjL01RZW85UFdzWFUvalA0MWd2SjQvQkZ4OWdnWWJWWGd1UjNMRThEa2NWbWZCWHc4MnVlSXJqVU5SK2Viek1CaUFUNWttY24rWjcxdzQzT29WR3FWTGZZOW5MY2k1RTZsV1doK24zd2crRXZpbjRXNk5lYTVwMW0wbXZhL2FQRGEzQlZ2M0tTZ2x4RG5oWlg0WHpGVXNGSndleC9RdjhBWlcrQkErRHVqMmFTeVJwSlBNMzJwNVNyM1VNajRkRUN1clpYR2QyUG15ZWVtSzhyOFFUM1BoQ0dDMnRaSkFsbmIyL21UeGgvUGliQTJJRHlGd3VNaGVSMUo1cjZuL1owOE4vRkR4UHFPbmVKTGpUWmJtTzdZM01FOGpaK1Jjb3hJWWtrOWVmeHI2emxvMGVXbFRWNWZsL21aNVprOVRFeWRhcTdSdjhBZi9rZjBqZnNaL0ZQeFI4T05Mc3ZCZHlKTHkyVnRsbk1xaU1wYk15c0ZjS0FHTUxFNFBIeU1jODErbzN4bDhWTDRoL1pMOFk2dHFFSXVJNE5GbkNvNDRaMUdBY0hnc0d3VnlDTTQraC9QYjluWmJNZUU3R082RVFrMktzYnNRVlhqTEJuL256eldOL3dVQi9hcTE3NGErQXZEbndROFB4cEpMNHhFcVhFNllDdzJ0dUF4SzdDVHZkeW93ZXFpdkJ6bkwzaWNSVGpHRnBwcHQraHBqc2poZzZkVEUwNm51Nis2ZnhKZjhGVlBBZWo2TjhlTFB4aHBwam1tMS9UNHByeDBCVU5jUkR5aSswODduakNGc2NaOXEvS202dEkxT2RoL01pdjJNLzRLVVdGNXFIeFh0OWF1VVUyVi9hazI0QTJ2Rk5ic3R0Y3hOR2VVdzhRY2RBeXR1SFVnZmxicU9sQU9RZUFPbGZTNTdsNmRhVTBmRVpMam5Ha3FiNkhsT3N4eHg2UmNUd05zZEkyeDM3WXJhME83c3JUVElMVnA1STlpS29EREJ3QjZkcXBlTWRJanR0R251b1pHYmZ0WFl2QURGZ08vSno3ZmhVeHNWYUl5bEM3NXdXNTUvUG44NitkalRuRjNSOVFwUXF3OTdRNlNTNmdaU04yZnBXSmRzcjVTUHAxckdEem8yQWpBL1NwM21jZFZOS3JWNXpMMmNZNlJZU0pGSXUxa0RmV3NTNnRiUVBrd3BrVnZENWVXRlpjL3dBODdjWndvd1BmUCtGZWU0MjZIU3BOYkgvLzBmNDBMZERKSGtkNjFZQTRQWEdCV1BZT1F3R2VLNkdJb0hKYnBYOUFINDVPTjFZam1CWmRvOUNmeUZkYlpzdjlrMisvZ0JBQ2ZweFdCUERzUVNJY2dnamo2Vm96WGNWcG9rQlFGN2hvMlZVUDNjOC9NY2RoM05iMFpxS2N1eHkxY08ybEZHTmFUVzkxcmR4Q3lrckZGODdZeUFXNkFBNUJQSFNwTmIwSnpKSGYrSXBYa3R0d1ZTN0ZncFBDRTV6aENlT3Z5OGV0ZFhwR21RNlpvaGp1U1d1TGVFNmhNT09Ya0JqaEdlcEhWc2ZTdHp4UFlRMjN3Mmd0dFFPNjR1WVdka1AzdG0wTTMwQUpIMHo2MTg5aSthYWxVZlEraXc5RlJpcWFSOHUrSTlKK3czN1hOcnRNY3Z5QUE5RDByOVF2MkFmZ1hvVjNMSjQxOFJoWk5wUW1CR0EzTWVZNHhuSUxuRzl1eUo5N2xnSy9MdlF4cW5qZjdOcGtpaWE0ZGxoaExrNTNCZ29QKzl5Qlg5Sy83Qi93UTBYd3Arei9BRzJzYW8wVjFmNmhleTNDc0ZiQ3h4QVFoVG5JSkxoaXB5Zmw5NjZlRXNGQ3RpT2VTMks0anhMdytDNUw2dlFoOGVhcnFrdmloNzNWQjludDdsWGxrUkFYQWRNZ0RLREF3TWM4ZWxmczcreTlxM2gzd2oremkveFcxUFE1NExMVE5QM3EwRXhTV1NkemdDM2l5SFlNN0Rld1lCVkJPUml2alh3cjhPTFhYdkY2YU40blEzTVZ4RzF5TFdJaE45ckNRR0FHRGtNVGxnTUVqb2ErdHZoLzhSOUU4YStMYmY0S2FuOFBKcmZUYkNWb0xLYTB5amlSZVdLcUZ3cWdFcmpub2NtdnVNWGg0S3Q3V1V0UytFcytwUmdxRlZYWFZuMmgrejVjZUxmSC93QUFiNzRqWGR6ZjJvZTh1YnhKcFVFY3JRS2lmZEh6QUFZd0FjbGp4NzErWkhpYjRrZU5maUQ0ODhVZUpkYmJOeHBVRUthYmJzKzFFdHpNRHRqK1VCWkdLamV3R0N4T0RnOGZ0bDhIN0RVNS9oWHFud3VqMEY5TnRyT1ZvclNmZnVrT3c3OTBvd29BZm93d1QwUFVWK1hmeEg4TVIyZjdRTnZwV3VoTEhUNzFtdDd5VjBBZUZWQWFOMkhCY0dUNVZPUWZtWG10Y21iZFM4K2g1L0huRUZMRlZuUndhdEJINHZmOEZPYk8xOFRhOTRPK0lkcEpDK28zbWs1MWVHSGg0SlM3bUI1QjEvZlJBWlBxdlBVVitRK3NXeWhDN0lKUHIycjlqLzhBZ3F6NGVnMDd3bjREK0lWb2hzWlpudWROMUswUU1GU2FINXJaMnlTUTMyZjVTdjhBQ1FmVTErTzMyeExpMFdUSWRYenoxeml2Unh5VGs0M3NmQjVkSGxqb2VUZUtvcDB0TGFDQ2RsUzR1SWdZOEE0d2QyQWUxYnYyUzRuUU9vWTd1ZWUxVi9GbW5SU2FocFR4U1kzM1M1UWRncWtrK25wWG91bXJadzJ3akRDUThkY0hIQTQ2Q3ZuS09ENTV5UGRyWXJrcHhaNWxjYVk1VWxGd2F6MjA2VlJzWmVhOWZuc29KSlBPQ2hNY2JRT3RaRjdwbTZUTWZISGFveEdYS09wRlBIT1N1ZWFOWk5HTnpjL3BWVk5QZWE0TzBZelhlVGFZRlg1eWV0SkZaMjhhbmRqa2RUWE45VWlkZjE5dlpILy8wdjR6N2FXTnVCeFcvR3k3T09hNGVHVWh4bmdWMU1OeUZHMGVsZnZjSm41SE9ucDJORzh1VlRUbW1ZZ0xFTnpFK2xlbytDZkJOL2NhREY0bjFFZk5jQUczVHVJaWNnRUh2MzlNNHowcjVrOFM2akxkM05wNGFzenZrbGZFckE0Kzl6ajZldGZwQjRuZ2g4Ti9DalIvR1JVR0cwc3BZWlFNWUpRWkhJOWVsR0ZuR3BVbXZzeFd2ci93eDFLZzZNVnpieTJQbVR4VGMydDc0SDF6eEphTHRqMURXSWJPTWorR0swUVJnYnUzelpKeFZqNG4zOEJ1OVdrRW1FMG5TNExUTGRDMDZDWmlQKytnQ2Zhc0hXYmxMRDlrUFJKZHUyVzV2cFpXNUJMTTBqSGNQd3htdkh2alY0cVpOZDFEU1lUL0FNZmtGaXdIWWo3TWc1N2RhOHJNNnFvMCtYK1pSL1gvQUlCOURnNktsVjkxYk5yN3JXL1U5cS9aSitFWGlMeDFORnExaEhpS3dsYTh1cEQxaHQ0Q0haajZCMkFVRWRjKzFmMURmc2NRNnhyL0FNRDlKdW1oampTeEtXeUtJdHFTQ0o4c3lEcTJRN2M0NzgxK0pQN0RjMmxlR2ZoeDRvc2ZFVWtGdEg0bTBkTE5wWkgydkczbkJnSTJCNGRncENqbkpKRmYxSWZCKzAwVHd4NGZzRzBpM1dHMHM5UFI3ZDBBVVI3WWl6RVk0TDV4dTZrOVJtdnRPRTh2Y0tQT3V1cCtmOFg0dVU2empMVkZqd1Y4Tm9vdmoxWmFwWXhlWUlyWXhrRW5BalJRenJnOGpCK1VpdjBkK0ZmZ1h3em92aUVlTWJhQ0tTOWpNVVlaVTVFaWd0SzJDTys1UWZiRmZIL3dBZ2UyMWE4MXkvY1NTaU9aSVdaajh4bC9lelNzeC91NUl5ZjdvOXErenZnMXJKbENYRWNubVJPaGtWTnBKTFNESlA4QTQ3bjhSWHFaaGU3U1BCdzAxRkp4ZXA5WVRRV1FOeHF1bFJ0QUpUdVpGT0FXT1dKL1BQNTE4WWZ0Ui9CM1RQaUxZVzNpeTNnam0xU3hMUnR1SHpOYnlIZHRPT0dNYktDcFBTdnJIV05RaXM5RUZzR0pMRGNldWVja2dlM1hyK0ZlUmVMN3JWTGZTcDd1d0JrL2NibzlweUdPRHV3dmZqSng3ZHE0OHJjb1NTSXg3WExkbjgxSC9CVkx3cGIrTHYyZmRXMTIyUDJodEExQzF2NVNvK1ZvUzdXbTQ0d2Qvd0M4M01UMndEa1YvTWxCSi9ZOG01dDMyV1ZzYnV1MG5wK0ZmMTBmdFE2WlllSlBDWGl2NFI2bEhKYlgydDZaZnJFcFg1WlVpdGtrREhqRFlkMEtIa3FUMTRyK1J2N1RORE1OTTFFQXd5Si9kNkVEMHIwYzlvcU5SVFR2Y01qbmRTZ2lEWEk0aDRnMHFLVmhMSDVrcjlzSENlcDdkNjlLUzhzMWlqM3NDTnVGS25JSTZjVjR2ZFE3TmVzTEtkZlBoaWpsa1RPT0JrS09EMXhXcFBCNUxHNjA4U01HK1dSQ1NjajJKNkg2VjVGUEVTcDNsVFZ6NkRFNFNNa28zUFQzdTdaVC9yVi9Pc3ErMWFCRzNCZ2ZvZUs4OGppU1ViMFhhQjNMZzQ5dXRPTU1aNnZuNmRLd3E1aTUvRWpLbmdFbGE1MU54cWtHRGs5S3dibldrS0haNkhGWk10dkU3YlZWa1B1YzlLekd0b2k0K1k3ZURYTFd4RXJlNmR0SERLTHVmLy9UL2kwbWlWRkJHZW9yVXRwd2liMi9oQlA1VnpVTTkzSW9VUlIvbWY4QUNxMnBOZXhhZmNTdnNWUkdRUUNlK0I2VisxdXZ5cHV4K2FRb3FVbEY5Uzc4STdlMTFmeHRMcVdyc0JCRWpQdWJvclBrRDllbGZwUm9JMHI0aGZDWFdQaEpIT3EzTFdqdmFtUTRVUzRKVVp4eGtpdnpLOEYyZmlhR1dXYlFXdG5XZVB5NVk3Z2Jra1FrZktWd2UvVHA5YStuL2hGck45NHM4VzIzdzhuOFB4YUxxelJzYmJWYk5ualdBUkQvQUZra1pKRHhjYldBNVBRRVlyYkk4WXFjK1ZyU1YwZGVlWUpWTFNUczFhM3lQRlBpSGV0WS9DWHdUb2NwZERDSjBsamJqRGlZOVIySXpnZlN2TnJEVHJ2NGxmRU9IVFFoQ3hLaVRQMUFqajV6K1FyMlg5b0xVRjhUNlFtdFgxckpaNnBwZDNKRGNReFJuN05JNWJtWkd3TWhndTdJNCtoelh6MzhPOVZ2OVA4QUZhM0ZpclNUU1pEN1JuNVcvd0QxMTVXYXpVc1lxZlRUOEQyc0RGL1ZaVmRtZnI5b0dqN1BCRUdrNkJheHJQRk9Rck9Ca3hxQmpMc1FJeU1aYm5JengxcituWDRQYWpDUGd0YmFkTUI1Y05qYjJ6T3d3KzJPRUVER1QwSkl6MUk2azEvTDE0UDhWaUx3bFlhRmZ0T0wxcmlLWWZaemhXSzR5clBuMFBUQnIrZ2Y0S2ZFaTAvNFY4MnJSVFkweUhWN3VKMmtQbWJVdGhqZ0RuRzRZK2hyOWN5TENSdjhqOG56MjdpbSs1OXhmQ1BVbjBmVHJlM3YzSUdvL3dDakdJNFpWWm95NjRPT2NqYm4wTEhPZHRmVm43UCtvUzZmQkFzellObkVzTW4rNldrVXQ5UUFQeXI4OGZndjhUYkhYSnJtSjIrU081SlVxQmhGVVlHM0JKNFVEY09DUnhYMTU4TXRhbXRTSVltQmVhUUFEMURLeCtVREFBNDZZcjBLOUdMYlZqd2JjcnVmZWQvcTF1Yi9BSExKdlNSUVFqY3VXalAzQmpqTEQxOUs0VDRrNnJKNGI4SXZxa01mblF0S0JGRmpMS3pjRlNlNENra2cxbkNSZFR2Rmt0WkZSaXF0dUI1L2RnNS9yaXVBK1BQeEIwTFFmaHJkVytybGlMWmxrZVZHMjhyODZqZDE1SXgyenlLOHJDWUp5clc2Sms0N0VXamMvRlg0dHcrTHRVL2IxazEzWExacmJ3em9maDJLQzFrTXU2Sm11cGk4NHc3bkRvUVVZWUdBZzlSWDg1LzdSdnc3UHcrK01QaVR3WEpCTkI5a3ZwamFDYU14dEpiTzVhRjFCNEtGU01FZi9XSDlSOGZ3MjF2NGxlSmRRMTZFalM3Q2ZaOWdYZXZuWENxQTRrazVsSFhoVDk0OThIaXZ6YS80S20rRFpyTDRZNlQ0OTErd01Xc2FQcWEyUXU0WkJOdnNiZ1NOaG5IekJkNFVxckFGU1Q2MTYrWllCZXcwV3o5VGp5N01uOWFWbDBzZno3UXgrYjRyanQ3cksrVGFzcFhrTUNYeUNlQ01ZOWNWNk5QWjJMeHBHVlBUMXhYRzJVbHBxZmlxZTdiWklua3hsMjM0Sk85dS9RSDYxNjFEYTZjRzh5TGJHcmM4eUtUK3ByNWpDNGYzV2ZYNDdFcExRODBuME8xVnkwUzdGL3VqcCtOWmN0dkRhL3V4eDNyMVdTSzFtVTRqWEE1eXJJZjFIQS9Pc1diVElKc2xGUDZWaFd3aWhyb1lZZkd5U09CdVhDbko3Wi93ck4yTjVZYVB0d0FlcDkvd3JzN3pTN0tPTXRjdEpLbzdLUU1lL0pyaHIzVXRDdDVERkZjdkV5L2RSaGxxODJ2c2UvVG56SzUvLzlUK0pRM0VrTW0wSDVhemRkdXYrSlBPRy9pQUIrbExlTzNsNEI2SE5jaDRtMUkrVEZiTDBmNzN2aXYyREZWSXhwdHlQaXN1d2puSlhSN2o4SUwvQUV5eXM3dTVuVUZ2SStVTTJNa01wd000NmozcjY4K0VrR3A2VGR0NDlrZlplVFJiRVFBTnRqMjVDWVBHRFg1Y1crdFhGc29peGxGN1p4WDBKSiswejR0bDhPdzZCcDFta0loUUtYakJ5UUIvRWFuS3N4cFUyblBwdFlyT2NqcTFHNVU5bWZvcnF1aVhmanJ3dGR4YXpjUW8wa0VrVVVMdWk3ZzZsUXdVdHRCK25Tdm5uOWtqOW1uVGZpMTRhOFEzbGxZdU5aOE1TWkV6dXhTNTViOTNHVU9BeUtNNHdRMmVLK1pQaDc0cDFmNGgrUGROOEthdmVUMnRycU53c1V6eGttU09EckpzSDk0cmtjOThkNi9lUDRHZkFuV2ZEdWt0WmZCdlY5TTAyd1dZT3NFdm5DNGtqVW5mNWtSRzd6R0FPZlJ1T0srbHlyQzBzeHJLcTQyNVR3TTF4TTh0b09qS1h4YmJuNTFmRWl6OGRlRHJPemUxU0JMVy9sV0I3bVloR2d5eFVNeWpzbkJKeGtWK2p2d0grTlhnRHhSNGF1dmdXMnZpMjFYVHIxTlN0THRNcEZmU1N4Z1NSTVNmbExOOHlidUNTUlhiZUl2MmVmQ01rMC9pcnhzMGVzWEVBTGJMaENpaFc0QVdNNEFJOU9wNjE2TDhFZjJHL2dkOFFkUmc4UStNZEEzenp1RXRyVFNuZTBta0orNkdrUTV5ZTJPbk5mVTBzUFV3dFp5aHF2UHQ1SHkxYk1xR0pvY2owYS9GbnFmN0YrcXRvL3hpMVB3ZGZ0SjVzVEY1UE00Yjk0MHUwZkxnWnpqSzlOcEdLKys3YjRyRDRlNnhMZGVLZzhOdnBWdEc4MGlMblpsdjliZ2M3R0w0R2VtSzdlTC9BSUpqWC9neXhoK0tQN09rcVBybWxyQlAvWmh2WnJ3enh4UnFra1Viekk4Wm1DTGdva3VTVjZIT2EvTTc5dlA5b0h3LzRROE9hejRLMDFMaUh4TGZRZllib1NSN1BzMzNmUGhsRDRJa1ZQbDI0R053UFZhOUpaelFjSlRUVHNjR2E1VFdwT1BORnBNOXEwci9BSUxoZkNYd0xjeVJ6L0QvQUZEV3JpeS8wZUtaZFRTM2lkSXl5bzVRVzdzTjRPZnZIdG12TVBpYi93QUZ1ZmgxOFNkRmswSFd2ZzFGZTJjamJ0dHpyZHgxd1J6NVVjWklJSkJIb2Evbm1hWHpITHRrbGozcGNFa0FWOEZQUDZxYmF1cmluaFUvY1IrM09uZjhGbXBQQ3NYaytCZmhGNGR0VWlBQVc1dTlSdUZVS01EaDdoUng3Q3ZIL2lmL0FNRmFmR0h4WjBxWFFmRi93dDhCM2RoSzZTUEJjNmZOY0s3UloyRmc5d2QyM0p4dTlhL0xPMHNMaTVrTU1RM0ZzREF5ZVNPQWVPTTlCM1BhckhpbndoNG04R2F0UG9IaTNUcm5TciszSUV0dGR4TkRNaFpRd0RJNERLU3JBNElCd1FlaEZiVnMxcVRYTEw4VG1oaHVWcVVkR2ZYZy9idnVOT2thYncvOExmaHZZOFlKWHdycDBoSHBqemtrSi9FazFXbi9BT0NrbjdRdGdDdmgreThLYVNwNkN5OE1hTENSOUNMUW45YStFN2hUNlZubFdZbk9BQUNlVC9kR1RTbmpKYWNxUytRcXJsTFJ5YitaOW4rTGYrQ2puN1l2aW5STHJ3dGVlS1Zpc3I2SjRKNGJXenM3ZFhqZFNyS1ZpZ1FjZzRyOC9wOU90REtXbHVHVmpqZ2s4WTRBSFBUaXZxandkK3czKzNSOFVXZzFUNGUvQ1B4WnFsbmNSck5CY3hhWGNDR1dLUVpTUkpIUlZLTU9Rd0pCSFExK2lYd2Yvd0NDQXY4QXdVaytLeVEzUGlUd3BZZUQ3U1FaYWZYYjJKSlZYL3IydC9QbXo3TXExMHdmTXYzbHJucDA2MEtNVkZ5UHhGaWdpaWZmSk0wbnN4T0tra2JSeWRwdFlta3lBRHNYT2UzYXYxOStPdjhBd1F2L0FHNi9nMXJMNlhwbW5hWjRwdDl3RWR6cDEvR2daVDNNZDM1REtmYm12Zzc0aWZzTy90aGZDYlN0VjhSZVAvaHpydW02Wm9rZm5YZDg5cXoyc2NXNEtKRE5IdlR5eVNQbUJLNDVKQTVxY1JUbWtuWTY2T01wUzBqTS85WCtHMjVuVmdVNzlxODgxZVY1Ym9vNXlFNkQwcmV1Ymg5Ky9PTnZOY2RkTTdYRE9Xems1cjlTemVxbkRrUjRtWFVIRlhadVdka0xpMSsxbmtFNHg2R3ZidmhKNHIwdndxYnV5dUxaSnJtNmpLd3UyQ0VMZktEajF6MEZlQjZiZHl3bG9BTnlzYzQ5Sytpdmd4NE5mWDcyK3ZGVVNUV3NIbVFwakxNNXlBQU8vd0RTdk13VWZlVW83bzN6Q0VYUmJuc1pId3p1TkIwVDRzVzB1dlhhQ0tXWmthNEFHd0VuQk9TQ09lY1k2SDA2MSs3bmh6NFUrTTAwSzE4UStDL0VVRjVaN2ZOdG1oQUVpYmlTc2I0SmJnSDVpUmpBSGZtdndMMWI0YzYvb21wUzJ1cHRpZDJPOVZ5VkdPZXZyejI2Vjc3OEh2Qy9qQzN2Wkk5U3VIazBxNXR6SExGSzhqRHlsS3NER3l1cFJzcU9weGpnam12b01semY2czNSbkhkbmdaNWxzY1ZGVll6dG9mc2Q0NDhTZkgveGo4TnJ6VnZCR2hSNnZmYVU2d2hSTWdDQWhoTkpFak92bk9vd1FoT08rZTFYL3dCbHo5cHZ4RGJlR2sxTStNRjhPZUk3RzkreWFSTmNNam90MUNGZVJabGJMSU5yYk9Cbm5QSUJyaC8yUi9pcDhaZkNueFcwV3grRGxqYTZURmZzZFBzRjE5Vm0wM1VtaFNTUXEwQWpMUmx3TWViRXlsVDFZak5mdmY4QUFMOXBYL2duSCswLzRsdWZnSisxaDhOL0R2Z0w0aTJjNGluMHJXck8zUzJ1Wmd3QWUwdldSY3JJZVUzc0NRUnRaK3RmYjA2YXJMMnNxbG50WnI5VDgzL3RKNENwR0xvYzZUdmRQb3U2UHAzOWlYOXFLdzhUdzJtbGVHcktEd3A0K204eVJ0TGtaSTlKOFFaK1p4QWVZbzUyQTh6ZEh0UnY0dHZVZnp2ZjhGblBqLzRIK1BYN2J2aVBYZkJPaVNhRUxCSU5QMU9LVEFhZlZMZU1SM3NyZ0VqY0hWWUN3KzhJUTNPYzErNVgvQlJ2NEVmOE1XZnN2Nm40My9aOTB6VGRBOE5pOGlrTEplWEl2TEc5bGtVV3JXUWxtZU1zR0M4cGhpb1lsTnVTZjQyTmYxdTkxclZwOVgxV1UzRnpjeVBMTks1TE83eU1XWm1Zbmtra2srNXI1ak9NUENqTlNnNzM3SDArWjhVMHN4cEwyTWJkN2xjT0NSMnExRStIR0RXSjlvU2dYQUJ5akEvVTRyenFsZUxTYlBBOWhMZTF6OStmK0NOWDdhSDdBLzdGMC9qRHg5KzFsNE51dkZIaWVjVzBlZ3lSV1VGNUhCRXU5cDhDZGdJNVdmWmh3Q2R2QXh6bjh3LzIxZjJocm45cXY5cG54biswSnFFTFc3K0tOUm11MGhiWm1LRXNSREdTaW9yRklnaWx0b0pJeWNrNVB5dEJxQmpqRE9lUFk1cUc4MUt5QURTU2hSemtraitXZjU0clduU3B1YnJYMWZkblZVbGlLdEZVZVhSRk9abEs0SEZmb1Ivd1NzL1lrdnYyNy8yelBEWHdkdjRKSmZERmszOXMrSTVJd1J0MHl6S3M4WllIZzNNalJ3RGpPSkNSOTAxK2ZtbTIwK3VhaGE2Vm8wVXQ3YzMwb2hndDdkRExMS3pmZFdPTk1zN1B6dFZBVDdWL1psL3dTby80SjFYM3dJL1pXMVQ0b2ZFTFhJZEU4YytNN1ZycTgwdVM5ZlQ1clMwUldXMnQ3c2tJSTVGQmVWeTVQbHUvSlhZVFhSVnhUaEJTNVpOTjI5MkxrMTV0SzJubWVCSExYT282VG1vdis4N1g4bDVuOUpQaVA0VVcxekZCcVhoa2p3L2Y2WWl3MmR6Q1VFY0Z1aXF2a1RSc2Rzc1B5cjhqRUVkVklOZUt2KzB2OEovQU90UDRiK0xtdWFQbzkrWW5sYTcvQUxUdFBzVWl4NFZuU1Jwa2FQQnhsSkZEQWR6WDh1WHhXL1pQOEFmdEZqVE5XL1pSK1BlcWVKdE9DUmpWOUNmVWY3YWJUaXdkM2NtZTZnVkkxMk41ak51UUhKM0FIRmZucisweDhKL2dsOEg5VnRMYldkWDByV251SXZOaDFTME1jYXlCUU9VamFaektoeVBuZ1YwUE8zSTVQMWVGNFpxMUtibkNzbkh6dXZ6MVBIakxEMDZ5cGNzdWR1MWxxeit4SHhEL0FNRk5QK0NXSDl1LzhJYjRqK0xYaHA3dWVRV3ZrcUxpNldSM1lLSTFlS0Y0MkxNUUJ0ZHNrNHI0ODhmL0FMZjMvQkgvQUVueENQQ2RuOGZmQzl0ZFg3U3hDeWNYaldjZTFoRzhOektJOWxzYzVVcEtWQkFPUVJYOFhPb2VQZmhicXZpS2J3SkZxTndscHExbkorODNrUnlOOHl2QUcycHRrSTVUS2ducDFySytKWDdNL3dBQXZHK2lwcVduNjNwdGxjM2NheStZRmEwZG5JQTVPM3lYR2NndDZnanJYeXVXenpHcmlaMGFOUk54N3ZmelIraTVqd3JsRU1OVHhWYU1yUzY5bjJaLy85YitDdTV1VElwQU5Zei9BSHFuYVFnZEtyRTVOZmVZdW9tN0hQQldqWVZKSGlPNlByWHZud284WFhYaGxqcWFzUktFWlJnbkpWMngyOVJrVjREWGRlSFlydG9vaGJydkliSlhrWlhQUFQwcml2Sk84UlNpbXVWbjZhYWZhNkY0bzhPemVLNzZTT0czZ2haeklEZ2dLTWtEL0N1THRmRU9uNkY4S0x6eFZjVFBOZGFoUDVWaXJyd0lFN2tZNExjNTcvZHpYeVRlK0tCcVZ0YTZCWnpQSEJjU1lsZ1U0VlJHY0FONzg1UHJYWmZFRHhCSmRReDZiYk1Qc3RvaXhJcTlOeEh6SDZzZXY1VjZqekJwcXBINGp5UDdJZzA0U2VoOU0vQmo5b3J4SlpmR3Z3WDRqMUdkNUlkRTFOSmh0WitGSytYZ1lJd3FvV0JHT3BQclg3cmZGYnhUK3pSKzFsb0owUHg1YU0xNEl3dGxxVVNnWFZtNXlENVVxbmRnTUI4ci9MMnIrV1B3dnJGL3BUSFU3UnRoVnd1Znd6WDA5NEcrS21yYWZNQmEzVEtycVVZS2R1ZDNVNTlhK3M0ZjRuOWk1WWZFcm1qTDhENWJpRGhUMnpqV3c3NVpSMDlUN1ErS1h4YS9iRGorSEZ0K3lmZitPVzhhZUJ0QXZ2dGVuVzk3TzIyMW1DTkdNRStZZHFvN1lRSGFwYjVRTVYrYlh4TjhSZkZyNGZzcjZucGtFTnM3YlZ1RkxTb3g3QTU1VSsxZm9aNE14ZHdLN3hoako4eGJLakpPT2VLNUw0ODZObzJvZkQ1cmZXZ1ZFY2lSWEkyZ0FMS1FnZGNjNVY5cEI3VjA1amtrSjBIV2d6Z3dHT3BScnhvMUthbDVuNVkzZnhuOGN6ZjZ1ZUpNOWtRZjF6L09zci9oTy9IMnBFajdmS1BaTURIYjJybU5jMEc4MFBYcnJ3OWVEYk5hU0dJOFl5UjBQUFk5UlhyM3c2MGpTbmRpNmlhN3R6eEczZjFJeHprVitkVkZPUHV0bjZYRERVSVJjNHdSMXZ3eThIZUl2RkdxQk5mdjdxVlpHWDkySkdHUWV4S25BcjlKL0Evd3Q4RHl3cnAxNWFRZVdxQU16cXJjOGo1bWJrbmcxOHQvQlV3NjU0cXY5VVVNSXJDTGxWT0NXQXp6MklHTVpyMm40T2VLMzFmeFdZWGo4MEZIbFVIRE1xbHlPZlExOWR3NDZLbkQyNnZkdEw1SHlPZlFxdU1uVGR1Vkp2NW5vL2pEd3I0eitIdXBlSHZIM3d1MGpUZGNQaG04aXVyZUM2SXRuaE1FZ2xTV0M5aWxnbGk4dVFBa2VadDlCMXo5Yi90SGY4RnFQMjR2MmpmQTJxL0N6eHY4UGZBTnRwV3RSZVJleHBkT3J5b3JCaXBtVFVGZkRsUm5CRzRjRTROZVYrSU5QYlh2QWZpVFNRTXBMNGUxU1JBZXU1YldSbC9XdjV4WmJ1ZkM1WmdjYy9NYStpNG94cndNNHZENktlNTRlUlpGaGN5aHo0eUNsS205Tno5ZHZDUDdWWDdUM3d3ZTdnK0YraWVCL0R5YXBBdGxkTEdMVzVTV0ZYVjFpa0YzZFRoMDNLcEljRUhBem5GWXY3WEg3V0g3Ylg3YUhoelJ2REg3UjNqUFRkZHR0Q2xZMmRyYng2VGFKYUZVMkw1Y2x1RWJZVkpBUUhZQ09tYS9KMWJtUlRrODA3N1hMMk9QcFh5V0k0anFWWThsYjNsNjJQc3FIRG1GcFZmYjBvcU11L0tuK0xkejNqVC9BSWNhOWI2cmJwYzNhaUxlTXkrYkE1US8zc2VaazQ2bkhQcHpYMEo0SjhVZkV2d1ZxSDJ2VnZEMmxlS3RQZ2RnMEdvVHFiZVhuQkpVU2dwNWc1NElQcUsrQURjU2tqY3g0OXpVNDFIVVBKTm9zMGdqYjd5Qmp0WSs0emcxODdUNUlTOXJCZThqNk9WVjhuc2w4Si8vMS80RUgrL2lrcFgrL1NWOXBXK0k1eUpTZHdIdlhzbmdnQVdrakRxSStQOEF2bzE0MG4zeDlhOW04RWY4ZWN2L0FGekg4eldZSElhR3pmOEFDUUkyZVNDVDduUFd2UmRXSi9zUmpubk5lY2FIL3dBaDZQOEEzVC9PdlJ0Vy93Q1FHMzFvVzZBNkhTVVQvaEN3eEF5WjQ4bi9BSUM5YUdrZjZ0UHFLbzZUL3dBaVNQOEFydkgvQU9ndlY3U1A5V24xV3V1bi9IajZISlcrQ1hxZnBCOExYY1N1Z0p3QkZnZHVTTTFoZkZuNS9EWGlBUHppMDcvOWRCVzM4TGY5Zko5SWY1aXNUNHIvQVBJdCtJUCt2VC8yb0svVlpmN2l6OHVoL3ZQelB6Vy9hSUFUeG1KazRkN1czWm1IVW5iMUo3bXNUVHBKTGZ4UHA4bHV4UmpNY2xUZ241UjZWdWZ0RmY4QUkzcC8xNlcvL29OWUZuL3lNbW5mOWR6L0FPZ2l2eVRGZnhQbWo5Ync2L2RmTDlENy93REJjTU5wNHA4VVJXcUNKZnM2Y0lObzV0UVR3UGZtc2o5bTVtVHhIZk9od2ZzU2Nqci9BSzJ0dnduL0FNalo0by82OTAvOUpSV0gremovQU1qRGZmOEFYakgvQU9qYStneXI0cUgrS1I4cm12dzEvd0RERS9UYnc2cXQ0SjFKMkdUL0FHUmVqUGZCZ2s0citZV2JwK0EvbFg5UGZoei9BSkVmVXY4QXNFWHYvb2lTdjVoSnZ1L2dQNVY3dkh2L0FDNU9MZ1QrSFc5VVJVVVVWK2VuM0JJNEFIRlJIZ1ZNL1NvVDBOTmJNRC8vMlFBQS85c0FoQUFKQmdjVUVoSVVGQk1VRlJVVUZ4Z1lGeGNYRnhnWEZoY2NGaHdYRnhjY0hCd1hHQndvSUJ3ZEpSd2NGeUl4SVNVcEt5NHVMaGNmTXpnekxEY29MUzRzQVFvS0NnNE5EaG9RRUJvc0pCOGtMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN6L3dBQVJDQURLQVBrREFTSUFBaEVCQXhFQi84UUFIQUFBQVFVQkFRRUFBQUFBQUFBQUFBQUFBd0VDQkFVR0FBY0kvOFFBUkJBQUFRTUNBd1VGQkFnRUJBVUZBQUFBQVFBQ0VRTWhCQkl4QlVGUllYRUdFeUtCa1RLaHNjRUhGVUpTMGVIdzhSUWpZbklrZ3BMQ0ZrTlRvcklYTXpSRVZQL0VBQmdCQUFNQkFRQUFBQUFBQUFBQUFBQUFBQUFCQWdNRS84UUFJaEVBQWdJQ0F3QUNBd0VBQUFBQUFBQUFBQUVDRVNFeEF4SkJFekpSWVhFaS85b0FEQU1CQUFJUkF4RUFQd0R5VUpRRWdDY0YySEtPYW5oQ2hLQ21JZTV1blZjNUl4eGtkVTRwaUJoSW5KRXFLQ01SU0VGaFI5eW9sa1dvMURDa1ZBZ0ZReTBQYVVVRkJhaUF4SFBRSmlhREFTcE5MWmRWL3MwbnU2TkpWcnNzMGFJL21IeG5jMEVrZWkyM1p6RjA2ME1ZY3hHZ2d0cWY5MWo2cWpOdWp5akc0QjlPMVJqMmYzTkxmaW9ibUw2VXA3T2JXWVdWV3RlT1k5eEJXSzdlZlJ5MXRBMXNMVHl1cHlYTUUrSnUrQnhHcWxwRnFaNCswb3JFajZjV1RBVk9pOWgrN2xOTFZ6WG93QUlWRWdHbE1mN1RVU296eVVkemZFa3lsUkp5cE1pQ09TWE9VV0toK1JOeXJoVks3dkVoalNGMEltWklnQm1WZGxUMXlBRmFuQk1ZRThLaWFIQmNBdUM2RXhDalVkVTV5WTNVSWprSUFaS1FsYzhydHlRRG1vN0ZHcGxTV0pvVEdWUW81VXh3UUhNUTBOQWdRRWZaV0dkVnFDTlp0TzRjVDBDRUc1ckM5MW9NQTBVS0pkclZjRERpSURHMkZoekpBbjhGS1ZzcHVrV1RXNGVpWUxCVmR2Qm5NU2Q1dUEwZGI4bGM5bjhXMnBWRVVHMG5OdURUYzdPT29kWnc5RmxkaTRRZ3VmVUpJbVptNUpQRmJUWndMU0h0WTBsdmlFRXlSdnVkVm9zbWJpZXFiR2JtYUNTSFNCbGRjVzRFY3ZkTUt6ZlJ6QTgxbjlrYlFCQUlNQjBPQTN6bzRmQlhlR3hFam5LNStTTFRzcURqcG5pUDBwOWpYVVgvQU1SVFlTd3pueWl3T3VZamNGNW0rbXZwSHQzRFgwemNrZ2gzOXVtbWgxdUY0THQzQUNqV2V3ZXlETGY3VGNlNkZzbGNWSVYwK3BUWlU4TlBCRUxVMk9ha3NYa2czem5rRVV0UTZKSmM0K1YwdzBFZ3hvbWs4bElrcms2SnNpMjRKcGFGS0lUSEtXaXJJK1FjVjNtandtbGdVME93UGVKZSs1SnhwaGRrQ2VRd2MxRUNHaU5LZENZcWNVMUtWUkp3MUNLNUNicjVvejBJVEF2Q2ExT2VtQkpsSWRUMVVtbW85Sm0rd0hOTnhHSmdaVzY4ZEVXa2dxMldKb2pMTXQzNzRWSld4SmVkSUhKTWVYSGVTbllLbkxsRXAyYVJna2FQczNRQm5OYUFEeDZxM0dFYVRjdzA3M0tOMmZvZ2g1Nkcra0NUZjlibElxVmQ3aklrd2RGdEdsSEpEVGNzRnZobnNaNFJEbXg2bmp5VjFzUUV4dUIwSG1zdGdROCtJQWthTFc3QnB1QkVpUGtpM0kxakJSTkhoTUVRZVZqNWhhYlp6RGNuUlZPRU5nTjZtVnNSM1ZONzNTUXdGeDAzQ2RGRTIzZ1h4eDJWSGJlcE5hbkdyVzNHK0NicnhydGUvUFd6YW1JSjV0TUgzcmMvV3o2cE5Xb2JnbjBCbFlidEhRTEt6Z2J0SXpzUEZqdkVEMXVaNXJXTWFoUnl0LzZzejVhbUVLUzlxR1dxR2kwd0ljZzBqcVozNktTK21OZFZIdzJubm9wb3RNSUtoVHM2UnlaS05CZ0pLUk5CWFNnUXE1Y3VKU0dNS1NFdkZMS1FEUWxDUnFkQ29Rb0tWSUVxQkNEVWRVZHlCR2lPNU5DWUtvdVlJQVA1anpDWlhKTmhxVVpvaTNEVlJKbHhRQ3NTNDZBSGw4a0dyUmdLZlVvMnRycUR6L05Sdy9NSmpyMVVNb2hqUlR0azRZdWZhNDM5RkRjQm1oYW5zMEc4SkRSbUkrODZEcWZ1aU5FNHh0bFNkSXZjSGdoVG9rRVhkSERTT2ZWQWM0T3RBdFBSVHpUelFiays3OWxDZFJjM01RQkh2OXk2SkxGSXk0M25KcHRnWUthWUFJTFNaNlFyckhPN2xvbHJTWU9XQ2MzWGtQVlZIWmpEanV3Nm9YWlJ1QU04VW0wYXI2dGJ3UElwR0d0RVJEWUZvMW1aVXJDT3VNVkptb0dJY0dNSUVrdEJoVk8zZHRPRE82Yk9aNHVDZlpCTUN3NDM5eTBMYUliU0FKbUdqcVNzSHRmRE9EdzhpK1lHZVBudzVKckpqek5Sd1NjSTVsTXdRTXVVVFBQWDNySGRyNkJwMThra2hyV2hzL2R2QzFXS3BCejJrRDdvNmdpUFBTRlFkczY0cTFNeEdVc1BkZzY1Z0FEZmVESlBIVUxWbkg2Wlp5RTV2TkhLRFVhczJhSURVcVFESTNGTXc0OElzaVlsM2hLU2kydzZmcUZIcFhncFRTMUc3dE55b29MQWxjUWk1RW1WS2dzR3VoRWhOaEZEc0dBbFQydFRySW9MSW9SQW1BSndRQTRKMEpzSnpVQU00STlRZ1hRQ1VSb3pHZDI3OFVYZ0tzVEN0dVhPdEYwK3FJYU9Mako4L3dBazdFVTRZMW8rMjZQTGVuWWsvd0EwTjFBK1FVRmhxaklaK3VpcGFqNGVZMzYvaXJmR3UvbU5idUFMajEwK2FwcXgvbWVhVTlsUlFWbE11Z0FMZjlrZG41YVQzT2c1aUEzVFVHOWp1MTlGajlsMDRlT01PUFMwTDBMWWROb28wMmd6NFovekczd1duRXZUUGxlS0NWNlppQjBSY0RobXlNd2tOZ2FtSjVoU3FkSzJZWHNmVzY3WU5JbHp3ZnRINFgrUzJaaW1FcWRvUXgyVEpPOG5rZUFWa3lyU0xlOGF3eUx3RUNwc2tPY0NBUEdlSG42TFI0SFp6UlN5Z0NSeTUvTlEyL1RhTTZXQjFQRmQ3U3l1R1VtNDRnK1N6ZTJhWjBGanZIUGN0WlJHVVJHbndWZnRqQUNvMDViUEFrYytTSW1VbmJ0bVV3ci9BUERpcmJNSWFHblVuTS9UMTl5emYwaVlVTmZTcUNJYzNLUU5BOER4ZXZ5V3J3VklnZ08wTFFDM2c0U1o2L2lWbnUyMUdjT04rVjdZSnRZeUw4TDI4bG85RTNreExTdUpVZk1XbEZsUjJMb0ZqYWZoSjZmRkVvVTdEWFFJT0xkNGZNS1JUWng1Y2tsc2ZnV1Uxd2xjQXVsVVFKQ0dXb29UWlVzb0hsU1pVUWxOU0E0QmRDUWxNem9IUkZCVHdVS1U5cWdzSXVCU0FwcGRBSktZcU9jSmNHamY4RmI5d0dqS1BUOWVTcDlsR2FnSzBPT1pEZ2R4Q1VjMnluakJXTU9hdXh1dVVFcGpqL2lMOGZtbjdJY0hZaW9lVnZnZ1loLytJSFZEMWY3SzlyOUJYUG1wVkozRWdkTlZWMG01cWs3cHVwR0xxdytyL2NoN0xibWRITlp0MnlsbzFPRTJjRzBUVk53OFpXaittZm1SK3BXcjdNMGlLY3VzSnR4VlRSQXFZYkRzSWpLWkovekd4OGlQUmJDaTBBZ1JZRFFXdHU5NjZZeE9XVEhVcU9WaGtRRFlIbWVDTHNuRCtKeDRENGo5MExHdXUwNmhvRHVXbjdLdzJZM0t3azZ1L0NWVEVpZmg0blQyUitTbjBDUXFyRGs3dDhlcXRtWGdkRm14aFhDM3FoWnZOT3JPdDgxR3FHMzYwUWdaVmJRd3dZWE9Bc1pFZGYzOUZtdHQwdTl3OVpvdUJUbHZVUzcxbGFuYWxTMGJwbjNUWlVEbkF4ZTVKSDl3dnJ4V3lWb3paNU5xbXNkbE1IUkd4bEkwM3ZiOTF4SG9VUDJnc1RZSGpOQjFSMlZCeDg5eWlWajdJUEZITFFmeXNqK0RhUWJ2RWhxQlJ0TEhSZFpIWmk2a2cxQW1PZWh3dXlwV0ZJZVhwcm5wcEFTWlVXT2hTNU1sZGxUc2lrWkhTdEs1SUVpZ2dVYkV2dkhCU0FWQmRjK2FVaW9MSmFiTllXZ0hpdERqUm1wU05RRlRVWGdBRGVQSld1ejhVRExUcHB1V25IV2pPZDdLVHMrNkhWRHdFL0ZSSDFjMVhOelZoaGFQZFZLemQwR0R4RVdWTzEzaUtpV0VrYXJMc1hhQm1vNDhiKzVXT3c2UjFWVXhwZTZGcHNHekxsQXRCOVR3VXdWdXdtNlZGZ0t6MkZyWkVEN0lpNUUzUHFWNkpoRzVnMDhwbmdZMCtLODQ3bk04R3d1Sm5VbWRGNkRnSFNEdXNQaCt2VmRNYk9lWTZzL3htZFBrQkh3VnBoWCtFa0c4UndqU2ZPL3ZWVTh5K2R3QkpFYTIwVTZqVWh3YnhhZlV4ZFUwUVNNQlU4TFR6OTRKS3U2UUFBNktod05pQi9VZmVGYzBLa0NQMUZnRkxRMEVjNmI4MDFvK3lmS1V3dUVubnB3bVB5UkFNMnVxa0dRY2FKdkVrRTlZL0Q4VmhzZGlnTWEyazBFQnJTNHlkN3pNYTdoOFZzTVRWT2MvZEh3QXY4MWhxT3ozdHhsWjdpQ05HbTVrYnI3b0MwU2VDY1pNNTJvdzJYRVAvcWh3OHgrTXFraUZzdTJ0RXVGT3Exc3RBTFhPSGxIbHJkWko0blJSSlpMZzhFZXNmRXo5MFZyWlFUN2JkWkhCUzJsU2kyQ2Mza21TUnFwRXBwQ0dpYkFrbGNpRUpoS1ZGV2NRbW5jbkZOSlFNU0YwSlNQVkpsU0FpaDRYWnd1Q2RLZ3NZNTlqMFFFZXM3d2xNb3ZVc3FPaVEzR3RKQmV3a2plQzRmTldHSGZSZjdEaXgrNlNTSjRlYUVhTTJQN1dsSnNuQ043NEg3TGRKNHExZGt0b21kOW5scmhscXRCQm41L0VIbXM3VnBsamlEcXRSdExBNTZtY3Z5a1d0ZVFOSlZEdFhDWmZITWdtRWNsajQ2SWVIZEJCV2gyZlhrKzlaNmxUSk13U09RVi9nbVEyMzVwY1krUXZHejN6UEZBSkFpZndXdDJkaUlaVU15QVQ2WFdDd3J3eDdYSFFPQjZYMy9yZ3RYc0t0RkNxWGJuR1Q1bGRNV3JPZWF3WGxlckFGcm1SNUg5MVB3NzVqakE4N0czd1dSeE8wSmc2Z213TzYzNWFxODJUVnpORVdzWTMzSFByQ3BrbHRoWFgrUVZwaHFrK2gvWDY0cW1wVklnOHlQMTVLZmhhbG1qZVpIelNFUytuR2ZsODFKb3U0cU5RcXk3eklYVlRwY1dVcEF5dTJoQmVmRnJGZ1kwdjcvbXMxUmFhaGRrRURReU13bnArdFZNMmk5eHFodVdXZ2tFRW5UUzlwTThGWVlLZ1lBWXdnRFFaU3RNRVpLdHJoSGR2TXkwZ3RJeXlPbTVlZWJWdy9jMXFsTUd6VGJvUUNQY1Y2L2l0bDFIQzFGem8wOEprZENzRjJtN0hZeCtJYzZsaDZyZ1EyVGxnVEViMUUydnlWeHBtSmRHZnkvRlNtMHhHcXU2WFlQYUdhVGh5TFJkMUp2eGNwVE93K01IdE1vdDYxNlEvM0tFMGF1ek9ocVFnY2xwejJOckQycXVEYjF4RGY5b0tUL2hHUGF4ZUNiMHFQZDhLYWVDRExsaVlXS2J0bkN0b1B5aXBUcWlKelU4eEhRNW1neXEvK0lIQXFXMFZURnlGSWFQTmNhNFRIQ2RCOGtpa2NXbE5rcGhZL3dBdXE3dW5mb3BESXpsMHJwVFdsUVdqcXhza3c3a3l1N2Ntc2ZDbDdORXNGelhlU1FCdmo1N2xOd3RJTkFWRmc2NERnU2JLMnJiU1lCNFZjV3RzeWxGNkpsSnBKNERmZEQyemhKcG1JTVgxQ3FhbTBUdU9xSmhhYjhRU3hwOElFdVBMZ24yVHdIVnJKWTlrNlhmQnpIQ0EwV2NQdmNDcE5iQUVPTFRxSnZvaTdMY0tEU0dTWTVYS25WcXhxZ0ZvMUh0SGNGcEdDb2lVc21YTkYzZWh0UjBOMW5wdTZyUjdNMnl5blVkVGRKcHVBQjQ4amRDR3hHbVM4a256VGFmWnh0UjM4c3VCNDdvODBsY2REYlVpMXhtSGFBQzJDMmJPOGpQbXJqc3JYek5CNGcyNW5oK3Q2aDRQc3BWYXh3T0liQmFiWlNRQ1l1YmhTTUJSZGhudHpaWE5OcGFmRElIRGNkNjFzenJCWVZuRnVVY0lJUEVxUHRmdEQzTGZDUEdIQVFkTjgrbjRLZGphZWFEdzA5Ylg0ckNkcDhYbnJPajdNTm5pUUlKOWJlU1U1VWlVclpldCtrZkVOSGhaUkhNVTI2K2FFLzZSc1lkSE1IUmpCOGxqbHl3N0ZHcXFmU0Jqai96aU9nQStDaTFPMm1OZC93RFlxZjZpRm4xd1RVaFVXdFh0TGluYTE2aC96dS9GUm43WHJIV3E4LzVqK0toRUpDanN3b083SFBQMmo2b2JzUzQ3ejZvUlNKdVRGU0ZOVThVMXp6eFhJVlI2VnNhUTRqaWtnTGc5S1dCVVdOZ0paU1pDbUZJWVExRjBsRGxMbjZwSmhSQ0pUQ1VwS1k1UWJJRlZOMGhTSnpCS3k5TkJFZWhoSFAwUXlGUDJmaXNsb3VtdDVGSnVzRUd0U0xEQjE1Szc3TlZ5d0U1aTJUcUJJdHVqZXFyRnN2Sk90MWI5bnNyckV4dTE0OHVDdUgySm45VFhZVEh0YUJtWTNkZUJZcXhGUU85azIzQ3dBNmNGUS9VN21nZUlsc2E3b2trQk5ZNTlQdzZnNkxwN05iT1J4WGhaWXpFQTIzalVxd3dGVnJXMkk4dFZrdHUxSzdjdmdjS1JBSmNCSkovcWpRS1gyZXhJTWw4NUd4b1lra3hFcU8rYUwrUEI2WmdhaktERzFITUw4K3JnTXdaMTRIbXI2cGhLZUxwa1BoL0I0QUR3Zm5FL2t2Tk5qN1FxWVIrWnJpK2s0NnpvT0RoODF1Y0ZpUlZIZllXei90VXBpZWJScFBKUTcyZFNna3FNYjIzcDFjSzgwaTQ1UTFybVBGczBrajFCMUhOWUNxNlN0NzlLUGFKdUlkUnBCc0dtQzU4aTRlNjJYaUlBa2ppZVM4L2xKeWIyYzBra3prcVJLa3lhRkFWaHNqWTliRXZ5VWFibnUxaG8zY1Nkd1ZlRjZUOUdYYS9DNEdsVkZacnU4YzRFRnJRWmJFUnJhREo4MFhTMFVrbThtZjdTOWlxdUN3OUt0V01PcU9JTEFQWXRJa3pkeDRBUnpXVWN0cjlJM2F4bVBxdE5OcGJUWTB0Ykp1Wk15Um9GaTNGQ3VzaWtrbmdZUW1rSjVLYVFxSUZwMHk0aHJSTG5FQm9HcEpNQWVxOUVIMFRzWUd1cllsNG1NMlNtTXJTUnZjVHBOcFEvb2Y3UDk5aUhZbDRsbEN6SkZqV0kvd0JyYjlTRjdJV3pNaVFSRUhUMFJkQ3QrSG5tRCtpZkJzdTU5YW9PR1pyUWY5RFo5NjBlenV5R0NvM3A0ZW1EOTV3em4xZkpWaC9CUHBYcGd1WnZwRTNIOWg0Y2tiQ1k1cjVBRGdSWWd0Z2dwMytCZjBvOXQ5bWNQaUx2b1UzTys5bEFkNmlENzFsY1o5SDJGRWcwNmpKKzB4N2lCNU9uM3IwWEViVG9NTVZLMUZoNFBxTUI5SlRQckhEUEVERTBEUDhBV3cvN2tmSWl1a3ZEeWZFZlJ2U3lQN3V1L1BIZ3podVNlRG9FaWVPN21zdi9BTUVZMy9vai9XejhWN2Jpc1RnMnY3ditMb05xd0RrTDJEVzQ4TGlpL3dBSi9YUzl5ZHhZcm5IWjh0dUtZNTFrcFRIRlpObmFrTWxPWTZDbXJsbVVHS0xoYU9ZL0ZBWUZiYklBa2plZEZTRkxSWFlzK0l4MFNVM2xwbHRpclhFWUlDNHVkNVVWdUdQQkpxaEoyaWZnZTBOVU9oejhyYjNndUV4YVFMbTZ0c0hVcXVKYzkrWWpUUnJlT2hpL1ZVK0d3Z0JIelUwWVkxYlpzckd5U1RvQnZXa1cyWno2bXoySHRIRFZRS2VKTHFUM0FYTHgzWm0xbk4wOC9WWFAvcHpoaTF3WStxMFBnbUg1Z2Q0TUZZN3MxZ2FWUjlhaTlvY0docHpXekF4RWdqeVVuRGJYeG15bjVUL053ODJtUzJQaXc5TGNsdmVNbzVuRjNVV2FHbjJDcTBCbXA0a0VURVZHa201MDhFbVBKUDJqaVdZTWlyVExPOUVaMk5jNW9jdy8wT2FMOHh6V2k3TDlyc05qSURYWktwLzViaUFUL2FkSGZIa3N6OUsyR28wZTdERzVhdFNYT0RiTnlEZVdpMGwyL2tWTGNTNDhzMWhtQTJ2ajNWNnRTcTgrSjdpNCtlN3lFRHlVSmM0cHNyQW9jdWxObGRtVHNLSGdwNGNnWmdsNzBjVUpoMVlZbE1LR01RT1Bva2RXamNmUS9nbmFIMFk5T3AweTRoclFTNXhBYUJxU1RBSHFoMTM1QU0xcGdpNGt6eVhwUDBjZG1RMDA4YlY3dXF3dG1rMXBKZ243VHRJSXVJM0U4azBtOWJNNVZITXRHbDJDTVJnOEcyalNER2xvMUxYSE5VY1pjNXhNYjl3MHRkVW0ydTJlMDhNQjNyR01CKzJHbHduV0p6WldrY3d0WjJqMjNoYVZBdXJOY3h1Z0RKejVyd0d4cWJiN2NWa3RuZHZhZUpES0Q2Slk1emNvZG1FRjVFRFVHeFBMMVZjYWxxY1ZmNkNUalZ3ZUNsYjJ2eGRlYzJKcU40UVExdnF3QlFNVy9FRWt1eEZWMmJYK2E1cFBtWUpXOG9qTTUxQ2lING1vQWM3c3JSU3BuZ1RiTTczRDNMejd0Smp6aHF6bVZHVmFiamZLOWpjaG5XQkF0UEN5MmNJSlpKak9VcFZFaFY4TVo4VFhHZnZQcUdmUE5kUnErRHpCekFDMms4QXVBOFJMMmtscGw0SkVBblFxRmpOclptdzBocEJCQkdZQzM5Tng3MU93TzNBY3JvRWl6aHU0VDBYSExxcGZvN29kcFJyMHBjWHNaelI0U0hlVUg4MVgvd0FJL3dDNmZSYmJFN1ZaOXBqVEkxYUlrY1I0MUQrdGFIM0hlNWIvQUJSOFppdVdYcU1rU21GS2tLd1p1aEZ5NWNwQTZWWVlTcEYrU3IxSWE3M3BBWDJIcTVnRS9FMEFHeWJLdHd0VXN2N2t1S3hacXVEZnNnKzlYZG9qcmtzY0FBS2JudU56Ylc4YnJlcWdqR0hmcE4wVEdWb2FHY05md1ZaS08zZ2RmVFRka3NmbHhEbk9pWEF6Nnl0ejlZVTNXSkJCR2gwbnJvdkxzRlZEVE85V3VIMmtSRW1mMSt5MjR1U2xUTWVYanQyaXcyN3NFTmQzbUhjR3pmTHVCM0VLb3htME1SVkk3d09lNEFOQkxpZkNOMHV2eFZqaWNjWERLREErUG9tdFluS0tid0VXMHNtZHhPS2V6VmtjMUZPMEg4bHFxMUFGcHROdElXVHgySHlPdDdKdUR5L0pZempSckJ4Zmdqc1kvajhFenYzSGVVTlBZMlZCb2tqcEozbjNxVmhNSk9xTGg4UHZQdTNLWGhXK0tJbENFMldHRHc0YUxDRllVOE9DRkJmVmd4eVU3RHZKRXo2V1hUQkk1NVdSZG9pcXhoN3N5QnJUYzBQYVJ2OEFDNEVTcHV4UHBKcjRXaUtWTEQwV3RrbjJYUkoxZ0Y4RG9FVmgwQ3pHMXRyVm1WcWpBOHcxeEF1ZEpUNVA4NUNFVlBEUmNiWDdlNG5GQUNyUXc3dzB5QTZrSEFIU1lKS3JCMm14TFlMR1VhWkdtV2hSRWVlUlZuMTFXKys3MUtiOWNWditvNzFLeStSbWk0b3BWUmREdGh0R0lHSWUwY0d3MGVqWVZWdGF2V3JQbXRWZlZjQkFMaVRiVzBvSjJ0V2lPOGRIQ1NrK3RLdjMzZXBTY2s5bEtGYW9DYU1iMGFtMGh1WU9CaUpCTjc4QnZISGdrK3NxbjNqNnJtN1RxRDdSV2RJMHVpYmdkcXZwR1F3SGZCa2dxMi80emQvK1dqLzNLZ08xbnhHL2pKUS9yT3A5NU5TNjRRbm5aRVNMaXVTWUhMbHlSQUNxUTFrMlVjS2JRM29BUVZjcGc4TEoyQ2RlU28xZlVvbERSQUVpczZaS2psR09pRlIxUWdET3NVZW5WUXNTYitRK0NSaFI2THd0c0pVbmVyS2wxVk5nTkQrdHdWcmhYR0JjNnJvZ3pDYXlIelpiV2haN0hVY3dxTmk3Q1NPbjdmQlhOWTNIVWZKUVgvOEF2TzZOL3dERUk1QWhnellVaWs3S1FoWWtYUFZFYm9PaTUyZEpQbTJZYWZxeWxiR0VrbmVvZXcvYkEzZnNwK3lmYkkzWmo4MDQ3UkVzSmpjVlY4YnBPa3dyVEFFNUFlUVZGaXZhZXJ2Qyt3M29QaVZwRDdNem45VVdEQjRtOVFzajJyWkdMcmMzVDZnSDVyWjBCcCt1S3gvYkQvNVZUb3ovQU1RdE9iNms4UDJLVmN1SzVjeDBITGx5NUFITGtxUkFISllTSkVtQi85az0iLCJtZXNzYWdlc190aW1lb3V0IjoxMCwia2VlcF9sb2dnZWRfaW4iOnRydWUsImFwcF9wcm9maWxlIjp7ImRlY2ltYWxzIjozLCJtZXNzYWdlVGltZU91dCI6MTAsInZpZXdBbm9uRGV2aWNlcyI6dHJ1ZX0sIm11bHRpcGxlX2xvZ2luIjp0cnVlLCJzZWN1cmVfcGFzc3dvcmQiOnRydWV9LCJyb2xlcyI6WyJDdXN0b21lckFkbWluIl0sInBlcm1pc3Npb25zIjpbXX19.l_4tZ0R_EpfYVN5wionUOe6dLHKeKSBVRWDEhE5RAlmazRnsAOWJYFDXTvB8UObRRlDytT5u18cd3zO97_X5wg"}
response = requests.post(api_url, data=payload, headers=headers)

Change Password (Cambio de contrasena)

Servicio REST para cambiar la contraseña del usuario. Para esto el usuario debe estar autenticado y deberá enviar la contraseña antigua y la nueva, teniendo en cuenta que la contraseña antigua y la nueva deben ser distintas para que el cambio sea válido.

Parámetros

  • old_password: Cadena de carácteres con la clave vigente.
  • new_password: Cadena de carácteres con la nueva clave o clave para asignar.

Retorna

HTTP Status
  • 200, si el cambio de contraseña es exitoso.
  • 406, si existe error de autenticación del antiguo password.
  • 500, cualquier otra excepción no manejada.

Ejemplo de uso.

import requests

api_url = "https://www.myserver.com/auth/change-password/"
headers = {"Content-Type": "application/json", "Accept": "application/json", "Authorization": "JWT xasfdasxasdasd"}
payload = {"old_password": "tuMvERweRley", "new_password": "tuMvERweRley"}
response = requests.post(api_url, data=payload, headers=headers)

Request Password (Solicitud de contrasena)

Servicio REST para solicitar el envío de una contraseña nueva al correo electrónico.

Parámetros

  • email: Correo electrónico utilizado para el acceso y al cual se enviará la clave correspondiente.

Retorna

HTTP Status
  • 200, si el proceso culmina exitosamente.
  • 406, la solicitud contiene datos incorrectos o no válidos, como un correo electrónico no registrado.
  • 500, cualquier otra excepción no manejada.

Ejemplo de uso.

import requests

api_url = "https://www.myserver.com/auth/refresh/"
headers = {"Content-Type": "application/json", "Accept": "application/json", "Authorization": "JWT xasfdasxasdasd"}
payload = {"old_password": "tuMvERweRley", "new_password": "tuMvERweRley"}
response = requests.post(api_url, data=payload, headers=headers)

Add User (Agregar usuario)

Servicio REST para crear un usuario. El servicio ofrece la posibilidad de enviar como parte de los datos el perfil de usuario, el listado de los grupos (roles) asignados y el listado de los permisos individuales asignados también al usuario.

Parámetros

  • first_name (opcional): El primer nombre con el que se identifica el usuario.
  • last_name (opcional): El apellido con el que se identifica el usuario.
  • email: Correo electrónico asociado al usuario. Este correo se utilizará como nombre de usuario en el esquema de autenticación basado en "email".
  • username (opcional): Identificador del usuario. Si no se envía el sistema automáticamente genera uno basado en un uuid.
  • password: Clave que utilizará el usuario para el ingreso al sistema.
  • is_staff (opcional): Identifica al usuario como parte del staff del sistema.
  • profile: Diccionario de datos con los campos requeridos para el perfil del usuario.
    • timezone (opcional): Nombre calificado de la zona horaria. Ejemplo "America/Bogota".
    • theme (opcional): Tema que utilizará el usuario para la visibilización del aplicativo. Están disponibles los temas "dark" y "corporate".
    • lang (opcional): Lenguaje que se utilizará principalmente en la interfaz del usuario y en los mensajes que el backend envía.
    • keep_logged_in (opcional): Bandera que indica al sistema si mantiene abierta la sesión del usuario o no.
    • message_timeout (opcional): Tiempo de espera configurado para mantener los mensajes en la interfaz activos.
    • multiple_login (opcional): Indica si permite al usuario mantener varias sesiones abiertas del sistema en el mismo tipo de dispositivo.
  • groups (opcional): Listado de los grupos (roles) que se asignan al usuario en el momento de su creación.
  • permissions (opcional): Listado de los permisos especiales adicionales asignados al usuario en el momento de su creación.

Retorna

HTTP Status
  • 200: Si la solicitud de password es exitosa.
JSON
{
  "full_name": "Guest",
  "email": "user@example.com",
  "last_login": "2023-11-23T20:28:46.867Z",
  "is_staff": true,
  "is_superuser": true,
  "id": 0,
  "first_name": "string",
  "last_name": "string",
  "level": 5
}

Ejemplo de uso

{
  "email": "user@example.com",
  "last_login": "2023-11-23T20:28:46.865Z",
  "is_staff": true,
  "is_superuser": true,
  "first_name": "string",
  "last_name": "string"
}

Delete User (Eliminar usuario)

Servicio REST para eliminar un usuario por medio su ID.

Parámetros:

  • id: Identificador del usuario que se desea eliminar.

Retorna:

HTTP Status
  • 200, esto indica que la eliminación del usuario se ha realizado con éxito.
  • 404, se produce cuando se intenta acceder a un objeto que no existe en la base de datos.
  • 403, cuando se intenta eliminar un objeto que tiene registros secundarios protegidos, lo que significa que existen relaciones de clave externa que impiden la eliminación del objeto principal.
  • 406, se utiliza para manejar errores de validación.
  • 500, cualquier otra excepción no manejada.
JSON
{
  "full_name": "Guest",
  "email": "user@example.com",
  "last_login": "2023-11-23T20:29:56.537Z",
  "is_staff": true,
  "is_superuser": true,
  "id": 0,
  "first_name": "string",
  "last_name": "string",
  "level": 5
}

Ejemplo de uso

{
  "email": "user@example.com",
  "last_login": "2023-11-23T20:29:56.536Z",
  "is_staff": true,
  "is_superuser": true,
  "first_name": "string",
  "last_name": "string"
}

User List (Lista de usuarios)

Servicio REST para obtener lista de usuarios. Agregue un filtro para obtener solo usuarios activos.

Retorna:

HTTP Status
  • 200, si existen datos.
  • 204, si los datos están vacíos.
JSON
[
  {
    "full_name": "Guest",
    "email": "user@example.com",
    "last_login": "2023-11-23T20:26:42.385Z",
    "is_staff": true,
    "is_superuser": true,
    "id": 0,
    "first_name": "string",
    "last_name": "string",
    "level": 5
  }
]

Ejemplo de uso

{
  "email": "user@example.com",
  "last_login": "2023-11-23T20:26:42.381Z",
  "is_staff": true,
  "is_superuser": true,
  "first_name": "string",
  "last_name": "string"
}

User Update (Actualizacion de usuarios)

Este servicio REST permite actualizar la información de un usuario. Los datos a actualizar son opcionales, lo que significa que solo se deben incluir los campos que se desean modificar.

Parámetros:

  • email: Correo electrónico asociado al usuario.
  • first_name (opcional): El primer nombre con el que se identifica el usuario.
  • last_name (opcional): El apellido con el que se identifica el usuario.
  • username (opcional): Identificador del usuario. Si no se envía el sistema automáticamente genera uno basado en un uuid.
  • password (opcional): Clave que utilizará el usuario para el ingreso al sistema.
  • is_staff (opcional): Identifica al usuario como parte del staff del sistema.

Retorna:

HTTP Status
  • 200, si la actualización es exitosa.
  • 404, si el usuario específicado no existe.
  • 406, en caso de que la solicitud no contenga "email" o "id"
  • 500, cualquier otra excepción no manejada.
JSON
{
  "full_name": "Guest",
  "email": "user@example.com",
  "last_login": "2023-11-23T20:30:44.721Z",
  "is_staff": true,
  "is_superuser": true,
  "id": 0,
  "first_name": "string",
  "last_name": "string",
  "level": 5
}

Ejemplo de uso

{
  "email": "user@example.com",
  "last_login": "2023-11-23T20:30:44.719Z",
  "is_staff": true,
  "is_superuser": true,
  "first_name": "string",
  "last_name": "string"
}

zibanu.django.auth.api.services.permission module

Contiene un conjunto de métodos para gestionar los permisos de los servicios relacionados con la autenticación y la autorización de Zibanu para Django.

Permission List (Listado de permisos)

Servicio REST listar los permisos que pueden tener los distintos usuarios.

Retorna:

HTTP Status
  • 200, la solicitud fue exitosa, y la respuesta contendría la lista de permisos.
  • 500, cualquier otra excepción no manejada.
JSON
[
  {
    "id": 0,
    "name": "string"
  }
]

Ejemplo de uso

{
  "name": "string"
}

zibanu.django.auth.api.services.profile module

Contiene un conjunto de métodos para la gestión de perfiles de usuario de Zibanu para Django.

Update Profile (Actualizacion de perfil)

Servicio REST para actualizar el modelo UserProfile.

Parámetros:

  • timezone (opcional): Nombre calificado de la zona horaria. Ejemplo "America/Bogota".
  • theme (opcional): Tema que utilizará el usuario para la visibilización del aplicativo. Están disponibles los temas "dark" y "corporate".
  • lang (opcional): Lenguaje que se utilizará principalmente en la interfaz del usuario y en los mensajes que el backend envía.
  • avatar (opcional): Almacena la información o la referencia a la imagen seleccionada por el usuario para su avatar.
  • keep_logged_in (opcional): Bandera que indica al sistema si mantiene abierta la sesión del usuario o no.
  • message_timeout (opcional): Tiempo de espera configurado para mantener los mensajes en la interfaz activos.
  • multiple_login (opcional): Indica si permite al usuario mantener varias sesiones abiertas del sistema en el mismo tipo de dispositivo.

Retorna:

HTTP Status
  • 200, si la actualización del usuario se realiza correctamente.
  • 406, si hay algún problema con los datos proporcionados en la solicitud que no cumple con ciertas validaciones definidas.
  • 500, cualquier otra excepción no manejada.
JSON
{
  "timezone": "Africa/Abidjan",
  "theme": "string",
  "lang": "str",
  "avatar": "string",
  "messages_timeout": 0,
  "keep_logged_in": true,
  "app_profile": {
    "additionalProp1": "string",
    "additionalProp2": "string",
    "additionalProp3": "string"
  },
  "multiple_login": true,
  "secure_password": true
}

Ejemplo de uso

{
  "timezone": "Africa/Abidjan",
  "theme": "string",
  "lang": "str",
  "avatar": "string",
  "messages_timeout": 0,
  "keep_logged_in": true,
  "app_profile": {
    "additionalProp1": "string",
    "additionalProp2": "string",
    "additionalProp3": "string"
  },
  "multiple_login": true,
  "secure_password": true
}

zibanu.django.auth.api.services.group module

Contiene un conjunto de métodos para la gestión de grupos de usuarios de Zibanu para Django.

Group List (Lista de grupo)

Servicio REST para listar los grupos (roles).

Retorna:

HTTP Status
  • 200, si la solicitud fue exitosa y la respuesta contiene la lista de resultados.
  • 403, el usuario no tiene los permisos necesarios para acceder a la lista de resultados.
  • 404, la lista de resultados solicitada no pudo ser encontrada.
  • 500, cualquier otra excepción no manejada.
JSON
[
  {
    "id": 0,
    "name": "string",
    "level": "5"
  }
]

Ejemplo de uso

{
  "name": "string"
}

zibanu.django.auth.lib package

Paquete que contiene módulos, clases y utilidades relacionadas con la autenticación y autorización de Zibanu para Django.

zibanu.django.auth.lib.signals module

Este módulo tiene como objetivo manejar señales personalizadas de Django para capturar eventos relacionados con la autenticación y la gestión de contraseñas.

Se definen dos señales:

  • Se utiliza para gestionar eventos relacionados con el cambio de contraseña.
on_change_password = dispatch.Signal()
  • Se utiliza para gestionar eventos relacionados con el restablecimiento de contraseña.
on_request_password = dispatch.Signal()

Los decoradores @receiver se utilizan para asociar funciones receptoras (event handlers) a las señales definidas. Cada una de ellas se activará cuando se emita la señal correspondiente.

@receiver(on_change_password, dispatch_uid="on_change_password")
  • Asigna la función receptora a la señal on_change_password. Se agrega un identificador único (dispatch_uid) para garantizar que la conexión de la señal sea única y no se duplique.

@receiver(on_request_password, dispatch_uid="on_request_password")
  • Asigna la función receptora a la señal on_request_password. Se agrega un identificador único (dispatch_uid) para garantizar que la conexión de la señal sea única y no se duplique.

@receiver(user_logged_in, dispatch_uid="on_user_logged_in")
  • Asigna la función receptora a la señal user_logged_in. Se agrega un identificador único (dispatch_uid) para garantizar que la conexión de la señal sea única y no se duplique.

@receiver(user_login_failed, dispatch_uid="on_user_login_failed")
  • Asigna la función receptora a la señal user_login_failed. Se agrega un identificador único (dispatch_uid) para garantizar que la conexión de la señal sea única y no se duplique.

auth_receiver(sender: Any, user: Any = None, **kwargs)→ None:

Esta función actúa como un manejador para eventos capturados por las señales de cambio de contraseña o solicitud de contraseña.

Parámetros:

  • sender: Clase de emisor de la señal.
  • user: Objeto de usuario para obtener datos.
  • **kwargs: Diccionario con campos y parámetros.

Retorno:

  • Ninguno.

zibanu.django.auth.lib.utils module

Este modulo contiene la siguiente función:

  • get_user: Obtiene el objeto de usuario de SimpleJWT TokenUser.

Parámetros:

  • user: Objeto de usuario de tipo de usuario de token SimpleJWT o tipo de objeto de usuario

Retorna:

  • user: Tipo de objeto de usuario de Django.

zibanu.django.auth.api.serializers package

Este directorio contiene serializadores para la API de autenticación de Zibanu para Django.

zibanu.django.auth.api.serializers.group module

GroupListSerializer es un serializador para una lista de grupos. Incluye los siguientes campos:

  • id: El ID del grupo.
  • name: El nombre del grupo.

zibanu.django.auth.api.serializers.permission module

PermissionSerializer es un serializador para un permiso. Incluye los siguientes campos:

  • id: El ID del permiso.
  • name: El nombre del permiso.

zibanu.django.auth.api.serializers.profile module

ProfileSerializer es un serializador para un perfil de usuario. Incluye los siguientes campos:

  • timezone: La zona horaria del usuario.
  • theme: El tema del usuario.
  • lang: El idioma del usuario.
  • avatar: El avatar del usuario.
  • message_timeout: Tiempo de espera de los mensajes del usuario.
  • keep_logged_in: Si el usuario desea permanecer conectado.
  • app_profile: El perfil de la aplicación del usuario.
  • multiple_login: Si el usuario permite múltiples inicios de sesión.
  • secure_password: Si la contraseña del usuario es segura.

zibanu.django.auth.api.serializers.token module

TokenObtainSerializer es un serializador para obtener un token mediante la autenticación de correo electrónico. Incluye los siguientes campos:

  • username_field: El campo que se usará para la autenticación del nombre de usuario.
  • email: La dirección de correo electrónico del usuario.
  • password: La contraseña del usuario.

TokenObtainSlidingSerializer es una subclase de TokenObtainSerializer que usa un token deslizante. Incluye los siguientes campos:

  • token.

zibanu.django.auth.api.serializers.user module

La clase UserSerializer se utiliza para serializar y deserializar un solo objeto de usuario. Incluye los siguientes campos:UserSerializer es un serializador para un usuario. Incluye los siguientes campos:

  • email.
  • full_name.
  • last_login.
  • is_staff.
  • is_superuser.
  • is_active.
  • profile.
  • roles.
  • first_name.
  • last_name.
  • permissions.
  • username.
  • password.

El método create se utiliza para crear un nuevo objeto de usuario. Toma un diccionario de datos validados como entrada y crea un nuevo objeto de usuario con los datos proporcionados. Si el objeto de usuario se crea correctamente, devuelve el objeto de usuario. Si el objeto de usuario ya existe, genera una excepción ValidationError.

UserListSerializer

UserListSerializer es un serializador para una lista de usuarios. Incluye los siguientes campos:

  • full_name.
  • email.
  • last_login.
  • username.
  • is_staff.
  • is_superuser.

El método get_full_name se utiliza para obtener el nombre completo de un objeto de usuario. Toma un objeto de usuario como entrada y devuelve el nombre completo del usuario.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

zibanu_django_auth-1.2.0.tar.gz (154.3 kB view details)

Uploaded Source

Built Distribution

zibanu_django_auth-1.2.0-py3-none-any.whl (108.7 kB view details)

Uploaded Python 3

File details

Details for the file zibanu_django_auth-1.2.0.tar.gz.

File metadata

  • Download URL: zibanu_django_auth-1.2.0.tar.gz
  • Upload date:
  • Size: 154.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.11.5

File hashes

Hashes for zibanu_django_auth-1.2.0.tar.gz
Algorithm Hash digest
SHA256 f6c32be94f7a4cb718f1ec4ffa318920d922d41157af17e54eb5899fd0b56c6b
MD5 3df635de170158074efde0548f566653
BLAKE2b-256 c2c33f81cc6af628d58720e65d02ddf85e57e805d8cc9e2c5609ff77a380930e

See more details on using hashes here.

File details

Details for the file zibanu_django_auth-1.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for zibanu_django_auth-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7008e1be81d1f419f551aa7d593bbc099317473dc4017a073921fad35c8273dd
MD5 61f81c4c6671fc3490c6e8d80207284f
BLAKE2b-256 fab96af7893edf9c8d4c1018fce487b476e016c05d9de39fe4ffd83142a410a9

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page