Spaces:
Runtime error
Runtime error
JairoDanielMT
commited on
Commit
•
90ba16c
1
Parent(s):
2ae5049
generar PDF como tambien trae los datos de la prescripcion en JSON y PDF
Browse files- .gitignore +3 -1
- app.py +240 -0
- optica.db +0 -0
- prescripcion.pdf +74 -0
.gitignore
CHANGED
@@ -1,3 +1,5 @@
|
|
1 |
__pycache__
|
2 |
.vscode
|
3 |
-
Optica.session.sql
|
|
|
|
|
|
1 |
__pycache__
|
2 |
.vscode
|
3 |
+
Optica.session.sql
|
4 |
+
test.py
|
5 |
+
test2.py
|
app.py
CHANGED
@@ -4,6 +4,8 @@ from queue import Queue
|
|
4 |
from pydantic import BaseModel
|
5 |
from fastapi.middleware.cors import CORSMiddleware
|
6 |
from fastapi import FastAPI, HTTPException
|
|
|
|
|
7 |
|
8 |
|
9 |
app = FastAPI()
|
@@ -828,6 +830,244 @@ def delete_prescripcion(prescripcion: PrescripcionDelete):
|
|
828 |
return []
|
829 |
|
830 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
831 |
"""
|
832 |
CREATE TABLE Montura (
|
833 |
id_montura INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
|
4 |
from pydantic import BaseModel
|
5 |
from fastapi.middleware.cors import CORSMiddleware
|
6 |
from fastapi import FastAPI, HTTPException
|
7 |
+
from fastapi.responses import FileResponse
|
8 |
+
from reportlab.pdfgen import canvas
|
9 |
|
10 |
|
11 |
app = FastAPI()
|
|
|
830 |
return []
|
831 |
|
832 |
|
833 |
+
def obtener_datos_prescripcion(id_prescripcion):
|
834 |
+
try:
|
835 |
+
conn = DatabaseConnection().get_connection()
|
836 |
+
cursor = conn.cursor()
|
837 |
+
query = """
|
838 |
+
SELECT
|
839 |
+
P.id_prescripcion,
|
840 |
+
P.fecha AS fecha_prescripcion,
|
841 |
+
P.detalle_lunas,
|
842 |
+
Me.Esfera_OD_lejos,
|
843 |
+
Me.Cilindro_OD_lejos,
|
844 |
+
Me.Eje_OD_lejos,
|
845 |
+
Me.Agudeza_visual_OD_lejos,
|
846 |
+
Me.Esfera_OI_lejos,
|
847 |
+
Me.Cilindro_OI_lejos,
|
848 |
+
Me.Eje_OI_lejos,
|
849 |
+
Me.Agudeza_visual_OI_lejos,
|
850 |
+
Me.Esfera_OD_cerca,
|
851 |
+
Me.Cilindro_OD_cerca,
|
852 |
+
Me.Eje_OD_cerca,
|
853 |
+
Me.Agudeza_visual_OD_cerca,
|
854 |
+
Me.Esfera_OI_cerca,
|
855 |
+
Me.Cilindro_OI_cerca,
|
856 |
+
Me.Eje_OI_cerca,
|
857 |
+
Me.Agudeza_visual_OI_cerca,
|
858 |
+
C.id_cliente,
|
859 |
+
C.nombres_y_apellidos,
|
860 |
+
C.edad,
|
861 |
+
C.telefono,
|
862 |
+
C.direccion
|
863 |
+
FROM
|
864 |
+
Prescripcion AS P
|
865 |
+
JOIN
|
866 |
+
Medidas AS Me ON P.id_medidas = Me.id_medidas
|
867 |
+
JOIN
|
868 |
+
Cliente AS C ON Me.id_cliente = C.id_cliente
|
869 |
+
WHERE
|
870 |
+
P.id_prescripcion = ?;
|
871 |
+
"""
|
872 |
+
cursor.execute(query, (id_prescripcion,))
|
873 |
+
resultado = cursor.fetchone()
|
874 |
+
return resultado
|
875 |
+
except Exception as e:
|
876 |
+
print(e)
|
877 |
+
return []
|
878 |
+
|
879 |
+
|
880 |
+
class DatosPrescripcion:
|
881 |
+
def __init__(
|
882 |
+
self,
|
883 |
+
id_prescripcion,
|
884 |
+
fecha_prescripcion,
|
885 |
+
detalle_lunas,
|
886 |
+
esfera_od_lejos,
|
887 |
+
cilindro_od_lejos,
|
888 |
+
eje_od_lejos,
|
889 |
+
agudeza_visual_od_lejos,
|
890 |
+
esfera_oi_lejos,
|
891 |
+
cilindro_oi_lejos,
|
892 |
+
eje_oi_lejos,
|
893 |
+
agudeza_visual_oi_lejos,
|
894 |
+
esfera_od_cerca,
|
895 |
+
cilindro_od_cerca,
|
896 |
+
eje_od_cerca,
|
897 |
+
agudeza_visual_od_cerca,
|
898 |
+
esfera_oi_cerca,
|
899 |
+
cilindro_oi_cerca,
|
900 |
+
eje_oi_cerca,
|
901 |
+
agudeza_visual_oi_cerca,
|
902 |
+
id_cliente,
|
903 |
+
nombres_y_apellidos,
|
904 |
+
edad,
|
905 |
+
telefono,
|
906 |
+
direccion,
|
907 |
+
):
|
908 |
+
self.id_prescripcion = id_prescripcion
|
909 |
+
self.fecha_prescripcion = fecha_prescripcion
|
910 |
+
self.detalle_lunas = detalle_lunas
|
911 |
+
self.esfera_od_lejos = esfera_od_lejos
|
912 |
+
self.cilindro_od_lejos = cilindro_od_lejos
|
913 |
+
self.eje_od_lejos = eje_od_lejos
|
914 |
+
self.agudeza_visual_od_lejos = agudeza_visual_od_lejos
|
915 |
+
self.esfera_oi_lejos = esfera_oi_lejos
|
916 |
+
self.cilindro_oi_lejos = cilindro_oi_lejos
|
917 |
+
self.eje_oi_lejos = eje_oi_lejos
|
918 |
+
self.agudeza_visual_oi_lejos = agudeza_visual_oi_lejos
|
919 |
+
self.esfera_od_cerca = esfera_od_cerca
|
920 |
+
self.cilindro_od_cerca = cilindro_od_cerca
|
921 |
+
self.eje_od_cerca = eje_od_cerca
|
922 |
+
self.agudeza_visual_od_cerca = agudeza_visual_od_cerca
|
923 |
+
self.esfera_oi_cerca = esfera_oi_cerca
|
924 |
+
self.cilindro_oi_cerca = cilindro_oi_cerca
|
925 |
+
self.eje_oi_cerca = eje_oi_cerca
|
926 |
+
self.agudeza_visual_oi_cerca = agudeza_visual_oi_cerca
|
927 |
+
self.id_cliente = id_cliente
|
928 |
+
self.nombres_y_apellidos_cliente = nombres_y_apellidos
|
929 |
+
self.edad_cliente = edad
|
930 |
+
self.telefono_cliente = telefono
|
931 |
+
self.direccion_cliente = direccion
|
932 |
+
|
933 |
+
def generar_pdf(self, filename):
|
934 |
+
pdf = canvas.Canvas(filename)
|
935 |
+
pdf.setFont("Helvetica-Bold", 12)
|
936 |
+
ubicacion_inicio = 780 # Posición inicial en y
|
937 |
+
pdf.drawCentredString(
|
938 |
+
300, ubicacion_inicio, "OPTICA ARTE VISUAL - PRESCRIPCIÓN"
|
939 |
+
)
|
940 |
+
pdf.drawString(
|
941 |
+
100,
|
942 |
+
ubicacion_inicio - 40,
|
943 |
+
f"Nombre del Cliente: {self.nombres_y_apellidos_cliente}",
|
944 |
+
)
|
945 |
+
pdf.drawString(
|
946 |
+
100, ubicacion_inicio - 60, f"Datos del cliente: {self.direccion_cliente}"
|
947 |
+
)
|
948 |
+
pdf.drawString(
|
949 |
+
100, ubicacion_inicio - 80, f"Número telefónico: {self.telefono_cliente}"
|
950 |
+
)
|
951 |
+
pdf.drawString(
|
952 |
+
100,
|
953 |
+
ubicacion_inicio - 100,
|
954 |
+
f"Código de prescripción: {self.id_prescripcion}",
|
955 |
+
)
|
956 |
+
pdf.drawString(100, ubicacion_inicio - 120, f"Fecha: {self.fecha_prescripcion}")
|
957 |
+
pdf.drawString(
|
958 |
+
100, ubicacion_inicio - 140, f"Descripción: {self.detalle_lunas}"
|
959 |
+
)
|
960 |
+
ubicacion_esfera = 150 # Posición inicial en x
|
961 |
+
ubicacion_cilindro = ubicacion_esfera + 65 # Posición inicial en x + 65
|
962 |
+
ubicacion_eje = ubicacion_cilindro + 75 # Posición anterior en x + 75
|
963 |
+
ubicacion_agudeza = ubicacion_eje + 70 # Posición anterior en x + 70
|
964 |
+
tabla_medidas = ubicacion_inicio - 170 # Posición inicial en y
|
965 |
+
|
966 |
+
pdf.drawString(ubicacion_esfera - 50, tabla_medidas, "Tabla de medidas:")
|
967 |
+
# Para el ojo izquierdo de lejos
|
968 |
+
pdf.drawString(
|
969 |
+
ubicacion_esfera + 100, tabla_medidas - 20, "Ojo izquierdo de lejos"
|
970 |
+
)
|
971 |
+
pdf.line(
|
972 |
+
x1=ubicacion_esfera,
|
973 |
+
y1=tabla_medidas - 25,
|
974 |
+
x2=ubicacion_esfera + 300,
|
975 |
+
y2=tabla_medidas - 25,
|
976 |
+
)
|
977 |
+
pdf.drawString(ubicacion_esfera, tabla_medidas - 40, "Esfera")
|
978 |
+
pdf.drawString(ubicacion_cilindro, tabla_medidas - 40, "Cilindro")
|
979 |
+
pdf.drawString(ubicacion_eje, tabla_medidas - 40, "Eje")
|
980 |
+
pdf.drawString(ubicacion_agudeza, tabla_medidas - 40, "Agudeza visual")
|
981 |
+
pdf.drawString(ubicacion_esfera, tabla_medidas - 60, f"{self.esfera_oi_lejos}")
|
982 |
+
pdf.drawString(
|
983 |
+
ubicacion_cilindro, tabla_medidas - 60, f"{self.cilindro_oi_lejos}"
|
984 |
+
)
|
985 |
+
pdf.drawString(ubicacion_eje, tabla_medidas - 60, f"{self.eje_oi_lejos}")
|
986 |
+
pdf.drawString(
|
987 |
+
ubicacion_agudeza, tabla_medidas - 60, f"{self.agudeza_visual_oi_lejos}"
|
988 |
+
)
|
989 |
+
# Para el ojo derecho de lejos
|
990 |
+
odl = tabla_medidas - 100 # Posición inicial en y
|
991 |
+
pdf.drawString(ubicacion_esfera + 100, odl, "Ojo derecho de lejos")
|
992 |
+
pdf.line(x1=ubicacion_esfera, y1=odl - 5, x2=ubicacion_esfera + 300, y2=odl - 5)
|
993 |
+
pdf.drawString(ubicacion_esfera, odl - 20, "Esfera")
|
994 |
+
pdf.drawString(ubicacion_cilindro, odl - 20, "Cilindro")
|
995 |
+
pdf.drawString(ubicacion_eje, odl - 20, "Eje")
|
996 |
+
pdf.drawString(ubicacion_agudeza, odl - 20, "Agudeza visual")
|
997 |
+
pdf.drawString(ubicacion_esfera, odl - 40, f"{self.esfera_od_lejos}")
|
998 |
+
pdf.drawString(ubicacion_cilindro, odl - 40, f"{self.cilindro_od_lejos}")
|
999 |
+
pdf.drawString(ubicacion_eje, odl - 40, f"{self.eje_od_lejos}")
|
1000 |
+
pdf.drawString(ubicacion_agudeza, odl - 40, f"{self.agudeza_visual_od_lejos}")
|
1001 |
+
|
1002 |
+
oic = odl - 80 # Posición inicial en y
|
1003 |
+
pdf.drawString(ubicacion_esfera + 100, oic, "Ojo izquierdo de cerca")
|
1004 |
+
pdf.line(x1=ubicacion_esfera, y1=oic - 5, x2=ubicacion_esfera + 300, y2=oic - 5)
|
1005 |
+
# Para el ojo izquierdo de cerca
|
1006 |
+
pdf.drawString(ubicacion_esfera, oic - 20, "Esfera")
|
1007 |
+
pdf.drawString(ubicacion_cilindro, oic - 20, "Cilindro")
|
1008 |
+
pdf.drawString(ubicacion_eje, oic - 20, "Eje")
|
1009 |
+
pdf.drawString(ubicacion_agudeza, oic - 20, "Agudeza visual")
|
1010 |
+
pdf.drawString(ubicacion_esfera, oic - 40, f"{self.esfera_oi_cerca}")
|
1011 |
+
pdf.drawString(ubicacion_cilindro, oic - 40, f"{self.cilindro_oi_cerca}")
|
1012 |
+
pdf.drawString(ubicacion_eje, oic - 40, f"{self.eje_oi_cerca}")
|
1013 |
+
pdf.drawString(ubicacion_agudeza, oic - 40, f"{self.agudeza_visual_oi_cerca}")
|
1014 |
+
odc = oic - 80
|
1015 |
+
pdf.drawString(ubicacion_esfera + 100, odc, "Ojo derecho de cerca")
|
1016 |
+
pdf.line(x1=ubicacion_esfera, y1=odc - 5, x2=ubicacion_esfera + 300, y2=odc - 5)
|
1017 |
+
# Para el ojo derecho de cerca
|
1018 |
+
pdf.drawString(ubicacion_esfera, odc - 20, "Esfera")
|
1019 |
+
pdf.drawString(ubicacion_cilindro, odc - 20, "Cilindro")
|
1020 |
+
pdf.drawString(ubicacion_eje, odc - 20, "Eje")
|
1021 |
+
pdf.drawString(ubicacion_agudeza, odc - 20, "Agudeza visual")
|
1022 |
+
pdf.drawString(ubicacion_esfera, odc - 40, f"{self.esfera_od_cerca}")
|
1023 |
+
pdf.drawString(ubicacion_cilindro, odc - 40, f"{self.cilindro_od_cerca}")
|
1024 |
+
pdf.drawString(ubicacion_eje, odc - 40, f"{self.eje_od_cerca}")
|
1025 |
+
pdf.drawString(ubicacion_agudeza, odc - 40, f"{self.agudeza_visual_od_cerca}")
|
1026 |
+
|
1027 |
+
# Calcular el centro de la página
|
1028 |
+
centro_pagina = pdf._pagesize[0] / 2
|
1029 |
+
|
1030 |
+
# Texto y línea centrados
|
1031 |
+
texto_firma = " Firma o sello: "
|
1032 |
+
ancho_texto = pdf.stringWidth(texto_firma, "Helvetica", 12)
|
1033 |
+
inicio_linea = centro_pagina - ancho_texto / 2
|
1034 |
+
fin_linea = inicio_linea + ancho_texto
|
1035 |
+
# ubicacion en y dependiendo de la tabla de medidas
|
1036 |
+
firma_ubicacion = odc - 70
|
1037 |
+
pdf.drawString(inicio_linea, firma_ubicacion, texto_firma)
|
1038 |
+
pdf.line(inicio_linea, firma_ubicacion - 50, fin_linea, firma_ubicacion - 50)
|
1039 |
+
|
1040 |
+
pdf.save()
|
1041 |
+
print(f"PDF generado: {filename}")
|
1042 |
+
|
1043 |
+
|
1044 |
+
# crear endpoint para obtener los datos de la prescripción
|
1045 |
+
@app.get("/prescripcion/{id_prescripcion}")
|
1046 |
+
def obtener_datos_prescripcion_api(id_prescripcion: int):
|
1047 |
+
datos_prescripcion = obtener_datos_prescripcion(id_prescripcion)
|
1048 |
+
if datos_prescripcion:
|
1049 |
+
# Crear un objeto de la clase DatosPrescripcion
|
1050 |
+
obj_datos_prescripcion = DatosPrescripcion(*datos_prescripcion)
|
1051 |
+
return obj_datos_prescripcion
|
1052 |
+
else:
|
1053 |
+
raise HTTPException(status_code=404, detail="Prescripción no encontrada")
|
1054 |
+
|
1055 |
+
|
1056 |
+
# crear endpoint retornando la url del PDF con los datos de la prescripción
|
1057 |
+
@app.get("/prescripcion/pdf/{id_prescripcion}")
|
1058 |
+
def obtener_pdf_prescripcion(id_prescripcion: int):
|
1059 |
+
datos_prescripcion = obtener_datos_prescripcion(id_prescripcion)
|
1060 |
+
if datos_prescripcion:
|
1061 |
+
# Crear un objeto de la clase DatosPrescripcion
|
1062 |
+
obj_datos_prescripcion = DatosPrescripcion(*datos_prescripcion)
|
1063 |
+
|
1064 |
+
# Generar el PDF con los datos
|
1065 |
+
obj_datos_prescripcion.generar_pdf("prescripcion.pdf")
|
1066 |
+
return FileResponse("prescripcion.pdf")
|
1067 |
+
else:
|
1068 |
+
raise HTTPException(status_code=404, detail="Prescripción no encontrada")
|
1069 |
+
|
1070 |
+
|
1071 |
"""
|
1072 |
CREATE TABLE Montura (
|
1073 |
id_montura INTEGER PRIMARY KEY AUTOINCREMENT,
|
optica.db
CHANGED
Binary files a/optica.db and b/optica.db differ
|
|
prescripcion.pdf
ADDED
@@ -0,0 +1,74 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
%PDF-1.3
|
2 |
+
%���� ReportLab Generated PDF document http://www.reportlab.com
|
3 |
+
1 0 obj
|
4 |
+
<<
|
5 |
+
/F1 2 0 R /F2 3 0 R
|
6 |
+
>>
|
7 |
+
endobj
|
8 |
+
2 0 obj
|
9 |
+
<<
|
10 |
+
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
11 |
+
>>
|
12 |
+
endobj
|
13 |
+
3 0 obj
|
14 |
+
<<
|
15 |
+
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
|
16 |
+
>>
|
17 |
+
endobj
|
18 |
+
4 0 obj
|
19 |
+
<<
|
20 |
+
/Contents 8 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 7 0 R /Resources <<
|
21 |
+
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
22 |
+
>> /Rotate 0 /Trans <<
|
23 |
+
|
24 |
+
>>
|
25 |
+
/Type /Page
|
26 |
+
>>
|
27 |
+
endobj
|
28 |
+
5 0 obj
|
29 |
+
<<
|
30 |
+
/PageMode /UseNone /Pages 7 0 R /Type /Catalog
|
31 |
+
>>
|
32 |
+
endobj
|
33 |
+
6 0 obj
|
34 |
+
<<
|
35 |
+
/Author (anonymous) /CreationDate (D:20231204171812+05'00') /Creator (ReportLab PDF Library - www.reportlab.com) /Keywords () /ModDate (D:20231204171812+05'00') /Producer (ReportLab PDF Library - www.reportlab.com)
|
36 |
+
/Subject (unspecified) /Title (untitled) /Trapped /False
|
37 |
+
>>
|
38 |
+
endobj
|
39 |
+
7 0 obj
|
40 |
+
<<
|
41 |
+
/Count 1 /Kids [ 4 0 R ] /Type /Pages
|
42 |
+
>>
|
43 |
+
endobj
|
44 |
+
8 0 obj
|
45 |
+
<<
|
46 |
+
/Filter [ /ASCII85Decode /FlateDecode ] /Length 735
|
47 |
+
>>
|
48 |
+
stream
|
49 |
+
Gat%a995Pr'SZ;Q/+0^F'^?L<lr'!;OeQQS0O86W^mT0F@1#RBoBU2--CH=V:lpdDc94AH%g*"]:Y]:*!oQQWhj506JbTM<3=On)/E2G.Sd`nSAUssGGch:#J06K&bKinqMInQs`XDRLg-*^30S.JlZ&?&k9siVQ66Es/I"M.J7jiu*B:[4U=WAn$):'JK"[?Ah'\&Ya[s4"[A"HrJ]!Y):`EZA)9uW]MoK9trWA&\aPCcj^>^4PTD7)pXWU("(Y3-%`fu$a*M41G<4I7f7]N2[?/+KX&80a%Df,6,bqN=O'+@7HC9G"OpW$]eSXKl^b\*a<&q'!"&i6EK@%XHJ:'Kd%3;GW'@Ll9%X(&q2=ipHJ?n1&2q2Wq!D^8j<tDWH?V"Y_gV@J;B@1[TC8Mu(LF6WAZn?5JH'S?o4P.)S-ePCYaeDPGhU2</T]r"8TZaUOeU@_/*O3PK88WDjPtQrN%h$O=a=QAGL&LA.jiJT!M'0&QLA)[t665_Cam3"C\oI1E#r[)(+`YqVQK4(D]m7?RhZ^sKC6b2Tj=?tR6R@;D[O8s=a<0VW8<UELP#,Rll)"s-,6ruV]MkZRa56Yb/iZ@g"U1[<\=BURpi12E&`K:??fL]#(@*6i-s#GpI"B\hi2H:Jna/K0TNCE/*.[2Es[_ZiK-R%4EK5E,jt8fcp'!>+pf"Ec7a<?tC-c1>3>B(b[(c)k+ATo]Xk-Odo\[XePlIfY5`%Aj~>endstream
|
50 |
+
endobj
|
51 |
+
xref
|
52 |
+
0 9
|
53 |
+
0000000000 65535 f
|
54 |
+
0000000073 00000 n
|
55 |
+
0000000114 00000 n
|
56 |
+
0000000221 00000 n
|
57 |
+
0000000333 00000 n
|
58 |
+
0000000536 00000 n
|
59 |
+
0000000604 00000 n
|
60 |
+
0000000900 00000 n
|
61 |
+
0000000959 00000 n
|
62 |
+
trailer
|
63 |
+
<<
|
64 |
+
/ID
|
65 |
+
[<cb36a7b4d17d95664f8eb4131f63a420><cb36a7b4d17d95664f8eb4131f63a420>]
|
66 |
+
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
67 |
+
|
68 |
+
/Info 6 0 R
|
69 |
+
/Root 5 0 R
|
70 |
+
/Size 9
|
71 |
+
>>
|
72 |
+
startxref
|
73 |
+
1784
|
74 |
+
%%EOF
|