From 31892247bf1c4d28bafa25bfaf5ef466e07d10bf Mon Sep 17 00:00:00 2001 From: Cheng Zhou Date: Tue, 16 Dec 2025 17:02:11 +0800 Subject: [PATCH] =?UTF-8?q?Step=204=EF=BC=9A=E8=AF=84=E8=AE=BA=20/=20?= =?UTF-8?q?=E9=99=84=E4=BB=B6=20/=20=E5=AE=A1=E8=AE=A1=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/app/api/v1/attachments.py | 113 ++++++++++++++++++ backend/app/api/v1/audit_logs.py | 36 ++++++ backend/app/api/v1/comments.py | 71 +++++++++++ backend/app/api/v1/router.py | 5 +- backend/app/crud/attachment.py | 59 +++++++++ backend/app/crud/audit.py | 55 +++++++++ backend/app/crud/comment.py | 48 ++++++++ backend/app/db/base.py | 3 + backend/app/models/attachment.py | 24 ++++ backend/app/models/audit_log.py | 22 ++++ backend/app/models/comment.py | 21 ++++ backend/app/schemas/attachment.py | 14 +++ backend/app/schemas/audit.py | 16 +++ backend/app/schemas/comment.py | 17 +++ .../b6a32901-a168-42b1-9b8a-02cb59380f1e.txt | 1 + backend/requirements.txt | 1 + pg_data/base/16384/1247 | Bin 122880 -> 122880 bytes pg_data/base/16384/1249 | Bin 475136 -> 491520 bytes pg_data/base/16384/1259 | Bin 114688 -> 122880 bytes pg_data/base/16384/1259_fsm | Bin 24576 -> 24576 bytes pg_data/base/16384/24584 | Bin 0 -> 8192 bytes pg_data/base/16384/24590 | Bin 8192 -> 16384 bytes pg_data/base/16384/24597 | Bin 8192 -> 16384 bytes pg_data/base/16384/24633 | Bin 0 -> 8192 bytes pg_data/base/16384/24638 | 0 pg_data/base/16384/24639 | Bin 0 -> 8192 bytes pg_data/base/16384/24640 | Bin 0 -> 16384 bytes pg_data/base/16384/24652 | Bin 0 -> 16384 bytes pg_data/base/16384/24653 | Bin 0 -> 8192 bytes pg_data/base/16384/24658 | 0 pg_data/base/16384/24659 | Bin 0 -> 8192 bytes pg_data/base/16384/24660 | Bin 0 -> 16384 bytes pg_data/base/16384/24672 | Bin 0 -> 8192 bytes pg_data/base/16384/24676 | 0 pg_data/base/16384/24677 | Bin 0 -> 8192 bytes pg_data/base/16384/24678 | Bin 0 -> 16384 bytes pg_data/base/16384/2579 | Bin 16384 -> 16384 bytes pg_data/base/16384/2604 | Bin 8192 -> 8192 bytes pg_data/base/16384/2606 | Bin 24576 -> 24576 bytes pg_data/base/16384/2608 | Bin 114688 -> 122880 bytes pg_data/base/16384/2610 | Bin 32768 -> 40960 bytes pg_data/base/16384/2610_fsm | Bin 24576 -> 24576 bytes pg_data/base/16384/2620 | Bin 8192 -> 8192 bytes pg_data/base/16384/2656 | Bin 16384 -> 16384 bytes pg_data/base/16384/2657 | Bin 16384 -> 16384 bytes pg_data/base/16384/2658 | Bin 131072 -> 131072 bytes pg_data/base/16384/2659 | Bin 90112 -> 90112 bytes pg_data/base/16384/2662 | Bin 32768 -> 32768 bytes pg_data/base/16384/2663 | Bin 40960 -> 40960 bytes pg_data/base/16384/2664 | Bin 16384 -> 16384 bytes pg_data/base/16384/2665 | Bin 16384 -> 16384 bytes pg_data/base/16384/2666 | Bin 16384 -> 16384 bytes pg_data/base/16384/2667 | Bin 16384 -> 16384 bytes pg_data/base/16384/2673 | Bin 81920 -> 98304 bytes pg_data/base/16384/2674 | Bin 65536 -> 65536 bytes pg_data/base/16384/2678 | Bin 16384 -> 16384 bytes pg_data/base/16384/2679 | Bin 16384 -> 16384 bytes pg_data/base/16384/2699 | Bin 16384 -> 16384 bytes pg_data/base/16384/2701 | Bin 16384 -> 16384 bytes pg_data/base/16384/2702 | Bin 16384 -> 16384 bytes pg_data/base/16384/2703 | Bin 32768 -> 32768 bytes pg_data/base/16384/2704 | Bin 40960 -> 40960 bytes pg_data/base/16384/3455 | Bin 16384 -> 16384 bytes pg_data/base/16384/pg_internal.init | Bin 160044 -> 160044 bytes pg_data/global/pg_control | Bin 8192 -> 8192 bytes pg_data/global/pg_internal.init | Bin 27484 -> 27484 bytes pg_data/pg_wal/000000010000000000000001 | Bin 16777216 -> 16777216 bytes pg_data/pg_xact/0000 | Bin 8192 -> 8192 bytes pg_data/postmaster.pid | 2 +- 69 files changed, 506 insertions(+), 2 deletions(-) create mode 100644 backend/app/api/v1/attachments.py create mode 100644 backend/app/api/v1/audit_logs.py create mode 100644 backend/app/api/v1/comments.py create mode 100644 backend/app/crud/attachment.py create mode 100644 backend/app/crud/audit.py create mode 100644 backend/app/crud/comment.py create mode 100644 backend/app/models/attachment.py create mode 100644 backend/app/models/audit_log.py create mode 100644 backend/app/models/comment.py create mode 100644 backend/app/schemas/attachment.py create mode 100644 backend/app/schemas/audit.py create mode 100644 backend/app/schemas/comment.py create mode 100644 backend/app/uploads/study_021aee05-20e3-4441-890c-6822a718f2f0/study_021aee05-20e3-4441-890c-6822a718f2f0/b6a32901-a168-42b1-9b8a-02cb59380f1e.txt create mode 100644 pg_data/base/16384/24633 create mode 100644 pg_data/base/16384/24638 create mode 100644 pg_data/base/16384/24639 create mode 100644 pg_data/base/16384/24640 create mode 100644 pg_data/base/16384/24652 create mode 100644 pg_data/base/16384/24653 create mode 100644 pg_data/base/16384/24658 create mode 100644 pg_data/base/16384/24659 create mode 100644 pg_data/base/16384/24660 create mode 100644 pg_data/base/16384/24672 create mode 100644 pg_data/base/16384/24676 create mode 100644 pg_data/base/16384/24677 create mode 100644 pg_data/base/16384/24678 diff --git a/backend/app/api/v1/attachments.py b/backend/app/api/v1/attachments.py new file mode 100644 index 00000000..8eb8086e --- /dev/null +++ b/backend/app/api/v1/attachments.py @@ -0,0 +1,113 @@ +import os +import uuid +from pathlib import Path + +import aiofiles +from fastapi import APIRouter, Depends, File, HTTPException, UploadFile, status +from fastapi.responses import FileResponse +from sqlalchemy.ext.asyncio import AsyncSession + +from app.core.deps import get_current_user, get_db_session, require_study_member +from app.crud import attachment as attachment_crud +from app.crud import audit as audit_crud +from app.crud import study as study_crud +from app.schemas.attachment import AttachmentRead + +router = APIRouter() + +UPLOAD_ROOT = Path(__file__).resolve().parent.parent.parent / "uploads" + + +async def _ensure_study_exists(db: AsyncSession, study_id: uuid.UUID): + study = await study_crud.get(db, study_id) + if not study: + raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Study not found") + return study + + +@router.post( + "/", + response_model=AttachmentRead, + status_code=status.HTTP_201_CREATED, + dependencies=[Depends(require_study_member())], +) +async def upload_attachment( + study_id: uuid.UUID, + entity_type: str, + entity_id: uuid.UUID, + file: UploadFile = File(...), + db: AsyncSession = Depends(get_db_session), + current_user=Depends(get_current_user), +) -> AttachmentRead: + await _ensure_study_exists(db, study_id) + dest_dir = UPLOAD_ROOT / f"study_{study_id}" / f"{entity_type}_{entity_id}" + dest_dir.mkdir(parents=True, exist_ok=True) + unique_name = f"{uuid.uuid4()}{Path(file.filename).suffix}" + dest_path = dest_dir / unique_name + + content = await file.read() + async with aiofiles.open(dest_path, "wb") as out_file: + await out_file.write(content) + + attachment = await attachment_crud.create_attachment( + db, + study_id=study_id, + entity_type=entity_type, + entity_id=entity_id, + filename=file.filename, + file_path=str(dest_path), + file_size=len(content), + content_type=file.content_type, + uploaded_by=current_user.id, + ) + await audit_crud.log_action( + db, + study_id=study_id, + entity_type=entity_type, + entity_id=entity_id, + action="UPLOAD_FILE", + detail=f"File uploaded: {file.filename}", + operator_id=current_user.id, + operator_role=current_user.role, + ) + return attachment + + +@router.get( + "/", + response_model=list[AttachmentRead], + dependencies=[Depends(require_study_member())], +) +async def list_attachments( + study_id: uuid.UUID, + entity_type: str, + entity_id: uuid.UUID, + db: AsyncSession = Depends(get_db_session), +) -> list[AttachmentRead]: + await _ensure_study_exists(db, study_id) + attachments = await attachment_crud.list_attachments(db, study_id, entity_type, entity_id) + return list(attachments) + + +@router.get( + "/{attachment_id}/download", + dependencies=[Depends(require_study_member())], +) +async def download_attachment( + study_id: uuid.UUID, + entity_type: str, + entity_id: uuid.UUID, + attachment_id: uuid.UUID, + db: AsyncSession = Depends(get_db_session), +) -> FileResponse: + await _ensure_study_exists(db, study_id) + attachment = await attachment_crud.get_attachment(db, attachment_id) + if not attachment or attachment.study_id != study_id or attachment.entity_id != entity_id or attachment.entity_type != entity_type: + raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Attachment not found") + if not os.path.exists(attachment.file_path): + raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="File missing on server") + return FileResponse( + path=attachment.file_path, + filename=attachment.filename, + media_type=attachment.content_type or "application/octet-stream", + ) diff --git a/backend/app/api/v1/audit_logs.py b/backend/app/api/v1/audit_logs.py new file mode 100644 index 00000000..cd61e238 --- /dev/null +++ b/backend/app/api/v1/audit_logs.py @@ -0,0 +1,36 @@ +import uuid + +from fastapi import APIRouter, Depends +from sqlalchemy.ext.asyncio import AsyncSession + +from app.core.deps import get_db_session, require_study_member +from app.crud import audit as audit_crud +from app.schemas.audit import AuditLogRead + +router = APIRouter() + + +@router.get( + "/", + response_model=list[AuditLogRead], + dependencies=[Depends(require_study_member())], +) +async def list_audit_logs( + study_id: uuid.UUID, + entity_type: str | None = None, + entity_id: uuid.UUID | None = None, + action: str | None = None, + skip: int = 0, + limit: int = 100, + db: AsyncSession = Depends(get_db_session), +) -> list[AuditLogRead]: + logs = await audit_crud.list_logs( + db, + study_id=study_id, + entity_type=entity_type, + entity_id=entity_id, + action=action, + skip=skip, + limit=limit, + ) + return list(logs) diff --git a/backend/app/api/v1/comments.py b/backend/app/api/v1/comments.py new file mode 100644 index 00000000..6ca4f015 --- /dev/null +++ b/backend/app/api/v1/comments.py @@ -0,0 +1,71 @@ +import uuid + +from fastapi import APIRouter, Depends, HTTPException, status +from sqlalchemy.ext.asyncio import AsyncSession + +from app.core.deps import get_current_user, get_db_session, require_study_member +from app.crud import comment as comment_crud +from app.crud import audit as audit_crud +from app.crud import study as study_crud +from app.schemas.comment import CommentCreate, CommentRead + +router = APIRouter() + + +async def _ensure_study_exists(db: AsyncSession, study_id: uuid.UUID): + study = await study_crud.get(db, study_id) + if not study: + raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Study not found") + return study + + +@router.post( + "/", + response_model=CommentRead, + status_code=status.HTTP_201_CREATED, + dependencies=[Depends(require_study_member())], +) +async def create_comment( + study_id: uuid.UUID, + entity_type: str, + entity_id: uuid.UUID, + comment_in: CommentCreate, + db: AsyncSession = Depends(get_db_session), + current_user=Depends(get_current_user), +) -> CommentRead: + await _ensure_study_exists(db, study_id) + comment = await comment_crud.create_comment( + db, + study_id=study_id, + entity_type=entity_type, + entity_id=entity_id, + comment_in=comment_in, + created_by=current_user.id, + ) + await audit_crud.log_action( + db, + study_id=study_id, + entity_type=entity_type, + entity_id=entity_id, + action="CREATE_COMMENT", + detail=f"Comment created by {current_user.username}", + operator_id=current_user.id, + operator_role=current_user.role, + ) + return comment + + +@router.get( + "/", + response_model=list[CommentRead], + dependencies=[Depends(require_study_member())], +) +async def list_comments( + study_id: uuid.UUID, + entity_type: str, + entity_id: uuid.UUID, + db: AsyncSession = Depends(get_db_session), +) -> list[CommentRead]: + await _ensure_study_exists(db, study_id) + comments = await comment_crud.list_comments(db, study_id, entity_type, entity_id) + return list(comments) diff --git a/backend/app/api/v1/router.py b/backend/app/api/v1/router.py index 7b77b492..45cc9979 100644 --- a/backend/app/api/v1/router.py +++ b/backend/app/api/v1/router.py @@ -1,6 +1,6 @@ from fastapi import APIRouter -from app.api.v1 import auth, users, studies, sites, members +from app.api.v1 import auth, users, studies, sites, members, comments, attachments, audit_logs api_router = APIRouter() api_router.include_router(auth.router, prefix="/auth", tags=["auth"]) @@ -8,3 +8,6 @@ api_router.include_router(users.router, prefix="/users", tags=["users"]) api_router.include_router(studies.router, prefix="/studies", tags=["studies"]) api_router.include_router(sites.router, prefix="/studies/{study_id}/sites", tags=["sites"]) api_router.include_router(members.router, prefix="/studies/{study_id}/members", tags=["study-members"]) +api_router.include_router(comments.router, prefix="/studies/{study_id}/{entity_type}/{entity_id}/comments", tags=["comments"]) +api_router.include_router(attachments.router, prefix="/studies/{study_id}/{entity_type}/{entity_id}/attachments", tags=["attachments"]) +api_router.include_router(audit_logs.router, prefix="/studies/{study_id}/audit-logs", tags=["audit-logs"]) diff --git a/backend/app/crud/attachment.py b/backend/app/crud/attachment.py new file mode 100644 index 00000000..72cf739a --- /dev/null +++ b/backend/app/crud/attachment.py @@ -0,0 +1,59 @@ +import uuid +from typing import Sequence + +from sqlalchemy import select +from sqlalchemy.ext.asyncio import AsyncSession + +from app.models.attachment import Attachment + + +async def create_attachment( + db: AsyncSession, + *, + study_id: uuid.UUID, + entity_type: str, + entity_id: uuid.UUID, + filename: str, + file_path: str, + file_size: int, + content_type: str | None, + uploaded_by: uuid.UUID, +) -> Attachment: + attachment = Attachment( + study_id=study_id, + entity_type=entity_type, + entity_id=entity_id, + filename=filename, + file_path=file_path, + file_size=file_size, + content_type=content_type, + uploaded_by=uploaded_by, + ) + db.add(attachment) + await db.commit() + await db.refresh(attachment) + return attachment + + +async def list_attachments( + db: AsyncSession, + study_id: uuid.UUID, + entity_type: str, + entity_id: uuid.UUID, +) -> Sequence[Attachment]: + result = await db.execute( + select(Attachment) + .where( + Attachment.study_id == study_id, + Attachment.entity_type == entity_type, + Attachment.entity_id == entity_id, + Attachment.is_deleted.is_(False), + ) + .order_by(Attachment.uploaded_at.desc()) + ) + return result.scalars().all() + + +async def get_attachment(db: AsyncSession, attachment_id: uuid.UUID) -> Attachment | None: + result = await db.execute(select(Attachment).where(Attachment.id == attachment_id, Attachment.is_deleted.is_(False))) + return result.scalar_one_or_none() diff --git a/backend/app/crud/audit.py b/backend/app/crud/audit.py new file mode 100644 index 00000000..b85022ab --- /dev/null +++ b/backend/app/crud/audit.py @@ -0,0 +1,55 @@ +import uuid +from typing import Sequence + +from sqlalchemy import select +from sqlalchemy.ext.asyncio import AsyncSession + +from app.models.audit_log import AuditLog + + +async def log_action( + db: AsyncSession, + *, + study_id: uuid.UUID | None, + entity_type: str, + entity_id: uuid.UUID | None, + action: str, + detail: str | None, + operator_id: uuid.UUID, + operator_role: str, +) -> AuditLog: + log = AuditLog( + study_id=study_id, + entity_type=entity_type, + entity_id=entity_id, + action=action, + detail=detail, + operator_id=operator_id, + operator_role=operator_role, + ) + db.add(log) + await db.commit() + await db.refresh(log) + return log + + +async def list_logs( + db: AsyncSession, + *, + study_id: uuid.UUID, + entity_type: str | None = None, + entity_id: uuid.UUID | None = None, + action: str | None = None, + skip: int = 0, + limit: int = 100, +) -> Sequence[AuditLog]: + stmt = select(AuditLog).where(AuditLog.study_id == study_id) + if entity_type: + stmt = stmt.where(AuditLog.entity_type == entity_type) + if entity_id: + stmt = stmt.where(AuditLog.entity_id == entity_id) + if action: + stmt = stmt.where(AuditLog.action == action) + stmt = stmt.order_by(AuditLog.created_at.desc()).offset(skip).limit(limit) + result = await db.execute(stmt) + return result.scalars().all() diff --git a/backend/app/crud/comment.py b/backend/app/crud/comment.py new file mode 100644 index 00000000..7e5d0f01 --- /dev/null +++ b/backend/app/crud/comment.py @@ -0,0 +1,48 @@ +import uuid +from typing import Sequence + +from sqlalchemy import select +from sqlalchemy.ext.asyncio import AsyncSession + +from app.models.comment import Comment +from app.schemas.comment import CommentCreate + + +async def create_comment( + db: AsyncSession, + study_id: uuid.UUID, + entity_type: str, + entity_id: uuid.UUID, + comment_in: CommentCreate, + created_by: uuid.UUID, +) -> Comment: + comment = Comment( + study_id=study_id, + entity_type=entity_type, + entity_id=entity_id, + content=comment_in.content, + created_by=created_by, + ) + db.add(comment) + await db.commit() + await db.refresh(comment) + return comment + + +async def list_comments( + db: AsyncSession, + study_id: uuid.UUID, + entity_type: str, + entity_id: uuid.UUID, +) -> Sequence[Comment]: + result = await db.execute( + select(Comment) + .where( + Comment.study_id == study_id, + Comment.entity_type == entity_type, + Comment.entity_id == entity_id, + Comment.is_deleted.is_(False), + ) + .order_by(Comment.created_at.asc()) + ) + return result.scalars().all() diff --git a/backend/app/db/base.py b/backend/app/db/base.py index 0b1a63b7..f8963b28 100644 --- a/backend/app/db/base.py +++ b/backend/app/db/base.py @@ -5,3 +5,6 @@ from app.models.user import User # noqa: F401 from app.models.study import Study # noqa: F401 from app.models.site import Site # noqa: F401 from app.models.study_member import StudyMember # noqa: F401 +from app.models.comment import Comment # noqa: F401 +from app.models.attachment import Attachment # noqa: F401 +from app.models.audit_log import AuditLog # noqa: F401 diff --git a/backend/app/models/attachment.py b/backend/app/models/attachment.py new file mode 100644 index 00000000..5b39ea6b --- /dev/null +++ b/backend/app/models/attachment.py @@ -0,0 +1,24 @@ +import uuid +from datetime import datetime + +from sqlalchemy import Boolean, DateTime, ForeignKey, Integer, String, func +from sqlalchemy.dialects.postgresql import UUID +from sqlalchemy.orm import Mapped, mapped_column + +from app.db.base_class import Base + + +class Attachment(Base): + __tablename__ = "attachments" + + id: Mapped[uuid.UUID] = mapped_column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) + study_id: Mapped[uuid.UUID] = mapped_column(UUID(as_uuid=True), ForeignKey("studies.id"), nullable=False) + entity_type: Mapped[str] = mapped_column(String(50), nullable=False) + entity_id: Mapped[uuid.UUID] = mapped_column(UUID(as_uuid=True), nullable=False) + filename: Mapped[str] = mapped_column(String(255), nullable=False) + file_path: Mapped[str] = mapped_column(String(500), nullable=False) + file_size: Mapped[int] = mapped_column(Integer, nullable=False) + content_type: Mapped[str | None] = mapped_column(String(100), nullable=True) + uploaded_by: Mapped[uuid.UUID] = mapped_column(UUID(as_uuid=True), ForeignKey("users.id"), nullable=False) + uploaded_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), nullable=False, server_default=func.now()) + is_deleted: Mapped[bool] = mapped_column(Boolean, nullable=False, server_default="false") diff --git a/backend/app/models/audit_log.py b/backend/app/models/audit_log.py new file mode 100644 index 00000000..63903eca --- /dev/null +++ b/backend/app/models/audit_log.py @@ -0,0 +1,22 @@ +import uuid +from datetime import datetime + +from sqlalchemy import DateTime, ForeignKey, String, Text, func +from sqlalchemy.dialects.postgresql import UUID +from sqlalchemy.orm import Mapped, mapped_column + +from app.db.base_class import Base + + +class AuditLog(Base): + __tablename__ = "audit_logs" + + id: Mapped[uuid.UUID] = mapped_column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) + study_id: Mapped[uuid.UUID | None] = mapped_column(UUID(as_uuid=True), ForeignKey("studies.id"), nullable=True) + entity_type: Mapped[str] = mapped_column(String(50), nullable=False) + entity_id: Mapped[uuid.UUID | None] = mapped_column(UUID(as_uuid=True), nullable=True) + action: Mapped[str] = mapped_column(String(50), nullable=False) + detail: Mapped[str | None] = mapped_column(Text, nullable=True) + operator_id: Mapped[uuid.UUID] = mapped_column(UUID(as_uuid=True), ForeignKey("users.id"), nullable=False) + operator_role: Mapped[str] = mapped_column(String(50), nullable=False) + created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), nullable=False, server_default=func.now()) diff --git a/backend/app/models/comment.py b/backend/app/models/comment.py new file mode 100644 index 00000000..8d650b59 --- /dev/null +++ b/backend/app/models/comment.py @@ -0,0 +1,21 @@ +import uuid +from datetime import datetime + +from sqlalchemy import Boolean, DateTime, ForeignKey, String, Text, func +from sqlalchemy.dialects.postgresql import UUID +from sqlalchemy.orm import Mapped, mapped_column + +from app.db.base_class import Base + + +class Comment(Base): + __tablename__ = "comments" + + id: Mapped[uuid.UUID] = mapped_column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) + study_id: Mapped[uuid.UUID] = mapped_column(UUID(as_uuid=True), ForeignKey("studies.id"), index=True, nullable=False) + entity_type: Mapped[str] = mapped_column(String(50), nullable=False) + entity_id: Mapped[uuid.UUID] = mapped_column(UUID(as_uuid=True), nullable=False) + content: Mapped[str] = mapped_column(Text, nullable=False) + created_by: Mapped[uuid.UUID] = mapped_column(UUID(as_uuid=True), ForeignKey("users.id"), nullable=False) + created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), nullable=False, server_default=func.now()) + is_deleted: Mapped[bool] = mapped_column(Boolean, nullable=False, server_default="false") diff --git a/backend/app/schemas/attachment.py b/backend/app/schemas/attachment.py new file mode 100644 index 00000000..c531d5fb --- /dev/null +++ b/backend/app/schemas/attachment.py @@ -0,0 +1,14 @@ +import uuid +from datetime import datetime + +from pydantic import BaseModel, ConfigDict + + +class AttachmentRead(BaseModel): + id: uuid.UUID + filename: str + file_size: int + uploaded_by: uuid.UUID + uploaded_at: datetime + + model_config = ConfigDict(from_attributes=True) diff --git a/backend/app/schemas/audit.py b/backend/app/schemas/audit.py new file mode 100644 index 00000000..a0e1a817 --- /dev/null +++ b/backend/app/schemas/audit.py @@ -0,0 +1,16 @@ +import uuid +from datetime import datetime +from typing import Optional + +from pydantic import BaseModel, ConfigDict + + +class AuditLogRead(BaseModel): + id: uuid.UUID + action: str + detail: Optional[str] + operator_id: uuid.UUID + operator_role: str + created_at: datetime + + model_config = ConfigDict(from_attributes=True) diff --git a/backend/app/schemas/comment.py b/backend/app/schemas/comment.py new file mode 100644 index 00000000..d665cd35 --- /dev/null +++ b/backend/app/schemas/comment.py @@ -0,0 +1,17 @@ +import uuid +from datetime import datetime + +from pydantic import BaseModel, ConfigDict, Field + + +class CommentCreate(BaseModel): + content: str = Field(min_length=1) + + +class CommentRead(BaseModel): + id: uuid.UUID + content: str + created_by: uuid.UUID + created_at: datetime + + model_config = ConfigDict(from_attributes=True) diff --git a/backend/app/uploads/study_021aee05-20e3-4441-890c-6822a718f2f0/study_021aee05-20e3-4441-890c-6822a718f2f0/b6a32901-a168-42b1-9b8a-02cb59380f1e.txt b/backend/app/uploads/study_021aee05-20e3-4441-890c-6822a718f2f0/study_021aee05-20e3-4441-890c-6822a718f2f0/b6a32901-a168-42b1-9b8a-02cb59380f1e.txt new file mode 100644 index 00000000..fa254a0b --- /dev/null +++ b/backend/app/uploads/study_021aee05-20e3-4441-890c-6822a718f2f0/study_021aee05-20e3-4441-890c-6822a718f2f0/b6a32901-a168-42b1-9b8a-02cb59380f1e.txt @@ -0,0 +1 @@ +hello ctms \ No newline at end of file diff --git a/backend/requirements.txt b/backend/requirements.txt index 396db03c..b5051fe4 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -7,4 +7,5 @@ python-jose[cryptography]==3.3.0 passlib[bcrypt]==1.7.4 bcrypt==4.0.1 python-multipart==0.0.6 +aiofiles==23.2.1 debugpy==1.8.0 diff --git a/pg_data/base/16384/1247 b/pg_data/base/16384/1247 index ada60ecd274d6836ced6b6426178add5d95514d4..3f84f3d6c193a1d0140d58fe9aaaa2c1e3d67b16 100644 GIT binary patch delta 682 zcmZoTz}^5vTNqgm@C1CH#mE2zB@7k(69rNx2Ze}Dd|)w*5TEW%CXfdi7*xO{AA>l9 z0s|w5!vFvO<-sC}2@DMJiKQu-CGk1=(-j37wI@E{nXYq%QGzKcVX|M6l@7WIVrV8L z0Zl+NfEQ!{_w@Hy7+HA}fYLCKIGyn-qdDA7!eDVe22nH<{SrWKDk(`!&d5!j{%|*= z@x%u#5I6awx(Q~22$~80KoigmU`2A1FHjl={J?I~g8336%*P;%W};OB&`rttxo`)u oLmXrcc915zb|EzF)!gj7wn;CD1Cbi~L*nE$tRpO?cdH@k6so>HRf(lg%v$KA--c##-gy6icyQrUj!12XpcUdyQw}X1OSd^IU7L!~7NOBEjbPmga$7 zP_RW`9p+9k#ij^$g+B~z)ZFymF1zX+q@HU}f ziTb#~L&p^ig%_}M3g(1&3{o$5h)Dbx>n&=-wbZ99#&UPkc6K>i;9Gy`$?`QVz{8_~ zm&(s_?Qv=5+B(^$-bSf6zM-27eEb)^Eul5AmAgjF0Eh7dI&Uq*u>a@_(Yg4CoxLBoNDZ)eCq2dF%6ynxMy_m`};|e;^qS}JavbA33+9l7sCkObcdm&y!nkgyfP`TesYJUDS7p$ z7{Z}it_S&gP&{LJT0Y~#w1mEMhg&Im_0%2i&B!ZbRt}r)Fm%a$zy~$6g>PRn*PUMx ze)F;FskA< zM|B1mRdJi6Is=TVxXn?W0Y+8a=15Qhqbe>QS}&-8Q56>t^}?u%+Z>%&gO#`m6-R<< z@vZi{y*E(7sES)y?Es@HZs9BdCR7|9;1D_;3r;y3 zwSXYGk^!-JXgts|0c8&^sT^AtWBHZrTBeX+ORwd*)@vl28Ee;F`8YTT^8CIL8>fD# zUL!wJhK`BZ)l|roDl|gfP(63t*x5oR#}}W=lQGD*TlKL4YBxaREbRFF3;(3htuWsU znXYbC4`W#VX%D+YwX?U|y8BVbg$uj6{`tav*?V){BRG{9a~FeGNLKhrhck%lV9*wbPmMRyN6hKOJc1AAIa@+)}nzCf7>Vuz+(9SVX~4?g492 zFqC`1jwu+*Jz&iWhH?*BSiw+B>93^$iR{0mq5NxaM2e2kTUh&Z=^s>>c$}UVc zL?7fDvXooSrtjq5 zFR#8K-)qX-iLrAaX7F^Qk>N_F@OJsC=2+_dh7j@j=gwx%-4}1w&d2?0i(k}bpn*%S z^#^A8ZpiH9zwH@4${KVJyF3Lrha(r= zc5|3L?%Rm;R3bPaqImQ@iowwy_@8^Azp654rTWY=suoMQy*g9Ds2pT*dj%M+`z&s+ Q+?S_WA$s_g!j?zuKW0M=w*UYD delta 786 zcmZo@kZWj=ZD?U^VQOJ+VQFD)VcWvaq9F9($aF>qAn0Il5MWSXQMkc0QLJdPBct); z07jKjJS4+_ce(&0JIC}4Lv~(9j_GBF?EOHB%?M0QgHUS5K%U0*Z4k=M1T1$ALZz94 zdEX#Zn;DoVX3pNv!=dp1zdb0mFfgc2Z{%Pv7P`U2z`zC;uw;;6kaAFD0GXLRol}pM zfBFJOb{1J=72;qO$c8+WWlxyCQxm9I!Gc{B=u9&Uuyw~ERG1~0_Y6XnS%G;%`Okvn_xAK<{cq^zaTQebpk8s5DX&J^2p)p(eIg zSP<041dTt$^86_#8abMH;oyZES8r&%>J2R_kk~S@A zufU$ZICWtZ7^6?NGq>H%5bg&$6rnD5Ux8wr8*n7<>988-xiJOUm<}ZMU4EZwt z`x43s8Rw*@BPq)}*sP5-jMa!=C)>qv-_`Dgg@q2GIifNaiN_hkSOUGh~* zWJAzdbYH#SHq=uV2nS|e4UvMC>$R(K&)>NU)rLg@LPwlGJ zlbI^*B2^qBtn9!ze6nTjPhhRB(PX07aJj|eGK4NoI;k9!vLnYR84ws6Z+HZovLBzp zQOJItK&M=N4Rd_%1!S_JHxRS&&?IDdW(t+_C}k6GN!j@lGH>2N0)}3Z?mg;;Lf|Oh zM_rNOmB_W!6=!WJSExSMK(L4W|NaFA>b9GC<)gb~rA)F^n5trjJ{RqchfnqOa8Ex3 zutke1JBAj5S!J{`k6e{Sx$^~7w-u_gtzvB{E4C!^33cg);$`_d4%HIr5k_Yaag$pt zcZ7(0dg;ru(zxp;f6*N_8yng!ad)fBYr4h1*d54(uy%({LR-p;ES{pO)sxvBqM|$e zL?`he8O|Kc6Y@Cn9kL(~Rn#Sax<5WL0kwR?B$Txly0AK92YkcX(jHvs4d4GqZ#ean H0&n;aTI4iI delta 601 zcmb`E&r2IY6vy9p%{B=k(l#QMV%XIdnqJI*(42e9LCPFFF5v5OhRqSQe2A~{Y(vxPWC^>>*Bi15~2?7_A8QX{-C zAl=Bw(_~U$JH$Mfy2$Z#8zX%C8$aUaxnYEA?Lk}d-->HIsVJ`5q*HdgDA>^*!JCIL v+&e-zdL{cPmmL(F5F2cMvmf8)W*`5I_Y-xCgFon*@`0eK{)G?Y9}C|B0Pmwl diff --git a/pg_data/base/16384/1259_fsm b/pg_data/base/16384/1259_fsm index 65e1941a7a9ad3f66b0cba1cddf8423729f96b10..92c04596a484db151c0710158a312161b21a5918 100644 GIT binary patch delta 84 zcmZoTz}Rqraf6J50y8rMGXnz{11UHSVuJwlL`8WKU0ADl#%MZ&YMt0+CEC MAd-y(L|*3y0NIZV*Z=?k delta 13 UcmZoTz}Rqraf6J*Mwut_04Em(UjP6A diff --git a/pg_data/base/16384/24584 b/pg_data/base/16384/24584 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..6d17cf9d15fb9f4a2358a2d079f3b8c755d005fa 100644 GIT binary patch literal 8192 zcmeIu0Sy2E0K%a6Pi+o2h(KY$fB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM GyblZ@00031 literal 0 HcmV?d00001 diff --git a/pg_data/base/16384/24590 b/pg_data/base/16384/24590 index 4546d1454b97af028dea43ed181278ca293078e3..0bb7cdbdd24c0dba3232defff58ce1c1d53e02f7 100644 GIT binary patch delta 14 VcmZp0XlP(ups>+phy26<4*)5a1$O`d delta 7 OcmZo@U~F($pa1|0tO9}n diff --git a/pg_data/base/16384/24597 b/pg_data/base/16384/24597 index 1cac0492f28c738c02eb4ed363d46794d3886e6c..5e1452dfa28beef9175775d49f8c5d20cbe51435 100644 GIT binary patch delta 14 VcmZp0XlP(ups>+phy26<4*)5a1$O`d delta 7 OcmZo@U~F($pa1|0tO9}n diff --git a/pg_data/base/16384/24633 b/pg_data/base/16384/24633 new file mode 100644 index 0000000000000000000000000000000000000000..6d17cf9d15fb9f4a2358a2d079f3b8c755d005fa GIT binary patch literal 8192 zcmeIu0Sy2E0K%a6Pi+o2h(KY$fB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM GyblZ@00031 literal 0 HcmV?d00001 diff --git a/pg_data/base/16384/24638 b/pg_data/base/16384/24638 new file mode 100644 index 00000000..e69de29b diff --git a/pg_data/base/16384/24639 b/pg_data/base/16384/24639 new file mode 100644 index 0000000000000000000000000000000000000000..2ff28ec0d9328d5e3e7fb02da3f4ba788d364025 GIT binary patch literal 8192 zcmeIuO$~rB3@5zl>2t;HT$vzE2z zW1FM&Fs!`3!{Lr00RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAn>Qa(w@IV CJQ3w2YGxLKq-jsLqWo+5X}pBA)%4-WErcTyk35 zd~S23Hgv1p-(&a2k^lh$1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oM-4u#60s pO@IIa0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PJ^lPyw;3J z^Rdm5+R&}?e2?85O9BK45FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV6TGz%nvi pHURYwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM GyblZ@00031 literal 0 HcmV?d00001 diff --git a/pg_data/base/16384/24658 b/pg_data/base/16384/24658 new file mode 100644 index 00000000..e69de29b diff --git a/pg_data/base/16384/24659 b/pg_data/base/16384/24659 new file mode 100644 index 0000000000000000000000000000000000000000..137e777350bfa039ef8d7cf73506fe6f9d9dd71c GIT binary patch literal 8192 zcmeIuyA6Oa320w`$t9AV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!Ct+0u?cF2Gall literal 0 HcmV?d00001 diff --git a/pg_data/base/16384/24672 b/pg_data/base/16384/24672 new file mode 100644 index 0000000000000000000000000000000000000000..6d17cf9d15fb9f4a2358a2d079f3b8c755d005fa GIT binary patch literal 8192 zcmeIu0Sy2E0K%a6Pi+o2h(KY$fB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM GyblZ@00031 literal 0 HcmV?d00001 diff --git a/pg_data/base/16384/24676 b/pg_data/base/16384/24676 new file mode 100644 index 00000000..e69de29b diff --git a/pg_data/base/16384/24677 b/pg_data/base/16384/24677 new file mode 100644 index 0000000000000000000000000000000000000000..25da78f20d05551b7f6d5a9f43724ea72c84532a GIT binary patch literal 8192 zcmeIuyA6Oa3JQ3O?>sAmE0o3rt{O@C9P-$qS`Ry^SqQ z6|9o;^NLH#5_3vZ6$}-k6%5c|ELQWlpymZY&EuN#{o6Z25KJrT?~#&ZX5`#_O;(Eu0Os#JFaQ7m delta 44 wcmZp0XmAi<00N8d>5L%SgyDeHL;=-}LF>deCfsG-d_YQ+nUQ1jHCZht0QEi#_y7O^ diff --git a/pg_data/base/16384/2606 b/pg_data/base/16384/2606 index 9d2d69e5b2bc6d7a8c1c56a45a43fc94b37f1eee..bb28fc17ec1bcf9eac8423ebe99b17e3ea207ece 100644 GIT binary patch delta 706 zcmZ9JO-lkn9EWG7^_`$gU4j)ig6h)2-PAPDR&<4eAS)}4E-`en zK0|_Ez+*>`b?OUr=nI7HOf#GMKkVTL&%-{u)efw7V9O?Xwwn-`_YAxUk4d??dP9QM zx`0ma1oVC@!S0QK-f9AxuSrn67LfN!K$S|~2u8=t~ z%E?MGuWRW{I(c}8HF<$nC1{n)s#@aG0FzD)N%se&H0xe=!vx8)U>}1gIn1*52H}>n zM!OQ`Om3HUS$}GjjtB&}g>`MI0HpN7UsS4;(G1=c!sK0Iw8?HYg?N*b3H?LD&3_>Y odi=K0ZxbU;7Hns*kHf5KqYrK=F%sm8nHxC?|0pZ%Ww|^43-KhW9{>OV delta 123 ucmZoTz}RqraRaLZ_vY!03_wu9pusg+z#(Je!}y6G0%(IAH*0v^5Cs5ytU(n3 diff --git a/pg_data/base/16384/2608 b/pg_data/base/16384/2608 index 915ae595f64db074cf0747a0dbdb4c0163d204e4..b846db0ad94fae438e327121047b8d8f676c41b3 100644 GIT binary patch delta 4039 zcmdUyNl#Qk5XY+#9T0ecqM|s8xFI4Ut|%fZ;))CI3);Bv%gvL+P0xCGCdP!I#uEu9 zCVKR1c=7}IC9JAfHPo~-ljqTQAT`bZSO4njel;*Yo*Dm<8UN}kCo-)QZyf-9so7dF z_Ok+`{8I<7AOld<48JM?cKYNO6z`Jwo@hhvrQuZj8@b-N@q=6R?faxVlzlx>S^IqS z9eG2yn{N2h(CXrzN%tZim~>D7iyv>MuearN?_0PR5e&)R`{n{X^SlUM7(bFY?Ad1F z4jArfdM*cp27HnN>=DELhI^cX+a%mR;gU_o$EVzqtTsV4d#xtUesnGQKB;8DO2nS- zh{qUj9gMLZfTr%|&k^hqj{5r$we(OacRhy?_ID#MM>*&>-~$nt1G^Fsb{p<~3T}gN zeTKW|xASV*N;?JIB_J0UKl)^vr;?pkA~jL-B8eX-Zu#aZ*IR<4rqjD0Hob%MVDoke zNG7*YOb^v}$8-2s*9C;_#!$6-%Jk}ohU++81lx??O`l6l6r@k#F|QSHs{wC$UIgN9 zVq9#8%55pbIm#1Ox|(xGuvx%P?8Xfe;-iIDV;pj;SP?;wG4%2K&*qd>vPmQ~a>qP# zJc_SN9QHuDZo{coOQI|xw~|xiDQ^^z-mPn5LZ^IL;t*_0K;Z~hf#s}-pxx}^ z5^Cw8%FcNX|2n5-yo~3x)_@m9Tn@}8AgnRmg%sRU;Z_^&yd7nwDs2&Pm4IAa;V4td zN-L3?sClJEnR0CJf#SCBNJ;X(nI8Su2{MZQ)e7#G{2a@jJRqfr`G+QhjdSSlcmvQub6j}}^k zaVf6Fa3?)cGaRNW;JBOfSrWk#Q|WNw3{=TtkVnSdq#>KkckbtmIIGUYDg`;bAP~y zLm}6WqOj6B0p|(G#l^!@t|dP#Rnk}>DfqijB@I?0_S)Y$=oDVET5+#8We*8QmF$x^ zteP$?PLUi$20S3*av{$VqeD$y-0%t1i>FJCNKw!YMVI#jH({!VQj1Aj2EMg3h1px703_Sn< diff --git a/pg_data/base/16384/2610 b/pg_data/base/16384/2610 index 7af313f0920080dcfae63cd79971bcdacf75fe70..0730f687436cdfc8664b542a5affd8935589d461 100644 GIT binary patch delta 504 zcmZo@U}`wPw1Fjor()wwMg|~YVO+sDSs>v9%ZkPX#)%J?sNQ4(2{SM-LrH4}Q3hrX zh5!HA!2%5S2@DK&lh3A3-kgxc%fiSxIWKKFBj;wZ^j8uSKd|UTSj+~SYrw!D!=S*T z0MZmO--mI-JRe4ec?paWbA1?B%t>HmnB&8^SU*Cry5kqySg04pq*IraTp>JSAaron{wYsU%b>3!2gppi*B@0* CaSvbs diff --git a/pg_data/base/16384/2610_fsm b/pg_data/base/16384/2610_fsm index 766cb70fc17eb0631197b1af3b83127b29dbdf95..d6c59d37623f4d54c3d38ff5ab903b80d8e9fb98 100644 GIT binary patch delta 83 zcmZoTz}Rqraf6J50xK&6D+2=<11UHSVuJwdL`8WOsVRM%Il$f{}HhA`6Jg K$N?fB@&f?;TMf_v delta 13 UcmZoTz}Rqraf6J*Mwut_04Em(UjP6A diff --git a/pg_data/base/16384/2620 b/pg_data/base/16384/2620 index c7494c5cee7fff040b8ea674131c5a9304e644af..ec70139f6efd36662b83a059a16af4eaaaead34f 100644 GIT binary patch literal 8192 zcmeH~SyK~15XUEC1Qa>MTa*CeQC<*|0C}Rs3oXkk%ktJVWm$>`Dq8xQH}Crvk9-Ut z{TTY@H_?C3?v$}>vpX|+O;`PQVSCd2wx{>MK`Ess&d#TBQs0$oR+)tv{+YfNQ$M~I zQyHlIrI`BtxtN-OD)YsZg6I?SACZU3ACP~KJXCpyJVbAie}g=F-_0VnFa+B`ZENzPd)OgPFg2`1%Fk74UIAj+pr~;}I;Z zajc#{*Z%DYYxW7g8M5LVu7UL59$o^^n8@1vy^Tz|n{&xoA zASh}6`gtLuSMZ%DD?amh=^C{TX8!8o+rWHP{&x<1`UY`|?4S0(g4O%O%pdQEYybN2 z_c_)JzO#gjEJO^S)%(NDpATPefS`KB{+=eA{ViDevzb5RFUL`vgP^4OTh9v->jd8^ zvf|6@4<{VV{MEy^R`8t!U$Xxdtll5h^T+<;(!ZYY-q#4e6Lx%7?~m&FbLHy{`Bn?Q zL*N^SI3k}9?SFYM|JzTxtkwK=1WVN_!FLcfEcm?q&xda%^HurZ6yGBY5!pZOe>o@r zix@_$H8NThoQq>{&3aDYh=jDGseC^Cv<$rm;M;0Qof7<`DPX5RD zn}%HYwlM%=so={IF0v3Yd`|x7!?!g+P;Fv=vt+ZsSug+FiP{_l)$%_xf17zBVu|1z zCM!NK|MTHnEcSN@e98Wjb@D&nU-my2zD+8KR>8Lmbu9Rt{LhEad_Qdw`#S)>l@Led z^P&B3*vbF+ez||W5C=g?^S724BANwXKUwiP`CmPJi^Tr+fiHP~hn)P6_rtY+YtTE6 zwBXB-6`zy;`S2~(bV@B0e9M#gc>eO^PX5OOmxeka4uX>AZwW6%Gzq?LO6Xs}=j4C& p@GTI0%fP2^5U0rJm*2nnaVP)dd3Noe`Tmy@d|h^YPX6b@_ZKei>Zt$# delta 82 zcmZp0XmAi<0D_1E(;2}u1B2K^0gsIb?b$Y7Fo0rC=1pQ(nHf1IUz42A$g#Oh>OLco V6D9-XO#TKYr^$jO%;Zin0szlg83O;S|Dn++A-%X#uJ2rwih pFfed})B*uFknfuSq9K3_%IAXeIe~mjpgaeZ&jIDLPp-9Z1^}kS5?ufQ delta 33 ncmZo@U~Fh$+`yv1UC}+AkpT!y7#b$?E2wUC3Xq@NVqXIQn(_%u diff --git a/pg_data/base/16384/2657 b/pg_data/base/16384/2657 index 35d0ffe36240d85500dfbcf3e41e1d624084b901..591b6232ac788adbf275e19cced1197d2dadb178 100644 GIT binary patch delta 123 zcmZo@U~Fh$+`yv1{efpTBLfh4Fc?hcS5Or!n6JQ)0K@@6>;S|Dn++A-%enC|2rwik lfD}RiH;^Bg0OK(*Z~^%NNPJEp-xi6_0p!~xOs=wT0|1Pe5`F*x delta 33 ncmZo@U~Fh$+`yv1y`y_NBLfhaFf>f&S5V#P6d*sj#l8jrpt1>! diff --git a/pg_data/base/16384/2658 b/pg_data/base/16384/2658 index 0379b3f187dccf997b48e8ed38be0f092185df7c..e1244a1244f43ce23144cff2936f55534f0c5b73 100644 GIT binary patch delta 2185 zcmZuxJ8Tm{5S;@8;cpZI<`XdgKOFz;A{o=56hz`z(Ah`sP)<0ui7%3akj`|JY2ZQt zDP_taA%Unu7m0>4rAx}trQ!2tZ}0FPobs}JZ)R?1cE+#W?rr1mgSDo!>Gst(7U5a4 zX8WUD$9fj#-`X?;ECF-C0?-1Mf!=pE4ZbVT6!rz|39AiMfKP91`VM>pNkwcA)4(FoiH4C4oZ5J)L?v3m`U%e8 zfjssNth2xiVC5yM!}fFttd!oCf%{ zlqN}+(g2gcnD__Dp&TXYLc*&8Tqkg1{=C7*h2eZjxII-tTygR-NoT=VD*sk?M)TRq zPHSFO#%HQW(y7$nEZ`*NLv=uF%ru-x0y32yPxx`q2|Ty#1bl*|V^mPzsW-fFC#a8? z$Lm!uK3&<5>bTUdYLs+@!ni`$3mm_iL`XWU1Duh-ucytBbV&1FE%1ZMvc4)w2TeYh zZ1C}t4rsm^Ot`5#_yT5*Z`Kdh&`H`4;yx4leIEkv;oTfUNdpG|w^e(=--Um62={0{ z+p67~53{}6l?IqC$!k8_s-1~{rd2x<2Hy)*~+$R zK3mw9)W5s1P}1f!pxYp6QxcG=Y@_D=X4&#SzE0+p1dL-yv!W+{k zl%nBGPK!lMg({b1-ULCEN+M2+Wk~!dEtVk>r*%wiRaz`ELZuZRNdhxzv8?b1&CwA` zR@6a;t_dY8-MpF{TszB(;^WDo_z{p5#h*<&s;d%^mpH)ev>=ulp*px>03B4hxgT%- Iv_7x;1M<7hM*si- delta 39 scmZo@;AjA%EsQJ=cy1h@&d2}+Jq#YQ(*+(d)@*dzC$rt_FXJ{Q01pri<^TWy diff --git a/pg_data/base/16384/2659 b/pg_data/base/16384/2659 index 060726cd15d5a7494dfd6b5b5bfb513f88f7f50f..44e9ff5a0d1c6f2c290eac0c980297bf78c2103a 100644 GIT binary patch delta 1587 zcmYk5O>PrG6oj9#oqxh0nE>I>i9`4&<|l-9q+m9zf@Bd6FbiPq3!t&YK5^nD8*>9A zA!Ta`4iJe8_y}1Oz*J4w14b!LzV3EUz4ug|VY!39FNIQbuDkKEV0b#E*8E}8EUXk4 z`Uh1TKtt#V8bQYgy~fw&r3C+0p*qxrT2Kmgp$^pU?bj-mE`A4%pkv7PtCsXW)z)6r zK~1OyrBEB{Km(``b)hPhK*skT7^*`}s0F2ay~S^+y7-s) zvG_MR!v&ADFxG*G;v(;z{v!@q~CqTo%{FrTqK&;IbCH;w7)pN zz<&OU*w0@Ezrwzc?2`CojQZJuMJ;%XE{c6-7sTG7^J4GNg4hcu^T!Ien~@_ zW}axlXLd&HhUUd?=(N}k&57O6taz67p}-mOjCfj{`Any@;4_^R`%EXqKGU+;XUY_@ zBFq#|BTo_8JHix^y(3H!I8*F`1uSgiKx|R4r{Ly)%$Pm`O+XWmLRhTzA`3Y=q3TCY10RRC*3z7f; diff --git a/pg_data/base/16384/2662 b/pg_data/base/16384/2662 index e2e5499ae91778a0a8babffabb74b6b7b741efc7..8ad83e8488008eb486092b9399319584c61df62b 100644 GIT binary patch delta 299 zcmZo@U}|V!+Q8z#bHa2sBLfh`Fg+04EZ`u*G+9GQOi__RVY&iC01!I>u>lYZ05Jm) zf0(Ag@L-z4M#pxMdOij=1_6e&1dx6Z;A3C`@>3JQ95A05$WKAyGXePtNPI>h-xtp3 zWv~MBLy-6uKz=Y1-yFyfg7G66cp1#l3@`=qeP9ZJ@)|(C0}|gD$hSx08v*%tNPI&e T-!ftIu5c#~M#s&6}!L8IG&;lMlth96x93^%$Q zCR;1$vabM&cXT^UPFJvHPUsHUyjVe;tDcX6jX}X7u{0&KBt9oUy*R!gJGGKw1_#Jg z5a45AVvs`o^0Z2OlX^FngMh+KvWB3?YfUYV?k1xqjEG~&R zGBGnZiqFhTNv!~xlnf%kfRBM0=qglo$nv}l7HH;}8c(kC7c(+P(`IUns?8Wpn=x3M Qs1cerW01DZFa5*=0kGtRoB#j- delta 89 zcmZoTz|?SnX#BT0SIK6PH=sYXHfvLCv-b7WON5GSac^aoahQ*kO1;O0O^e0 z1cnVjafTiTh8x`ho23=Hx$2o16d5!e5=&DuOX73#(~INt3sQ>`OY)22GgIQzvQsM= zW^jNEWnxf3Raab6no0wu-qr3E?p zi7BZm@ky2OX_FOoh3jQOR>712RiN7ivq}bJ6_PrzT}V!m2AY$cp9{1HXh?EVYGMi0 l7Lc2e)JY+$D=yJT@fpN2h}$KB7QzjL+BSn@vy{#=VF0XUa##QW delta 46 ycmZo@U~Fh$+`y_Jwq-ga0}%XRRN(m_&!PZgXY?j)wpZxp+89v7xLHZ(o-hC<$qfDg diff --git a/pg_data/base/16384/2665 b/pg_data/base/16384/2665 index 3c6c216d9e7d9fed82d2aa512d8ccf78263b77c2..83ac821804fad3148b796ecd662c855867ffe827 100644 GIT binary patch delta 455 zcmZo@U~Fh$+`y{99Wa}b0SIK6PH=1%PiN zgeYKOVo<=YzPO|`r4mgsP!AJ>Jc9x@^9#Uc)&mvD0S)v`fS8|HQj(aQk(-)VQXF4e zkdvR7lA02qREgvQCI(p?>an|ki9v=z1FQKU7t}+&1$L=4&|pibLz44zA+AU+N=+<5 hcLYcm6N41cU<~ybu3%!21cm^HI*9)_yKC(f1pqrAbAkW> delta 35 pcmZo@U~Fh$+`y{9y=6Kh0}%XR^x)bopzwlmqf-#aW-qO6q5!!+3WWdw diff --git a/pg_data/base/16384/2666 b/pg_data/base/16384/2666 index 96fb2fa96fab95dad22738aa03788f6c60b3830a..7bea4825c99f93b31565d7d83210414078a2fad9 100644 GIT binary patch delta 206 zcmZo@U~Fh$+`y{99XOkj0SIK69*A!iP&Vx0}%XRERfhNpzwf^U0|jH1H(*(jgHk~n~N;^*Z~dU408Yg diff --git a/pg_data/base/16384/2667 b/pg_data/base/16384/2667 index 5b3e5eb1324a0591577248bba62e706aca3adaf4..50228a1fad345f68f61010616442d2478f8fb11d 100644 GIT binary patch delta 209 zcmZo@U~Fh$+`y{99XOkj0SIK69*A!iP`Be;>!W~(MWt*AU_O=F9YO< fBJrhxe0L&Vx0}%XRERfhNpzwlmqf?dG<|2zeb^yMD3i1E| diff --git a/pg_data/base/16384/2673 b/pg_data/base/16384/2673 index 4939f76e697cb1e71dcfc72ee2155310f7a2cce9..4725b92849c8e977664f9dac2728675722648e3e 100644 GIT binary patch delta 3325 zcmZ{nTWl0n7{|Y}ZLt=17@(9Diwr{B?QJ_M$Wj*B7OX|8jDlDc_29K4>KHGnhGf@E zpbrIRJKN5dLc57P?BkL(p)o$}0}niqxDPxuhJ=O(Q{yEY6U+vA@ISMstvv}R`JMC4 z?>m>7-JLVD@px4{zARfAjRlWQFhUvjO;;5+R%&iMJEhU|ltC6408tPC#Yuzmlblj$ zP0$N8P`YSP0c1cN^aCAKgV_rPO#=%IfGAKeaGIUql$kJNq)!xya8NkUDGf{z1uB>w zN2hU<2GP=ZkqRmF0VaroStn0f2ggpFf{sO{F`V33o(9nBVCOKpOE}hu8(2i52VB{G2po5Bf`Hg`3~XVkbFq^ z*CpRB{A=(rS||#&iNsN9Kv4KsB;O?b5y>|S-!J(F;a^_#?)nPViNyZJgy+`^|E%O| zh2JOnHNy8wex>j|l2<5P{_dZa5`HmYujE$Q1lTiJCB`M(ej@ecRXisonD-ukP?_J(ug-wFYqoF;cbF3M>kK7_{7r2)aOxsw6tb#p+(8kS_e2l7C3}=OrHy{=gFNry=1xC4buWRakf@ z&;4^s8D9~Pl=tA1KE5iaYB$)r>QU^rNu6du9%Mi~Y1p^E-4sgM*kx_p{lEZWpu&|# zuuFi!1o{ID@PyrYyQOLdVLo^4_HPOB$X^N~f56Kd&Rap`uLoJLbF>*V{n3o*h8y*@ut8^Q z3!9bi0*(ws zV7_~9bg2W`;SNOgI-*J)(TNCVIjOU{D|aJo&KD~08X@*cd(v%s&gd-LOKrvy^HIPmim%F}SiEW`9KPmS^{*b#L^L$aL>pnhuAHP%h0X{#6 z+bYy~AHT!(8WxrZY!?IGb0=~VkFhmZF6eA>`LY02YP#lF&8#-I8#zBky}HY*yHN+I z0zKTTd6naEp(xahSfLiLZe8$;{SWg6>GgTkt2cY~mW7l;TKVK+^b%jN2o@)LW{Fow zMOL9zUcDN1xh(eY=JU>N6?)LCaRrFypOS9;fcR9pI8rzkr96>iHn7@y_m#s>aj*Vb zS++>7=Bx3F?U zvt0Z^q3R8`n%`QHpET_KTEoUXZpaL7U<(Wa4tjwO@XzCNSFAqwch9drb$-VAS^opc C&{Zk` delta 2059 zcmZ|PUuauZ9KiA4$uf{g6tu}9s)iX(1$z>4ETqFFJbH<4@3Okw&~jfpPpZS z=XXxeJvsNd?qjaIzZuRHdp~O>eC~v5;laUhEQmYTEb&o*g*XJ=tF|<*TH+!H6A|>k zv!n$Nd1Mg9pl(SAJ_@i9tJ^Zzu%)%(NM>VD6oW7QE4DP@!a@v#b&A#jA< zR-#gk%}<0=qhMwfBzJ;mLpv3x7%!;QnZieZ6b3n{%@Vs~;CDW5Z8( z4tP2&k8c{T$DHSW+E=z3o1u%L^|8h;JKfGcYk$>=v zX_?JM7cKZ0UgpQ7%^`z03?#|-(Lob6xX8mod&w+Hj39!+k|{k18t_nnjVw$=k>eC> zp^FxLl;EKAEeoKH!@!X5eI(ID4KDJq(7seOB}Ndz;1Uafi3U6rU?Yp}H!Ofwutl81 zkfYW|2YJ-sB8eVHtc~EvjgDV%>{`4CJ~9{Q|bG!sLAkGylC1v zt0uzkZWO%BJDJaej34xUwi|8t1sOe-P|@%wLArZZZKr7`^oykR12Q@_rKWT`q0DeT zs4^Cq=7Zg6yFSS1j}k%Y0)wt6)Z`2AQt)qBuoB8?H%Ugo6x4z>YKB~x8WX!P+U*bBV1D)4hvH?Orcg>+J za0f_Vi;{cIB?lm2R7PnSNC7eFP#4e+n9`-OewT)UfqsXQKv#d193TMX`y3kSb14nP z(eFgte!-!HbIu_Lf(;OmO}o?uM83WxwE@E8HdfG{wkP7S1iIA8+=_LnaVgPp=K*PWQ(4BHAinbXD0|6j^(dpa$W07y5#tL(ne0K{xc03EEjk-%&!pqETglV`qu5^8@z+dK~Mf~{IV;Xb*+^B&#% zNVj<6EGz~Rv>AF6u6Q6&6wwicx3q9#b%K%!dJYRzO&pt}Zz`j2ETeBIqpyd~HIcvu z-V;2l9dm19o!0kbzV~Diy}{8riLNc9ubHFk`xmr&j)T|)t%Cl4HL+6bb8DhO>nc%i zO{~!Ik35-Zg2J8!-Y2o#qZg7h|_XHhYbpjy`Jh*YMyYHfm+ z!BHrd%)it7e13n}3Cq}htF8@G4BElGlX(}|rXyjyA=CNyJ>TXaoq!UgPnf^vIqJ3y zs$pKkybY|@Rfe0x{gYOrgVp`a$C+bbq3gmXm4GV77hT9j6BI&Ukj4Bob2Yd$e~*h{ z(FF2R^9^RfyjXEP1+YkMu-nDBXoWy>@Lu&Yb%L{S7<7*LJXpJ(aVzu%i)Wa>Wd2J2 zGF~tJx$60P+E}i7iCX_2yWeO2KpvQ=ot@xLTA^22?qYt8`E@xySucN^s>XNP#!pqE zy04N6s?_>U=-z_xdvtF>RA{{g^Gn|YfwhJBO80(tO{E90v2x6pjeVhws^{HG-Lc?1 zMhCqGo=`ruqDHMKnL!sZ5Qw%u*Ce<1RZ0K2X{o9)X!eV2Q-vzL{J3R&%#Jwo1-T@* zQl81#^81P7ymaq`S$~p!r@_h$lwsj4)h<3SDuGq1S2Ba%z`&q)w4^snW3yB2_zWzl zO0JuFMgB2q%MFvot28I9xtW1X=nY4@}7#frW z3tA#4rds8#sbc8tJ!^F*PdLh~-XK9wabNwt@+Z^9P&OV8N&f@WXk=d#b2F>|KwZw` zwagKD@WBf8pjJh;;{Ko&%%F|v7}ToAI{EBeW^zPTa{`);V^l_gvZRQ_ow*hZqLwQ|35lb9>q}j`8?i z=98?p&8$(`)ClZY`kM)osw{)*WoY`8yg4IeYC34B_cTa_8mN;uW@=<=CTOU4I7o#e Ss+B!6D`fveJ9Bg9Xw`qH`QZ@& delta 2446 zcmZ{lO>7%Q6vxNO5~Zm(HPYf5YN(^~VTm?cNFYfO;1(4{LR6;eNBB@=i9lVTC>Ov$ z!3%_vegLjV6*=?}I7Jl)BVTesintJoOHRn*+Xp&7*OF8m;_S!M7ccow6oBzCd z^XBb(;y8xm7zJZ?cOvscK=It@SSaq9{WVZ5{rFSQwdBd-Z$BR$2)cjNX0LW8yNaRm zu|W1aTjj3XDg(J|SjH(Ck#*U)fut3gba!p^(vMJ6OBp^uwmw=K4!5k=|9K^RJ=QJ*oO8Vok-ntm==TcQ&R>^|_a@AARRB)n`8X1t0y>ntq>ZP4o#9+HtMu z$2d}1Z_7>@37|)M>UJdhp%>Iz<_Gnl8@I#yueAsC$+iAHrkX?^qOCLC)UH?74jAVp zaB|(6cn?Q9zQ1L=cYXACeDrfZdK$fYuCqAp&h@qgP>KGVlJn~kK8H6&Dj)^d#~(7) zIKxKujpm!`je6LG8)nsO4D+j&@v3LXsy5tFQ%_4UZ{9qG(|Ggxh(BMW`A6=E2M@1sPHa6_RV?OI%K$pE$OS7Ms#rBG2JXd#~ ztvOPCb>bNrhc>O~VH`;je~OQ{sTm^@klM6P4SNAk60q}_YRE@_8ePu#=fF<1{1TpM zj@K(2eH`)-TD6LU-ehYPk4pem=&8;Atf}H&*rAqM9`n&3MQ>NjexLXUJ-wIwyBg)2 zDk^$Rend=2ziW@F_BAc&)R!uKXH0d!r^#7%9usw^)6M!`^maww+Z?Y)wnk_`ucz%J zck^{3+2t*Y-qA>Is$i2|{TE!FGu3WSf4HT_9v^)d`cSORTkU9GpwDgfbp>m;Z*I$q z%I$l1Rl(}*tIJzfR<2tKi2bjOppxshoi5ky-K`2Lx$N4-%N5HJIfuVW#=>Eu(Q5U2^VixPWSu=`vbRo diff --git a/pg_data/base/16384/2678 b/pg_data/base/16384/2678 index 542e419cfd5f7bbc96eb681017280ee805fde02d..bd0ae35cfa4449050640bd8443daac86e1ad72e4 100644 GIT binary patch delta 192 zcmZo@U~Fh$+`yv1Gs9vwBLfgfF#QnOETHg)QQBjw0)qt*M*y(|5NiPOk0}Za98(oG zIzASvXJKGt5MW410O~#3_?s(D+qnQ;iWwpR delta 36 qcmZo@U~Fh$+`yv1bK=x=Mg}1G!$ESwLYAleEB81qKEn{xC&>;QrP3Q&Lo6rcbFC_n)UP~a~MR7M}m9^Z!7 z_+OSDjPL*ZpNaKES9C;Mv_vLS(G(3)7d4THNSMe!66=ee=!%YLiY^qR z5eXCdyXHktbVWzBMN4EN6)Xx+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)U zP=Esep+MCldudMotlwTECnc7Evm!1=!XKA7KgzUzF) z`L_HvnBQ`~>3qZay8I@XUvs|de8qVrzYgY?oi90GbiN?J4Cd#Z&pDrUUXjPa{EYKy W=Vj+5c@)eSoliM0IJeO%YX1cXm|K+q delta 35 pcmZo@U~Fh$+`yv1GvmN?Mg|~=VE7<6SwO*KqthI@&0p+z7y-dA3gZ9( diff --git a/pg_data/base/16384/2701 b/pg_data/base/16384/2701 index 1ca694523ae4aec6b34e47dee1bf3a60dc6356da..d7c6a10bfac786180f78479bc4ad8eb8bf863a9b 100644 GIT binary patch literal 16384 zcmeI%J8lzE6vpur;(&PsOaPPcvUwy>jwj>-bYQF!j zwjc#;CnvmZe(vm*{hXdZdyjh*pa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo z6rcbFC_n)U{7-@6znhJBjwXNO|B&wT^#A|iiIYC&^LHn&G4jpH=m^JOag32e93Nnd zW_0YNi78=*==zu@+7f1nu8(o(BFq3y7c<5+PccrP3Q&Lo6rcbFC_n)UP=Epypa2CZK!I~5@Is=db0TlHTQ5KE zecJEscJ}t)_B!qMhhFP_D^AkQhQHwFcE9QOYv^Ux^>-)N-|+iYyHEZ8nZ2IG@1NTJ zy5B!RUvx8k{;ogv`^R=)^ZP3LSF^4^@!wE=#qJ~j`j60u{ZsXPAKJZoz7Ndxr0RLy zxBI%k{(I=d{;7JtD|WA*?=t#E(7&$y@7lfcFQX6pC(8eh-7Ejw=6Vw4f6MNb{}TGJ zf1>cCY-eqYwMX%74-BmH#z!J+bn?YWK?j3i_~rto$$Az49-j zF9-c=%KwtxEB}k;dLre&VE4+u5bE>a&w4}o&)dE7zkojY{i!#U|D4?`|LJetJa+y7 DZlwX; delta 53 zcmZo@U~Fh$+`yv1^W(sDMg|~=VE7<2SwKOOcYXrHg?R}K4nQn0Z*rP~(nhB_GMm5H H@Gt`azQ3%Gy_xPS||fD5>Q3%Gy_xPS||fD5>Q3%Gy_xPS|| zfD5?5zbr5_`mv~aJ$#M-JH*BN_y0G)qA*~6)?;1PVQm((7CUBpti~diWq~C>qj19p ztj~I^%Q~#hV%B2EY>(Ag#Ih`~mW-;^S0xsYJF5m(#-~uk-0xsYJ zF5m(#-~uk-0xsYJF5m(#-~uk-0xsYJ|3iTnAsen*jDO?s$ Y;z*pq1#ueZ#S?f*oWePA7+q=3TkfJ;`v3p{ delta 35 pcmZo@U~Fh$+`yv1V{vdgBLfgbFno}kETG`A(P@s{<}Y?Ui~zUi3WNXv diff --git a/pg_data/base/16384/2703 b/pg_data/base/16384/2703 index 64b80d5fe510d257bb562fbab1846e50222ce35a..a93daba0e6ccad36d069af1be36ca0cd06ca993d 100644 GIT binary patch delta 148 zcmZo@U}|V!+Q8z#GvWIzMg|~IVL8CRS-{~hv)BX$1_2;`(67Mo0f-L(@r8bcjgIrV zBlsA^83Y&-6F?e3fR8~8$WKZDbHIF2Am0y(F9PKIBk_fSd@Cfr5Rh-3uvseLnLYqj CM;R>u delta 36 qcmZo@U}|V!+Q8z#!%;q+kpT#JSQG>{3po5`-smjKvso$No<0DnT?wWD diff --git a/pg_data/base/16384/2704 b/pg_data/base/16384/2704 index bfbde1924d855ec8589bc7a957f3490e390af003..46146488380ac074caa1b246c1004b21a40a4a6b 100644 GIT binary patch delta 243 zcmZoTz|?SnX#iHPh7z99OGNdJdNInJ@C_fd-XNK}qpnN7M zKLN^Tgz|mCd|n1CC_eh>%J+e4(17wCpnPK}-yX_0 Tg7WR4d_ySTGGTL>R+lIMt5+(w delta 41 wcmZo@U~Fh$+`yv1qj6+9BLfhuV5#8RETAxjg=NNs1g4FSmsmGfX|;(00QJudSpWb4 diff --git a/pg_data/base/16384/pg_internal.init b/pg_data/base/16384/pg_internal.init index 419614900500526c938984fd9d320ee68d9b2219..b533d5faedb17f63245754da5a0b62f5a729578c 100644 GIT binary patch delta 9683 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 delta 9683 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 diff --git a/pg_data/global/pg_control b/pg_data/global/pg_control index 82c5ae15aa6774d4398c5fad4d35af776688109f..d75d796a1e6fe608ec66d352100a571144d76459 100644 GIT binary patch delta 85 zcmZp0XmFSyVZgPF@Z=1hN6UtUUDowa*ml3CyGpLSir*l QDP454A>(E%>BLg zT6X(GdzQqpaLI1{FZ$|jcd_AKX z^If$V%*r{?+Bqe*L-&JW1&lHiOr4qBJ>^!T*Kh8^!L$&_=TJ8#WJa^~2M3!z>u1Sl zG2Cnp(L1m8%*h=Hw{QSl?UbZd=$s|6bQ!EOy;opIu7N|>ClOto z7H+wcS6zXkbM{h3W;Hwc@NlzRiVNtC5p8(DGL5t}y8%*Ux zQINg&5MA#P*j;vNU!Q1}?4w(`89Gn7sSY&jVU436^=_m!5eAccIL%Cx=`eE-aXm^s zI9MRTR`(wgwHSYl{9)|U_g>PBjYxAEvpXSY*AQy;53sQghVJkcn2i(H#Ffk{U-2aD zFp>J9%Si3>+UduG9(N?oCoagoyf|O~Dz6#O4%T8YqXt-6MzrA)7`Xwe%p}uf7H;x2 zbF^?%TM_~lw(=ykU0$=jPtjHJCM7P?o2176*LG`9f9cs8(;XuN7}LfSezDOaNgKu^ z!4-bxTJ$-Z*xvZ5R(=FawfRq-*7M_1WKEF z7-<`Mo_wOznIlx%!jW1GX5}cT-ax44O%C}MSYVcz-ZJ$56}n^ng+3q5xNEu-csM~G zX#zhuO7AtAFAxAnX#z*Z1SWZ>pBeoOLF7IM^Iw2PW|gT|pj*H5lW5YyO|T;ba-VpS z9sugi#!JKUc2qq-2YTBj$=hydFJEty=)*B1zI3J$@c4gxHt-z4w!$l*~GT`mf!Oqc~`b| delta 1946 zcmY+FZD?Cn7{~98wGALzfT~XrKGS(Sw)wB1G5$KyW@|^*(q7L8VyCipm3zsb8!F$`= zBH#H=m(P}4+PZBSq3%ZPvNTg3FnVfM+WJSJc^b5t4ztA!eLQO!+NNP2jzy%oXGnaz zX+WjF6xG0(+5?ZJf54PaQBua0{mc8}|3V2cl@IYR@e^Po4W^hnv&gKSl+K6z4lUel zw4^}pi#_DtwnS}nui9~u_KZfyHh*xtkjKJkC`Z>`23bdIHvtmJ4&U0|}uOS4bK*8Bt=Twhr3GLwt)i)!3W~XN?W1+th zgIUXg_Lgb69efB3hrlQ^!PJ?_ZPRWwhWzGM9861re2x!LLS`(XKQh+#**rr&%i(r& z$liHva9-^}xTSsIa-X6s8-I^dx#Ca)%yjvzjLx|VR(=7SOz*F-Bfo*;*UuulI4#_A zC9k;xMd$3KjLcdh`RGKuTgpG9H;z%a9FyG=z6zyT2BYsH9Q`eZYa$FLw{x1ACevXSc5po^gE&|s zL1=pp$XZyBlRu1I`hm-qu@-4hV}1+d{0c&?-vL{zVDK(qf!R9#y}XiH=PRCo9VSvg z^c$(&UXgyH*W-?)`Q!!Fmy_q4U*;_1*|A0pX4C*{i-I^)?G)B7h!F{Z8W@Qbw$MOia;^)B%% z*P+kT#16$zb@C%vxt+0$;{HYqZ(?{Ev{%t)t-GN2PcX!cFq6#eU)-OQv~aIcAc~Mi z)yi1nt>@?p$WJLpY5Va&J8gkE$e~-feXfR~-*GS~1xlNC5NVry zo_wOz*+W#?(xFBSX6-Pj-9V`3O%C}MSYlR~-YWEwCAwqtg<&7exNEu-crZa8X#(Fr zOz$g*i(i0cW}T_mpxb}&lW5YyO|T;ca-VpS9sugi z)=LxWW>md64|=;5#oKM1JaWBDp%2Fo@=IqL0gwNimw)o`{McPIKhCS|`6;ukOuVSne+f6LAqkhkSxw^fz diff --git a/pg_data/pg_wal/000000010000000000000001 b/pg_data/pg_wal/000000010000000000000001 index b505c9a25ddd5782606dc5eb87f4697ece2dc7b8..f4dd6eacbf229500b8572ed56d2b6dddba6cc452 100644 GIT binary patch delta 312357 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 z1PMVxkPsvU2|+@T5F`W%K|+uaBm@aTLXZ$71PMVxkPsvU2|+@T5F`W%K|+uaBm@aT zLXZ$71PMVxkPsvU2|+@T5F`W%K|+uaBm@aTLXZ$71PMVxkPsvU2|+@T5F`W%K|+ua zBm@aTLXZ$71PMVxkPsvU2|+@T5F`W%K|+uaBm@aTLXZ$71PMVxkPsvU2|+@T5F`W% zK|+uaBm@aTLXZ$71PMVxkPsvU2|+@T5F`W%K|+uaBm@aTLXZ$71PMVxkPsvU2|+@T z5F`W%K|+uaBm@aTLXZ$71PMVxkPsvU2|+@T5F`W%K|+uaBm@aTLXZ$71PMVxkPsvU z2|+@T5F`W%K|+uaBm@aTLXZ$71PMVxkPsvU2|+@T5F`W%K|+uaBm@aTLXZ$71PMVx zkPsvU2|+@T5F`W%K|+uaBm@aTLXZ$71PMVxkPsvU2|+@T5F`W%K|+uaBm@aTLXZ$7 z1PMVxkPsvU2|+@T5F`W%K|+uaBm@aTLXZ$71PMVxkPsvU2|+@T5F`W%K|+uaBm@aT zLXZ$71PMVxkPsvU2|+@T5F`W%K|+uaBm@aTLXZ$71PMVxkPsvU2|+@T5F`W%K|+ua zBm@aTLXZ$71PMVxkPsvU2|+@T5F`W%K|+uaBm@aTLXZ$71PMVxkPsvU2|+@T5F`W% zK|+uaBm@aTLXZ$71PMVxkPsvU2|+@T5F`W%K|+uaBm@aTLXZ$71PMVxkPsvU2|+@T z5F`W%K|+uaBm@aTLXZ$71PMVxkPsvU2|+@T5F`W%K|+uaBm@aTLXZ$71PMVxkPsvU z2|+@T5F`W%K|+uaBm@aTLXZ$71PMVxkPsvU2|+@T5F`W%K|+uaBm@aTLXZ$71PMVx zkPsvU2|+@T5F`W%K|+uaBm@aTLXZ$71PMVxkPsvU2|+@T5F`W%K|+uaBm@aTLXZ$7 z1PMVxkPsvU2|+@T5F`W%K|+uaBm@aTLXZ$71PMVxkPsvU2|+@T5F`W%K|+uaBm@aT zLXZ$71PMVxkPsvU2|+@T5F`W%K|+uaBm@aTLXZ$71PMVxkPsvU2|+@T5F`W%K|+ua zBm@aTLXZ$71PMVxkPsvU2|+@T5F`W%K|+uaBm@aTLXZ$71PMVxkPsvU2|+@T5F`W% zK|+uaBm@aTLXZ$71PMVxkPsvU2|+@T5F`W%K|+uaBm@aTLXZ$71PMVxkPsvU2|+@T w5F`W%K|+uaBm@aTLXZ$71PMVxkPsvU2|+@T5F`W%K|+uaBm@cn6bb+Ge}k)BTmS$7 delta 758333 zcmeIy>GBo=7{=i#MUhY;rA?ykU!g=46(vhrXwyPMtCFG+Z}~-pqSA>p(`h(_KJ>wi zlW3gB_2Ib>;FJ=jByYkU)WxJP=l zi9Ob&Cii$#n%cCcH=`$-*^|xcsh)0jbDG<{<~P)W7PhEodba0U+>)MeX)p9*%X+Do zTi%LZ>D5-Ys@1*L>#b>RZ?vvAd#ks5r}e$thBmgT&Ar$AZE0)U+TM;nXlJ|H-JU+| zqxSZ3`}(9$`>g#P=wOFB+>t)-Xvg}Z<9*qQPWDw_cdFBU)3<%snZECb2A%C(KUU}a zsh_*hFa6rZe(U%C=u(&av%k91)vopTjqCs3zB%dE`gOyv|MTCuA>jvlU8Aqh!HLK2dYgd`*( z2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUF zBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Ex zl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e& zNJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8 zAqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dY zgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo z5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjT zNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TX zBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{l zkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!H zLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*( z2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUF zBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Ex zl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e& zNJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8 zAqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dY zgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo z5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjT zNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TX zBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{l zkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!H zLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*( z2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUF zBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Ex zl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e& zNJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8 zAqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dY zgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo z5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjT zNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TX zBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{l zkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!H zLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*( z2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUF zBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Ex zl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e& zNJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8 zAqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dY zgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo z5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjT zNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TX zBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{l zkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!H zLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*( z2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUF zBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Ex zl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e& zNJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8 zAqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dY zgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo z5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjT zNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TX zBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{l zkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!H zLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*( z2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUF zBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Ex zl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e& zNJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8 zAqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dY zgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo z5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjT zNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TX zBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{l zkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!H zLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*( z2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUF zBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Ex zl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e& zNJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8 zAqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dY zgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo z5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjT zNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TX zBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{l zkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!H iLK2dYgd`*(2}wvo5|WUFBqSjTNk~Ex4qcf(Y~&rQ